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
npx -y skills add amekala/ads-mcp --skill adspirer-tiktok-adsAssembled 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, orSHOP_PURCHASES→ setpixel_idon the ad group, andoptimization_eventbecomes required. - Any other objective → the pixel goes on the ad as
tracking_pixel_id. An ad-grouppixel_idis rejected withPIXEL_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_typeis required unless the objective isREACH,RF_REACH,VIDEO_VIEWS, orENGAGEMENT.REACHandRF_REACHrequirefrequencyandfrequency_schedule(3 impressions / 7 days is a sane start).APP_INSTALLandAPP_PROMOTIONrequireapp_idandoperating_systems— one OS per ad group.secondary_optimization_eventis only valid whenoptimization_goalisINSTALLorVALUE.
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.