Skip to content
Browse documentation

Conversions are not attributed

A step-by-step diagnosis when the advertiser reports sales that are missing, rejected or credited to the wrong partner.

Last updated 5 min read

On this page

1. Did the request arrive?#

Open Reporting → Postback log → Received for the time of the conversion and search for the order ID, click ID or the advertiser's IP.

You seeGo to
The request, result Approved/PendingIt worked — check report filters (report numbers don't match).
Result Rejected or DuplicateStep 3.
Result Unknown click, Unknown offer, Malformed…Step 2.
Nothing at allStep 4.

2. The request was refused#

Hover the result to see the exact error.

ErrorCauseFix
unknown click_idThe click ID is not one of this workspace's clicks: altered, truncated, lower/upper-case mixed with extra characters, from another tracker, or from another workspace.Make sure the advertiser stores the ID from the landing-page URL unchanged and sends it back. For a previous tracker's IDs, set up the migration postback.
invalid click_id (expected 32 hex characters) (400)Usually a placeholder the advertiser's platform did not fill: click_id={click_id}.Fix the advertiser's postback template.
no click found for gclidNo click with that gclid in your workspace (wrong workspace, older than 90 days, or the tracking template never ran).Send offer_id too (stores the conversion without click), check the template with the Simulator.
offer_id does not match the clickThe pixel or postback names another offer than the click's (common with smart links). The landing-page SDK no longer sends data-offer with a known click, so it does not cause this.Remove offer_id or send the click's offer.
offer_id required: the click is not tied to an offerClick from a workspace-level transparent link (/c/<workspace>). SDK conversions of such clicks always get this (known issue: the SDK sends no offer with a known click).Add offer_id to the postback or pixel; for SDK conversions use an offer-level template.
offer does not accept pixel conversions / … server-to-server conversionsOffer → Tracking → Conversion tracking excludes the method.Change it to Server postback or pixel.
unknown event "x" for this offer (400)The event code does not exist on the offer.Create the event on the offer's Events tab or fix the code.
this tracking domain does not serve the offer's workspacePostback sent to another workspace's or brand's tracking domain.Use one of your tracking domains.
click_id required (pixel)The pixel has no click ID and no pixel cookie.Pass the click ID to the thank-you page (SDK, or {click_id} in the destination URL).

3. The conversion was stored as rejected#

Open Reports → Conversions, filter Rejected, and read the status reason:

ReasonFix
duplicateA repeat of the same click + event or order ID. Allow multiple conversions per click on the event, or check the advertiser's retries (Duplicates).
outside_windowThe click is older than the offer's Attribution window (days). Raise it (max 365).
too_fastFaster than the minimum CTIT. Lower Minimum click-to-conversion time on the offer's Conversion rules tab.
ip_not_allowedThe advertiser posted from an IP outside its allowlist. Add the IP on the advertiser's Postback security tab.
cap_exceededA cap was full. Raise it on the offer's Caps tab or the partner's caps.
fraud:<check>, rule:<name>A fraud rule or postback rule. Review it under Settings → Conversion rules.
postbackThe advertiser sent status=rejected.
click_blockedThe click was refused (for example a transparent link to a non-allowlisted host).

You can approve a rejected conversion manually (Reports → Conversions → select → Approve); duplicates can only be rejected.

4. Nothing in the Received log#

Failed requests are filed under the workspace their token, offer, click ID or tracking domain names, so token problems and malformed requests normally appear in Received too (filter Token missing, Invalid token, Advertiser inactive or Malformed):

  • Missing or wrong token — the advertiser gets 401 token required / invalid token. Compare their token with Settings → Postback tokens (or the advertiser's own token). Regenerating a token breaks old integrations instantly.
  • Paused or inactive advertiser — its token gets 401 advertiser_inactive; set the advertiser active again or use the workspace token.
  • Malformed request — bad amount (49,90), bad status, bad click-ID format: 400.
  • Pixel without click — read the X-ArcTrack-Conversion header of the /px response in the browser.

A request that names no token, offer, click or workspace domain of yours is listed only to platform administrators (Admin → Unattributed postbacks). If nothing shows at all, the request probably never left the advertiser's system: ask for their outgoing log (URL, time, HTTP status received).

Test the advertiser's URL yourself with test=1:

Shell
curl -s "https://trackcrown.com/pb?click_id=PASTE_CLICK_ID&amount=10&token=PASTE_TOKEN&test=1"

5. Credited to the wrong partner#

  • Last touch (default) credits the click ID the conversion carries. If a visitor clicked partner A, then partner B, B gets it. The SDK always replaces the stored click when a new click ID arrives in the URL.
  • First touch (Settings → Conversion rules) credits the SDK's first_click_id when present.
  • Coupons: with Coupon codes win over click ids on, a valid coupon credits the coupon's partner even when a click exists.
  • Organic: an organic click stored earlier is replaced by any later partner click.
  • E-mail ownership: a click-less postback with email (and no aff_id) is credited to the partner who first converted that address on the offer.

6. Pixels and cookies#

Pixels lose conversions when the browser blocks the request or the click ID is not on the thank-you page:

  1. Install the landing-page SDK on the advertiser's site so the click ID is stored on their own domain.
  2. Use the JavaScript pixel (/px.js): it reads the SDK's stored click ID automatically.
  3. Prefer an S2S postback for anything that matters.
  4. If you renamed Click ID parameter name in Settings → Workspace, set data-param on the SDK tag to the same name.

7. Google Ads parallel tracking#

With parallel tracking the visitor's browser goes straight to the final URL; Google calls the tracker in the background. The browser never passes through the tracker's redirect, so our click ID is not in the landing-page URL — Append the click ID to transparent redirects only helps when the redirect runs in the browser (sequential tracking). Join by gclid instead: install the SDK (it calls /lp with the gclid and stores the click ID) or send gclid on the postback.

Something unclear or missing in this article?Tell us