Skip to content

Tracking & attribution

Every conversion, traced back to its click

TrackCrown gives every click a unique ID on your own tracking domain, carries it through the advertiser's funnel and matches the conversion back to it — with the partner, sub IDs, ad-platform parameters and device attached.

One redirect, no cookies required, and rules you can read: the attribution window, the duplicate checks and the reason for every rejection.

Man with a short beard in a navy blazer and white t-shirt, arms crossed, smiling at the camera
An approved purchase of 86 dollars 20 attributed to the click 2 hours 14 minutes after it happened.
Click detail for one partner click: click ID, link type, offer, partner, two sub IDs, Google click ID, country, device and a unique-click flag.

Click IDs

One ID that travels with the visitor

Every click gets a 32-character ID the moment it reaches the tracking domain. It is how a conversion — minutes or weeks later, from another system — finds its way back to the click.

  1. Step 1: In the destination URL

    Put {click_id} or {transaction_id} in the offer's destination URL and the advertiser receives it on the landing page.
  2. Step 2: On transparent links

    With “append click ID” on, our click-ID parameter is the only one added to the url= value — nothing else is added or removed.
  3. Step 3: On the landing page

    The SDK keeps it in a first-party cookie and local storage on the advertiser's own domain for 30 days and adds it to checkout links.
  4. Step 4: Back in the conversion

    Postbacks, pixels and CSV imports return it as click_id, transaction_id or tid.
A click ID is 32 lower-case hexadecimal characters: the first 12 encode the click time in milliseconds, the last 20 are 80 random bits.
  • Time inside the ID. The first 12 characters are the click time in milliseconds, so a conversion lookup only reads a few seconds of logs — fast even months later.
  • Unguessable. The remaining 80 bits come from a cryptographic random generator, so IDs cannot be predicted or enumerated.
  • Compatible. Accepted under the names other tracking platforms use, so advertisers rarely need to change their integration.
The click ID is created by the tracking link, passed to the landing page through the destination URL, stored by the advertiser with the order and returned in the postback, where it is matched to the click.

Sub IDs & parameters

Ten sub IDs and every ad-platform parameter

Parameters on a tracking link are stored on the click, become report dimensions and filters, and can be passed on to the destination and to partner postbacks as macros.

  • Parameter names are case-insensitive, and the aliases other tracking platforms use are accepted.
  • The traffic source is detected from the click ID — google, meta, microsoft or tiktok — unless you pass ts.
  • Google ValueTrack values land in campaign, ad group, ad, keyword and placement dimensions, next to partner traffic in the same reports.
  • Unexpanded placeholders such as {gclid} are stored as sent and flagged, so a broken template shows up in the click explorer.
Tracking-link parameters and where each one is stored
Stored asAccepted parametersTypical use
sub1 … sub10sub1…sub10, s1…s10, aff_sub…aff_sub10, p6…p10Partner placement, creative, campaign or their own click ID
Source IDsource_id, source, pubid, site_idSub-publisher or site of the partner
Click IDsgclid, gbraid, wbraid, fbclid, msclkid, ttclidAd-platform click identifiers, kept for matching and offline imports
Campaign IDcampaignid, campaign_id, cid, utm_campaignAd-platform campaign
Ad group IDadgroupid, adgroup_id, agid, adset_idAd group or ad set
Ad / creative IDcreative, ad_id, adid, cridAd or creative
Keywordkeyword, kw, utm_termSearch keyword
Match type · network · devicematchtype, mt · network, net · device, devAs reported by the ad platform
Placement · location · targetplacement, pl, site · loc_physical_ms, loc · targetid, targetDisplay placement and Google location / target IDs
Traffic sourcets — or detected from the click IDgoogle, meta, microsoft or tiktok
Anything elseany other parameterKept as a key/value on the click and shown in the click detail
Partner link with sub IDs
https://trackcrown.com/r/LS204/118?sub1=spring-sale&sub2={ad_id}&source_id=site-42
Google Ads tracking template with ValueTrack
https://trackcrown.com/c/LS204-118?gclid={gclid}&campaignid={campaignid}&adgroupid={adgroupid}&keyword={keyword}&force_transparent=true&url={lpurl}

Macros in destination and fallback URLs

