Docs › Landings
Traffic

Landings — your own pages inside the tracker

The whole trick of landings fits in one line: upload a ZIP — get a landing. You take a ready-made page, drop it in as an archive, and it already lives on the tracker's own domains, ready to become a stream's destination. No outside hosting, no "where do I even put this". It's all inside.

And if zipping it up is too much effort — hand the tracker a URL and it mirrors someone else's page to itself. Plus a file manager and a code editor right in the browser: open index.html, fix a heading, save — done. Grown-up tooling, just labelled in plain words.

What this screen is

A landing is a locally hosted page: you upload it as a ZIP archive (or mirror it by URL), and the tracker serves it from its own domains. From there a landing can be set as the destination of a stream inside a campaign — a person clicks the campaign link and lands on your page.

The Landings screen (/app/landings) is the list of all your pages plus two tools tucked inside each one: a file manager (what files a landing contains) and a code editor (edit those files right in the browser, with syntax highlighting).

Terminology, no mix-ups. Campaign is the link. Stream is the branch it goes to. Landing is the page a human finally sees. In the real AlterCPA Lite interface a landing is called a сайт / site — that's the correct word; we labelled it with the familiar "landing" so you don't trip. Settle in and switch to the real one. Three words, one per level.

The most important part: the files aren't on you

This is the first thing to grasp, or the rest will feel like magic. There is no local disk. Every landing physically lives on a remote storage server, and the tracker only proxies requests to it. Open a folder — the tracker fetches the listing from storage. Save a file — the tracker ships the bytes to storage. You work as if with a disk, but the disk is remote.

Which gives the golden rule: the file manager only works once storage is configured. Until storage is connected, the manager shows a "Storage not configured" banner with a link to settings — that's not a breakage, you just haven't hooked up the warehouse for your files yet.

Storage first, files second. Seeing a "Storage not configured" banner instead of a file list? Go to Settings → Storage and connect a server. Without it, the landings list still works (ZIP/mirror upload goes through a separate channel), but getting inside a landing to edit files won't. The link to settings is right in the banner. See Settings.

The landings list: toolbar

Above the table sits the list controls:

  1. + New landing — opens the create modal (upload a ZIP or mirror a URL).
  2. Search — filters by landing name.
  3. User (team) — a user dropdown; appears only in team scope when you're an admin viewing others' landings.
  4. Date range — the period the stats are counted for (CR/EPC/appr%/till in the table).
  5. My / Team scope — the team-admin toggle: your own landings or the whole team's.

The landings list: columns

ColumnWhat it shows
#uid — the landing's internal number.
NameThe landing's name. Clicking it opens the edit modal.
URLpath — the address the landing is served at. Opens in a new tab; a copy button sits beside it.
UserThe owner (team/all scope only). For a public landing — a PUBLIC badge.
CRConversion rate, click → lead.
EPCEarnings per click.
appr%Approve percentage.
TillLanding revenue. Till colour comes from the API (green / red / amber).
The stats columns are an overlay, not part of the list. CR / EPC / appr% / Till do not arrive with the landings list. They load separately — from tracker/stats?item=site for the chosen date range. So while loading, placeholders stand in their place and the numbers appear a second later. That's normal, not "frozen".

The PUBLIC badge. If a landing is shared (system-owned, user_id == -1), the User column shows a PUBLIC badge instead of an owner. It's a template page available to everyone — a ready-made white/safe placeholder, for example.

Row actions

Each landing has a set of actions (some visible, some under the "···" menu):

  1. Open — open the landing at its URL in a new tab.
  2. Stats — jumps into Reports already filtered by this landing.
  3. Files (folder icon) — open the landing's file manager (/landings/:id/files).
  4. Edit — the edit modal (name, owner, re-upload ZIP/URL).
  5. Delete — removal with confirmation.
  6. ··· (menu) — Open · Copy URL · Download ZIP (the whole landing as an archive).

One form for create and edit:

  1. Name — required. What the landing is called in the list.
  2. User (team) — optional. Pick an owner from team members; team scope only. This is also where you glue the landing to a sub-user.
  3. Archive (ZIP) — file input: upload a ZIP with the landing's contents.
  4. URL (mirror) — link field: give someone else's page address and the tracker clones it to its own server.

