Skip to content

Campaigns, flows, paths, landers and offers

A campaign is one buy on one traffic source. Its URL goes in the source’s ad, and every visit to it goes where the campaign’s destination says: a flow, a single path, or a plain URL. This guide covers each part and how they fit.

  1. The visit arrives at https://<your tracking domain>/<campaign key>. A key is 12 letters and digits, random, made when the campaign is, and it never changes. Any other address answers 404.
  2. Tallyray reads the visitor (IP, country, region, city, ISP, ASN, connection type, carrier, device, OS, browser, language, referrer) and the tokens the source passed in the URL.
  3. Bots are judged. By default a campaign flags them: they are counted and marked, routed like any visit, and their conversions are never sent to a source. A campaign can instead block them: the answer is 403, and the visit is recorded. Ad platforms’ review crawlers are never judged bots.
  4. The destination decides where the visit goes:
    • a URL: a redirect to it, for tracking traffic only;
    • a path: the campaign’s own, with no rules;
    • a flow: its rules in order, the first rule the visit matches choosing among its paths by weight; a visit no rule matches goes to the flow’s default paths.
  5. A path with landers sends the visitor to one of them, by weight, with a visit token. A path without landers sends the visitor straight to one of its offers by weight, and records the click (direct linking).
  6. From a lander, the visitor’s click on a call to action goes to Tallyray’s /click address, which records the click and redirects to the offer, with the click id in its URL.

Every answer carries Cache-Control: no-store and Referrer-Policy: no-referrer.

A campaign has:

  • A connection: the traffic source it buys from. It cannot be changed after the campaign is made.

  • A destination: a flow, a path or a URL. Changing it replaces the old one.

  • A cost model: how its traffic is priced, from what the source’s template allows.

    ModelCost
    From tokeneach visit’s cost from the source’s cost macro, in the template’s unit and currency
    CPCyour amount for every visit
    CPMyour amount per 1,000 visits; per 1,000 impressions while the campaign counts impressions
    CPAyour amount for each counted conversion
    Revsharea share of each counted conversion’s revenue, 0.01% to 100%
    APIthe spend pulled from the source’s API; until a pull covers an hour, its visits cost nothing
    Noneno cost, or spend you enter by hand
  • A redirect mode: 302, a meta refresh (a 200 page; most browsers send no referrer from it) or a double meta refresh (a second hop through Tallyray, which strips the referrer even where Referrer-Policy is not honored). A path’s own mode wins over the campaign’s.

  • Bot handling: flag or block, or the workspace’s setting.

  • Tags: up to 20 of up to 32 characters, for filtering.

  • Impressions, for sources whose template fires an impression URL: see Reports.

A campaign is active, paused or archived. A paused campaign answers 404 and records nothing, but the ad goes on spending at the source until you pause it there too. An archived campaign stays archived.

The campaign’s URL is your tracking domain, its key, and a query parameter for each token the source fills, with the source’s macro as its value. Paste it into the source’s ad. The portal shows it on any of your active domains or your default subdomain, and also before the campaign exists, from the connection.

A flow is rules in order, then default paths.

  • A rule has 1 to 10 conditions, all of which a visit must match, and 1 to 10 paths. Rules can be paused without being removed.
  • A visit goes to the first rule it matches. If that rule has no active path, the visit falls through to the next rule, and finally to the default paths.
  • Default paths with no active path answer 404, as a paused campaign does, and the visit is recorded.
  • A flow is sticky or not. A sticky flow picks by a hash of the visitor and the rule, so one visitor sees the same path, lander and offer all day.
  • A flow is one document, replaced whole when you save it. If someone else changed it since you opened it, your save is refused rather than merged silently.

A flow has up to 50 rules, up to 10 paths per rule, up to 100 paths and 1,000 condition values. A flow past a limit is refused with the limit named.

Looks atValues
Country, region, cityISO country codes; ISO region codes; region:city, like US-CA:Los Angeles
ISP, ASN, connection type, carrierthe names Tallyray reads from the visit
Device type, device brand, OS, browsernames
OS version, browser versionios:17, with at least and below comparing the major then the minor version
LanguageISO 639-1, lower case
Referrer domaina registrable domain (example.co.uk matches news.example.co.uk), or its whole host with contains; an empty value matches a visit with no referrer
IPaddresses and CIDR ranges, IPv4 or IPv6
Weekday, hourmon to sun; 0 to 23, in the zone you name (the workspace’s by default)
A tokenthe value of a query parameter the source passed
Visitor typenew or returning (the same browser came to the same campaign within the window you set, 1 minute to 30 days, 24 hours by default)

