Communitygithub.com

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".

¿Qué es tiktok-ads-claude-skills?

tiktok-ads-claude-skills is a Claude Code agent skill that 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".

Compatible con✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/mardab96/tiktok-ads-claude-skills/tree/HEAD/cpa-spike-diagnosis-tiktok-ads

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

CPA Spike Diagnosis

Use this skill when

CPA moved and the buyer needs arithmetic before a story. This skill decomposes the move into delivery cost (CPM), click appeal (CTR), and post-click conversion (CVR), applies T04 as a triage label, and then works the causes in dependency order. It never names a cause from the arithmetic alone.

Common requests:

  • "CPA doubled week over week. What happened?"
  • "Cost per lead is up 45%. Tracking, creative, or market?"
  • "CPM is fine, CTR is fine, CVR collapsed. Now what?"
  • "Zero conversions today on a campaign that always converts."
  • "Client asks why TikTok got expensive. Need an answer today."

Do not use this skill for these jobs:

  • Event or Pixel setup review with no CPA question: pixel-events-api-check-tiktok-ads.
  • Reported versus independent counts: attribution-gap-check-tiktok-ads.
  • Ranking waste rows: wasted-spend-finder-tiktok-ads.
  • Unmapped account: account-triage-tiktok-ads.

Required input

Work from pasted exports and screenshots. Claude's TikTok for Business MCP connector is optional.

Required

  • CSV with columns period, cost, impressions, clicks, conversions. period must read exactly baseline or current in lower case. Several rows per period (for example daily rows) are summed by the script.
  • Two mature windows of equal length with a similar weekday mix, both ending after the conversion lag has passed.
  • Primary event name, attribution setting, timezone, currency, target CPA.
  • Dated change log covering the baseline and the current window.
  • Events Manager diagnostics capture.
  • Landing page and site release dates.

Optional

  • The same export split by campaign, ad group, or ad, for the mix check.
  • frequency, creative launch dates, audience edits.
  • Independent order or lead report for the same dates.

Export route: Reporting at campaign, ad group, or ad level with date breakdown, then change history or campaign activity history. See ../tiktok-ads-shared/references/getting-your-data.md. Never infer a change event from a chart alone.

Before analysis

  1. Establish that the spike is real. Each window needs at least 10 reported conversions for T04 to escalate; below that the script prints insufficient_volume.
  2. Confirm both windows use the same primary event, objective, and attribution setting. A changed definition makes the two CPAs incomparable.
  3. Drop days inside the conversion lag and any partial day. A recent window that is still collecting conversions is the commonest false spike.
  4. Mark ad groups launched inside the current window. They are learning-sensitive (T05) and can lift CPA without any decay elsewhere.
  5. Use the click column consistently across both windows, since CTR and CVR both depend on which click count is exported.

Analysis workflow

  1. State both windows with dates and lengths. If they are unequal or inside the lag, stop with needs_data.
  2. Run the helper from the skill folder: python3 ../tiktok-ads-shared/scripts/cpa_decompose.py cpa.csv
  3. Read the identity. CPA equals CPM divided by 1000, divided by CTR times CVR. CVR here is conversions divided by clicks. Compute current over baseline for CPM, for CTR (inverted), and for CVR (inverted); the three multiply to the CPA ratio.
  4. Express each factor as a share of the CPA move: natural log of the factor ratio divided by natural log of the CPA ratio. Shares can be negative when a factor offsets the rise, and they describe arithmetic only.
  5. Read the T04 label the script prints (see Decision rules).
  6. Check tracking first: T10 pattern, diagnostics, event changes, site releases. A uniform drop across campaigns points at measurement before delivery.
  7. Check the change log against the date the move began: budget, bid strategy, audience, creative, and event edits, and whether the effect sits in the edited entities.
  8. Check mix using conversion yield, never an arithmetic spend-weighted mean of CPA. Let w_i be segment i's baseline share of spend and y_i its current conversions divided by current spend. Counterfactual CPA = 1 / sum(w_i * y_i). A segment with spend and zero conversions has y_i = 0; a segment with no current spend has no observable yield, so request comparable data. If total weighted yield is zero, CPA is undefined and needs tracking review. Compare this fixed-mix CPA with baseline and actual current CPA: near baseline suggests a mix shift; near current suggests within-segment deterioration. Illustrative example: unchanged segment CPAs 20 and 80, baseline spend 800/800 and current spend 400/1600 give baseline CPA 32, current CPA 50, fixed-mix CPA 32, so the rise comes from mix.
  9. Check creative (CTR led move) then landing page (CVR led move with steady CTR), then auction (CPM led move). Use Smart+ allocation notes when the campaign is automated.
  10. State the unexplained residual and the ordered action list with what to hold.

Decision rules

Script contract: the only argument is the CSV path. It prints one line per window with cost, impressions, clicks, conversions, cpm, ctr, cvr, cpa, then cpa_change_pct, T04_verdict, and a read line. Rows with other period values are ignored. A missing baseline or current window exits with an error. Exit code 2 covers unreadable files and missing columns.