Filled in on the redirect and URL-encoded. On transparent links only the click ID, offer, partner and sub-ID macros are expanded, and only inside the url= value.

  • {click_id}
  • {transaction_id}
  • {offer_id}
  • {offer_code}
  • {aff_id}
  • {aff_code}
  • {sub1}
  • {sub2}
  • {sub3}
  • {sub4}
  • {sub5}
  • {source_id}
  • {gclid}
  • {fbclid}
  • {country}
  • {region}
  • {city}
  • {device}
  • {os}
  • {browser}
  • {ext_campaign_id}
  • {ext_adgroup_id}
  • {ext_ad_id}
  • {ext_keyword}
  • {timestamp}
  • {date}
  • {random}
Every macro in the docs

Conversion methods

Six ways to report a conversion

Server-to-server is the most reliable. Pixels, the landing-page SDK and Google click IDs cover the cases where it is not possible. Each offer chooses which methods it accepts.

S2S postback

GET | POST /pb

  • Requires the workspace token or the token of the offer's advertiser; a wrong token gets HTTP 401.
  • Event, sale amount, status, currency, transaction ID and five free adv values.
  • Answers JSON with HTTP 200 for business errors, so advertiser systems do not retry forever; test=1 validates without storing.

Image pixel

<img src="…/px?offer_id=…">

  • For confirmation pages when the advertiser cannot make server calls.
  • Needs a click ID — from the page, or the optional pixel cookie — and an offer that allows pixels.
  • Cannot override payout; carries no token.

iframe & JavaScript pixel

<script src="…/px.js?offer_id=…">

  • The same pixel as an iframe or a script tag, for tag managers and checkout pages.
  • Renders partners' HTML postbacks in the visitor's browser, in a frame kept apart from the advertiser's page.

Landing-page SDK

<script src="…/sdk.js" data-offer="…">

  • Finds the click ID in the URL, by Google click ID, or from an earlier visit; records direct visits.
  • Fires conversions from the page with one JavaScript call — no server work for the advertiser.
  • Adds the click ID to links to the checkout or sign-up domain.

Google click ID match

/pb?gclid=…&offer_id=…

  • A postback may send the gclid instead of our click ID; it matches the latest click in your workspace with that gclid.
  • Within the offer's attribution window, or 90 days — Google's own limit — when the offer is not named.
  • Parallel-tracking clicks are joined the same way by the SDK.

Panel, CSV and API

  • Add a conversion by hand, or import a CSV by click ID or transaction ID with a preview before applying.
  • Create conversions with POST /api/v1/conversions and change their status with the API.
  • Every manual change is written to the audit log.
Server-to-server postback
https://trackcrown.com/pb?click_id={click_id}&event=purchase&amount=86.20&currency=USD&txid=ORD-58213&token=YOUR_TOKEN
Image pixel on the confirmation page
<img src="https://trackcrown.com/px?offer_id=LS204&amp;event=purchase&amp;amount=86.20&amp;txid=ORD-58213" width="1" height="1" style="display:none" alt="" referrerpolicy="no-referrer-when-downgrade" />
Response
{"ok":true,"conversion_id":"5f0c2a7e-…","status":"approved"}

Events & de-duplication

Several goals per offer, each counted once

Events let one offer pay differently for a lead, a trial and a purchase. The attribution window and the duplicate rules decide which conversions count.

  • Each offer has a default event plus any others, each with its own revenue (per action, share of sale or dynamic) and payout (per action or share of sale).
  • Private events are hidden from partners and never fire their postbacks — for advertiser-only milestones.
  • One conversion per click per event by default; allow multiple for events such as renewals.
  • One conversion per advertiser transaction ID (txid, order_id) per offer, across all clicks.
  • Duplicates are stored as rejected with reason duplicate — visible, never paid, never posted back.
  • An attribution window per offer from 1 to 365 days (default 30); later conversions are rejected as outside_window.
How a conversion is processed
Four events of one offer — a default lead, a purchase paid as a share of the sale, a renewal that allows several conversions per click and a private qualified-lead event — with the offer's 30-day attribution window.
Four recent conversions: an approved purchase, the same order sent again and rejected as a duplicate, a pending lead, and a lead rejected because it arrived after the attribution window.

What happens to every conversion

The same pipeline runs for postbacks, pixels and the SDK, in this order. A conversion's revenue and payout are fixed when it is recorded, so later rate changes never rewrite past conversions.

