adspirer-tiktok-ads · git:20260913.cbd228f · 2026-09-13 · sha256 9bcf3b2f24d8d747
adspirer-tiktok-ads git:20260913.cbd228fA
Immutable. This exact content is served forever at /api/v1/blob/9bcf3b2f24d8d747.
--- name: adspirer-tiktok-ads description: 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. --- # 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.