Communitygithub.com

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

What is tiktok-ads-claude-skills?

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

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

Ask in your favorite AI

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

Documentation

Wasted Spend Finder

Use this skill when

A buyer needs a defensible list of rows that look like wasted spend, with recent data kept out of the verdict and every candidate tied to a reversible action. Output is a review list and an estimated reducible scenario, never a saving.

Common requests:

  • "Find the wasted spend in this TikTok account."
  • "Which ad groups spent twice our CPA with nothing to show?"
  • "What do we trim before raising budget?"
  • "Client says CPA is high. Where is the leak?"
  • "Run the waste check with a seven day lag."

Do not use this skill for these jobs:

  • Search term level cleanup: search-ads-keyword-review-tiktok-ads.
  • Placement comparisons: placement-review-tiktok-ads.
  • A CPA that jumped and needs a cause: cpa-spike-diagnosis-tiktok-ads.
  • Zero conversions that might be a tracking fault: pixel-events-api-check-tiktok-ads first.
  • Ranking creatives for refresh: creative-fatigue-detector-tiktok-ads.

Required input

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

Required

  • Export with exactly these columns for the script: date, level, name, spend, conversions. Dates in ISO form YYYY-MM-DD. Extra columns are ignored.
  • Target CPA for the primary event, in the account currency.
  • Conversion lag in days, from the buyer or from the account's own history. It is required, with no default.
  • Primary event name and attribution setting.
  • Events Manager diagnostics capture, and a note on any ad group that is a deliberate test.

Optional

  • campaign, ad group, objective, impressions, clicks per row for context.
  • Learning status per ad group (screenshot).
  • Independent order or lead report for the same dates.
  • Margin or lead value, when the target CPA was derived rather than given.

Export route: Reporting or the campaign table at the level you need, spend and reported conversions columns on, date range in the filename. See ../tiktok-ads-shared/references/getting-your-data.md.

Before analysis

  1. Pick one level per run (campaign, ad group, ad, or placement). A child row rolls into its parent, so mixed levels double count.
  2. Decide how to shape rows. Each row is judged on its own, so one row per entity over a mature window works, while daily rows would each need to cross the floor in a single day. Date each aggregated row with the last day of its window.
  3. Keep a block of recent rows, daily or aggregated, with the export's real last date. Recency is measured from the newest date in the file, and the helper has no way to see today.
  4. Check how the export attributes conversions to dates (click or impression date versus conversion date), as labelled in your Ads Manager. If it is unknown, the lag treatment is needs_data.
  5. Reconcile: sum of spend per level should match the Ads Manager total for the same dates. Cells the script cannot parse count as zero.
  6. Exclude non-conversion objectives such as Reach or Video views from a CPA floor.

Analysis workflow

  1. Confirm the primary event, target CPA, lag, level, and window. Missing target CPA or lag means needs_data and no run.
  2. Clean the CSV: remove currency symbols other than $, fill blank conversions with a real value or drop the row, and keep tab characters out of names.
  3. Run the helper from the skill folder: python3 ../tiktok-ads-shared/scripts/wasted_spend.py waste.csv --target-cpa 40 --conversion-lag-days 7
  4. Read the tab separated output (see Decision rules) and set aside excluded_recent rows as needs_data.
  5. For each review_candidate, check diagnostics, test purpose, learning status (T05), and Smart+ allocation before any verdict.
  6. Review converting rows by hand. No row with conversions is flagged by the helper, so weak but converting rows need a manual pass against target CPA.
  7. Group candidates by reversible action, least disruptive first: tighten exclusions or negatives, swap creative, trim budget, pause only when confidence is high and the ad group is past learning.
  8. Compute reducible scenarios per level and per confidence tier. Do not sum across levels or tiers.
  9. Write the approval queue with an owner and a re-check date after the lag.

Decision rules

Script contract: arguments are the CSV path, --target-cpa (number), and --conversion-lag-days (integer), both required. Cutoff is the newest date in the file minus the lag. A row dated after the cutoff is excluded_recent; a row dated exactly on the cutoff is judged. A judged row with spend at or above 1.5 times target CPA and zero conversions is review_candidate (T03). Everything else judged is not_flagged. Output columns: level, name, spend, conversions, cpa (n/a when conversions are zero, otherwise an unrounded number), classification, estimated_reducible_spend (equals spend for a candidate, otherwise 0.00). Errors print to stderr and exit 2: missing columns, non ISO dates, unreadable file.

