agentsclimarketplace

Adspirer tiktok ads

Skill amekala/ads-mcp/plugins/gemini/skills/adspirer-tiktok-ads

Create and manage TikTok Ads through Adspirer — in-feed video, Spark Ads, carousel, app promotion, and conversions campaigns. Use for anything on TikTok. Covers the pixel-placement rule that causes most TikTok failures, the unsupported single-image ad, and per-currency budget floors.From its SKILL.md

Install
npx -y skills add amekala/ads-mcp --skill adspirer-tiktok-ads

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

SKILL.md

3.7 KB, as published. Nobody here has run it

TikTok Ads

Everything on TikTok goes through the tiktok_ads router. Follow adspirer-mcp for the two-step.

Account parameter: advertiser_id, as a string. Budgets are in the account's currency.

TikTok rejects invalid combinations of objective, optimization goal, and tracking rather than correcting them. Check references/validity-matrix.md before you build an ad group. A rejected call fails the same way on retry.

The pixel rule — read this before anything else

Where the pixel goes depends on the objective:

  • Objective is CONVERSIONS, WEB_CONVERSIONS, PRODUCT_SALES, or SHOP_PURCHASES → set pixel_id on the ad group, and optimization_event becomes required.
  • Any other objective → the pixel goes on the ad as tracking_pixel_id. An ad-group pixel_id is rejected with PIXEL_ID_NOT_ALLOWED_FOR_OBJECTIVE.

This single rule is the most common TikTok error we see. A traffic campaign with a pixel on the ad group fails every time.

There is no single-image in-feed ad

TikTok does not support one static image as an in-feed ad. It returns error 40002. Use:

  • a video ad (create_tiktok_video_campaign),
  • a Spark Ad boosting an existing organic post (tiktok_item_id), or
  • a carousel, 2–10 images with music (create_tiktok_carousel_card).

If the user only has one image, say so and offer the carousel or a video.

Uploads fail quietly

After uploading a video, check video_id. If it comes back as the string "None", the upload failed — it is not null and it will not error. Re-upload. Never create an ad with video_id: "None".

Budgets have per-currency floors

USD 20 · EUR 20 · GBP 15 · CAD 25 · AUD 30 · SGD 25 · BRL 100 · HKD 150 · MXN 350 · ZAR 500 · TWD 600 · PHP 1000 · INR 1500 · JPY 2500. Lifetime budgets floor at roughly 7× the daily figure. The full table is in the reference. Below the floor TikTok replies "Your budget setting must not be less than X."

Objectives

Valid: REACH, RF_REACH, VIDEO_VIEWS, ENGAGEMENT, TRAFFIC, APP_INSTALL, APP_PROMOTION, LEAD_GENERATION, CONVERSIONS, WEB_CONVERSIONS, PRODUCT_SALES, SHOP_PURCHASES, CATALOG_SALES.

Some accounts lack the permission scope for a given objective and get a generic "objective isn't supported." Run explain_tiktok_objective to check before building.

Dependencies worth knowing up front:

  • promotion_type is required unless the objective is REACH, RF_REACH, VIDEO_VIEWS, or ENGAGEMENT.
  • REACH and RF_REACH require frequency and frequency_schedule (3 impressions / 7 days is a sane start).
  • APP_INSTALL and APP_PROMOTION require app_id and operating_systems — one OS per ad group.
  • secondary_optimization_event is only valid when optimization_goal is INSTALL or VALUE.

Call-to-action

LEARN, VISIT, and GO are rejected. Use LEARN_MORE, SHOP_NOW, DOWNLOAD_NOW, SIGN_UP, GET_QUOTE, BOOK_NOW, or INSTALL_NOW.

Build order

Campaign → add_tiktok_ad_group → add_tiktok_ad. Campaigns are created paused.

You need an identity (the account the ad posts as) — list_tiktok_identities. Without one, the ad has no author and creation fails.

References

  • references/validity-matrix.md — the full objective × pixel × optimization matrix, currency floors, and CTA list. Read it before building an ad group.

Keep looking

Skills are one crate of 619,758. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.