Postback not firing: the checks to run, in order
Postback not firing: the checks to run, in order
A postback not firing almost always comes down to one of six things: the click ID isn't being passed, the postback URL is malformed, the network has the wrong endpoint, the conversion type or status doesn't match what your tracker accepts, the payout parameter is missing or misnamed, or the server-to-server call is being blocked before it ever leaves the network. The trick is to test them in a fixed order so you stop guessing. This guide walks the chain from click to conversion, one link at a time, so you can find the break in minutes instead of burning a day on support tickets.
Everything below assumes server-to-server postback tracking, which is the only reliable method for paid traffic. If you're still deciding between a postback and a pixel, read Postback URL vs tracking pixel — which should an affiliate use? first. The rest of this article is for people who already have a postback configured and it's silent.
Before you debug anything: confirm what "not firing" actually means
"Postback not firing" gets used for three different failures, and they have different causes:
- No click is recorded in your tracker at all. The problem is upstream — the tracking link, redirect, or sub-ID parameter. The postback never had a click to attach to.
- Clicks are recorded, but no conversion appears. The postback is either not being sent, or being sent and rejected. This is the classic postback-not-firing case.
- Conversions appear in the network but not in your tracker. The network is recording fine; the call to your endpoint is failing, or your endpoint is discarding it.
Open your tracker's click log and filter by the campaign in question. If you see zero clicks, stop here and fix the link — no amount of postback debugging will help. If you see clicks but no conversions, continue. If you see conversions in the affiliate network's dashboard but not in yours, skip to the endpoint checks.
Check 1: is the click ID being generated and passed?
A postback is a match. The network sends back a value, and your tracker looks for a click with that same value. If the click ID never made it into the network's system, there is nothing to match against and the postback will either not fire or fire into a void.
Do this:
- Grab your tracking link from the tracker and append a test sub-ID, e.g.
&sub1=test123. - Open the link in a browser (or a clean incognito window) and let it redirect to the offer.
- Look at the final offer URL in the address bar. Your click ID should be visible in whatever parameter the network expects — often
clickid,subid,aff_sub, or a network-specific token. - Check the network's click report. The click should appear within a minute or two with the same ID.
If the ID is missing from the final URL, your tracker's link template doesn't include the network's click ID parameter, or you pasted the tracking link without the parameter your offer expects. If the ID reaches the offer but doesn't appear in the network's report, the network isn't capturing it — usually because the parameter name is wrong. This is the single most common cause of a postback not firing, and it's covered in depth in What is a click ID, and why conversions go missing without one.
In Adtraxo, each click gets a unique ID and you can pass up to five sub-ID values (sub1–sub5) through to the network. Whatever the network sends back in the postback must match one of those values exactly — same case, no whitespace, no URL encoding differences.
Check 2: is the postback URL actually correct?
Copy the postback URL out of your tracker and read it character by character. The usual suspects:
- Missing or wrong protocol.
https://vshttp://— some networks reject or silently drop one. - Placeholder not replaced. The network's macro (often
{clickid},[click_id], or#clickid#) must be the exact token the network documents. If you paste{clickid}into a network that expects{subid}, it sends the literal string and your tracker has nothing to match. - Trailing slash or double slash.
//postbackafter the domain can 404 on some servers. - Parameters stripped. Some networks truncate long postback URLs. Keep yours short.
- Wrong endpoint. You may have pasted the click-tracking URL instead of the postback/conversion URL. They are different.
Fastest test: paste the postback URL into a browser, replacing the macro with a real click ID you recorded earlier. Hit enter. You should get a 200 response and the conversion should appear in your tracker. If it does, the URL is fine and the problem is on the network's side. If it doesn't, you've found the break. The full procedure is in How to test a postback URL before you send paid traffic — bookmark it and run it every time you add a new network.
Check 3: is the network sending the postback at all?
If your URL works when you paste it manually but nothing arrives after a real conversion, the network isn't calling it. Common reasons:
- The postback is configured at the wrong level. Many networks let you set a global postback, an offer-level postback, and a campaign-level postback. A more specific setting overrides the global one. If you configured it globally but the offer has its own (blank) setting, nothing fires.
- The conversion status doesn't trigger a postback. Networks often only fire on "approved" or "confirmed" conversions, not "pending." If your conversions sit in pending for hours or days, the postback is delayed, not broken.
- Test mode is on. Some networks have a test-conversion toggle that suppresses live postbacks.
- The network requires an allowlist. A few networks only send postbacks to pre-approved domains. Check their docs.
Ask the network's support for the postback log — most can show you the exact request they sent, the response code, and the timestamp. That single artifact resolves most disputes. If they show a 200 and your tracker shows nothing, the problem is in your endpoint (Check 4). If they show a 4xx or 5xx, the problem is the URL or your server.
Check 4: is your endpoint rejecting the call?
A postback can arrive and still be discarded. Your tracker will return a 200 to keep the network from retrying, but log the rejection. Look for:
- Unknown click ID. The ID the network sent doesn't match any click. Usually a case-sensitivity issue, a truncated ID, or the click was purged. Some trackers purge clicks after a retention window — if your conversion lag is longer than that, the match fails.
- Duplicate conversion. The network retried and the tracker already recorded it. This is correct behaviour, not a bug — but it looks like "not firing" if you're watching the wrong report.
- Missing required parameter. If your tracker requires a payout value or conversion type and the network doesn't send it, the call may be rejected outright. Fix this by setting a default or making the parameter optional.
- Fraud filter blocked it. If fraud detection is on, a conversion from a datacenter IP, a flagged user agent, or an IP that's fired too many clicks in a short window can be silently dropped or held for review. Check the fraud log before assuming the postback failed.
Adtraxo exposes postback logs and fraud events per campaign, so you can see whether the call arrived and why it was rejected — which is the difference between "the network didn't send it" and "we threw it away." Note that postback tracking and sub-ID passing are Pro features; on the Free plan you won't have server-to-server conversions to debug, so plan accordingly.
Check 5: conversion type and status mismatch
Many trackers distinguish between conversion types — lead, sale, registration, trial — and only count the ones you've configured. If the network sends type=sale but your tracker expects type=conversion, or sends nothing at all, the event may be recorded under a type you're not looking at, or dropped.
Two things to verify:
- The parameter name. Does your tracker expect
type,event,status, orconversion_type? Match it exactly. - The value. If your tracker accepts
leadandsale, make sure the network sends one of those strings — not1orapproved.
If you're running lead-gen offers alongside sales, track them as separate events so your ROI math doesn't collapse two different economics into one number. The setup is in How to track leads and sales as separate conversion events.
Check 6: payout value missing or misnamed
If your postback fires but the revenue column shows zero, the conversion is being recorded with no value. That's not a postback-not-firing problem, but it wrecks your ROI reporting and often gets misdiagnosed as one.
The network sends payout in a parameter — commonly payout, amount, revenue, or commission — and your tracker must read the same name. Check the network's postback macro list and your tracker's accepted parameters side by side. If the network sends amount=12.50 and your tracker reads payout, you get a conversion worth zero.
Also confirm the format: some networks send cents as integers (1250), others send dollars as decimals (12.50). A 100x error here is worse than no data at all. Full walkthrough: How to pass payout values in a postback so your ROI numbers are real.
Check 7: the discrepancy is real, and it's not a bug
Sometimes the postback is firing perfectly and the numbers still don't match. Networks and trackers count differently: the network may count a click when the offer page loads, your tracker counts when the redirect hits; the network may deduplicate conversions from the same user, your tracker may not; a conversion may be pending in the network and already counted in your tracker.
Before you chase a "missing" conversion, check whether it's a genuine failure or a counting difference. A 5–15% gap is normal and expected; a 90% gap is a broken chain. The distinction is covered in Why your affiliate network and your tracker report different conversions.
How to test the whole chain before you pay for traffic
Every check above can be run in under ten minutes if you do it in this order, before you spend a cent:
- Generate a test click through your tracking link with a known sub-ID value.
- Confirm the click appears in your tracker with that sub-ID.
- Confirm the click appears in the network with the same click ID.
- Fire a test conversion from the network (most have a test-postback button).
- Confirm the conversion appears in your tracker, with the right type and the right payout.
- Check the fraud log for a false positive.
- Repeat with a second network or offer if you run more than one — each has its own macro syntax.
If step 4 fails, work backwards: test the URL manually (Check 2), then ask the network for the postback log (Check 3), then check your endpoint (Check 4). If step 3 fails, the problem is upstream in the click ID (Check 1) and the postback will never fire.
Adtraxo's postback testing and per-campaign logs let you run steps 1–6 without leaving the dashboard, and the AI Campaign Optimizer only starts making decisions once conversions are flowing — so getting the chain right is what unlocks the rest of the platform.
What to do when the postback fires but conversions still look wrong
If you've confirmed a 200 response, a matching click ID, the right type, and a real payout, and the numbers still look off, the remaining suspects are:
- Attribution windows. A conversion from a click three weeks ago may fall outside your tracker's window but inside the network's.
- Sub-ID collisions. If you're using UTMs and sub-IDs interchangeably, values can overwrite each other. See UTM parameters vs sub-IDs — which should you use on affiliate links?
- Email and multi-touch sequences. If your traffic comes from an email follow-up, the conversion may be credited to the wrong message. How to track which email in your follow-up sequence drives affiliate sales covers the fix.
And if you've worked through every check here and it's still silent, the broader walkthrough in Affiliate conversions not tracking? A step-by-step troubleshooting guide covers the edge cases — server firewalls, redirect chains, and networks that silently drop postbacks to non-allowlisted domains.
Frequently asked questions
Why is my postback not firing even though clicks are tracking?
Clicks tracking but no conversions means the break is after the click. Check, in order: the click ID reaching the network (it must appear in the network's click report), the postback URL's macro syntax, whether the network is configured to fire on the conversion status you're getting, and whether your endpoint is rejecting the call. The network's postback log will tell you which of these it is in one look.
How do I test a postback URL without waiting for a real conversion?
Copy the postback URL from your tracker, replace the network's click ID macro with a real click ID you recorded earlier, and paste it into a browser. A 200 response and a new conversion in your tracker means the URL is correct. If that works but live conversions don't appear, the problem is on the network's sending side, not your endpoint.
Does a postback fire on pending conversions?
Usually not. Most networks only send the postback when a conversion moves to approved or confirmed, which can be hours or days after the click. If your conversions sit in pending, the postback is delayed rather than broken. Check the network's conversion status settings before you start debugging the URL.
Why does my conversion show up with a payout of zero?
The postback is firing, but the payout parameter name or format doesn't match what your tracker expects. Confirm the network's macro name (payout, amount, revenue, commission) matches your tracker's accepted parameter, and check whether the value is being sent in cents or dollars. A name mismatch is the usual culprit.
Can fraud detection stop a legitimate postback from recording?
Yes. If fraud detection is enabled, a conversion from a datacenter IP, a flagged user agent, or an IP with unusual click velocity can be held or dropped. Check the fraud log before assuming the postback failed — the call may have arrived and been filtered. In Adtraxo, postback tracking and sub-ID passing require
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.