Tiktok Ads model

Campaign performance daily

Daily campaign performance with the rates Ads Manager shows: CTR, CPC, CPM, cost per conversion and Complete payment ROAS.

Grain
date_day x account_id x campaign_id
Built from
  1. 5
    Raw tables
  2. 5
    Staging
  3. 2
    Core
  4. 1
    Analytics
Reads from Tiktok Ads
adad_daily_reportad_groupadvertisercampaign
Ships as
Weld and dbt SQL, open source on GitHub
core.tiktok_ads.campaign_performance_daily
1-- core.tiktok_ads.campaign_performance_daily
2-- Daily campaign performance with the rates Ads Manager shows: CTR, CPC, CPM,
3-- cost per conversion and Complete payment ROAS.
4--
5-- Grain: date_day x account_id x campaign_id. Currency: the advertiser's.
6-- Depends on: core.tiktok_ads.ad_performance_daily
7--
8-- Built by summing ads; spend, impressions, clicks and conversions add up from
9-- ad to campaign in TikTok's own reports. Reach does not (one person can see two
10-- ads), so it is left out here rather than summed into a wrong number.
11--
12-- conversions add up the optimisation events of each ad group. In a campaign
13-- whose ad groups optimise for different events, that total mixes event types,
14-- exactly as the campaign row in Ads Manager does. Use
15-- ad_group_performance_daily to keep them apart.
16--
17-- Rates are ratios of sums at this grain. To report a week or a month, re-sum the
18-- base columns and divide again; averaging the daily rates weights a quiet day the
19-- same as a busy one.
20
21SELECT
22    date_day,
23    account_id,
24    account_name,
25    currency,
26    campaign_id,
27    campaign_name,
28    campaign_objective,
29
30    SUM(spend)              AS spend,
31    SUM(impressions)        AS impressions,
32    SUM(clicks)             AS clicks,
33    SUM(conversions)        AS conversions,
34    SUM(conversion_value)   AS conversion_value,
35    SUM(complete_payments)  AS complete_payments,
36    SUM(app_purchases)      AS app_purchases,
37    SUM(app_purchase_value) AS app_purchase_value,
38    SUM(video_views)        AS video_views,
39    COUNT(DISTINCT ad_id)   AS active_ads,
40

This model and the 7 it depends on. Deploy them together; refs like {{staging.…}} resolve to the matching folders in Weld, and the dbt view uses source() and ref().

Notes

How it counts. And where it stops.

Built by summing ads; spend, impressions, clicks and conversions add up from ad to campaign in TikTok's own reports. Reach does not (one person can see two ads), so it is left out here rather than summed into a wrong number. conversions add up the optimisation events of each ad group. In a campaign whose ad groups optimise for different events, that total mixes event types, exactly as the campaign row in Ads Manager does. Use ad_group_performance_daily to keep them apart. Rates are ratios of sums at this grain. To report a week or a month, re-sum the base columns and divide again; averaging the daily rates weights a quiet day the same as a busy one.

Raw tables it reads

  • raw.tiktok_ads.ad
  • raw.tiktok_ads.ad_daily_report
  • raw.tiktok_ads.ad_group
  • raw.tiktok_ads.advertiser
  • raw.tiktok_ads.campaign

Put Tiktok Ads in front
of your agents.

Connect Tiktok Ads, deploy the models, and ask questions in Claude, Cursor or ChatGPT. Free for 14 days, no credit card.