Tracking & Attribution

How S2S Postback Tracking Works: A Complete Guide with Examples

The click ID goes out with the user and comes back with the conversion. Here is how that loop works — and how to debug it when it breaks.

ClickSpero Editorial TeamUpdated 4 min read

S2S (server-to-server) postback tracking records conversions by having one server call another, instead of relying on a pixel in the user's browser. When a user clicks, your tracker creates a unique click ID and passes it along to the offer. When the user converts, the advertiser's or network's server calls your postback URL with that click ID, so your tracker knows exactly which click — and which source, placement and creative — produced the conversion.

Why S2S replaced pixel tracking

Browser pixelS2S postback
Where it firesUser's browserAdvertiser/network server
Affected by ad blockers, cookie limits, iOS privacyYesNo
Works across apps and devicesPoorlyYes, if the ID is passed
Fraud resistanceLower (can be fired by anyone loading the page)Higher (server only)
Setup effortLowMedium

Most affiliate networks, trackers and mobile measurement partners now use postbacks as the standard.

The loop, step by step

  1. Traffic source → tracker. The ad network sends the click to your tracker with its own macros, for example zone={zoneid}&cost={cost}.
  2. Tracker → offer. The tracker generates a click ID and redirects to the network's offer link, inserting the click ID into the network's sub-ID parameter:
https://network.example/click?offer_id=123&aff_id=456&sub1={clickid}&sub2={zone}
  1. Network → advertiser. The network records its own click and forwards the user. For apps, the advertiser's MMP attributes the install to the network's click.
  2. Conversion → network. The advertiser or MMP notifies the network (often itself a postback).
  3. Network → your tracker. The network fires your postback URL, replacing its macros with real values:
https://tracker.example/postback?cid={sub1}&payout={payout}&status={status}&txid={transaction_id}
  1. Tracker matches the click ID, records the conversion and revenue, and attributes it to the source, zone and creative.
  2. Optionally, tracker → traffic source: you pass the conversion back to the ad network so its algorithm can optimise.

Macros: the part everyone gets wrong

A macro is a placeholder that a platform replaces with a real value, such as {clickid}, {payout} or {sub1}. Every platform uses its own names and brackets — curly braces, square brackets, percent signs or hashes. A postback that sends the literal text {sub1} instead of a value is the most common reason conversions go missing.

Always copy macro names from the platform's documentation and test them.

How to test a postback before launch

  1. Open your campaign link in a browser and check that the tracker records the click.
  2. Look at the final offer URL and confirm your click ID appears in the network's sub-ID parameter.
  3. Ask the network to fire a test conversion, or use their postback-testing tool.
  4. Check that the tracker shows the conversion with the right click ID, payout and status.
  5. If you pass conversions back to the traffic source, confirm it received them too.

Do not start paid traffic until a test conversion has gone through end to end.

Common problems and fixes

SymptomLikely causeFix
Conversions in network, none in trackerWrong postback URL or macro nameCheck the URL and macros; look at the network's postback log
Postback received but "unknown click ID"Click ID not passed to the offer, or passed in the wrong parameterCheck the offer URL and the sub-ID field the network reads
Duplicate conversionsNetwork fires on each status updateUse the transaction ID to deduplicate; filter by status
Wrong revenuePayout macro missing or in another currencyMap the payout macro; confirm currency
Delayed conversionsNetwork batches postbacks or the event happens laterNormal for some events; check reports after the attribution window

Postbacks in mobile app campaigns

In app campaigns, the advertiser's mobile measurement partner (MMP) — AppsFlyer, Adjust, Singular, Kochava, Branch and others — is the source of truth. It attributes installs and in-app events, then sends install and event postbacks to each integrated partner with that partner's click ID. Networks then forward conversions to affiliates. See how AppsFlyer works and how to track purchase events.

Security and data hygiene

  • Use HTTPS postback URLs.
  • Add a secret token parameter or IP allowlist so only the network can fire your postback.
  • Log every postback, including rejected ones, for dispute resolution.
  • Never put personal data (emails, phone numbers) in URLs.

FAQ

What is a postback URL?

It is the address on your server or tracker that a network or advertiser calls to report a conversion, with values such as the click ID and payout filled in by macros.

What is the difference between a postback and a pixel?

A pixel fires from the user's browser when they reach a thank-you page. A postback is sent directly from the advertiser's or network's server, so it is not affected by browser restrictions.

What is a click ID?

A unique identifier your tracker generates for each click. It travels with the user to the offer and comes back in the postback so the conversion can be matched to the exact click.

Why are my postbacks not working?

Most often because of wrong macro names, the click ID being sent in the wrong parameter, or an HTTP vs HTTPS mismatch. Check the network's postback log and test with a single manual conversion.

Published 25 October 2026 by the ClickSpero Editorial Team. Platform features, fees and policies change often — check the provider’s current terms before you rely on a number. Third-party names are trademarks of their owners; no endorsement is implied.

Work with ClickSpero

Reading is free. So is the first conversation.

Advertisers get campaigns paid on attributed events. Publishers get offers with written terms.

Begin the conversation →