Tracking & API9 min field guide

    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

    Click ID
    Lead
    Approved
    Postback

    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.
    01

    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.

    02

    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.
    03

    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'.

    Reference table
    StatusWhat it meansHow to treat it
    pendingLead received, not yet calledCount as lead only
    approvedBuyer confirmed the orderPayable event — optimize on this
    rejectedBuyer declined or unreachableAnalyse by hour, geo and creative
    duplicateSame phone inside the duplicate windowExclude from all rate calculations
    trashInvalid or fabricated dataInvestigate the source immediately
    Use the definitions and method shown here, then make decisions from your own observed cohort data.
    04

    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.

    05

    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.
    06

    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.