Communitygithub.com

mardab96/tiktok-ads-claude-skills

Reconciles TikTok Ads Manager conversions with GA4, Shopify, CRM, or app analytics using a baseline-ratio method, separating click-through from view-through credit, attribution window and timezone differences, and real tracking drift (T07). Use when a TikTok media buyer or client says "TikTok says 200 sales, Shopify says 90", "GA4 does not show our TikTok conversions", "TikTok ROAS looks too good", "the gap got bigger this month", or "which number do we report to the client".

What is tiktok-ads-claude-skills?

tiktok-ads-claude-skills is a Claude Code agent skill that reconciles TikTok Ads Manager conversions with GA4, Shopify, CRM, or app analytics using a baseline-ratio method, separating click-through from view-through credit, attribution window and timezone differences, and real tracking drift (T07). Use when a TikTok media buyer or client says "TikTok says 200 sales, Shopify says 90", "GA4 does not show our TikTok conversions", "TikTok ROAS looks too good", "the gap got bigger this month", or "which number do we report to the client".

Works with✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/mardab96/tiktok-ads-claude-skills/tree/HEAD/attribution-gap-check-tiktok-ads

Ask in your favorite AI

Open a new chat with this agent skill pre-loaded.

Documentation

Attribution Gap Check: TikTok Ads

Use this skill when

TikTok-reported results and an independent source disagree, and someone wants to know whether the gap is normal, has moved, or hides a measurement problem. TikTok and independent tools count different things on different clocks, so a gap alone proves nothing. Change in the gap against a documented baseline is the signal this skill reads. Work from pasted exports; a TikTok for Business connector in Claude is optional.

Typical requests:

  • "TikTok shows 210 purchases this month and Shopify attributes 95 to TikTok. Who is right?"
  • "GA4 barely shows TikTok. Is the pixel broken?"
  • "The client's finance team does not trust TikTok ROAS."
  • "TikTok numbers jumped after we changed something, and orders did not."
  • "Which source should drive budget decisions?"

Do not use this skill when:

  • Primary events dropped while clicks held. Run pixel-events-api-check-tiktok-ads first (T10).
  • No baseline period exists with stable settings. Collect one, or run account-triage-tiktok-ads to scope what can be judged.
  • Question concerns TikTok Shop fees and margin. Run gmv-max-profit-check-tiktok-ads.
  • A CPA movement needs a cause and both sources moved together. Run cpa-spike-diagnosis-tiktok-ads.

Required input

Two sources, one definition, one clock. Without those, the output is needs_data.

From TikTok Ads Manager, a daily export for the baseline and current windows with columns as labelled in your export: Date, Campaign name, Optimization event, Cost, Conversions, Total purchase value or conversion value. If your reporting offers click-through and view-through conversion columns, include both.

From TikTok, also capture:

  • Attribution settings screenshot for the event (click-through window, view-through window, as labelled in your account).
  • Ad account timezone and currency.
  • Change log of attribution setting edits, Events API launches, or event remapping.

From the independent source, the same dates:

  • GA4: Date, Session source / medium or Session campaign, Key events (or Purchases), Purchase revenue. Start in Reports > Acquisition > Traffic acquisition or an Exploration, as labelled in your property. Note the reporting attribution model.
  • Shopify or order system: order date, order ID count, total, financial status, and the UTM or referrer field the store records. Exclude test, cancelled, and POS orders unless the business counts them.
  • CRM: lead created date, source field, qualified flag, qualified date.
  • App analytics: install or in-app event date, media source, event name.

From the business: event definition on each side, timezone of each source, deduplication status of each source, conversion lag, and the baseline period they consider normal.

Optional input

  • Total backend orders or leads per day, regardless of source. It supports a share-of-total ratio when UTM tagging is unreliable.
  • Spend split by objective or campaign type for both windows, to explain view-through mix shifts.
  • Consent banner change dates and regions.

Before analysis

  1. Pick a baseline period the team agrees was normal: settings unchanged, no tracking launches, no major promotion that changed buyer behaviour. Use several full weeks so one odd week cannot set the ratio, and record the exact dates.
  2. Check that UTM parameters on TikTok ads are present and consistent for both windows; a changed UTM template moves the independent side on its own.
  3. For lead generation, agree which CRM stage counts and how long it takes to reach it, then extend the lag to match.
  4. For app campaigns, confirm which measurement partner or app analytics source is the independent side and whether it deduplicates installs across channels.

