Platform · Tracking
The click is the only proof.
The whole platform hangs on one row in the database: the click row. It is written on our server before the visitor even reaches the store, and it holds the whole deal – rate, type, window and recurring cap. Everything afterwards is calculated on that row. Not on what the program says today.
The redirect
What happens before the visitor reaches the store.
A tracking link is not an ordinary link with a name on it. It is a redirect through our server, and that is where the deal is written down.
The click journey
Five steps · milliseconds
01 The click
/go/k7f2xq
The visitor clicks the shared link. It hits our server first.
02 The deal is frozen
clicks.insert
Four fields are copied from the program onto the click row – before anyone reaches the store.
ratetypecookie windowrecurring
03 302 to the store
?afid=c_9fK2xQ…
The click ID travels along in the URL and is stored in a first-party cookie and in localStorage.
04 The purchase is reported
record_conversion()
The order confirmation page or the platform’s webhook sends the order back with the click ID.
05 Pending sale
pending
The server measures the click’s age against the window on the click row. No balance is credited automatically.
That is the chain. The full timeline – cookies, ITP, what really survives in 2026 and what does not – is in the guide to affiliate tracking and attribution.
The link hits us, not the store
GET /go/<code>
The short link points at our server. We look it up, find the program behind it and read the terms as they stand right now.
The deal is written down
commission_rate · commission_type · cookie_days · recurring_months
The four fields are copied from the program onto the click row itself, together with the source, device, country and the page the link was on. That is the snapshot the conversion is calculated on later.
The click gets its own ID
c_9fK2xQ1bR7dLm
A random ID per click. Not an IP, not a device profile, not an email address. The ID is the key to the whole attribution.
Redirect to the store
302 → store.com/?afid=c_9fK2xQ1bR7dLm
The visitor is sent on with the ID in the URL. The store’s script puts it in a first-party cookie and in localStorage, and renews both on return visits.
The purchase is reported back
record_conversion()
The order confirmation page or the platform’s webhook sends the order in with the click ID. The server looks up the click, measures its age against the window on the click, calculates the commission and creates the sale as pending.
It takes milliseconds. A tracking pixel is a request on the side that the browser can refuse. A redirect is the road itself: the browser has to pass through us to reach the store, so there is no extra call to block.
Rate lock
Four fields frozen at the moment of the click.
The commission is locked the moment someone clicks. The store can change the program tomorrow – it does not affect traffic you have already sent.
commission_rate
The rate. If it is lowered tomorrow, the old rate still applies to this click.
commission_type
Percentage or fixed amount. It cannot be switched under the feet of a click you have driven.
cookie_days
The attribution window, measured from this very click and independent of later changes.
recurring_months
The number of renewals on subscriptions. An ongoing agreement cannot be cut back afterwards.
There is one more thing worth knowing when you read a commission rate with us: the affiliate gets exactly the rate the program shows. Our fee is part of the store’s total price per sale – it is not deducted from the affiliate’s rate.
The attribution window
The age is decided on the server.
The store chooses 14, 30, 45, 60 or 90 days. The number is copied onto the click at the moment of the click.
At conversion, the browser sends an ID – not a timestamp. The server fetches the click’s own timestamp, compares it with the window stored on the click row, and rejects with expired if the click is too old. So the client cannot lie about the age, neither to extend an expired window nor to sneak a conversion in – which is also why cookie stuffing does not work here.
What is stored where
- URL parameter
- ?afid=<click-id> · set by the redirect
- First-party cookie
- the store’s own domain · renewed on return visits
- localStorage
- the same ID · survives cookie clearing
- The click row
- time, window, rate – the source of truth
The noise filter
Forwarded, but not counted.
Several kinds of traffic are sent on to the store, so a shared link never looks dead – but they get neither a click row nor a click ID, and so cannot pollute EPC or the conversion rate, or take an attribution.
Bots and link previews
Known crawlers, social previews, curl and uptime services are recognised by their user agent – as are programs that do not send the navigation signal every modern browser sends, even when they pretend to be Chrome or Firefox. They are logged separately as bot traffic and are not counted as clicks.
Cloud servers and a click cap
Clicks from cloud servers (AWS, Google Cloud, Azure, Oracle, DigitalOcean, Linode) do not count – they are scripts and AI agents, not customers. The lists are the providers’ own and are updated every week. More than 25 clicks an hour from the same visitor on the same affiliate’s links do not count either. The customer is always sent on.
Crawlers behind private connections
Some crawlers revisit the links they find through private mobile and home connections around the world and look like ordinary phones. A click that arrives directly, without a referrer, just before or after an SEO crawler has fetched the same link – or where the browser’s own information contradicts itself – does not count. A link shared in a message still counts.
Repeated clicks
One visit is one click: the same visitor with the same affiliate and program counts once, as long as there are less than 30 minutes between the clicks – however many products are opened. An affiliate who is logged in and clicks their own links does not count at all. The recognition uses a daily, one-way encrypted key, never the IP address itself, and is deleted after an hour.
Suspended accounts
A suspended affiliate does not earn – neither via the click nor via the conversion route. The visitor still lands at the store.
Blocked affiliates
A store can block a single affiliate. The guard is a trigger in the database, so it applies whichever route the sale comes in by.
The conversion
The same order can never count twice.
Deduplication happens on the order or invoice ID per program. Shopify’s two formats – gid://shopify/Order/123 and 123 – are normalised to the same ID. If the customer reloads the order confirmation page, or Stripe sends the same webhook again, the extra report is logged as a duplicate – not as a new sale.
Unfilled template IDs such as YOUR_ORDER_ID or {{order}} are not accepted. A misconfigured snippet therefore cannot lock all of the store’s future sales as duplicates.
Commission is calculated excluding VAT – via the Shopify app, however, on the value of the goods without shipping, where it is not yet confirmed whether the VAT has been deducted. The sale is created as pending. A conversion never credits a balance automatically.
Routes in
- Shopify
- web pixel in the customer’s browser
- WooCommerce
- plugin reports from WordPress · its own key
- Stripe
- signed webhook · never your API key
- Your own site
- script on every page + the Google Analytics purchase or one line on the order confirmation page
- Lead
- thank-you page URL – no extra code
Observability
Even the events that did not become a sale.
Every single tracking event is logged with source, amount, VAT, discount, plan and our result – including the ones that did not become a conversion. That means the question “why did my sale not land?” has an answer that is not a guess.
okduplicateno_affiliateexpirednot_recurringstore_mismatchblockederror
Monitoring also looks the other way: every six hours we check whether the store’s tracking script is still on the front page. If it disappears – typically after a theme update – a warning email is sent at the transition from working to down.
The limits
What tracking here does not do.
No fingerprinting, no cross-device, no identity graph. If someone clicks on their phone and buys on their laptop, the sale is not attributed. We could guess – we do not.
There is also an older fallback route where a conversion is reported with the affiliate’s tracking ID instead of a click ID. It does not know the click’s age and therefore cannot enforce the window – deliberately more forgiving, and the reason we do not claim to catch every single sale.
And there is exactly one attribution model: last click – no multi-touch, no view-through, no splitting between several affiliates. If you want the full walkthrough of cookies, ITP and what really survives in 2026, it is in the guide to affiliate tracking and attribution. The technical setup – the script, the sale line and Google Analytics – is in the docs.
Questions
What people actually ask.
- Does tracking work with ad blockers turned on?
- The click does, always – it is a redirect through our server that the browser has to pass through to reach the store. The conversion depends on the route: Stripe sales are reported server to server via a signed webhook, and the WooCommerce plugin reports from the store’s server – neither of them touches the browser. The Shopify app’s Web Pixel and the site script, on the other hand, run in the browser and can be blocked, so wherever the platform allows it, we build the server route first.
- Can the store lower my commission after I have sent the traffic?
- No. The rate, commission type, cookie days and recurring cap are stored on the click row and used for the conversion. An ongoing recurring agreement cannot be cut back afterwards either. And the rate you see is the rate you get – the network fee is part of the store’s total price and is not deducted from your commission.
- What happens if the customer clears their cookies?
- The click ID is stored both in a first-party cookie on the store’s own domain and in localStorage, and both are renewed on return visits – so if one store is cleared, it can be restored from the other. If both are gone, the attribution is gone. There is no fingerprinting fallback that guesses who the person was.
- Why is my sale recorded but not approved?
- Because a conversion never credits a balance automatically. Everything is created as pending. The store then has the program’s approval period – 30 to 90 days – to reject it with a reason. If that does not happen, the sale is approved automatically.
Where to next
Documentation and further reading
- DocsHow tracking worksFrom the affiliate link via the click to a sale with a locked commission – step by step.
- DocsTracking from your own serverLet the server store the click and report the sale, so tracking holds up in Safari and on iPhone.
- DocsConsent and cookiesWhat tracking stores in the browser, for how long, and how the script waits for consent.
- DocsPersonal discount codesA code for a specific affiliate earns commission – even without a click on the link.
- Docstrack.js referenceEvery attribute, the JavaScript API and what the script stores – for the developer.
See your own chain from click to commission.
The store can test its installation with one click and get two green ticks: script found, conversion received. The affiliate can create their first link and watch the click row being written straight away.