Postback troubleshooting

Postback Returns 200 but No Conversion

The callback is accepted, but credit still fails because the partner cannot match, approve, or trust the conversion.

Signal

HTTP success only proves transport. It does not prove credit, deduplication, or approval.

Evidence

Keep one click-to-credit packet: landing proof, callback proof, and the partner lookup result.

Next step

Escalate to template, lookup, or payout ownership only after the accepted replay is documented.

Introduction

Postback Returns 200 but No Conversion is the branch where everyone thinks the problem is solved because the endpoint answered with success, yet the network, tracker, or advertiser dashboard still shows no credit. The callback moved across the wire, but the system that decides whether a conversion counts could not match the event to the original click, goal, payout, or approval rule.

This is why accepted callbacks waste so much time. Media buyers see a healthy replay in Postback Tester, developers point to the 200 response, and the partner insists the sale never qualified. Unless you tie the same incident to click proof, landing-page proof, callback proof, and partner-side lookup proof, the team keeps arguing about different layers.

Treat this page as the credit-repair runbook, not the delivery runbook. If the request never leaves the tracker, return to Fix postback not working. If the payload still contains literal placeholders, branch into Fix postback macro not replaced. Stay here only when the transport layer already looks healthy and the missing credit still needs an owner.

Why the problem happens

A 200 response is operationally comforting, but commercially meaningless on its own. Revenue teams need credited conversions, not polite acknowledgements from an endpoint. When accepted callbacks still do not create credit, optimization models lose signal, payout reconciliation stalls, and partner relationships degrade because nobody can show where the accepted event disappeared.

The hardest part is that accepted-but-uncredited incidents often hide behind normal tooling. Web servers, queue workers, and replay tools all look green, so teams stop one layer too early. The real defect usually lives in lookup keys, deduplication, goal mapping, offer status, payout formatting, or approval rules that sit after the HTTP transaction.

That is why your evidence pack must continue past the 200. You need the original click context from Redirect Checker and Click ID Extractor, the exact callback body from Postback URL Checker, and the partner-side record that proves whether the same transaction, click ID, and goal were recognized after receipt.

Common causes

Most 200-but-no-conversion incidents fall into one of three buckets: the callback was accepted but could not match a real click, the callback matched a click but failed a business rule, or the callback created a record in one system while the visible reporting layer filtered it out. Classifying the incident early prevents teams from retrying transport fixes that already worked.

Lookup failures are the most common. The callback may carry the wrong click ID, transaction ID, or goal token because the landing page stored one value while the tracker or CRM sent another. When that happens, the receiving system politely returns 200 because the request format is valid, then silently refuses to create credit because it cannot connect the event to the eligible click.

Business-rule failures are next: duplicated transaction IDs, mismatched payouts, unsupported currencies, paused offers, late conversion windows, or status values that the partner refuses to count. Reporting drift is the third bucket. The partner may have accepted the event into a raw log, but dashboards, approval queues, or finance exports still hide it until another field is fixed.

Step-by-step troubleshooting

Keep one incident chain from click to credit. If you compare an accepted replay to the wrong landing-page session or the wrong partner log line, the investigation will loop forever. Every checkpoint below should refer to the same click ID, transaction ID, goal, and timestamp window.

Do not start by sending more replays. Start by proving whether the accepted callback describes the same conversion you expected to credit. Once that alignment is visible, the right owner becomes obvious: landing-page capture, template mapping, partner rules, or reporting.

When the root cause is confirmed, update the runbook and the template at the same time. Accepted-but-uncredited incidents return when teams patch one offer manually but leave the reusable callback pattern unchanged.

  1. Anchor the incident to one accepted replay

    Use Postback Tester or Postback URL Checker to save the exact accepted request, response body, headers, and latency. That is your proof that transport succeeded and that further debugging belongs after receipt.

  2. Reconfirm the click and landing-page identifiers

    Pull the original campaign URL, redirect trace, and final landing-page identifier proof from Redirect Checker and Click ID Extractor. Make sure the click ID, UTM set, and transaction context in the callback still match what actually reached the browser.

  3. Compare the approved template with the live callback

    Open How to compare postback template vs live request and diff the accepted callback against the template you meant to ship. This isolates wrong goal names, missing auth, payout formatting drift, or mapping changes without collapsing back into transport debugging.

  4. Check credit, deduplication, and offer rules

    Ask the partner or internal receiving system to look up the same click ID, transaction ID, order ID, and timestamp window. Confirm whether the event was rejected as duplicate, out-of-window, wrong-status, wrong-payout, paused-offer, or unsupported-currency instead of assuming the endpoint created visible credit.

  5. Route the incident to the correct fix lane

    If the callback never should have been considered healthy, return to Fix postback not working. If placeholder values survived into the accepted request, move to Fix postback macro not replaced. If the request is structurally correct but lookup or approval still fails, keep the same evidence pack and escalate to the partner-side credit owner.

Tools that help solve the problem

Use a compact tool stack that proves one layer at a time. Accepted callbacks become easier to debug when the click path, landing proof, replay transcript, and template comparison all come from the same session or test transaction.

These tools should not create parallel investigations. Each output should narrow the same incident, not launch a fresh one with unrelated timestamps or identifiers.

Archive the exports together so the next accepted-but-uncredited case starts from a proven checklist rather than another ad-hoc replay.

Conclusion

Fixing 200-but-no-conversion incidents means proving where credit stopped, not proving the server answered politely. Once you connect the accepted request to the partner's lookup rules, you can close the ownership gap that keeps callbacks green and revenue red.

Keep a reusable checklist for click ID, transaction ID, goal, payout, currency, approval window, deduplication key, and reporting visibility. That checklist turns the next accepted-but-uncredited callback into a ten-minute comparison instead of a multi-team argument.

After the incident closes, update the callback template, the QA article, and the escalation packet together. The goal is not just to fix one replay, but to make future accepted callbacks predictable enough that the next missing conversion is classified on the first pass.

Related issues

Knowledge base articles