Script label or conditionExtra checkVerdictNext step
review_candidate, diagnostics clean, no documented test, ad group past learningNone openlikely wasteapproval_needed: trim or exclude, pause only at high confidence
review_candidate but event diagnostics show a drop (T10)Tracking suspectholdpixel-events-api-check-tiktok-ads
review_candidate inside learning (T05)Learning-sensitivemonitorRe-run after about 25 results or 7 days since entry
review_candidate for a documented exploration cellStrategic rolemonitorRecord test end date and exit rule
review_candidate for a lead account with late CRM qualityOffline value unseenpossibleAsk for CRM-qualified outcomes before cutting
excluded_recentInside the lagneeds_dataRe-run after the lag clears
not_flagged, conversions above zero, CPA far above targetManual reviewpossibleCompare against T04 style baseline before acting
not_flagged, spend under the floorToo little spendmonitorNo action, keep the row in the next export
Target CPA missing or derived without marginFloor unreliableneeds_dataObtain target before any run

not_flagged is not proof of efficiency. It means no zero-conversion floor breach on mature data.

Manual scenario for weak converters, outside the script and a house heuristic: spend minus conversions times target CPA, floored at zero. Report it as a separate line from the script total.

Value-optimized campaigns judged on return rather than CPA need a CPA equivalent from margin. Without it the T03 floor is needs_data.

Output format

Fill this template.

## Waste review: [account], [level], window [start to end], [currency], [timezone]
Target CPA: [value] | T03 floor: [1.5 x target] | Lag: [days] | Latest date in file: [date] | Cutoff: [date]
Command run: [exact command]  Rows: [n judged], [n excluded_recent], [n flagged]

### Waste review ledger
| Level | Name | Window end | Maturity | Spend | Conv | CPA | Diagnostic status | Strategic role | Verdict | Reducible scenario | Approval owner |
|---|---|---|---|---|---|---|---|---|---|---|---|

### Reducible scenario (not a saving)
High confidence: [sum] | Review tier: [sum] | Not summed across levels

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

### Re-check plan
[date after lag, metric, rollback if conversions appear late]

### Data gaps
[missing diagnostics, attribution detail, target source, and the verdict each would firm up]

Practical example

Illustrative numbers only. Target CPA 40 USD, lag 7 days, so the T03 floor is 60 USD. Ad group rows are aggregated over a mature window and dated with its last day.

level     name                  spend    conv   cpa               classification    reducible
ad_group  Broad interest 25-34  95.00    0.00   n/a               review_candidate  95.00
ad_group  Lookalike purchasers  410.00   9.00   45.55555555555556 not_flagged       0.00
ad_group  Retargeting 7d        55.00    0.00   n/a               not_flagged       0.00
ad_group  New UGC test          120.00   0.00   n/a               excluded_recent   0.00
ad        Hook B v2             78.00    0.00   n/a               review_candidate  78.00
campaign  Autumn sale           1020.00  24.00  42.5              excluded_recent   0.00

Reading: the newest date in the file is 2026-09-20, so the cutoff is 2026-09-13. Broad interest 25-34 spent 95 USD with no conversions and is likely waste once diagnostics are clean, medium severity, spend impact. Retargeting 7d spent 55 USD, under the floor, so it stays monitor. New UGC test has no verdict yet because its spend is recent. Hook B v2 is an ad level row and its 78 USD is not added to the ad group total, so the reducible scenario is 95 USD at ad group level and 78 USD at ad level, reported apart. Autumn sale has a healthy-looking 42.50 CPA but is also recent, so it is needs_data rather than cleared.

Lookalike purchasers converts at 45.56, above target but with conversions, so it is a manual possible item, not a script finding.

Common failure modes

  • Feeding daily rows and expecting cumulative detection. Each row needs to cross the floor alone.
  • Aggregating everything to the export's last date. Every row then falls inside the lag and the run flags nothing.
  • Pasting spend with symbols other than $. A cell parses as zero, which hides spend and can invent zero-conversion rows when conversions is blank.
  • Summing campaign, ad group, and ad scenarios into one headline.
  • Cutting an ad group that is still inside learning. Pausing an ad group is itself something TikTok lists as affecting the learning phase.
  • Calling zero conversions waste when the event stopped firing. Check diagnostics first.
  • Cutting a Smart+ ad that TikTok already starved or paused. Allocation is automated, so route to smart-plus-audit-tiktok-ads.
  • Treating the reducible scenario as a forecast or a guaranteed saving.

Route to next

Search terms: search-ads-keyword-review-tiktok-ads. Placements: placement-review-tiktok-ads. Tracking suspicion: pixel-events-api-check-tiktok-ads. CPA movement: cpa-spike-diagnosis-tiktok-ads. Moving freed budget: budget-scaling-planner-tiktok-ads. Unmapped account: account-triage-tiktok-ads.

Guardrails

  • Do not make a live account, budget, bid, placement, tracking, Shop, page, or creative change.
  • Do not label a row waste while it sits inside the conversion lag.
  • Do not recommend a pause where a trim or exclusion reaches the same goal.
  • Do not call a review_candidate waste before diagnostics, test purpose, and learning status are checked.
  • Do not sum reducible scenarios across levels or confidence tiers.
  • 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

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

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