Tracking guide
Attribution
How a conversion is matched to a click, the attribution windows and timing guards, and the model options.
Attribution answers "which click earned this conversion". Metrixed is deterministic first: it only falls back to fuzzy methods when you allow them, and it always records which method matched.
The matching ladder for web and S2S conversions
Ingest walks these rungs in order and uses the first that resolves (packages/go-shared/attribution):
| # | Rung | Matches by |
|---|---|---|
| 1 | click_id | The id in the postback, pixel or event (click_id, clickid, transaction_id, ...). |
| 2 | Session cookie | The _dtk cookie the web SDK or /px call carries. |
| 3 | txn_id reuse | A conversion with the same transaction id already exists: it is a duplicate or a status update, not a new conversion. |
| 4 | Coupon | A coupon code assigned to a partner. |
| 5 | Device id | Hashed device ids for installs and app events. |
| 6 | Probabilistic | IP plus user agent within 24 hours, confidence 0.6. The rung exists in the library but the web and S2S endpoints do not turn it on today; mobile installs have their own opt-in probabilistic rung. |
| 7 | Impression (view-through) | An impression within view_through_lifespan_minutes when the offer enables view-through. |
| 8 | Unmatched | Stored, visible and assignable. |
The rung that matched is stored with the conversion (attribution.touch: click, impression, coupon, probabilistic, none).
Attribution priority per offer
Offer ▸ Tracking ▸ Attribution priority (offers.attribution_priority) reorders the click-finding rungs and
can add two more. Pick any of click_id, cookie, fingerprint, email, coupon in the order to try; empty keeps
the default ladder above (click id, cookie, coupon).
fingerprint: the last click on the offer with the same IP and user agent (sha256) within 24 hours. The edge stores the fingerprint only for offers that list it.email: the last click that carried the same email (email=orem=on the tracking link, hashed at the edge and never stored in clear) within the offer's attribution window; the postback sendsemailoremail_hash.
The method that found the click is stored on the conversion as attribution_match and is a report dimension
(Attribution match), so you can see how many conversions each method attributed.
Windows and timing guards
Per offer, applied to the matched click:
| Setting | Effect | Rejection reason |
|---|---|---|
session_duration_hours | Maximum time from click to conversion (the attribution window). | expired_session |
ctit_min_seconds | Minimum click-to-conversion time. | ctit_too_short |
ctit_max_hours | Maximum click-to-conversion time. | ctit_too_long |
goal kpi_window_days | Window for a goal that must happen within N days of the click. | kpi_window_exceeded |
view_through_lifespan_minutes, view_through_min_seconds | Impression window and minimum dwell for view-through. |
Conversions may be backdated with ts (up to roughly 400 days in the past and 5 minutes into the future), but they still have to fit the windows above relative to the click. A click flagged invalid at click time is not credited: the conversion is rejected with invalid_click unless it is a test.
Models
The offer's attribution_method (last_touch by default, also first_touch, linear, position_based, time_decay) is stored on every conversion as its attribution model and is available in reports and postbacks (attribution_method macro). The conversion itself is credited to the single click that the ladder matched, and payout goes to exactly that click's partner; multi-touch apportioning is not performed.
Mobile installs
Installs have their own ladder with confidence scores, because the identifiers differ. See install attribution: install referrer, device id, click id and deep link, self-attributing network claims, preload, probabilistic (opt-in), organic, plus reinstall and re-attribution classification and the click-injection guard.
What is stored
Each conversion keeps its click id and click timestamp, the click-to-install time (ctit_seconds), the entities resolved from the click (offer, partner, landing page, creative, SmartLink, advertiser), the attribution touch, and the method family (postback, pixel, iframe, js, sdk, s2s, manual, import). The full schema is conversion_created.