Conversion pipeline in eight steps: authenticate, find the click, resolve offer and event, resolve payout and revenue, set the status, remove duplicates, apply caps, store and queue partner postbacks.
  1. Authenticate

    Postbacks need a valid token; pixels need an offer that accepts pixels.
  2. Find the click

    By click ID, or by Google click ID; the tracking domain must belong to the offer's workspace.
  3. Offer & event

    The event code selects the revenue and payout rules; unknown events are refused.
  4. Payout & revenue

    Most specific wins: partner + event → partner → event → offer. Shares use the sale amount.
  5. Status & window

    Offer default or the status sent; outside the window → rejected. Blocked clicks cannot convert.
  6. Duplicates

    Per click and event, and per transaction ID. Duplicates are kept as rejected.
  7. Caps

    Offer and partner conversion and payout caps; over the cap → rejected as cap_exceeded.
  8. Store & post back

    Stored with matching partner postbacks queued in the same transaction, retried on failure.

Caps, targeting & fallbacks

Guardrails with a fallback, not a dead end

Caps and targeting keep partner and smart-link traffic inside what the advertiser agreed to buy. When a visitor cannot go to the offer, the fallback decides where they go instead.

  • Caps on clicks, conversions and payout — daily, weekly, monthly and lifetime — for the offer and for each partner on it.
  • Calendar periods in the workspace time zone; weeks start on Monday.
  • Targeting by countries (allow or deny), device type and operating system; the country comes from the visitor's IP address.
  • Fallback order: the offer's fallback URL, the smart link's fallback, the workspace default — or a neutral “link not available” page without a redirect.
  • Over a conversion or payout cap, conversions are kept and rejected as cap_exceeded, so you can still approve them.
Four caps with their usage: daily clicks, daily conversions, a weekly conversion cap for one partner and a monthly payout cap; periods follow the workspace time zone.

Transparent links are never re-routed

When a link carries url=, caps, targeting and paused status are only recorded on the click — for example as cap_over — and the visitor always goes to exactly the url= value, as Google's transparency rules require. How transparent tracking works

Tracking you can explain line by line

From the tracking link to the destination
1 redirect
Click ID with its own timestamp
32 characters
Attribution window, set per offer
1–365 days
Plus a source ID and any extra parameter
10 sub IDs

Time zones & retention

Clear rules for time and for how long data is kept

Numbers only reconcile when everyone counts the same day. Data is only useful — and only defensible — for as long as it is needed.

Time zones

  • Every click and conversion is stored in UTC with millisecond precision.
  • Each workspace has an IANA time zone; report days, hours, weeks and cap periods are computed in it.
  • Each user can choose a display time zone, and the zone is printed on every report.
  • Reports count conversions by conversion time by default, or by the time of their click.
How long each kind of tracking data is kept
DataKept for
Click and impression logs13 months, then deleted automatically
ConversionsWhile the customer's account exists — needed for billing; deleted after the agreement ends
Partner postback delivery log90 days once delivered, 180 days if delivery failed
Unique-click keys in the cache24 hours, as a keyed hash of the IP address
Click-ID cookies (SDK, optional pixel cookie)30 days

What is collected on a click, why, and who it is shared with is described in our Privacy Policy and Data Processing Addendum.

FAQ

Tracking questions

The short answers. The docs have every parameter and response.

Do tracking links need cookies?
No. A click is identified by its click ID, which travels in the URL. A workspace can turn on an optional first-party pixel cookie on the tracking domain for pixel conversions; it is only set on partner-link redirects and never on transparent links. The landing-page SDK keeps the click ID in a first-party cookie on the advertiser's own site.
What counts as a unique click?
The first click from the same IP address and user agent on the same offer through the same partner within 24 hours. Unique clicks are the denominator of the conversion rate and the basis for per-click payouts, which also leave out clicks flagged as bots.
What happens to a conversion that arrives after the attribution window?
It is stored with status rejected and reason outside_window, so you can see it in the conversions list, but it is not paid and does not fire partner postbacks. You can still approve it by hand if you agree it should count.
Can one click convert more than once?
Once per event by default — a lead and a purchase from the same click are two conversions. Turn on “allow multiple” for an event such as a renewal to accept repeats. An advertiser transaction ID is only ever accepted once per offer.
How are Google Ads conversions matched without our click ID?
A postback may send gclid= instead of click_id=; the conversion is matched to the latest click in your workspace with that Google click ID. With parallel tracking, the landing-page SDK makes the same match in the browser and keeps the click ID for later events.
Can I check a postback before going live?
Yes. Add test=1 to any postback: the conversion goes through every check and the response shows what would have been stored — click, event, revenue, payout and the partner postbacks that would fire — without storing anything.

Start tracking on your own domain

Add a tracking domain, create an offer and send a test postback with test=1 before any traffic goes live.