You supply either a ZIP or a URL — one of the two. On edit: re-upload an archive/URL and the landing's contents are fully replaced; leave both empty and you've just renamed it.

The form is sent as multipart — otherwise the file won't make it. The modal submits as FormData (multipart) because it carries the uploaded ZIP. This isn't a footnote: a plain JSON request wouldn't deliver the file. Nothing for you to do — just know the upload rides the "file" channel, not the ordinary one.

The file manager (/landings/:id/files)

Opened by the folder icon in a landing's row. It's an explorer over the files inside the landing on storage.

Toolbar:

  1. New file — create an empty file (asks for a name).
  2. New folder — create a directory.
  3. Upload — send one or more files into the current folder.
  4. Download ZIP — grab the whole landing (or the current folder) as an archive.
  5. Refresh — re-read the listing from storage.
  6. My / Team scope — the same toggle as in the list.

Breadcrumbs up top show which folder you're in; click a crumb to go back up.

The file grid — folders first, then files. Each file shows its size, modified date and a type icon (image / code / other).

Per-file actions:

What counts as editable. You can open in the editor files with the extensions: php, htm, html, css, js, txt, xml, json, ini. Everything else is a binary: download or delete only.

There is no rename — and that's on purpose. The file manager has no "rename" button. It was the same in the classic UI and we didn't invent one. Need a different name? Create the file anew with the name you want and move the content over (or download, rename locally, upload back).

The code editor (/landings/:id/edit)

Opened by clicking an editable file in the manager (or straight after "New file"). Inside is a full CodeMirror 6:

The editor loads separately and only on demand. CodeMirror is heavy, so the editor is lazy: its code is only fetched when you actually open a file to edit. It doesn't touch the list or the file manager and doesn't weigh down first paint. The first editor open may take an extra fraction of a second — that's its module loading, not "lag".

How to upload a landing (ZIP or mirror)

  1. Open create. On the Landings screen click + New landing.
  2. Type a Name (required).
  3. Then one of two:
    • ZIP: click Archive, pick your ZIP with the landing's files.
    • Mirror: paste someone else's page address into the URL field — the tracker clones it itself.
  4. (Team) optionally pick a User as the owner.
  5. Save. The landing appears in the list with a ready URL — it's already being served there.

How to edit a landing's files

  1. Open files. In the landing's row click the folder icon — the file manager opens.
  2. Navigate via breadcrumbs / folders to the directory you need.
  3. Add files. Need a new file — New file; need to upload ready ones — Upload.
  4. Open in the editor. Click an editable file (html, css, js, php, …) — the code editor opens.
  5. Edit. The unsaved dot lit up — that means there's something to save.
  6. Save. Click Save — wait for the "File saved" toast.
Don't see a pencil/edit on a file? Then it has a non-editable extension (image, font, archive). Those can only be downloaded and deleted. The editor opens only for php, htm, html, css, js, txt, xml, json, ini.

How to replace a landing wholesale

  1. Open edit. In the landing's row click Edit (or click the name).
  2. Upload the new. In the modal upload a new ZIP into the Archive field — or give a new URL to mirror.
  3. Save. The landing's contents are fully replaced by the new archive/mirror; the name and owner stay if you don't touch them.

How to download a landing as an archive

  1. Start the download. In the landing's row open the ··· menu → Download ZIP (or from the file manager — Download ZIP).
  2. Wait for the file. The browser starts a file download of site.zip.
The download is a file stream, not a tracker window. "Download ZIP" hands over the archive bytes directly (an ordinary browser download), not an internal screen. So it's a plain navigation/link, not "data inside the interface". Just wait for the file in your downloads.

On mobile

The file manager doesn't break on a phone, it re-stacks: file rows become two-line (name + size / actions), the modified date hides, the toolbar wraps, and navigation drops into a bottom tab bar. The code editor lives fully on desktop; on narrow screens editing is comfier from a wide screen.

Related: a landing as a stream's destination — in Campaigns; the mandatory Settings → Storage — in Settings; per-landing reports — in Reports; the domains that serve landings — in Domains; your first landing for your first campaign — in the Beginner guide.