TikTok Ads Manager shows 150 purchases this week. GA4 shows 40 purchases from TikTok. This 3.75x discrepancy isn’t a bug — it’s caused by fundamental differences in how TikTok and GA4 attribute conversions. Understanding these differences prevents panic and helps you make better optimization decisions. This guide explains the systematic reasons for TikTok vs GA4 discrepancies and how to create a reconciliation framework.
Why TikTok and GA4 Attribution Differ
- Attribution window: TikTok default is 7-day click + 1-day view. GA4 uses last-click with no view-through. Most of TikTok’s “extra” conversions come from the 7-day window and view-through.
- Cross-device: TikTok tracks users across devices via their TikTok account. GA4 tracks device-level sessions. A user who sees an ad on mobile TikTok and buys on desktop appears in TikTok’s numbers but may show as “direct” or “organic” in GA4.
- iOS opt-outs: Post-iOS 14, GA4 can’t track users who opted out of tracking. TikTok uses statistical modeling to estimate these conversions. GA4 shows 0; TikTok shows an estimate.
- View-through attribution: Users who saw your TikTok ad but never clicked still count as conversions in TikTok’s 1-day view window. GA4 only counts users who clicked.
Quantifying Each Source of Discrepancy
-- GA4 BigQuery: TikTok-attributed purchases
SELECT
DATE(PARSE_TIMESTAMP('%Y%m%d', event_date)) as date,
COUNT(DISTINCT (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'transaction_id')) as ga4_tiktok_purchases,
SUM((SELECT value.float_value FROM UNNEST(event_params) WHERE key = 'value')) as ga4_tiktok_revenue
FROM `project.dataset.events_*`
WHERE event_name = 'purchase'
AND (
traffic_source.source LIKE '%tiktok%'
OR (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'source') LIKE '%tiktok%'
)
AND _TABLE_SUFFIX >= FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAYS))
GROUP BY date
ORDER BY date;
-- Compare with TikTok Ads Manager conversions for same period