--- name: tiktok-ads-manager description: "Build a first TikTok campaign that respects the platform's own setup rules before it spends. Use when a team is launching in TikTok Ads Manager and needs the objective, pixel event, targeting, and creative checked against what TikTok will actually deliver on." license: MIT compatibility: "Works with any Agent-Skills-compatible AI (Claude, ChatGPT, Cursor, Codex, and more). Ad-account actions run through Adspirer." metadata: author: "Adspirer" version: "1.0.0" adspirer_category: "campaign-launch" adspirer_source: "https://www.adspirer.com/skills/tiktok-ads-manager" adspirer_trigger: "launch my first TikTok ads campaign" adspirer_connection_url: "https://adspirer.ai/sign-up" adspirer_primary_keyword: "tiktok ads manager" adspirer_secondary_keywords: "tiktok business manager, tiktok campaign setup" adspirer_launch_wave: "2" adspirer_kind: "skill" adspirer_level: "operator" adspirer_platforms: "tiktok" adspirer_supported_clients: "claude,claude-code,claude-cowork,chatgpt,codex,cursor,gemini,windsurf" adspirer_summary: "Assemble a TikTok campaign against the platform's real setup rules, build it paused, and show every deviation from the plan before launch." adspirer_connections_required: "adspirer" adspirer_connections_optional: "" --- # TikTok Launch Kit ## Use this when The brand has finally made TikTok creative that looks like TikTok rather than a resized Meta ad, budget is approved, and someone needs the campaign standing up this week. Nobody on the team has launched here before, and the worry is a silent failure — a campaign that publishes cleanly, spends slowly, and returns nothing anyone can explain. Use this skill to build that first campaign against the rules TikTok actually enforces. It settles the choices that decide whether the campaign delivers at all: - whether the pixel has fired enough of the target event to optimize toward it; - whether the objective and optimization goal are a matched pair rather than a plausible-looking mismatch; - whether the audience is broad enough for the algorithm to work, or narrowed to the point of throttling; - whether the bidding approach suits an ad group with no delivery history; and - whether the creative and any Spark Ads authorization will survive publish. This is for a new campaign — a new product, offer, or concept getting its first live spend. It is not for scaling an existing winner, testing creative inside a live ad group, or building TikTok Shop catalog campaigns. ## What you need - Adspirer connected to the TikTok Ads Manager account, with access that can create campaigns. - A settled brief: objective, total budget, target CPA or ROAS if there is one, and an end date if the campaign is not evergreen. - Native vertical video — several assets, not one. Creative is the dominant lever on this platform, and a repurposed landscape ad with no sound-on hook will underperform regardless of how well the campaign is structured. - The conversion event that matters, and how it fires. Browser pixel alone and pixel-plus-server behave differently, and it changes which optimization events are even eligible. - A landing page that has been opened on a phone. TikTok traffic is overwhelmingly mobile, and a slow or desktop-shaped page shows up as poor relevance faster here than elsewhere. - The live product price, stock position, and destination URL from whoever owns the storefront, so the ad does not point at something out of stock. These are taken from the brief and flagged as unverified, since this skill does not read the store directly. ## Procedure **Connect Adspirer before any live ad-account step.** Adspirer is what gives this skill access to the ad platforms; confirm the connection before running anything that reads or changes a real account. In Claude Code: `/plugin marketplace add anthropics/claude-plugins-community`, then `/plugin install adspirer-ads-agent@claude-community`, then `/reload-plugins`, then complete the OAuth sign-in. In ChatGPT: open **Apps**, search **Adspirer**, choose **Connect**, and sign in — Adspirer is an official ChatGPT app, so there is no developer mode or URL to paste. In claude.ai or Claude Desktop: Settings → Connectors → Add custom connector → `https://mcp.adspirer.com/mcp`. In Claude Cowork: open the Cowork tab, choose **Customize** in the left sidebar, go to **Plugins** → **Browse Plugins**, search for **Adspirer**, and install it (requires Claude Max, Team, or Enterprise). Any other client: https://www.adspirer.com/docs/ai-clients. Sign-in link for the user: https://adspirer.ai/sign-up. Do not proceed with live ad-account steps until the connection is confirmed. 1. **Check whether the account can support the campaign at all.** Read the current account state — live campaigns, pixel status, and how often the target conversion event has actually fired over the last week or two. An ad group needs a meaningful weekly volume of its optimization event to stabilize; if the target event is barely firing, say so now and recommend optimizing toward an earlier event instead. Launching against an event the algorithm cannot learn from is the failure that looks like bad luck three weeks later. 2. **Match the objective to the optimization goal deliberately.** Map the brief onto TikTok's own objective set, and pick the optimization event to go with it as a single decision. App-install briefs belong under the app objective, not website conversions. A conversion objective optimizing toward clicks is the most common setup mistake here, and it does not error — it just quietly under-delivers. Confirm the product details in the brief are current before any copy or destination is written around them, and say plainly that they came from the brief rather than the store. 3. **Build targeting and bidding for an account with no history.** Start broad unless the brief gives a real reason not to — a narrow interest stack on a cold ad group restricts delivery more than it improves relevance, and the algorithm generally finds the audience faster than manual layering does. Confirm any custom or lookalike audience actually exists and is large enough to be usable. Pull the current budget minimums rather than relying on remembered figures, and default to the least constrained bidding available for the first several days; a hard cost cap on an ad group with no delivery data usually produces underspend rather than efficiency. 4. **Assemble creative and check what publish will reject.** Attach several native assets per ad group so there is something to rotate. Confirm the CTA is one the chosen objective actually permits. If Spark Ads are in play, verify the authorization is valid before building — an expired code fails at publish, not at review, and reads as an unexplained rejection. Confirm the right pixel and optimization event are attached at ad-group level, which is where duplicated ad groups tend to drift. 5. **Build paused, diff against the plan, and hand over the launch decision.** Create the campaign, ad groups, and ads with nothing set to active. Then produce an explicit comparison against the brief — objective, budget and where it sits, targeting versus the default logic used, bidding, pixel event versus the volume check from step 1, and creative count. Surface every deviation rather than quietly correcting it, present it alongside the event-volume finding, and enable only on an explicit go. ## Fixed checks - Read the pixel's recent event volume from the account rather than assuming the event is healthy, and state the number the recommendation rests on. - Confirm the optimization event attached to each ad group is the one the volume check cleared, and that every ad group in the campaign points at the same pixel. - Confirm the objective and optimization goal are a permitted pair, and that the chosen CTA is valid for that objective. - Pull current budget and bid minimums live; never rely on remembered figures, which change. - Verify any Spark Ads authorization is present and unexpired before the build, not after. - Confirm every ad group is paused before approval is requested, re-read from the account rather than trusted from the build step. - Treat product price, stock, and destination URL as unverified brief inputs, and say so rather than implying they were checked against the store. ## Stop conditions - **Success:** the campaign is built, the diff is reviewed, the user explicitly approves, and it goes live. - **Built and parked:** everything is assembled and verified paused, and the user wants to review first. A correct paused campaign is a clean end state. - **Blocked — signal:** the target conversion event is firing too rarely to optimize toward, and the user does not want a fallback event. Stop rather than launching into a signal the algorithm cannot use. - **Blocked — creative:** no native assets exist, or the only assets are repurposed from another platform and the user has nothing else. Report it plainly instead of launching creative that will not perform. - **Blocked — access:** the connection lacks campaign-creation access, or the account is restricted or under review. - **Needs approval:** the build is complete and diffed, waiting on an explicit go. Enabling is always its own step. - **Needs a handoff:** the pixel is missing or misconfigured, the landing page is broken, or the product data is wrong. Write the handoff rather than claiming a fix. ## Approval boundaries Building, checking, and diffing the campaign involves no spend — everything is created paused and stays that way until the user says otherwise. Enabling is the single moment spend begins, and it only follows an explicit approval given after the user has seen the diff. A general "looks good" earlier does not carry over if the build has changed since. Budgets and targets are never invented or raised beyond what the user stated. This skill cannot install or repair a TikTok pixel, fix Events API configuration, resolve billing or policy problems, read or edit the storefront, or produce video assets — when one of those is the blocker it names the owner and writes the handoff instead of implying a fix. ## What you get A TikTok campaign in the account — live if approved, paused if not — with the objective and optimization event chosen as a deliberate pair and checked against how often that event actually fires. Targeting is set broad enough to deliver, or narrowed for a stated reason. Bidding suits an ad group with no history. Creative is attached per ad group with the CTA the objective permits, and any Spark authorization is verified before publish rather than discovered at failure. You also get the diff: every place the build differs from the brief, stated rather than silently reconciled, alongside the event-volume finding that determines whether this campaign has a realistic chance. If the pixel, the landing page, or the product data turned out to be the real blocker, you get a written handoff naming what needs fixing and who owns it.