T04 label printedMeaningVerdictNext step
escalateCurrent CPA at least 30% above baseline, each window at least 10 conversions (T04)likely real move, cause unknownWork tracking, change log, mix, creative, page in order
below_ruleMove under 30%, or CPA fellmonitorKeep windows, re-run next period
insufficient_volumeA window has under 10 conversionsneeds_dataWiden windows, never diagnose
check_trackingCurrent conversions are zero, CPA prints n/aneeds_dataCapture Events Manager and diagnostics; no tracking claim from CPA alone
Pattern in the factorsArea to test firstVerdict if evidence is missingNext step
Conversions down at least 30% with clicks within 10% (T10)Event deliverypossiblepixel-events-api-check-tiktok-ads
CVR led, CTR and CPM steadyLanding page, offer, checkout, eventpossiblelanding-page-match-tiktok-ads after tracking clears
CTR led, CVR steadyCreative engagement, audiencepossiblecreative-fatigue-detector-tiktok-ads (T01 floors), hook-rate-scorer-tiktok-ads
CPM led, CTR and CVR steadyAuction pressure, audience or placement mixpossibleplacement-review-tiktok-ads (T08), seasonality check
Stable segment CPAs, shifted spend weightsMixlikely once the reweight shows itBudget or audience edits in the change log
Dated change within days before the move, effect in that entityDeliberate editconfirmed when the entry and the effect both appearlearning-phase-guard-tiktok-ads before reverting
New ad groups in the windowLearning (T05)monitorHold optimization edits until learning clears
Reported moves, independent report flatAttributionpossibleattribution-gap-check-tiktok-ads (T07)

A statement of arithmetic is confirmed (for example CPM fell, so auction cost did not drive this rise). A statement of cause needs a dated entry, a diagnostics capture, or a release date; otherwise it stays possible or likely. Prefer a few confirmed causes with a labelled residual over a full list.

Output format

Fill this template.

## CPA diagnosis: [campaign or account], [currency], [timezone]
Baseline: [dates, n days] | Current: [dates, n days] | Lag cleared: [yes/no] | Event: [name]
Command run: [exact command]

### Arithmetic
| Period | Cost | Impr | Clicks | Conv | CPM | CTR | CVR | CPA |
|---|---|---|---|---|---|---|---|---|
T04 label: [label] | CPA change: [%] | Factor shares: CPM [%], CTR [%], CVR [%]

### Cause tree (ordered)
| Finding | Evidence | Verdict | Severity | Confidence | Business impact | Next step |
|---|---|---|---|---|---|---|

### Ruled out
[causes excluded and the evidence that excluded them]

### Residual
[what remains unexplained, never spread across causes]

### Ordered action and hold list
[fix order by dependency; edits that wait, with prerequisite]

### Data gaps
[missing diagnostics, change log, segment export, and the verdict each would firm up]

Practical example

Illustrative numbers only. Two 7-day windows, target CPA 50 USD. Input rows: baseline,4200,520000,5200,84 and current,4500,600000,4800,56.

period    cost     impressions  clicks  conversions  cpm   ctr    cvr    cpa
baseline  4200.00  520000       5200    84.00        8.08  1.00%  1.62%  50.00
current   4500.00  600000       4800    56.00        7.50  0.80%  1.17%  80.36
cpa_change_pct:  60.7%
T04_verdict:     escalate

CPA rose 60.7%. Factor ratios: CPM 0.93, CTR 0.80, CVR 0.72. In log shares, CVR carries about 69% of the move, CTR about 47%, and cheaper CPM offsets about 16%. Shares can exceed 100% in total when one factor offsets another.

Cause tree: CPM fell, so auction cost is confirmed as not the driver. Conversions fell 33% while clicks fell 8%, which meets the T10 pattern, so event delivery is possible, high severity, measurement impact, and diagnostics are missing (needs_data). A product page template was released on day 3 of the current window and a new creative batch on day 1, so landing page is possible for the CVR share and creative is possible for the CTR share (frequency not exported).

Ordered action: capture Events Manager and run an event test first, split CVR by day around the release date, then run the T01 check on the new batch. Hold budget and bid edits until tracking is verified. Residual: not yet quantified because daily rows are missing.

Common failure modes

  • Reading escalate as a diagnosis. T04 is a triage label, not a cause.
  • Comparing windows of different length or weekday mix.
  • Including days inside the conversion lag, which inflates CPA.
  • Calling tracking broken from CPA alone. T10 plus diagnostics are the evidence.
  • Treating factor shares as additive causes. Several causes can sit behind one factor.
  • Blaming the auction when CPM did not rise.
  • Missing learning ad groups: new ad groups lift CPA while they explore (T05).
  • Blaming Smart+ for a move that came from an event change. Check the event first.
  • Reading platform conversions as sales without an independent comparison.

Route to next

Event delivery: pixel-events-api-check-tiktok-ads. Reported versus independent gap: attribution-gap-check-tiktok-ads. Creative: creative-fatigue-detector-tiktok-ads, hook-rate-scorer-tiktok-ads. Page: landing-page-match-tiktok-ads. Placement: placement-review-tiktok-ads. Edits waiting on learning: learning-phase-guard-tiktok-ads. Waste rows: wasted-spend-finder-tiktok-ads. Automated campaign: smart-plus-audit-tiktok-ads.

Guardrails

  • Do not make a live account, budget, bid, placement, tracking, Shop, page, or creative change.
  • Do not diagnose a window that sits inside the conversion lag or holds under 10 conversions.
  • Do not name a cause from the decomposition alone.
  • Do not call tracking broken from CPA alone; ask for the Events Manager capture.
  • Do not recommend bid or budget reactions to a CPA that tracking has not been shown to report correctly.
  • Do not present platform-reported conversions or GMV as profit without the supplied cost stack.
  • Do not hide missing dates, lag, attribution settings, or conversion definitions.
  • Do not claim a result before a controlled measurement exists.

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

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".

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

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.

Skills relacionados