Communitygithub.com

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.

tiktok-ads-claude-skills とは?

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

対応✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/mardab96/tiktok-ads-claude-skills/tree/HEAD/spark-vs-brand-ad-split-tiktok-ads

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Spark vs Brand Ad Split - TikTok Ads

Use this skill when

A team sees different results from Spark Ads (an existing creator post run as an ad) and brand-handle ads and wants to know whether format is the reason. Format is unproven by default, because the two usually differ in creator, concept, offer, and age. This skill checks that before comparing anything.

Common requests:

  • "Do Spark ads beat our brand-handle ads?"
  • "Our creator ad has half the CPA. Is that Spark or the creative?"
  • "Should we move budget to boosted creator posts?"
  • "Set up a fair test between the two formats."

When not to use

  • A single ad's opening is weak -> hook-rate-scorer-tiktok-ads.
  • An ad is tiring over time -> creative-fatigue-detector-tiktok-ads.
  • A creator brief or rights wording is needed -> ugc-brief-writer-tiktok-ads.
  • CPA moved in the whole account -> cpa-spike-diagnosis-tiktok-ads.

Required input

Ad-level export from Ads Manager Reporting for a stated date range, one row per ad. Column labels vary; keep them as labelled in your Ads Manager and map them in the first reply.

FieldNote
ad id, ad nameNever infer format from the name
Format (Spark or brand-handle) and ad identity or post sourceFrom ad metadata or a screenshot of the ad detail
Creator, for Spark adsAs shown on the identity
campaign name, ad group name, objective, optimization eventMatching keys
Audience summary, placements, bidding strategy as labelled, daily budgetMatching keys
Offer per ad (user-stated), concept, lengthMatching keys
start date, end date or dateMatching keys
spend, impressions, clicks, CTR, CPM, CPCDelivery
reported conversions, CPA, conversion value, frequencyOutcome
2-second video views, 6-second video viewsOptional, for the hook read

Also needed: the conversion lag, attribution setting, and a screenshot of each Spark ad's authorization status and expiry as shown in your account. Optional: engagement columns (likes, comments, shares) if the export carries them, creative previews, change log.

Analysis workflow

  1. Confirm format per ad from metadata. No metadata means needs_data for that ad, and it stays out of the comparison.
  2. Normalise the window: same dates, same currency and timezone, same attribution setting. Drop rows inside the conversion lag.
  3. Build candidate pairs. A pair is two ads, one per format, matched on all eight dimensions in the table below.
  4. Compute for each arm: spend, impressions, CPM, CTR, CPC, conversion rate (reported conversions / clicks), CPA, frequency, 2-second view rate where present. Always print the sample next to the metric.
  5. Apply floors: 3,000 impressions per arm before any hook or CTR read (T02); 10 reported conversions per arm before any CPA read (the floor T04 uses for its windows, borrowed here as a pack heuristic); exclude arms inside about 25 results or 7 days of entry (T05); check T01 if either ad is old.
  6. Run the confounder pass: creator versus brand concept, offer, audience size, ad age, budget skew, social proof visible on the ad, view-versus-click attribution.
  7. Assign a verdict per pair. If no pair is clean, list the mismatches and design the matched test below.
  8. Record authorization per Spark ad: status, scope, expiry, owner. Unknown is needs_data.

Matching dimensions

DimensionMust matchIf it does not
Objective and optimization eventIdenticalNot comparable; stop
AudienceSame targeting summary and size bandLabel mismatch; verdict capped at possible
OfferSame price, discount, and end dateOffer becomes the explanation
PlacementsSame setPlacement mix can drive CPM
Bidding strategy label and budget scaleSame label, similar daily budgetSpend skew changes the sample
DatesOverlapping window, same lag treatmentSeasonality and promo timing leak in
Concept and lengthSame script and cut, or documented differenceCreative is the confounder, not format
Age and learning stageSimilar days live, both past T05Younger ad carries learning noise

Matched test design

When no clean pair exists, propose one variable: format. Use the same video: the creator's post as the Spark ad, and the identical footage uploaded as the brand-handle ad. Keep objective, optimization event, audience, placements, bidding label, offer, and schedule identical, with equal budgets, in separate ad groups. Read after both arms pass about 25 results or 7 days (T05) and the lag has cleared. State the limits: two ad groups with the same targeting can compete in the same auctions, and the Spark post may carry engagement history the upload lacks. Starting it requires approval.

Reading metrics across formats

Some gaps come from how the two formats are built, so read them as questions, not as results.

