A postback URL is a web address that one server calls on another to say "this click just converted". It carries the click ID of the visit that bought, usually with the amount and the conversion type, so your tracker or network can credit the right ad.
Because a server sends it after the sale is recorded, it doesn't depend on the buyer's browser, cookies or ad blocker. It only works if the click ID made it onto your page and stayed with the visit.
I wouldn't spend a dollar on a campaign until one test click has made the full round trip.
On the about page I listed the things that leaked revenue between tools when I ran tracking for a direct-response company. One of them was "postbacks that broke when URLs changed". That's still the most common way they break. A postback is a simple request, and nearly every failure happens before it's sent, when the click ID gets lost on the way to the sale.
How a postback URL works
Every postback is one half of a round trip. The click ID goes out with the visitor and comes back with the sale.

- The ad click hits your tracker. It logs the click, with the campaign, ad and source it came from, and gives it an ID.
- The tracker redirects to your page with that ID in the URL, for example
?clickid=6710c2a94f1e8b0012d4a7f3. - Your platform stores the ID with the visit. Whatever happens next, the sale is tied to that visit.
- The sale fires the postback. The platform puts the ID and the amount into the postback URL and sends one GET request.
- The tracker looks up the click and books the conversion on the campaign that sent it.
Steps 2 and 3 are where the work is. Step 4 is one line of configuration.
Postback URL parameters and macros
A postback URL is an ordinary URL with placeholders, called macros, that the sender fills in for each sale. RedTrack's format is a good example because it's so short (RedTrack, S2S conversion tracking):
https://track.example.com/postback?clickid={clickid}&sum={sum}&type={type}

| Part | What it does | Who fills it |
|---|---|---|
track.example.com | Your tracking domain in the tracker | Fixed, you paste it once |
clickid | Which click to credit. Without it nothing is recorded | The sender, from the visit |
sum | The payout or revenue to book | The sender, from the sale |
type | Which conversion type, by name | The sender, from your settings |
The macro syntax belongs to the platform filling it in, which trips people up. In a tracker's postback URL the click ID macro might be {clickid}. On ClickBank's side the same idea is {tid}. On an ElasticFunnels page it's {click_id}. The names differ, but each one is that platform's way of saying "insert the ID here".
S2S tracking vs pixel tracking
S2S (server-to-server) tracking means the conversion is reported by a server calling a postback URL. Pixel tracking means a script in the buyer's browser reports it.

