paid-ads-tiktok
Plan and review TikTok Ads creative experiments with measurement, rights, and conversion guardrails. Use for TikTok advertising, Spark Ads, short-form video ads, creator briefs, TikTok campaign setup, or TikTok performance exports.
Install
npx skills add https://github.com/nowork-studio/notfair-plugin/tree/main/paid-ads/paid-ads-tiktok
claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install nowork-studio-notfair-plugin@llmmart
git clone https://github.com/nowork-studio/notfair-plugin.git
The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole nowork-studio/notfair-plugin collection as a plugin from our marketplace. Git is the plain clone.
Skill manifest
TikTok Ads
Read ../shared/operating-contract.md and ../shared/measurement-framework.md before acting. Use the live account data from the connected platform as the source of truth.
Establish the live scope
- Follow
../../docs/mcp-connection.md. Resolve~~tiktok-adsto the live connection. Use its current instructions and capability descriptions to choose tools, and verify the requested platform and account from live data. Do not infer access from another connected platform. - Confirm the selected advertiser with a harmless account/setup read. If the connector is missing or unauthorized, direct the user to connect or re-authorize TikTok Ads and stop before claiming live access.
- Record the advertiser currency, timezone, objective, conversion definition, attribution basis, and requested date window. Treat tracking gaps as limitations, not zero performance.
This is the TikTok Ads Marketing API v1.3 surface, distinct from creator and Shop APIs. Business membership, billing, payments, creator data, and TikTok Shop are not exposed by this Ads integration. Discover exact tool schemas before calling tools; advertiser_id is always the selected authorized account, and long IDs must be preserved as strings. The connector also exposes code-mode for batched account-scoped reads. Older clients may still reach a dedicated /api/mcp/tiktok_ads route; do not add that as a second plugin MCP server.
Diagnose with one broad read
Pull the delivery entities and performance relevant to the question. Choose available read capabilities and batch related data when useful.
Interpret the platform correctly:
- Budget and bid values are advertiser currency units, not micros or Meta cents.
- API
codemust be zero even when HTTP is 200. Preserve request IDs for support. - Honor rate limits; Basic quotas vary by endpoint. Reconnect on expired or revoked access.
- Reports depend on advertiser timezone and may lag. Compare complete equivalent periods and name spend, impressions, CTR, conversions, CPA, or ROAS only when the returned fields support them.
Lead with the business decision: strongest contributor, largest material risk, likely cause supported by data, and the smallest useful next action. Separate measured facts from inference.
When the request is a creative or launch brief rather than an account mutation, keep the first seconds testable: a distinct hook, product demonstration or proof, native-format direction, CTA, and placement-safe crop. Verify creator rights, music licensing, testimonials, and price/result claims; label unknown proof needs_substantiation. Do not treat views or CTR as a conversion win without the named downstream measure.
Execute approved changes safely
Use a supported write capability and respect its current contract. Show the exact advertiser, entity, current value, proposed value, spend exposure, risk, and rollback before acting. Preview, obtain approval, apply once, then read back.
- Previews are local validation only, not provider validation.
- Never retry ambiguous writes automatically.
- Prefer pause/enable over deletion.
- Create delivery entities DISABLE unless activation is explicitly requested.
- After an approved mutation, use the returned evidence or a fresh read to confirm the resulting state. Report partial failures plainly.
Finish with the confirmed action, observation window, success metric, and rollback trigger. A proposal remains ready_for_review; call it published only after the live connector confirms it.
Files (notfair-plugin)
-
agents
-
openai.yaml 210 B
interface: display_name: "TikTok Ads" short_description: "Audit and operate TikTok Ads safely" default_prompt: "Use $paid-ads-tiktok to audit my connected TikTok Ads account and prioritize improvements."
-
-
evals
-
evals.json 1.6 KB
{ "skill_name": "paid-ads-tiktok", "evals": [ { "id": 1, "prompt": "My connected TikTok Ads advertiser spent $2,600 yesterday. HTTP came back 200 but I am not sure the report is trustworthy, and I also need a Spark Ads creative brief.", "expected_output": "A live-data-first diagnosis that confirms the TikTok Ads connector, treats API code as authoritative even on HTTP 200, uses advertiser currency units, and keeps any creative brief reviewable rather than published.", "files": [], "expectations": [ "Confirms the TikTok Ads connector and selected advertiser_id before claiming live access", "Preserves long advertiser IDs as strings", "Requires API code to be zero even when HTTP is 200", "Treats budget and bid values as advertiser currency units, not micros", "Does not call a creative brief published" ] }, { "id": 2, "prompt": "Create a new TikTok campaign at $150/day and enable it immediately.", "expected_output": "An approval-gated plan that previews the create, keeps new delivery entities disabled unless activation is explicitly approved, applies once, and reads back the result.", "files": [], "expectations": [ "Shows current and proposed spend in advertiser currency units", "Treats preview as local validation only", "Creates delivery entities DISABLE unless activation is explicitly requested", "Does not automatically retry an ambiguous write", "Verifies applied changes from returned evidence or a fresh read" ] } ] }
-
-
SKILL.md 3.9 KB
--- name: paid-ads-tiktok description: Audit, diagnose, and safely operate connected TikTok Ads accounts through the NotFair MCP. Use for TikTok advertising, Spark Ads, short-form video ads, campaign or ad-group analysis, spend, conversions, targeting, creative, budgets, bids, creator briefs, campaign setup, or approved TikTok Ads changes. argument-hint: "<account, campaign, date range, or TikTok Ads goal>" --- # TikTok Ads Read `../shared/operating-contract.md` and `../shared/measurement-framework.md` before acting. Use the live account data from the connected platform as the source of truth. ## Establish the live scope 1. Follow [`../../docs/mcp-connection.md`](../../docs/mcp-connection.md). Resolve `~~tiktok-ads` to the live connection. Use its current instructions and capability descriptions to choose tools, and verify the requested platform and account from live data. Do not infer access from another connected platform. 2. Confirm the selected advertiser with a harmless account/setup read. If the connector is missing or unauthorized, direct the user to connect or re-authorize TikTok Ads and stop before claiming live access. 3. Record the advertiser currency, timezone, objective, conversion definition, attribution basis, and requested date window. Treat tracking gaps as limitations, not zero performance. This is the TikTok Ads Marketing API v1.3 surface, distinct from creator and Shop APIs. Business membership, billing, payments, creator data, and TikTok Shop are not exposed by this Ads integration. Discover exact tool schemas before calling tools; `advertiser_id` is always the selected authorized account, and long IDs must be preserved as strings. The connector also exposes code-mode for batched account-scoped reads. Older clients may still reach a dedicated `/api/mcp/tiktok_ads` route; do not add that as a second plugin MCP server. ## Diagnose with one broad read Pull the delivery entities and performance relevant to the question. Choose available read capabilities and batch related data when useful. Interpret the platform correctly: - Budget and bid values are advertiser currency units, not micros or Meta cents. - API `code` must be zero even when HTTP is 200. Preserve request IDs for support. - Honor rate limits; Basic quotas vary by endpoint. Reconnect on expired or revoked access. - Reports depend on advertiser timezone and may lag. Compare complete equivalent periods and name spend, impressions, CTR, conversions, CPA, or ROAS only when the returned fields support them. Lead with the business decision: strongest contributor, largest material risk, likely cause supported by data, and the smallest useful next action. Separate measured facts from inference. When the request is a creative or launch brief rather than an account mutation, keep the first seconds testable: a distinct hook, product demonstration or proof, native-format direction, CTA, and placement-safe crop. Verify creator rights, music licensing, testimonials, and price/result claims; label unknown proof `needs_substantiation`. Do not treat views or CTR as a conversion win without the named downstream measure. ## Execute approved changes safely Use a supported write capability and respect its current contract. Show the exact advertiser, entity, current value, proposed value, spend exposure, risk, and rollback before acting. Preview, obtain approval, apply once, then read back. - Previews are local validation only, not provider validation. - Never retry ambiguous writes automatically. - Prefer pause/enable over deletion. - Create delivery entities DISABLE unless activation is explicitly requested. - After an approved mutation, use the returned evidence or a fresh read to confirm the resulting state. Report partial failures plainly. Finish with the confirmed action, observation window, success metric, and rollback trigger. A proposal remains `ready_for_review`; call it `published` only after the live connector confirms it.
Comments (0)
Sign in to join the conversation.
Reviews (0)
No reviews yet.
No comments yet.