skills/tiktok-optimization-advisor/SKILL.md
Use this skill when a user wants to evaluate the performance of an active TikTok campaign and get prioritized recommendations for how to optimize it. This is a mid-flight evaluation tool for enterprise activators — it pulls live campaign data, assesses performance against KPI goals and vertical benchmarks, and produces an ordered list of optimization actions the activator (or the TikTok MCP) can execute immediately. Trigger phrases include: "evaluate the campaign", "evaluate campaign performance", "optimize my campaign", "optimization recommendations", "why is my campaign underperforming", "how should I optimize", "what changes should I make", "mid-flight evaluation", "what's wrong with my campaign", "campaign health check", "TikTok optimization", "how do I improve performance", "campaign isn't hitting goal", "too expensive", "low CTR", "low delivery", "creative fatigue", "vertical benchmarks for TikTok", or any request combining campaign performance review with recommended actions.
npx skillsauth add chatandbuild/skills-repo tiktok-optimization-advisorInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This skill evaluates an active TikTok campaign's mid-flight performance and produces a prioritized list of optimization actions ordered by expected impact. It is built for enterprise activation teams advising brand clients on what to change and why, right now.
The primary deliverable is an actionable recommendation set — not a narrative report. Each recommendation is tagged as either MCP-executable (the TikTok MCP can implement it directly) or manual (requires human action outside the API).
Setup diagnostics are not a standalone audit. They surface only when a structural issue is the root cause of an observed performance problem.
Ask all of the following in a single message so the user can respond at once. Frame them as a numbered list:
Primary KPI goal — What is the campaign's target metric and goal value? (e.g., "CPA: $22", "ROAS: 3.5x", "CTR: 1.0%", "CPM: $8", "CPI: $4")
Vertical / Industry — What industry is this campaign for? (CPG/FMCG | Retail/E-commerce | Entertainment/Media | Finance/Insurance | App/Mobile Gaming | Beauty/Personal Care | Automotive | QSR/Food & Beverage | Travel/Hospitality | Health & Wellness | B2B/Tech | Other)
End date — What is the planned campaign end date? (Attempt to pull start date from MCP; if end date is not stored in the campaign, ask here)
Total budget — What is the total campaign budget? (Pull from campaign-level MCP data if available; ask if using ad-group-level budgets only)
Organic TikTok presence — Does the client have an active TikTok account linked to this advertiser? (Yes / No / Unsure)
Creative pipeline — How many new creative assets can the client produce per week? (1–2 / 3–5 / 6–10 / 10+)
Prior-flight benchmarks (optional) — Are there results from a prior TikTok campaign for this brand to compare against? If yes, provide any available key metrics.
After gathering user context, pull the following in parallel:
Setup data:
tiktok_get_campaign_details → campaign objective, budget_mode, budget, bid_type,
smart_creative_statustiktok_get_adgroup_details → per ad group: optimization_goal, audience_type,
interest_category_ids, bid, budget, placement_type, pixel_id, conversion_event,
frequency, frequency_scheduletiktok_get_ad_details → per ad: ad_format, spark_ad_type, call_to_action,
landing_page_urlPerformance data (date range: campaign start → today):
tiktok_get_reporting at CAMPAIGN level: spend, budget, impressions, reach, frequency,
clicks, ctr, cpm, cpv, video_watched_2s, video_watched_6s, video_views_p100,
conversions, cost_per_conversion, conversion_ratetiktok_get_reporting at ADGROUP level: spend, budget, impressions, clicks, ctr, cpm,
video_watched_6s, video_views_p100, conversions, cost_per_conversion, reach, frequencytiktok_get_reporting at AD level: spend, impressions, clicks, ctr, cpm,
video_watched_2s, video_watched_6s, video_views_p100, likes, comments, shares,
conversions, cost_per_conversion, frequencyRun all of the following calculations against the pulled data. These feed directly into the recommendation generation in Step 3 — flag every metric that is out of range.
days_elapsed = today - campaign_start_date
total_days = campaign_end_date - campaign_start_date
expected_spend = (days_elapsed / total_days) × total_budget
pacing_ratio = actual_spend / expected_spend
projected_total = (actual_spend / days_elapsed) × total_days
| Pacing Ratio | Status | |---|---| | 0.90–1.10 | ✅ On Track | | 0.75–0.89 or 1.11–1.20 | ⚠️ Off Pace | | < 0.75 or > 1.20 | 🔴 Action Required |
kpi_performance_ratio = actual_kpi / goal_kpi
days_remaining_ratio = days_remaining / total_days
Flag when performance is >20% off goal with <40% of flight remaining.
| Metric | Formula | Benchmark | Flag If... | |---|---|---|---| | Hook Rate (2s) | video_watched_2s / impressions | 30–40% | < 25% → rework hook | | 6s Retention Rate | video_watched_6s / video_watched_2s | 65–75% | < 55% → content loses viewers after hook | | 6s View Rate (absolute) | video_watched_6s / impressions | 25–30% | < 20% → combined hook + early content issue | | Video Completion Rate | video_views_p100 / impressions | 30–40% | < 20% → length or content issue | | Frequency (creative-level) | frequency per AD, last 7 days | < 3 | ≥ 3.5 → fatigue risk; ≥ 5 → rotate now | | CTR trend | 3-day rolling | 0.5–1.5% (varies) | Declining 3+ consecutive days → fatigue | | Engagement Rate | (likes+comments+shares) / impressions | 3–6% | < 2% → weak resonance |
Metric disambiguation: The "6s retention rate" (video_watched_6s / video_watched_2s) and the "6s view rate" (video_watched_6s / impressions) measure different things and should not be conflated. Use the retention rate to isolate whether the hook or the early content is the problem; use the absolute view rate for top-line creative health reporting. The "40%+" figure appearing in some 2025 sources refers to a top-quartile aspirational target for absolute 6s view rate, not the average benchmark.
Run the following checks. Do not surface these as a standalone section. Only use them to explain a performance problem that was already identified above. A setup issue earns a place in the recommendations only if it is actively contributing to a flagged metric.
| Check | Best Practice | Flag If Relevant | |---|---|---| | Optimization goal alignment | Must match campaign objective (routing table below) | 🔴 if misaligned AND performance is off | | Pixel present + firing | Required for conversion/AEO objectives | 🔴 if missing and CPA is off-target or delivery is low | | Cost Cap timing | Only after 50+ weekly conversions | ⚠️ if set early AND delivery is constrained | | Creative count per ad group | 3–5 minimum | 🔴 if < 3 AND fatigue or delivery is flagged | | CBO enabled | For 3+ ad groups | ⚠️ if disabled AND budget is concentrating unevenly | | Smart Creative | Enabled | 💡 if disabled AND creative performance variance is high | | iOS + Android mixed | Separate ad groups required | 🔴 if mixed AND CPI/attribution is off | | Budget per ad group | ≥ 50× CPI target (app) / ≥ 20× CPA (web) | 🔴 if below floor AND campaign is stuck in learning | | Audience scope | Broad for awareness; targeted for conversion | ⚠️ if mismatched AND CPM/CTR is off-benchmark | | Conversion event depth | Match to available volume | ⚠️ if deep-funnel event used with <50 weekly conversions | | UTM parameters | Required on all landing page URLs | ⚠️ if missing AND traffic quality is unmeasurable |
Optimization Goal Routing Table (for alignment check above):
| Campaign Objective | Correct Optimization Goals | |---|---| | Reach / Brand Awareness | REACH, VIDEO_VIEW | | Traffic | LANDING_PAGE_VIEW, CLICK | | App Install | APP_INSTALL | | App Event Optimization | IN_APP_EVENT | | Web Conversion | CONVERSION | | Lead Generation | LEAD_GENERATION |
This is the primary output. Run four analysis passes, then merge, deduplicate, and rank into a single prioritized action list.
For the detailed recommendation menus, consult reference/recommendation-playbooks.md. Run all four passes against that file:
audience_type and targeting configuration.Pull the candidate actions from each pass, then merge and rank them as described below.
After completing all four passes, compile the final action list:
Ask the user what format they want for the output: a structured list in chat, a docx document, or a pptx deck.
Regardless of format, the output has three sections in this order:
A brief (3–5 sentence) assessment of where the campaign stands. Lead with the highest- severity finding. Cover: pacing status, KPI vs. goal, and top creative health signal. If setup issues are contributing to performance problems, name them here. Close with a one-sentence verdict: "The campaign is [on track / at risk / off-course] with [X days] remaining."
Include a compact data table:
| | Actual | Goal / Benchmark | Status | |---|---|---|---| | Spend to date | | | | | Pacing ratio | | On track = 0.90–1.10 | | | Primary KPI | | [user-provided goal] | | | [Top 2–3 creative metrics vs. benchmark] | | | |
The full prioritized action list from Step 3. This is the core output — everything else supports it.
Present as a numbered list, 1–7, ordered by expected impact.
For each item:
[#] [🔴/⚠️/💡] ACTION TITLE
Where: [campaign / ad group / ad name]
Why it matters: [performance signal → business impact]
Root cause: [only if structural — e.g., "Cost Cap was set before 50 conversions/week"]
Depends on: [only if this action cannot safely run before another action completes —
e.g., "Complete action 3 first (new creative must be live before pausing the only
active ad in this group)". Omit this field if the action is fully independent.]
How to implement: [step-by-step]
Execution: [🤖 MCP-executable / 👤 Manual]
Sequencing rule: Before finalizing the action list, scan all items for execution dependencies — cases where acting on item N before item M would break delivery, reset learning, or make item N ineffective. Common dependency patterns:
Depends on field. An action without
the field is implicitly safe to execute immediately and independently.Include only the tables relevant to the recommendations above. Omit anything that was clean and not referenced in the action list.
Suggested tables (include as relevant):
Depends on field naming the prerequisite. An action without this field signals it is
safe to execute immediately and independently.Supporting reference files (consult as needed; not loaded by default):
reference/recommendation-playbooks.md — detailed objective, audience, creative, and vertical recommendation menus (Passes A–D).reference/benchmarks.md — platform-level benchmark context for interpreting performance.reference/sources.md — official TikTok and third-party best-practice sources.tools
Use only when the user explicitly asks to stage, commit, push, and open a GitHub pull request in one flow using the GitHub CLI (`gh`).
development
Use this skill any time a spreadsheet file is the primary input or output. This means any task where the user wants to: open, read, edit, or fix an existing .xlsx, .xlsm, .csv, or .tsv file (e.g., adding columns, computing formulas, formatting, charting, cleaning messy data); create a new spreadsheet from scratch or from other data sources; or convert between tabular file formats. Trigger especially when the user references a spreadsheet file by name or path — even casually (like "the xlsx in my downloads") — and wants something done to it or produced from it. Also trigger for cleaning or restructuring messy tabular data files (malformed rows, misplaced headers, junk data) into proper spreadsheets. The deliverable must be a spreadsheet file. Do NOT trigger when the primary deliverable is a Word document, HTML report, standalone Python script, database pipeline, or Google Sheets API integration, even if tabular data is involved.
development
Use this skill when turning messy workout information into clear logs, comparing user-provided sessions, surfacing trends or likely PRs, and suggesting realistic next-session steps.
tools
Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.