The two overlap more than vendor posts admit. Ad platforms like Meta now take server events too (that's what the Meta Conversions API is), and many setups run a pixel and a postback for the same sale. For an affiliate tracker, though, S2S is the default. The sale often happens on a network's checkout, where you can't place a pixel at all, and refunds happen days later with no page for a pixel to load on.
Where the click ID rides: sub IDs
When the sale happens on someone else's checkout, the click ID has to travel through their system and come back. Networks give you free parameters on the affiliate link for this, usually called sub IDs. You put your ID in, the network stores it with the order, and its postback hands it back.
- ClickBank:
tidon the hoplink, returned as{tid}in its postback (ClickBank, postback macros). - Other networks call them
subid,sub1oraff_sub. Same job, different spelling.
I'd put the click ID in the sub ID rather than a campaign name. The tracker already knows the campaign of every click, so the ID gives you the campaign and the ad and the source in one value. If you need both, most networks offer more than one sub ID.
Worked example: a RedTrack postback URL in ElasticFunnels
Here is the setup end to end: RedTrack sends paid traffic to a page built in ElasticFunnels, and ElasticFunnels posts every sale back to RedTrack. RedTrack's screens are described from its help centre. The ElasticFunnels screens are the real app on a demo brand.
1. In RedTrack: create the conversion types
RedTrack only files a conversion under a type name you've set up under Tools → Conversion tracking → Conversion type, and the names are case-sensitive (RedTrack, conversion types).
- A type for the first sale, for example
Purchase. - A type for upsells, for example
Upsell. refundandchargeback, lowercase. ElasticFunnels sends those two names as written.
Then check the duplicate mode. An upsell arrives on the same click as the first sale, so a mode that ignores duplicate postbacks drops it. RedTrack lets you set the mode per type, and a type's mode overrides the offer source's default. For the upsell type I'd use "Create new conversion", which books it as its own row.
2. In RedTrack: put the click ID on the offer URL
In the offer that points at your page, add the click ID macro to the URL, for example https://yourpage.com/presell?clickid={clickid}. RedTrack swaps in the real ID on every redirect. Copy the postback URL RedTrack gives you for your tracking domain while you're there.
3. In ElasticFunnels: add the RedTrack integration
Open Apps → Integrations → New integration and pick RedTrack.

- Postback Domain: your RedTrack tracking domain. The URL below updates with it.
- Click ID Parameter: the name you used in step 2, here
clickid. - Postback URL: paste RedTrack's URL, or build it in the parameter list, where each row maps a RedTrack parameter to an ElasticFunnels value: click ID, amount, type, order ID, customer and location fields, a timestamp and sub parameters.
- First sale sends / Upsell sends: the type names from step 1. Left empty, both send
conversion, and RedTrack can't tell a first sale from an upsell.
4. Decide which sales go to this RedTrack
Below the URL are two optional filters. Merchants limits the postbacks to the merchants you pick, and Affiliate Filtering takes a whitelist or a blacklist of affiliate IDs. If you run two RedTrack accounts, add a second integration with its own URL and filters.
What reaches RedTrack from there:
| Event in ElasticFunnels | Sent to RedTrack as |
|---|---|
| First sale on your checkout | Your "First sale sends" name |
| Upsell on your checkout | Your "Upsell sends" name |
| Refund on your checkout | refund |
| Chargeback on your checkout | chargeback |
| Sale from a ClickBank, BuyGoods or JVZoo postback | Your "First sale sends" name |
| Upsell from a ClickBank postback | Your "Upsell sends" name |
| Upsell from a BuyGoods postback | Your "First sale sends" name (BuyGoods doesn't mark upsells) |
| Refund or chargeback from a ClickBank or BuyGoods postback | refund or chargeback |
| Abandoned cart, decline, failed payment | Not sent |
sum is the amount on the record: the order total for a sale on your checkout, and for a ClickBank sale your commission.
Network sales: ClickBank, BuyGoods and JVZoo
If you promote offers as an affiliate, the sale doesn't happen on your checkout. It happens on the network's, and the network reports it in its own postback. RedTrack's ClickBank guide covers the direct route: tid={clickid} on the offer URL, and ClickBank posts straight to RedTrack (RedTrack, ClickBank S2S). That works when RedTrack redirects straight to the hoplink.
With a presell page in between, the hoplink sits on your page, and tid holds one value. So ElasticFunnels relays it.

- RedTrack sends the visitor to your presell with
?clickid={clickid}, as in step 2. - The CTA on the presell carries the visit's own ID: add
tid={click_id}to the hoplink by hand. ElasticFunnels replaces{click_id}on every page view and doesn't add anything to affiliate hoplinks on its own. - Add the ClickBank postback URLs in ClickBank. In ElasticFunnels, add the ClickBank affiliate integration (Clickbank (Affiliate Postback S2S) in the app) and copy its Conversion URL and Refund URL into ClickBank's custom postback settings as S2S postbacks. If you copied them before 15 October 2026, copy them again: the current URLs also tell ElasticFunnels which sales are upsells.
- The sale comes back. ClickBank posts the receipt, the
tidand your commission (its{affiliate_earnings}macro). ElasticFunnels matchestidto the visit. - RedTrack hears about it. The visit still holds the RedTrack click ID from step 1, so the sale goes to RedTrack with the commission as
sum, through the same integration as above. Upsells go under your upsell type, and refunds from the Refund URL underrefund. No automation to build.
BuyGoods and JVZoo sales take the same path, each with its own tracking parameter on the affiliate link (the integration page shows which). BuyGoods refunds and chargebacks reach RedTrack under their own types too. BuyGoods doesn't say which sales are upsells, so they arrive as first sales. If you sell your own product on ClickBank rather than promote one, that's the vendor side, with a different integration: ClickBank funnel setup for vendors.
How to test a postback URL
Test with one real click before any traffic. It takes a few minutes, and it's the only proof that every link in the chain holds.

- Click your own RedTrack campaign link and read the address bar on your page. The click ID should be there under the name you chose.
- Buy once from that same visit, in the same browser. For a network offer, buy through the hoplink on your presell.
- Open Settings → Logs → External Postbacks in ElasticFunnels. Each RedTrack send is a row with the full URL and RedTrack's response code.
- Read the URL in the row. The click ID, the
sumand thetypeshould all be filled in, with no leftover{macro}. - Find the conversion in RedTrack, on the campaign you clicked. A 200 in the log means RedTrack received the request. Its own reports tell you it counted it.

Why postbacks fail
Most postback failures happen before the request is sent, so there's usually no error to see.
- No click ID on the landing URL. A redirect, a link shortener or an offer URL without the macro drops it. Nothing is sent, and a skipped send leaves no row in the External Postbacks log. An empty log after a test sale points here first.
- The wrong parameter name. RedTrack puts the ID in
clickid, the integration readssub1. Use the same name in both places. - A filter excludes the sale. A merchant or affiliate filter that leaves the sale out skips it the same silent way, with no log row.
- No
tidon the hoplink. The network sale comes back with nothing to match, so it can't find the visit or its RedTrack click. - A type name RedTrack doesn't know.
purchaseis notPurchase. Copy the names from RedTrack instead of typing them. - Upsells ignored as duplicates. The postback arrives and RedTrack drops it because the click already converted. Check the duplicate mode on the upsell type.
The first one causes most of the trouble, which is why the test starts at the address bar.
Postback URLs in ElasticFunnels
In ElasticFunnels the page, the checkout and the order record sit in one place, so the server that records the sale is the one that sends the postback. That's included on every plan.
- RedTrack: sales, upsells, refunds and chargebacks from your checkout, and the same from ClickBank postbacks, each under the type name you set. BuyGoods and JVZoo sales go too, and BuyGoods refunds and chargebacks. See the RedTrack integration.
- Network postbacks in: each sale lands on the click, page and split test that sent the buyer, so you also see which presell earns.
- One log: every outgoing postback with its URL and response code, under Settings → Logs.
- Name your RedTrack types before you write a single postback URL. Fixing type names after a week of traffic means a week of conversions under the wrong label.
- Send the network's commission as
sumwhen you're the affiliate. Revenue you never receive makes every campaign look more profitable than it is. - An empty postback log after a test sale is good news in disguise. It tells you the click ID got lost on the way in, and that's usually fixed in the offer URL.
- Re-run the test click whenever you change a URL: a new domain, a new presell, a new offer link. That's when postbacks break.
Postbacks look like the boring end of a campaign, a single line of URL that nobody reads once it's set. But that line decides what your tracker believes, and the tracker decides where the next dollar goes. Get one click through the full round trip, look at the row in the log, and you'll know your numbers are the real ones before you scale.










































