How to test a postback URL before you send paid traffic
How to test a postback URL before you send paid traffic
To test a postback URL, you fire a real conversion through the chain while you still control the click: load your tracking link with a known sub-ID, copy the click ID your tracker generated, paste it into the postback URL with a test payout, open that URL in a browser, then confirm the conversion appears in your tracker attached to the right click. If it appears with the correct click ID, payout and status, the chain works. If it does not, you have found the problem before it cost you money.
Most affiliates do this backwards. They launch, wait a day, see zero conversions, and then start guessing at which of six moving parts broke. The test takes about ten minutes. The post-mortem takes a week and a chunk of your budget. This guide walks through the whole chain — click ID, postback URL, conversion type, payout value — in the order you should check it.
What the postback chain actually looks like
A server-to-server postback is a single HTTP request from the affiliate network's server to your tracker's server. Nothing about it involves the visitor's browser. That is the point: it fires even if the user closed the tab, blocked scripts, or converted three days later on a different device.
The chain has five links, and a break in any one of them means no conversion is recorded:
- Your tracking link sends the visitor to the offer with a click ID and sub-ID values appended to the destination URL.
- The network receives that click ID and stores it against the click.
- The visitor converts, and the network looks up the stored click ID.
- The network fires the postback URL, substituting the real click ID and payout into the placeholders.
- Your tracker matches the incoming click ID to an existing click and records the conversion.
Testing means deliberately walking all five steps with a click you own. If you want the deeper mechanics of why link 1 and link 5 both depend on the same identifier, read What is a click ID, and why conversions go missing without one.
Step 1: generate a test click and capture the click ID
Start in your tracker, not in the network.
- Create or open the campaign you intend to run. Leave it paused if your traffic source would otherwise start spending.
- Copy the campaign's tracking link.
- Paste it into a browser and load it. Add an obvious sub-ID so you can identify this click later — for example
&sub1=postbacktest. On Adtraxo, sub-IDs sub1–sub5 are a Pro feature, so run this on Pro or use a campaign without sub-IDs and identify the test by timestamp instead. - Let the redirect complete so you land on the offer page.
- Go back to your tracker's click log and open the most recent click. Copy its click ID exactly — case, dashes and all.
That click ID is the single most important string in the whole test. Every check below depends on it matching. If your tracker does not expose click IDs in the click log, stop here: you cannot diagnose anything downstream until it does.
Step 2: find the exact postback template the network gives you
Do not build the postback URL from memory or from a blog post. Go into the affiliate network's control panel, find the conversion tracking or postback section for the specific offer, and copy the template verbatim. Networks differ on parameter names — some use click_id, some subid, some cid, some transaction_id — and a single wrong character silently kills the match.
You are looking for three things in that template:
- The click ID placeholder — the macro the network replaces with your value.
- The payout placeholder — usually something like
{payout}or{amount}. - The status or event placeholder — if the network can send approved, pending and rejected conversions separately.
Write down all three before you touch anything. If the offer pays on a lead and then on a sale, note both event types — you will want to test them separately, as covered in How to track leads and sales as separate conversion events.
Step 3: paste the postback URL into the network with your test click ID hard-coded
This is the step people skip, and it is the step that catches most failures.
Take the network's template and replace every macro with a literal value:
- Replace the click ID macro with the click ID you copied in step 1.
- Replace the payout macro with a distinctive number you will recognise —
1.23is better than10because you will spot it instantly in a list. - Replace the status macro with a valid status value if the network requires one.
You now have a fully resolved URL. Open it in a browser. You should get a short response — often a 1, an OK, or a small JSON body. That response is your tracker saying "I received this and processed it."
Then go back to your tracker and look for the conversion. It should be attached to the exact click from step 1, with the payout you hard-coded.
If it is there: the tracker side of the chain works. The remaining risk is only in macro substitution, which you will test next.
If it is not there: the problem is between the network and your tracker, and you have isolated it in ten minutes instead of ten days. Work through Postback not firing: the checks to run, in order before you go any further.
Step 4: check the tracker received the right parameters, not just a request
A tracker can accept a request and still discard the data. Open the conversion record and verify four fields:
- Click ID — matches the click you generated, character for character.
- Payout — equals the number you hard-coded, not zero.
- Status — recorded as approved, pending or whatever the network sent, not silently defaulted.
- Campaign — attributed to the correct campaign, not to an "unmatched" or orphan bucket.
An orphan conversion — one that arrives with a click ID your tracker has never seen — is the classic symptom of a mismatch between what your tracking link sends and what the network echoes back. That can be a truncated parameter, a URL-encoding problem, or a network that rewrites your sub-ID. It is also the usual cause of the discrepancy described in Why your affiliate network and your tracker report different conversions.
On Adtraxo, the conversion lands in the campaign's analytics with the click's geo, device and sub-ID values attached, so the check is a single click into the campaign rather than a database query. If you are comparing this approach with pixel-based tracking, Postback URL vs tracking pixel — which should an affiliate use? covers where each one breaks.
Step 5: test with live macros, not hard-coded values
Hard-coding proves the tracker accepts conversions. It does not prove the network fills the macros correctly. That is a separate test, and it is the one that matters in production.
Most networks give you a way to fire a test conversion against a real click — a "test postback" button, a sandbox conversion, or a manual conversion entry where you supply the click ID. Use it. Then check that:
- The click ID arrived intact, not truncated or URL-encoded into something your tracker cannot match.
- The payout arrived as a number your tracker can sum, with the right decimal separator. A comma instead of a period turns
1,23into1in some parsers. - The event type arrived as the conversion type you expect, not as a generic "conversion".
If your ROI numbers matter — and they do, or you would not be reading this — the payout check is not optional. How to pass payout values in a postback so your ROI numbers are real goes deeper on currency, decimal handling and revenue vs payout.
Step 6: break it on purpose
A test that passes tells you the happy path works. It does not tell you what happens when something goes wrong in production. Spend five more minutes breaking it:
- Fire the same postback twice. Does your tracker record two conversions or deduplicate on the click ID? Duplicates inflate your numbers and make you bid too high.
- Fire a postback with a click ID that does not exist. Does it create a phantom conversion, or get rejected cleanly?
- Fire with a missing payout parameter. Does the conversion record at zero revenue, or fail entirely? Zero-revenue conversions quietly destroy ROI reporting.
- Fire from a different IP if the network allows it. If you have fraud rules or IP restrictions on the campaign, confirm a legitimate server-to-server call from the network's IP range is not being blocked as a bot.
That last point catches people running fraud detection. Adtraxo's fraud rules — IP velocity, datacenter IP, bot user agent, uniqueness conflict, invalid referer — are designed to filter traffic, and a postback arriving from a datacenter IP is exactly the kind of thing a naive rule would reject. Confirm your conversion endpoint is exempt before you enable aggressive rules on a live campaign.
Step 7: run a live end-to-end test with real traffic
Everything above happens with clicks you fabricate. The final check is a small real spend.
Send a deliberately small amount of traffic — enough for a handful of clicks, not enough to hurt — and watch the click log in real time. You are looking for three things:
- Clicks arriving with the sub-ID values you expect, so you can attribute them to the source later.
- The offer page loading correctly for real visitors, not just for you.
- Any conversion that fires landing in the tracker within the network's normal postback delay.
On Adtraxo you can add a one-line arrival snippet to your landing page on any plan. That snippet tells you which clicks actually loaded the page in a real browser, as opposed to bouncing off the redirect. It is the fastest way to separate "traffic did not arrive" from "traffic arrived and did not convert" — two problems with completely different fixes.
If you are also passing UTM parameters alongside sub-IDs, make sure the two systems are not fighting over the same query string. UTM parameters vs sub-IDs — which should you use on affiliate links? covers when each belongs in the chain.
The checks to run, in order, when a conversion does not appear
Once you are live and something breaks, work down this list rather than jumping around:
- Did the click register? If there is no click, there is nothing to match a conversion to.
- Does the click have a click ID? No click ID, no match — ever.
- Did the network receive that click ID? Check the network's click report for the same ID.
- Did the network fire the postback? Most networks log outbound postback attempts and their HTTP responses.
- What did your tracker respond? A 200 with a rejection body looks identical to a 200 with success until you read the body.
- Did the click ID match exactly? Truncation, encoding and case changes all break this.
- Was the conversion type accepted? A tracker expecting "sale" may ignore "lead".
- Was the payout valid? A malformed value can cause a silent drop.
That sequence is the short version of Affiliate conversions not tracking? A step-by-step troubleshooting guide, which expands each step with the specific log entries to look for.
What a good test setup prevents
The reason to test before spending is not tidiness. It is that every one of these failures has a cost measured in wasted clicks:
- A broken click ID means you pay for traffic and record zero conversions. You will conclude the offer is bad and kill a campaign that might have worked.
- A wrong payout means your ROI is wrong in either direction. Understated revenue kills winners; overstated revenue scales losers.
- Duplicate conversions mean you believe a campaign returns more than it does, and you raise bids on a losing source.
- A blocked postback from a fraud rule means legitimate conversions vanish and you blame the network.
None of these are exotic. All of them are caught by ten minutes of deliberate testing.
Frequently asked questions
Can I test a postback URL without spending money on traffic?
Yes. Generate a click through your own tracking link in a browser, copy the click ID from your tracker's click log, hard-code it into the network's postback template along with a test payout, and open the resulting URL. If the conversion appears in your tracker attached to that click with the right payout, the chain works. You only need real traffic for the final check that macros substitute correctly in production.
Why does my postback return a 200 but no conversion appears?
A 200 means your tracker accepted the HTTP request, not that it recorded a conversion. The usual causes are a click ID that does not match any stored click, a conversion type the tracker does not recognise, or a payout value it could not parse. Read the response body — most trackers return a short status string — and check the tracker's own logs for the rejection reason.
Should I use a postback URL or a tracking pixel?
For affiliate conversions, a server-to-server postback is almost always the better choice because it does not depend on the visitor's browser, survives closed tabs and works across devices. Pixels still have a place for landing-page behaviour and view-through data. Many setups run both, with the postback as the source of truth for revenue.
How do I know the click ID in my postback matches the click in my tracker?
Compare the exact strings, including case and any dashes. The most common mismatch is truncation: some networks or platforms cap parameter length, or URL-encode characters your tracker does not decode. If the IDs differ in length, look at the network's outbound postback log to see what it actually sent, not what you configured.
Does postback conversion tracking work on a free tracker plan?
It depends on the tracker. On Adtraxo, server-to-server postback conversions and sub-IDs sub1–sub5 are Pro features at $27/month (founding rate — it rises to $47 for new accounts, and existing subscribers keep $27). The Free plan covers 10 tracking links, 5,000 recorded clicks a month, 1 custom domain and basic stats with no card required, which is enough to learn the setup but not to run postback-tracked campaigns.
Ready to test the whole chain before your next launch? Set up a campaign on Adtraxo, generate a test click, and confirm your postback lands exactly where it should — before a single paid click does.
Track your affiliate campaigns for free
Clicks, conversions, fraud detection — all in one tracker.
Get started free →Not ready for an account? Get the Tracking Domination Playbook — free, just your email.