Postback URL Builder
Keeps macro names, parameter order, and reusable callback patterns consistent across partners.
Open tool >Postback troubleshooting
Callbacks arrive but still contain literal {clickid} or {payout} strings because the template never swapped values.
Signal
The receiving endpoint gets a request, but one or more fields still show placeholder text instead of real identifiers or values.
Evidence
Keep the approved template, the live callback, and the original click-proof packet side by side.
Next step
Fix naming, encoding, or source-field ownership before retrying broad delivery changes.
Postback Macro Not Replaced is the branch where the callback does arrive, but fields such as {clickid}, {payout}, {status}, or partner-specific tokens remain literal text instead of real conversion values. The endpoint can still answer 200, which makes the problem look healthy at the transport layer while attribution and payout logic quietly fail.
Treat this page as the template-mapping runbook for live postback incidents. If no request arrives at all, return to Postback Not Received. If the request contains real values and still does not credit, move to Postback Returns 200 but No Conversion. Stay here only when the payload itself proves that substitution never happened correctly.
The fastest way to solve this issue is to compare three artifacts from the same test or transaction: the approved template, the live callback captured in Postback Tester or Postback URL Checker, and the source fields that should have supplied the real values. If one of those artifacts comes from a different click or offer, the diagnosis quickly becomes misleading.
Literal macros corrupt reporting in a particularly dangerous way: the request appears structured, but the most important identifiers are fake. Partners may accept the callback, store unusable text, and later reject or ignore the event because the click ID, payout, or transaction key never became a real value.
This problem also spreads across owners. Growth teams often paste network templates, tracker owners rename parameters, and engineers URL-encode payloads inside spreadsheets or scripts. One small mismatch between those steps is enough to turn a working pattern into a callback that only pretends to be dynamic.
That is why the right comparison is not template versus assumption. It is template versus live request versus source field. If you can prove where the placeholder stayed literal, you can repair the exact mapping layer instead of rechecking transport, firewall rules, or unrelated landing-page behavior.
Macro substitution usually fails in one of five places: the wrong macro name was copied from another platform, the correct token was encoded or escaped into inert text, the source field was empty when the callback fired, the callback builder inserted a static fallback value, or the partner expected a different parameter name entirely. Each case produces a slightly different symptom, so read the payload carefully before editing anything.
Naming mismatches are the most common. One system expects {subid}, another expects {clickid}, and a third exposes the click value only under a custom placeholder. Encoding issues are next. Braces may become %7B and %7D, templating engines may double-escape them, or string interpolation may strip them before the callback leaves the tracker.
Source-data gaps matter too. A callback can carry literal text because the landing page never stored the click ID, the conversion event did not populate payout or status, or the automation that built the URL reused a staging token. In those cases, the template is only part of the problem, and you need the original click proof to finish the diagnosis.
{subid} but the template uses {clickid} or another unsupported placeholder.%7B and %7D before delivery.Solve macro issues by proving one field at a time. Start with the broken payload, identify which values stayed literal, then trace those values back to the template and the source system that should have populated them. Broad retries without that field-level comparison only create more noisy payloads.
Use one live transaction or one controlled test click for the whole review. If the click proof, template, and callback transcript come from different sessions, you cannot tell whether the macro failed because of naming, because the source field was empty, or because a different offer used a different template.
Once the exact substitution gap is confirmed, update the reusable template and the related QA checklist together. Otherwise the same macro bug will return the next time someone clones the offer or recreates the integration.
List every required partner parameter, the tracker macro meant to populate it, and the source field that should supply the value. Highlight naming differences before you touch the live template.
Review the exact callback URL or payload for encoding, casing, escaping, copied example values, and unsupported placeholders. Compare the stored template against the version the tracker actually delivered.
Fire the template in Postback Tester or inspect it in Postback URL Checker. Mark every field that still contains literal braces, stale example data, or the wrong parameter name.
Confirm that the click ID, transaction ID, payout, status, currency, and goal fields were actually present in the tracker, CRM, or affiliate platform when the callback fired. If a source field was empty, branch into Click ID Extractor, Redirect Checker, or the broader postback troubleshooting guide as needed.
Rename macros, fix encoding, or remap the source field in Postback Builder, then rerun one controlled test. If the payload now carries real values but credit still fails, move to the accepted-but-uncredited branch.
The best tool stack for macro issues is the one that lets you compare intended substitution against actual substitution with minimal translation. You want a saved template, a replayable request, and proof of the original click or conversion values that should have filled the placeholders.
Keep those artifacts in one incident packet. When a tracker owner, partner manager, or engineer sees the same literal field in the same replay, they can debate the fix instead of debating whether the bug exists.
Use the tools below in sequence, not in parallel. First confirm the template shape, then the live replay, then the upstream source values.
Keeps macro names, parameter order, and reusable callback patterns consistent across partners.
Open tool >Shows exactly which placeholders substituted correctly and which ones remained literal in the live request.
Open tool >Lets you inspect callback encoding and parameter structure before and after the replay.
Confirms the original click path and landing-page parameters were available for later substitution.
Open tool >Macro-not-replaced issues are usually small template bugs with large reporting consequences. Once literal placeholders enter production callbacks, every downstream dashboard, approval rule, and payout reconciliation step starts from corrupted data.
Prevent recurrence by keeping a platform-specific macro glossary, reviewing callback templates before launch, and storing one approved replay transcript for each partner integration. Those habits make it obvious when a copied template no longer matches the real macro vocabulary.
If the callback now carries real values but the conversion still does not credit, stop treating the issue as a substitution problem and continue with the template-versus-live comparison guide or the credit-repair workflow. The fix path should follow the current evidence, not the original suspicion.