MetricWhat a gap may reflectHow to check
CPMAudience, placement mix, and competition at the timeSame audience band and placements (matching dimensions)
CTRCreative and creator pull, plus the profile and engagement surface a post carriesCompare only with CPA and conversion rate beside it
Conversion rate and CPAOffer, landing page, creator trustSame landing page and offer, lag cleared
Likes, comments, shares on a Spark postOrganic history of the post, not only paid deliveryDo not treat as an ad-quality score

A cheaper CTR with a worse CPA points at a landing or offer problem, not at the format. Route that to landing-page-match-tiktok-ads.

Authorization status watch

Record status as shown in the account, as labelled in your Ads Manager. This skill never approves or extends it.

StatusVerdictNext step
Recorded, scope covers the run, expiry after the test endsProceed with the comparisonNote the expiry date in the record
Recorded, expiry inside the test windowmonitorOwner decides on extension before the read
Not recorded or unreadableneeds_data, hold on budget moves toward SparkOwner records it in writing
Revoked or lapsed during the testholdStop the comparison; mark the arm incomplete

Decision rules

ConditionVerdictNext step
Format not confirmed from metadataneeds_dataSupply ad detail screenshots
Pair unmatched on one or more dimensionsFormat effect possible; mismatch itself confirmedMatched test
Matched, floors met, CPA and CTR agree in direction in one windowpossibleRepeat in a second non-overlapping window
Same, agreeing across two non-overlapping windows [pack heuristic]likelyMatched test before shifting budget
Matched test result with both arms past T05 and lagconfirmed for that testapproval_needed for a budget decision
Either arm under the impression or conversion floormonitorWait or widen
Either arm inside a learning window (T05)holdlearning-phase-guard-tiktok-ads
Authorization missing, unknown, or near expiryhold on extending Spark spend; needs_dataOwner records status

Output format

### Format map
| Ad id | Format (from metadata) | Creator or identity | Evidence | Authorization status |
|---|---|---|---|---|

### Matched split table
| Pair | Dimension matches (8) | Arm | Spend | Impr | CPM | CTR | CPA | Conv | Confounder | Verdict | Next controlled test |
|---|---|---|---|---|---|---|---|---|---|---|---|

### Authorization record
| Spark ad | Scope | Expiry | Owner | Status |
|---|---|---|---|---|
(as shown in the account; not approved by this skill)

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

### Data gaps and approval needed
[missing item] -> [verdict prevented]. [budget move or Spark extension] -> [named owner].

Practical example

Illustrative numbers only. 14 days, lag 7 days cleared, purchase objective, same audience band and placements.

Pair 1 (unmatched): Spark creator ad, spend 1,240, impressions 210,000, CPM 5.90, clicks 2,310 (CTR 1.10%), 31 conversions, CPA 40.0, carries a 15% code. Brand-handle ad, spend 1,180, impressions 148,000, CPM 7.97, clicks 1,030 (CTR 0.70%), 19 conversions, CPA 62.1, no code. Different offer and different concept. Verdict: format possible, offer mismatch confirmed, severity medium, impact spend.

Pair 2 (matched on all eight): Spark spend 620, impressions 98,000, clicks 735 (CTR 0.75%), 9 conversions, CPA 68.9. Brand spend 600, impressions 91,000, clicks 664 (CTR 0.73%), 9 conversions, CPA 66.7. Impressions clear 3,000, but 9 conversions is under 10 per arm, so the CPA read is monitor; the CTR gap is negligible.

Conclusion: the headline gap in pair 1 is offer and concept, not format. Next: the matched test with one video in both formats. Authorization: the Spark ad expires within the next window; owner status needs_data, so extending Spark spend is hold.

Common failure modes

  • Reading a Spark ad's lower CPA as a format effect when it carries a different offer.
  • Comparing arms with different learning stages or ad ages.
  • Pooling many unmatched ads into a format average that hides one outlier.
  • Inferring format from the ad name.
  • Letting social proof or comments on the creator post explain results without labelling it.
  • Comparing before the conversion lag clears, so recent spend looks worse.
  • Running both arms as ad groups with identical audiences and ignoring auction overlap.
  • Extending Spark spend after the authorization has lapsed or was never recorded.

Guardrails

  • Do not declare a format winner from unmatched pairs; format stays possible until the eight dimensions match.
  • Do not infer Spark or brand-handle status from an ad name.
  • Do not compare CPA with fewer than 10 reported conversions per arm or hook metrics under 3,000 impressions.
  • Do not mix offers, audiences, or bidding labels inside one pair without naming the mismatch.
  • Do not approve, extend, or request a Spark permission; record status only.
  • Do not recommend a budget shift before a controlled test; stop at an approval-ready proposal.
  • Do not hide the conversion lag, attribution setting, or date window.

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

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.

関連スキル