Analysis workflow

  1. Write both definitions side by side: TikTok event name and what fires it; independent conversion and what counts it. Mark needs_data if one side is undefined.
  2. Align the clock. Same dates, same timezone, same currency. Record whether each source dates a conversion by ad interaction or by conversion time, as stated in its own settings or documentation; if unknown, mark needs_data and prefer weekly windows so edge days matter less.
  3. Align attribution. Record TikTok click-through and view-through windows, GA4 model, and Shopify or CRM source logic. GA4 and order systems cannot see a view without a click, so view-through credit only exists on the TikTok side.
  4. Choose the ratio and keep it fixed: TikTok conversions divided by independent TikTok-attributed conversions, or TikTok conversions divided by total backend conversions when tagging is weak. State which one.
  5. Compute the baseline ratio over the documented baseline period with settings unchanged, then the current ratio over a mature current window with lag days removed.
  6. Compute relative movement: current ratio divided by baseline ratio, minus one. Apply T07: escalate when the ratio moves at least 20% in either direction after dates, timezone, event definition, and attribution setup match.
  7. If click and view columns exist, recompute the ratio on click-through conversions only. A total ratio that crosses T07 while the click-only ratio stays inside it points at a view-through mix shift as the first explanation to test, ahead of tracking.
  8. Check change log and spend mix for explanations: attribution window edits, Events API launch, consent change, UTM template change, checkout domain move, spend shift toward reach-oriented campaigns.
  9. Assign a governing source per decision type and write it into the output, so the client knows which number answers which question.

Decision rules

ConditionEvidenceVerdictNext step
Dates, timezone, definition, or attribution differ between windows or sourcesads_export + analytics_exportneeds_dataRealign, then recompute; no comparison verdict
Ratio movement below 20% relative to baseline (T07)both exportsmonitorReport gap as stable; keep baseline
Ratio up at least 20% (T07), click-only ratio stableexport with click/view splitlikely view-through mix shiftExplain to client; no tracking escalation
Ratio up at least 20% (T07), Events API or event change in logchange_log + exportslikely double countingRoute to pixel-events-api-check-tiktok-ads
Ratio down at least 20% (T07), backend volume stableexports + shop_exportlikely TikTok signal lossRoute to pixel-events-api-check-tiktok-ads; hold budget cuts
Ratio down at least 20% (T07), UTM or redirect change in logchange_logpossible independent-side gain or lossCheck UTM template and landing redirects
Ratio moved, no explanation found after checksall sourcespossibleEscalate reconciliation with owner and date
No documented baselinenoneneeds_dataCollect a stable baseline period

Governing source by decision, as a house heuristic:

DecisionGoverning sourceReason
Creative or ad group comparison inside TikTokTikTok Ads ManagerSame attribution rules across rows
Channel budget split, client revenue reportingShopify, CRM, or backendDeduplicated across channels
Lead qualityCRM qualified stagePlatform leads include unqualified ones

Output format

## Attribution Gap Check: [account], [baseline dates] vs [current dates], [timezone]

**Verdict:** [shared verdict label] because [strongest evidence]
**Ratio used:** [TikTok / independent TikTok-attributed] or [TikTok / total backend]

### Source definitions
| Source | Conversion definition | Timezone | Attribution | Deduplicated | Lag |
|---|---|---|---|---|---|

### Ratio table
| Window | TikTok conversions | Independent conversions | Ratio | Click-only ratio |
|---|---|---|---|---|
| Baseline | | | | |
| Current | | | | |
Relative change: [x%] | T07: [met / not met / needs_data]

### Explanations checked
- [setting edit / Events API / consent / UTM / mix shift]: [found or not found, evidence tag]

### Decision table
| Finding | Evidence | Verdict | Severity | Confidence | Business impact | Next step |
|---|---|---|---|---|---|---|

### Which number answers which question
- [decision]: [source]

### Data gaps
- [missing item]: blocks [conclusion]

Practical example

Illustrative numbers for a fictional brand, not a benchmark. Baseline (four weeks, settings unchanged): TikTok reports 420 purchases, Shopify attributes 300 orders to TikTok by UTM. Baseline ratio 1.40. Current week: TikTok 118, Shopify 64. Current ratio 1.84, a 31.7% rise. T07 is met on totals.

Dates, timezone, and purchase definition match; attribution settings did not change. Export offers a click and view split. Baseline: 344 click-through and 76 view-through. Current: 78 click-through and 40 view-through. Click-only ratio moves from 1.15 to 1.22, a 6.3% rise, inside T07. Spend data shows a reach-oriented campaign launched this week.

Output: gap growth is likely a view-through mix shift, severity low, impact client_trust. No pixel escalation. Client note explains that TikTok credits views the store cannot see, and that budget decisions keep using Shopify-attributed orders. Baseline stays; reach campaign spend gets its own ratio line next week.

