Attribution as a Causal Inference Problem
Attribution is not measurement — it is causal inference under incomplete information. The fundamental question is: did this ad cause this purchase, or did the purchase happen despite the ad?
TikTok’s attribution system cannot answer that question. It answers a weaker one: did this buyer interact with this ad within a defined window before purchasing? The gap between those two questions is the measurement bias baked into every ROAS figure.
Known structural biases:
- Organic cannibalization: View-through attribution captures buyers already in the purchase funnel via organic search, affiliate, or direct. The ad gets credited for a conversion it did not cause.
- Selection bias in click-through: Buyers who click ads skew toward higher purchase intent. Click-attributed ROAS overstates the causal lift from the ad itself.
- No holdout control: TikTok Ads Manager provides no built-in incrementality testing. Attributed revenue cannot be isolated from counterfactual revenue without running manual holdout experiments.
Use attributed revenue as a directional signal. Treat it as an upper bound on incremental revenue, not a measurement of it.
Click-Through vs View-Through Signal Taxonomy
| Signal | Trigger | Attribution Window | Causal Fidelity | Over-Attribution Risk |
|---|---|---|---|---|
| Click-through | Buyer clicks ad unit | 7 days post-click | Higher — explicit intent signal | Moderate |
| View-through | Buyer views ad, no click | 1 day post-view | Lower — passive exposure only | High |
View-through attribution is the primary source of inflated ROAS. A buyer who viewed an ad and purchased the next day through organic search is attributed to the ad. The 1-day window is narrow by design, but on high-frequency categories (consumables, replenishment SKUs) the overlap with organic purchase cycles is significant.
View-through attribution on replenishment SKUs with purchase cycles under 30 days produces systematically inflated ROAS. Cross-reference attributed revenue against settlement revenue for the same SKU cohort to size the overcount.
Fixed Attribution Windows — Platform Constraints
TikTok’s attribution windows are fixed at the platform level:
- Click-through: 7 days post-click
- View-through: 1 day post-view
These are not configurable in TikTok Ads Manager or in AxonRow. All campaign comparisons must use the same attribution window. Switching windows retroactively changes every historical metric.
Last-touch model mechanics: When multiple qualifying interactions exist within their respective windows, TikTok assigns 100% credit to the most recent one. A buyer who clicked Ad A on day 1 and viewed Ad B on day 6 — Ad B receives full attribution. First-touch and linear models are not available.
ROAS and Margin-Adjusted True ROAS
Nominal ROAS measures attributed revenue efficiency against spend:
ROAS = Attributed Revenue / Ad Spend
Nominal ROAS is directionally useful for campaign-to-campaign comparison within the same product category. It is not a profit signal. A ROAS of 4.0 on a 15% gross margin product generates less profit than a ROAS of 2.0 on a 60% gross margin product.
True ROAS incorporates COGS and platform fees to produce a profit-adjusted return:
True ROAS = (Attributed Revenue - COGS - Platform Fees) / Ad Spend
Where platform fees = TikTok commission + fulfillment fees + returns, sourced from settlement transaction data (Finance API, not Order API).
True ROAS breakeven = 1 / Gross Margin %
At 30% gross margin, True ROAS breakeven is 3.33. Campaigns below this threshold are destroying margin regardless of nominal ROAS.
True ROAS below 1.0 means ad spend exceeds gross profit generated. Nominal ROAS can be above 2.0 simultaneously if margins are thin. Never optimize on nominal ROAS alone for low-margin SKUs.
Over-Attribution Bias — Sizing the Error
Organic cannibalization produces systematic over-attribution. Estimation approach:
- Identify SKUs with significant organic traffic (bestselling rank, affiliate creator volume)
- Compare attributed revenue (Ads Manager) against settlement revenue (Finance API) for the same SKU + time window
- The delta = over-attributed revenue from organic buyers captured in the attribution window
This does not produce an incrementality estimate — it sizes the ceiling of the measurement error. Actual incrementality requires holdout experiments.
Period comparison distortion: if attributed revenue for a given campaign is still accumulating (buyers within the 7-day click window have not yet completed their purchases), the period is not closed. Comparing a closed period against an open one will show the open period as underperforming. Allow 7 days of attribution lag before treating a campaign’s ROAS as final.
Attribution Lag Effects on Period Comparisons
Attribution lag is deterministic, not random:
- Click-through window: up to 7 days of lag
- View-through window: up to 1 day of lag
Operational consequences:
| Scenario | Effect |
|---|---|
| Campaign paused today | Continues accumulating attributed revenue for 7 more days from prior clicks |
| Week-over-week comparison on Monday | Current week is 0–1 days closed; prior week is fully closed — asymmetric comparison |
| Budget cut mid-month | Month ROAS will rise in the following 7 days as deferred attribution resolves against lower spend |
Always add a 7-day attribution buffer before declaring a campaign’s performance period closed.
GMV Max Campaign Reporting Dimensions
GMV Max campaigns have no ad group layer. Reporting dimensions available:
- Campaign — top-level spend, attributed revenue, ROAS
- Product — per-SKU attributed revenue and ROAS within a campaign
- Creative — video and image asset performance
- Livestream — live shopping session attribution
- Duration — time-slot breakdown within a campaign period
Ad group-level reporting does not exist for GMV Max. Granularity below campaign level is product and creative dimensions only. Queries expecting ad group IDs will return null.
AxonRow surfaces campaign and product dimensions. Product-level True ROAS is computed by joining campaign attributed revenue with settlement transaction SKU data — the only path to per-product margin-adjusted ROAS without manual export.