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 pixel | S2S postback | |
|---|---|---|
| Where it fires | User's browser | Advertiser/network server |
| Affected by ad blockers, cookie limits, iOS privacy | Yes | No |
| Works across apps and devices | Poorly | Yes, if the ID is passed |
| Fraud resistance | Lower (can be fired by anyone loading the page) | Higher (server only) |
| Setup effort | Low | Medium |
Most affiliate networks, trackers and mobile measurement partners now use postbacks as the standard.
The loop, step by step
- Traffic source → tracker. The ad network sends the click to your tracker with its own macros, for example
zone={zoneid}&cost={cost}. - 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}
- 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.
- Conversion → network. The advertiser or MMP notifies the network (often itself a postback).
- 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}
- Tracker matches the click ID, records the conversion and revenue, and attributes it to the source, zone and creative.
- 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
- Open your campaign link in a browser and check that the tracker records the click.
- Look at the final offer URL and confirm your click ID appears in the network's sub-ID parameter.
- Ask the network to fire a test conversion, or use their postback-testing tool.
- Check that the tracker shows the conversion with the right click ID, payout and status.
- 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
| Symptom | Likely cause | Fix |
|---|---|---|
| Conversions in network, none in tracker | Wrong postback URL or macro name | Check 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 parameter | Check the offer URL and the sub-ID field the network reads |
| Duplicate conversions | Network fires on each status update | Use the transaction ID to deduplicate; filter by status |
| Wrong revenue | Payout macro missing or in another currency | Map the payout macro; confirm currency |
| Delayed conversions | Network batches postbacks or the event happens later | Normal 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.