Common misreads

  • Treating any gap as a tracking bug. A stable gap is expected; only movement against baseline (T07) escalates.
  • Comparing TikTok totals with GA4 last-click TikTok sessions and forgetting view-through.
  • Mixing an ad account in one timezone with a store in another, which shifts late-night orders across dates.
  • Rebuilding the baseline after a setting change without saying so, which hides the change.
  • Counting cancelled, test, or refunded orders on the store side but not on the TikTok side, or the reverse.
  • Reading a GA4 drop after a consent or UTM change as a TikTok performance drop.
  • Comparing platform leads with CRM qualified leads without lag; qualified status arrives later.

Route to next

  • Ratio fell and TikTok events dropped against clicks: pixel-events-api-check-tiktok-ads (T10).
  • Ratio stable, CPA up on both sides: cpa-spike-diagnosis-tiktok-ads (T04).
  • Shop orders and fees in question: gmv-max-profit-check-tiktok-ads (T09).
  • Client-facing explanation of the gap: weekly-client-report-tiktok-ads, with the governing-source table attached.

Guardrails

  • Do not compare sources whose dates, timezone, definition, or attribution setup do not match; return needs_data.
  • Do not call one source correct and the other wrong; assign each to the decision it governs.
  • Do not change attribution settings, UTM templates, or tracking. Output stops at a recommendation.
  • Do not present TikTok view-through conversions as incremental sales without a controlled test.
  • Do not reset a baseline silently; record the reason and date.

Individual skills in this repo

This repo contains 18 individual skills — each has its own dedicated page.

mardab96/tiktok-ads-claude-skills

Runs an ordered, layer-by-layer triage of an unfamiliar TikTok Ads account (tracking, structure, learning, creative, bidding, landing page) and hands the first blocker to one named sibling skill. Use when the user inherits a TikTok account, onboards a client, asks where to start, says TikTok results dropped with no known cause, asks whether an account is ready to scale, or says "audit this TikTok account" without naming a problem.

mardab96/tiktok-ads-claude-skills

Checks whether a TikTok ad group's bidding strategy fits its goal, budget, and conversion volume using the labels TikTok currently lists (Maximum Results, Target Cost per Result, value options as shown in the account) and asks for a screenshot before mapping any legacy name. Use when someone types "Maximum Results or Target Cost per Result", "Cost Cap vs Lowest Cost on TikTok", "our target CPA is too low and delivery died", "bid strategy check", or "should we use hybrid bidding".

mardab96/tiktok-ads-claude-skills

Builds a staged TikTok budget plan with entry gates, one change per observation window, stop rules, and a recorded rollback, using T04, T05, T06, and T10 from the shared register. Use when someone types "can we scale this TikTok campaign", "double the budget on the winner", "how fast can I raise the daily budget", "scale before the sale", or "plan the budget increase for next week".

mardab96/tiktok-ads-claude-skills

Strips personal data from TikTok ad comments, clusters them into objections, questions, proof requests, and noise with counts, links each cluster to product facts, and drafts reply options and hook ideas for approval. Use when the user pastes TikTok comments and asks "what are people objecting to", "mine the comments for hooks", "draft replies to these comments", "what do viewers keep asking", or wants an FAQ and creative briefs built from comment themes.

mardab96/tiktok-ads-claude-skills

Diagnoses a TikTok CPA jump by splitting it into CPM, CTR, and CVR movement between a baseline and a current window with the cpa_decompose.py helper, then checking tracking, changes, mix, creative, and landing page in that order. Use when someone types "TikTok CPA doubled", "cost per purchase is up 40%", "why did CPA spike", "CVR dropped but clicks are fine", or "the client wants to know what broke".

mardab96/tiktok-ads-claude-skills

Detects whether a TikTok ad is tiring by comparing the last seven distinct dates with the preceding seven for frequency and CTR, using the bundled fatigue_scan.py script and a 14-date rule, then builds a control-versus-refresh queue. Use when the user asks "is this TikTok ad fatigued", says CTR is dropping while frequency climbs, wants to know when to refresh TikTok creative, or pastes a daily ad export and asks which ads to replace.

mardab96/tiktok-ads-claude-skills

Turns TikTok Shop and GMV Max reporting into a per-product cost-stack ledger with refunds, affiliate commissions, seller-funded coupons, referral fees, ad spend, COGS, and seller-borne shipping, using gmv_profit.py to flag any incomplete cost stack (T09). Use when a TikTok Shop seller or media buyer says "GMV Max ROI looks great but we are not making money", "is this product profitable on TikTok Shop", "check our TikTok Shop margins", "affiliate commissions are eating us", or before raising a GMV Max budget or ROI target.

mardab96/tiktok-ads-claude-skills

