Research Tiktok Ads
Published by manifoldmcp in marketing-skills
What this skill does
When the user wants to research ads on TikTok, for named competitors or across a whole category. Reads the TikTok ad library by advertiser or keyword, ranks the ads by how long they have run, reads the text, transcripts and landing pages of the long-runners, sets recent tests apart, and hands back a table per competitor or a swipe file grouped by angle and offer. Also use when the user mentions the TikTok ad library, TikTok ads, what ads a brand runs on TikTok, a swipe file or ad inspiration fro
Add Research Tiktok Ads to your agent
Review the source and files first. When you are ready, copy the prompt instruction or use the CLI command supported by your environment.
Install with a prompt
Paste this into a compatible coding agent:
add this skill "research-tiktok-ads" from https://github.com/manifoldmcp/marketing-skillsInstall with the CLI
Run this command in a controlled environment after reviewing the repository:
npx skills add https://github.com/manifoldmcp/marketing-skills --skill research-tiktok-adsSkill instructions
Research TikTok ads
What advertisers pay to show on TikTok, read from TikTok's ad library: for one or more named competitors, or for a whole category by keyword so it catches advertisers the user never named. Each ad comes with its dates, its spoken hook, the offer and the page it sends people to. It ends in a table per competitor or a swipe file grouped by angle, long-runners first, because an ad that keeps running is the closest thing the library has to a result.
Connector check
This skill runs on the manifold MCP server. Before the first step, confirm that its tools are available: look for ads_get_advertiser_ads, ads_search_ads and ads_get_ad (hosts often add a prefix, for example mcp__manifold__ads_get_advertiser_ads).
- If no manifold tool is there, stop and tell the user: "This needs the Manifold connector. If you installed the Manifold plugin, connect Manifold on the plugin's Connectors tab (Customize > Plugins in Claude), run
/mcpin Claude Code, or runcodex mcp login manifoldin Codex. Otherwise add the remote MCP serverhttps://mcp.manifoldmcp.com/mcpand sign in: in Claude or ChatGPT as a custom connector, in Claude Code withclaude mcp add --transport http manifold https://mcp.manifoldmcp.com/mcpand then/mcp. Other clients: https://www.manifoldmcp.com/docs/clients." Do not answer from memory instead. - If other manifold tools are there but the
ads_*tools are not, the ads group is switched off on the app's Tools page (https://www.manifoldmcp.com/docs/authentication#turn-tool-groups-off). Say so; this skill needs it. - Video ads use
tiktok_get_transcript(andtiktok_get_videoswhen the library holds no video), and landing pagesseo_get_page. If one of those groups is off, skip its step, say which, and work from the ad text.
Product context
Before the first question, look for the product marketing context file: .agents/product-marketing.md (in older setups .claude/product-marketing.md or product-marketing-context.md). If it exists, read it and take every input it answers (the competitors, their TikTok advertiser names, handles and domains, the category and its words, and the market) from it; ask only for what it lacks. If it does not exist and the job needs more than two answers about the business, offer manifold-get-started first.
Inputs to settle first
- The job: named competitors' ads, or the best ads across a category (a swipe file). Take it from the request; a request for both runs the competitors first and the category around them second.
- Competitors: one to five, each with its advertiser name on TikTok, its TikTok handle (for the transcript fallback) and its domain.
- Keywords (category job): three to five words the category's ads use: the product ("protein bar"), the problem ("afternoon slump"), the offer ("free shipping") and the leading brand names. Ask for two; add the rest from the first pull.
- Market:
countryhas no effect on TikTok's library, so the run covers every country;ads_get_adlists the countries each ad ran in, and the user can filter on those. - Depth: competitors, up to three pages each and the ten longest-running creatives read in full. Category, 20 ads in the file, each read in full.
- Budget: say it before starting; pass
max_creditsif the user gave a budget.- Competitors: about 18 credits each: up to three list pages, ten ads read in full and five video transcripts. Three competitors cost about 54.
- Category: about 38 credits: four keywords at two list pages each, 20 ads read in full and ten video transcripts.
- A transcript with
ai_fallback: truecosts 11 instead of 1; ask before using it on more than a few ads.
Steps
- Pull the ads. Both tools take
platform: "tiktok", 1 credit a page.- Competitors:
ads_get_advertiser_adswith the advertiser name asadvertiser, paging withmeta.cursorup to three pages while new rows come back. - Category:
ads_search_adsfor each keyword, two pages. active_onlyhas no effect here: TikTok does not mark an ad as running.
- Competitors:
- Rank by survival. List rows carry dates, format and a cover image but no ad text. Dedupe on
idand work out days running for each as the winner rules set out:activeis null on TikTok, so still running meanslast_shownwithin the last 7 days, and days running islast_shownminusfirst_shown, or today minusfirst_shownwhile it runs. Sort by days running. When a row gives neither date, days running is unknown: say so rather than guess. - Read the long-runners. Follow reading an ad, on each competitor's ten longest-running ads or every ad in the category file:
- The text:
ads_get_adwith the row'sid(1 credit), always, since the rows carry none. It adds the title, the landing page, the countries and the published ranges. Readheadline,body,ctaanddestination_url. - The words:
tiktok_get_transcripton the ad'surl(1 credit), for the five best ads per competitor or the ten best in a category file. On NoData (1 credit, do not retry), find the same video on the advertiser's own account withtiktok_get_videosandsort: "popular"(1 credit a page), matched on the caption, and transcribe that post. When TikTok holds no transcript for it either,ai_fallback: truetranscribes the audio (11 credits, videos up to two minutes). The first spoken sentence is the hook. - The landing page:
seo_get_pageon each distinctdestination_url(free):title,h1andh2show the offer the page leads with.
- The text:
- Group the creatives. Once read, group ads with the same title or the same spoken hook into one creative and count its variants: many variants of one creative is a winner being scaled. In a category file, cap each advertiser at five creatives, then fill the file with the long-runners first and the recent ads marked as tests.
- Tag each ad from the ad itself:
- Angle: pain, outcome, social proof, comparison, founder story, demo, objection, offer-led.
- Offer: free trial, discount, free shipping, bundle, guarantee, lead magnet, demo, none.
- Proof: the number, review or testimonial the ad leans on, if any.
- Format:
formatfrom the row, plus video length where the transcript or text shows it, and whether it looks like a creator talking to camera (UGC style) or a produced spot. - CTA: the
ctafield, or the call in the last line when it is null.
- Set the recent ones apart. Ads first shown in the last 14 days are current tests. List them apart: they show where an advertiser is heading, not what works.
- Deliver, with the reminder at the top that the library shows what runs, not what converts.
- Competitors: a table per competitor: ad link, format, first shown, days running, still running, variants, title, spoken hook, angle, offer, CTA, landing page title, countries, and the published
impressionsandspendranges where present. Under each table, five lines: how many ads run now, their three proven creatives and why they likely work, the angles they repeat, their core offer, and their current tests. - Category: the swipe file grouped by angle. Per ad: advertiser, library link, format, days running, still running, variants, spoken hook, offer, CTA, landing page title. Then a summary table: angle, ads, long-runners, advertisers using it, most common offer. Name the two or three angles with the most long-runners (proven in the category) and any angle no advertiser uses (an opening, or a dead end: test it small).
- End with what the user can take from it.
- Competitors: a table per competitor: ad link, format, first shown, days running, still running, variants, title, spoken hook, angle, offer, CTA, landing page title, countries, and the published
Judgment
- No ads found is not proof of no ads. Try another spelling, the parent brand, or a product's own advertiser name.
- On TikTok the spoken hook is the ad. An ad with no transcript and no text is a row with dates only: count it for survival, but do not guess its angle from the cover image.
- An agency, a reseller or a creator running ads for the competitor shows under its own name. Check
destination_urlbefore counting an ad as the competitor's. - The same offer across every ad is the advertiser's core offer. An offer that appears in one ad only is a test.
- Never copy a competitor's creative, footage, claims or words. Take the structure: the hook pattern, the angle, the offer type.
- Proven angles are table stakes. The user's ads need them and something the category does not say yet; write-ad-brief adds that from customer language.
- Keyword search is ranked by the library and never complete. A second pass with other words costs little and is cached for 24 hours.
- Ads that look like organic posts often win on TikTok. Compare the long-runners with the top organic videos in the niche (find-tiktok-hooks) before briefing a produced spot.
- Credits and handoff follow the ad libraries notes: say the estimate first, pass
max_creditson a budget, and never buy, launch or pause ads. The server keeps no state; a weekly rerun of a competitor read is monitor-competitors. - Every platform at once. When the user wants all of one competitor's ads, or a category's, across platforms, run research-meta-ads, research-google-ads, research-tiktok-ads and research-linkedin-ads in turn, then merge the tables by angle and offer. The same angle running on two platforms is a stronger signal than either alone. For a one-page view of every library, tear-down-competitor reads one page from each.
Related skills
- The same read on the other libraries: research-meta-ads, research-linkedin-ads, research-google-ads.
- A brief for the user's own ads from these long-runners: write-ad-brief.
- Where paid ads fit in the plan and what to spend: create-paid-ads-plan.
- Hooks from organic TikTok videos: find-tiktok-hooks.
- Creators who make the UGC-style ads in the file: find-ugc-creators.
- Everything about a competitor beyond its ads: tear-down-competitor.
- New ads from the same competitors flagged every week: monitor-competitors.
Files included
- SKILL.md