Operators are in, not in, contains, not contains, at least and below. Text is compared without case. A visit whose value is unknown matches not in and not contains and nothing else. Contains takes up to 5 values and in up to 200.

A returning-visitor condition uses a first-party cookie for the campaign, written in the EEA, the UK and Switzerland only with consent. A visit the lander script made, or from a browser that cannot be recognized, counts as new.

A path is where a visit goes once a flow (or the campaign) has picked it:

  • Weight: 0 to 10,000. A path’s share is its weight over the sum of its rotation’s weights. A weight of 0, or a paused path, takes it out of rotation without deleting it.
  • Landers: 0 to 10 at the first step, picked by weight. With none, the path is direct linking.
  • More steps: a path can lead through up to 5 landers one after another (4 more steps), each a weighted choice, with a call to action on one lander leading to the next step. Funnel reports then show each step. A lander can stand only once in a path, and a lander at a later step must carry vt={vt} in its URL.
  • Offers: 1 to 20, picked by weight. The order numbers the calls to action of the last step: /click/2 is the second offer.
  • A redirect mode of its own.

A buyer can pause a path, even the last active one. A rule never pauses a rotation’s last active path. See Rules, bidding and schedules.

To split-test, give two landers (or two offers) weights in one path. A tuner can move the weights toward the lander or offer that earns more: see Rules, bidding and schedules.

A lander is your page before the offer.

  • Its URL is https and up to 2,048 bytes, and may contain {vt} (the visit token) and {click_url} (where its calls to action go), and the offer macros below except {click_id}.
  • Its calls to action number 1 to 20: /click/1… /click/20. Link them to https://<your tracking domain>/click (or {click_url}); the visit token travels in vt, or in a cookie the tracking domain sets (_vt, 24 hours).
  • Embed the lander script (the portal writes the tag with its integrity hash) and it keeps the visit token and writes it into every link to /click, with no cookie needed.
  • A direct lander is one your ad points at (as Meta, Google and TikTok require). The script makes the visit itself, and the campaign’s destination must be a path whose only lander is this page.
  • A lander can be protected: shown only to visits Tallyray sent. See below.
  • A lander is active, paused or archived. A paused one leaves rotation within a second.

A protected lander’s URL carries vt={vt} and lt={lt}. Each redirect to it fills lt with a signed pass, valid for 5 minutes to 24 hours (1 hour by default) and reusable within it. Without a valid pass a request is refused the same way for everyone: Tallyray does it for a page it hosts, and your server or the lander script’s guard does it for others. Nothing about the visitor decides this: every visit Tallyray sent gets a pass. Protection is refused where no pass can reach the lander: a direct lander, any lander of a path whose first lander is direct, and any lander of a campaign whose traffic source sends visitors to the ad’s final URL itself (Google Ads).

Pages (Tracking, Pages) builds landing pages from blocks. A page is built into a version you can roll back to, hosted by Tallyray on your own domain or deployed to your S3 bucket, and becomes a lander whose URL, calls to action and protection come from the page’s release.

An offer is a URL on a network, which pays for conversions on it.

  • Its URL is http or https, up to 2,048 bytes, with {click_id} outside the fragment, where the network takes the click id. Tallyray also fills, each escaped for where it stands: {campaign_id}, {offer_id}, {lander_id}, {country}, {device}, {os}, {external_click_id} (the source’s own click id), {placement}, {source_campaign}, {creative}, {var:<param>} (any token’s value).
  • Its payout is either the amount the network’s postback reports (the offer’s amount if a postback reports none), or a fixed amount whatever the postback says.
  • A daily cap counts conversions a day in your workspace’s time zone. At the cap, clicks go to the fallback offer; with no fallback, the offer leaves rotation until the day ends. See Postbacks and conversions.
  • A country is for your own lists. Routing does not read it: use a flow’s rule.
  • A direct offer is a page of your own, a store where the sale happens: see Coupons, organic traffic and apps.

A network is a template’s instance in your workspace: see Affiliate networks.

Archiving something a live campaign still reaches is refused: a flow an active campaign uses, the last lander or offer of such a path, an offer another offer falls back to, a network with an active offer.