Scores the opening seconds of TikTok ads by computing 2-second and 6-second view rates and a thumb-stop proxy from ad-level export columns, comparing them with like-for-like ads, and scoring the script opening on a five-point rubric. Use when the user asks "which TikTok hook is weak", "what's my hook rate", "why do people scroll past my ad", wants a hook test plan, or pastes a transcript of the first seconds next to video-view columns.

mardab96/tiktok-ads-claude-skills

Sequences planned TikTok edits around the learning phase, separating urgent repairs from optimisation, naming which edits TikTok itself labels as affecting learning, and ordering one observable action at a time with rollback. Use when someone types "can I edit this ad group during learning", "will this reset the learning phase", "campaign is in learning, what can we change", "sequence these changes", or "the client wants five edits this week".

mardab96/tiktok-ads-claude-skills

Checks TikTok Pixel and Events API health from Events Manager screenshots and an Ads Manager export, covering event match signals, event_id deduplication between browser and server events, parameter completeness on value events, and primary-event drops against stable clicks (T10). Use when a TikTok media buyer says "purchases dropped but clicks are flat", "check our TikTok pixel", "is Events API deduplicating", "Events Manager shows a diagnostic warning", "TikTok value does not match our orders", or before any bid, budget, or scale call that depends on TikTok conversion data.

mardab96/tiktok-ads-claude-skills

Reviews TikTok Ads delivery split between the TikTok placement and Pangle or TikTok Ad Network inventory (as labelled in your Ads Manager), testing CPA and downstream quality per placement against T08 and keeping brand safety and suitability as a separate question. Use when a TikTok media buyer says "should we turn off Pangle", "where is our TikTok spend actually going", "automatic placement is eating budget", "network traffic converts badly", "is our TikTok ad showing next to unsafe content", or when a client asks for a placement and brand safety readout.

mardab96/tiktok-ads-claude-skills

Reviews TikTok Search Ads search terms and keywords and decides what to add as a keyword, add as a negative, or watch, with match handling as labelled in the account and a lag-aware waste floor. Use when someone types "review our TikTok search terms", "negative keyword list for TikTok Search Ads", "which queries should become keywords", "broad match is bringing junk", or "Search Ads spend with zero conversions".

mardab96/tiktok-ads-claude-skills

Audits a TikTok Smart+ campaign by mapping what Smart+ automates against what the media buyer still controls (creative supply, audience exclusions, conversion event, budget, bidding), then ranks the risks. Use when someone types "audit our Smart+ campaign", "what does Smart+ actually control", "Smart+ vs manual", "Smart+ spend is up but results are flat", or "can we trust Smart+ with this budget".

mardab96/tiktok-ads-claude-skills

Compares TikTok Spark Ads with brand-handle ads like-for-like by matching objective, optimization event, audience, offer, placements, bidding label, dates, and concept before any metric is read, then records authorization status and designs a matched test when no clean pair exists. Use when the user asks "do Spark ads perform better than our brand ads", "Spark vs non-Spark", "should we boost creator posts", "why is the creator ad cheaper", or pastes ad-level data with a format column and wants a verdict.

mardab96/tiktok-ads-claude-skills

Writes a complete creator-facing UGC brief for TikTok ads, with viewer situation, one message, three hook options, scene structure, claims allowed and forbidden, do and don't lists, disclosure, usage rights, and a Spark authorization note, plus an internal approval checklist. Use when the user says "write a UGC brief for TikTok", "brief a creator", "I need a creator script with approved claims", "what rights do I need to run this creator video as an ad", or has product facts and needs something a creator can film from.

mardab96/tiktok-ads-claude-skills

Finds mature TikTok campaigns, ad groups, and ads that spent past a CPA-based floor with zero reported conversions, after excluding rows still inside the conversion lag, using the wasted_spend.py helper. Use when someone types "where is the wasted spend on TikTok", "which ad groups burn budget with no conversions", "what can we cut before we scale", "zero conversion ads", or "clean this account before the client call".

mardab96/tiktok-ads-claude-skills

Writes the weekly TikTok Ads client report as a plain-language narrative, a scorecard against the client goal, and next-week decisions with owners and approvals, after an integrity check on tracking, lag, and learning status (T04, T05, T07, T10). Use when an agency or freelance TikTok media buyer says "write the weekly TikTok report", "client update is due", "explain this week's TikTok results to the client", "what do we tell the client about CPA going up", or "set up a repeatable TikTok report format".

mardab96/tiktok-ads-claude-skills

Turns one proven TikTok ad into N distinct angle scripts, each with hook, body beats, CTA, on-screen text, and a shot list, after deconstructing why the winner worked and checking every claim against product facts and rights. Use when the user says "remix my winning TikTok ad", "give me new angles on this winner", "I need five scripts like this one", "my best ad is wearing out, what next", or pastes a winning transcript and asks for variations.

Related Skills