Postback tracking for COD: sub IDs, statuses and clean attribution
A COD funnel has two conversion points, days apart. Here is how to structure sub IDs and postbacks so you optimize on the second one.
Signal flow
Return approved events
Decision summary
- COD has two events — lead and approved — separated by the call-center. Track both.
- Pass a unique click ID in a sub parameter and keep the rest of your sub IDs structured and stable.
- Map statuses explicitly: pending, approved, rejected, duplicate, trash.
- Test with real clicks before you scale, and reconcile totals weekly.
Two conversions, one campaign
In a card-payment funnel the sale and the conversion are the same moment. In COD they are not. The lead fires when the form is submitted; the approved status arrives after a human calls the buyer, which may be hours or a day later.
If your tracker only records the first event, every optimization decision you make is based on leads you have not been paid for.
Sub ID structure
Sub IDs are the only way to trace an approved order back to the creative that produced it. Decide the structure once and keep it identical across every campaign — retrofitting a scheme across months of data is miserable.
- One sub reserved for the unique click ID from your tracker or the ad platform.
- One for the source or account.
- One for the campaign or ad set.
- One for the creative or angle.
- One free slot for the lander or pre-lander variant.
Status mapping
Ask for the exact status values before you build the mapping, and store the raw value alongside your normalized one so a new status never silently becomes 'rejected'.
| Status | What it means | How to treat it |
|---|---|---|
| pending | Lead received, not yet called | Count as lead only |
| approved | Buyer confirmed the order | Payable event — optimize on this |
| rejected | Buyer declined or unreachable | Analyse by hour, geo and creative |
| duplicate | Same phone inside the duplicate window | Exclude from all rate calculations |
| trash | Invalid or fabricated data | Investigate the source immediately |
Feeding the event back to the source
Where a source supports server-side conversion import — offline conversions on the ad platform side or a conversion API — send the approved event with the stored click ID and the payout value. The algorithm then optimizes toward buyers who confirm, not toward people who enjoy filling in forms.
Send the lead event too, as a separate, lower-value event. Volume-poor campaigns need something to learn on while approved orders accumulate.
Mistakes that quietly ruin the data
Almost every broken attribution report comes from the same short list.
- Redirect chains that drop query parameters — the click ID never reaches the offer.
- Reusing one sub ID slot for two meanings across campaigns.
- Counting duplicates as leads, which deflates the approve rate you compute yourself.
- Comparing tracker numbers with platform numbers on different timezones. Fix the timezone once, everywhere.
- Not testing the postback with a real click before launching a real budget.
Reconcile weekly
Once a week, compare your tracker's approved count with the statement your manager sees. Small gaps are normal — a rejected order can flip after a second call attempt. A structural gap means something in the chain is dropping parameters, and it is far cheaper to find it after one week than after a payment cycle.
FAQ
Common questions
Next decision
Apply the method to a live offer
Browse the current catalog, then confirm the exact payout, cap, traffic rules and operational capacity with your manager before scaling.