π― TikTok Creative Center Top Ads Insights
Pricing
$19.99/month + usage
π― TikTok Creative Center Top Ads Insights
TikTok Creative Center Top Ads Insights analyzes trending TikTok videos, capturing metrics like views, likes, shares, comments, creators, hashtags, sounds, and growth patterns. Ideal for trend tracking, content research, campaign planning, and automating TikTok performance insights at scale.
Pricing
$19.99/month + usage
Rating
0.0
(0)
Developer
SimpleAPI
Maintained by CommunityActor stats
0
Bookmarked
14
Total users
0
Monthly active users
3 days ago
Last modified
Categories
Share
TikTok Ads Scraper β Creative Center Top Ads, CTR and Video URLs
Extract TikTok Creative Center Top Ads β the public library of top-performing advertiser creatives TikTok itself publishes for inspiration β as structured JSON: ad copy, brand name, likes, click-through rate (ctr), a relative cost index, industry and objective labels, video dimensions, and a direct CDN .mp4 download link for every ad. Opt in to per-ad detail enrichment to add comment counts, share counts, and lead-gen landing pages. Built for performance marketers, creative agencies, and ad-intelligence researchers who need TikTok's inspiration feed without manually paging through the Creative Center UI.
What is the TikTok Creative Center Top Ads Scraper?
The TikTok Creative Center Top Ads Scraper pulls advertiser creatives from TikTok Creative Center's public "Top Ads" inspiration library β the same catalogue TikTok surfaces at ads.tiktok.com/business/creativecenter/inspiration/topads β and returns one structured record per ad. No TikTok account, advertiser login, or API key is required: the actor captures an anonymous signed session with a headless browser and replays TikTok's own creative_radar_api endpoints from there. Output lands in your Apify dataset ready to export as JSON, CSV, Excel, or XML.
Key capabilities:
- π Discovery by country and filter combination β one or more
countryCodes, a trailingperiod(7/30/180 days), and endpoint-sidekeyword,industry,objective,adLanguage, andadFormatfilters. - π¬ Creative identification fields β
ad_title,brand_name, and a canonicaldetailUrlback to the Creative Center listing for every ad. - π Ad-performance insights β
like,ctr(click-through rate, as a percentage), andcost(a relative spend index), plus derivedctrTierandengagementScore. - π₯ Media fields β CDN
.mp4download link (video_download_url), the full rendition map, cover thumbnail, duration, width/height, and derivedaspectRatio/isVertical. - π Opt-in per-ad detail enrichment β comment count, share count, landing-page URL, and the list of countries an ad ran in, via a second signed call per ad.
- ποΈ Client-side quality filters β minimum likes, minimum CTR, duration range, and keyword include/exclude lists applied after fetch, so you only pay for rows that clear your bar.
What data can I extract with the TikTok Creative Center Top Ads Scraper?
Every Top Ads row carries advertiser-creative identity, ad-performance metrics, media/creative attributes, and (opt-in) per-ad detail. These are the exact keys the actor writes to each dataset item β the dataset's default view surfaces 28 of them; the remaining 8 (id, vid, video_renditions, voice_over, keyword_list, pattern_label, countries, detailFetched) are still on the record, just not columns in the default table view.
| Field | Example value | Use case |
|---|---|---|
type | "top_ad" | Row-type marker (constant) |
country_code | "US" | The country this ad was pulled for |
id | "7447454107521122322" | Creative Center material ID |
vid | "v14025g50000ctsf5ofog65liauo61vg" | Underlying TikTok video ID |
ad_title | "2025 New Year 50% OFF!" | Ad copy / caption text |
brand_name | "New Year Sale" | Advertiser brand name (may be null) |
like | 9925 | Like count on the creative |
ctr | 0.96 | Click-through rate, as a percentage (0.96 = 0.96%) |
cost | 2 | Relative cost index as returned by the endpoint |
industry_key | "label_15100000000" | Raw opaque Creative Center industry ID |
industry | "E-Commerce" | Human label, null for opaque label_... codes with no public mapping |
objective_key | "campaign_objective_product_sales" | Raw objective code |
objective | "Product Sales" | Human-readable objective label |
cover | "https://p16-cc-sign-sg.tiktokcdn.com/..." | Thumbnail image URL |
duration | 42.47 | Video duration in seconds |
width / height | 576 / 1024 | Video pixel dimensions |
video_download_url | "https://v16m-default.akamaized.net/..." | Best available CDN .mp4 rendition β a download link, not a tiktok.com post URL |
video_renditions | {"720p": "...", "480p": "..."} | Map of every rendition the endpoint returned |
ctrTier | "high" | Derived bucket: low / medium / high / very_high |
durationBucket | "30-60s" | Derived bucket: 0-15s / 15-30s / 30-60s / 60s+ |
aspectRatio | "9:16" | Derived from width/height |
isVertical | true | Derived from width/height |
engagementScore | 41047.0 | Derived: 1Γlike + 3Γcomment + 4Γshare (only counts fields present) |
hashtags | ["50off"] | Hashtags parsed out of ad_title |
likesPerSecond | 233.7 | Derived: like Γ· duration |
comment | 302 | Comment count β populated only when includeDetails succeeds |
share | 58 | Share count β populated only when includeDetails succeeds |
landing_page | "https://www.lablumos.com/products/..." | Lead-gen landing URL β detail-only, present for traffic/lead-gen ads |
voice_over | null | Detail-only; usually omitted by the endpoint in practice |
keyword_list | null | Detail-only; usually omitted by the endpoint in practice |
pattern_label | null | Detail-only; usually omitted by the endpoint in practice |
countries | ["US", "CA", "GB"] | Detail-only: every country the ad ran in |
detailFetched | true | Whether the detail call succeeded for this row |
detailUrl | "https://ads.tiktok.com/business/creativecenter/topads/7447.../pc/en" | Canonical Creative Center deep link |
scrapedAt | "2026-07-26T14:02:11Z" | ISO 8601 scrape timestamp |
Ad-performance data
like, ctr, cost, ctrTier, engagementScore, and likesPerSecond are the decision-driving numbers on each row. ctr is the raw percentage TikTok's endpoint returns (0.96 means 0.96%, not 96%); ctrTier buckets it into low/medium/high/very_high so you can filter without hand-rolling thresholds. cost is a relative index from the same endpoint, not a currency figure. engagementScore weights like at 1Γ, comment at 3Γ, and share at 4Γ β it only counts fields that are actually present, so a row without detail enrichment scores on likes alone. A creative agency comparing 40 ads across a client's category typically sorts on ctrTier first, then engagementScore to break ties.
Targeting and creative attributes
country_code, industry_key/industry, objective_key/objective, durationBucket, and aspectRatio/isVertical are the fields you filter and segment on. Industry and objective are Creative Center's own taxonomy β objective keys arrive prefixed (campaign_objective_reach) and are stripped and humanized where a mapping exists; unmapped opaque industry IDs are left as null labels rather than guessed. durationBucket and aspectRatio let you split a swipe file by creative format (short vertical hooks vs. longer horizontal spots) without touching raw pixel values.
Why not build this yourself?
TikTok Creative Center has no public, documented API for third parties β the Top Ads inspiration feed you see in the browser is served by an internal, signed creative_radar_api that TikTok's own frontend calls. Reproducing it yourself means reverse-engineering a user-sign request header (regenerated per session), driving a real browser to capture it, and replaying the resulting session against top_ads/v2/list and top_ads/v2/detail β all while TikTok blocks datacenter IPs outright, so a residential proxy is mandatory just to get past the first request. This actor already does that work: it launches a headless Chromium session with Playwright, waits for the page to fire a genuinely signed request, extracts and caches the user-sign/timestamp/anonymous-user-id headers in the run's key-value store (SIGNED_HEADERS) to skip the ~45-second capture on the next run, and replays them directly through the same browser's request context. If a session goes stale or a proxy IP gets blocked, it escalates through up to four residential-proxy retries with fresh IPs before giving up.
It also absorbs two dead ends TikTok's own UI still implies work: the legacy popular_trend/list "trending videos" endpoint and the popular_trend/hashtag/list "Trending Hashtags" endpoint both now return code: 0, data: null (TikTok's own "deprecated" signature) even with a valid signed session β so this actor doesn't ship either as a dead toggle, and you don't burn a run finding that out yourself.
Build it yourself if you already operate signed-session capture and residential-proxy infrastructure for other TikTok surfaces and want to fold this in. Use this actor if you want structured Top Ads rows today without maintaining that capture pipeline.
How to use TikTok Creative Center Top Ads data?
Performance marketers and creative teams
Set industry, objective, and period to your vertical, sort with sortOrder: "ctr", and set minLikes to cut noise. The output gives you video_download_url to pull the actual creative, ad_title for hook/copy patterns, and ctrTier/durationBucket to see which format and length combinations are winning right now β a direct swipe-file feed instead of manually scrolling Creative Center and screenshotting.
Creative agencies and competitive research
Run the same country/industry/objective combination on a schedule (Apify's built-in Schedules) and diff brand_name and ad_title across runs to track which advertisers are actively iterating creative in a client's category. Turn on includeDetails periodically to capture landing_page for lead-gen competitors β that URL is only available through the opt-in detail call, not the base list feed.
Market research and intelligence
Because industry, objective, ctrTier, and durationBucket are all normalized categorical fields, a single dataset export lets you build a distribution of ad-format and objective mix across multiple countryCodes in one run β for example, comparing what proportion of top-performing US vs. UK ads target Product Sales vs. Lead Generation, and at what duration.
AI agents and automated pipelines
Because the actor is a standard Apify Actor, any agent framework that can call the Apify API can trigger a run, poll it, and read the dataset back as JSON β useful for an agent tool that answers "show me the highest-CTR ads in the beauty industry this week" by calling the actor with industry and sortOrder: "ctr" set and reading ad_title/video_download_url/ctr straight out of the response.
πΌ Input sample
Every field below is reproduced exactly from .actor/actor.json's input schema β 17 properties, 1 required.
| Parameter | Required | Type | Description | Example value |
|---|---|---|---|---|
countryCodes | Yes | array | One or more two-letter country codes. The anonymous Creative Center tier serves ~40 ads per country, so adding more countries is the main way to get more rows per run (they reuse one signed session). Default ["US"]. | ["US", "GB"] |
sortOrder | No | string | How to order the Top Ads feed. Only two orderings are honored by the endpoint: for_you (the default trending feed) and ctr (click-through rate). Default "for_you". | "ctr" |
period | No | string | Trailing time window for Top Ads. Only "7" / "30" / "180" are accepted by the endpoint (any other value is snapped to the nearest). Default "7". | "30" |
maxItems | No | integer | Maximum Top Ads to collect per country. Min 0, max 200, default 40. The anonymous Creative Center tier realistically returns only ~40 per (country, period) regardless of a higher value. 0 = no limit (still bounded by the ~40 ceiling). | 40 |
includeDetails | No | boolean | Opt-in: for each ad, call the top_ads/v2/detail endpoint to add comment count, share count, landing_page, and the country list the ad ran in. Slower, and billed as a separate detail_result event per enriched ad. Default false. | true |
keyword | No | string | Server-side search term passed to the Top Ads endpoint (matches ad text). Leave empty for no keyword search. | "skincare" |
industry | No | string | Creative Center industry filter passed straight to the endpoint (an industry key/ID). Leave empty for all industries. | "ecommerce" |
objective | No | string | Creative Center advertising-objective filter passed to the endpoint (e.g. traffic, conversions, app_install). Leave empty for all objectives. | "conversions" |
adLanguage | No | string | Language filter for ad creatives passed to the endpoint. Leave empty for all languages. | "en" |
adFormat | No | string | Ad-format filter passed to the endpoint. Leave empty for all formats. | β |
minLikes | No | integer | Client-side filter: drop ads with fewer likes than this. Min 0, default 0. | 500 |
minCtr | No | number | Client-side filter: drop ads whose CTR is below this value (same scale the endpoint returns). Leave empty for no minimum. | 1.5 |
minDuration | No | integer | Client-side filter: drop ads shorter than this many seconds. Min 0. | 10 |
maxDuration | No | integer | Client-side filter: drop ads longer than this many seconds. Min 0. | 60 |
keywords | No | array | Client-side: keep only ads whose ad text contains at least one of these words (case-insensitive). | ["sale", "discount"] |
excludeKeywords | No | array | Client-side: drop ads whose ad text contains any of these words (case-insensitive). | ["giveaway"] |
proxyConfiguration | No | object | Proxy configuration. TikTok Creative Center blocks datacenter IPs β RESIDENTIAL proxy is required to capture the signed session. Default {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}. | {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]} |
{"countryCodes": ["US", "GB"],"sortOrder": "ctr","period": "30","maxItems": 40,"includeDetails": true,"industry": "ecommerce","objective": "conversions","minLikes": 500,"keywords": ["sale", "discount"],"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }}
Common pitfall: raising maxItems above roughly 40 does not raise the per-country row count β the anonymous Creative Center tier caps out there regardless of what you request. If you need more than ~40 rows, add more entries to countryCodes rather than raising maxItems; each additional country reuses the same signed session and gets its own ~40-ad ceiling. The actor logs a warning (and this run's achievable ceiling) when maxItems is set above 40.
π½ Output sample
Output is typed, normalized JSON with a consistent schema across every row β export it from the Apify Console as JSON, CSV, Excel, or XML, or pull it programmatically via the Dataset API. Here is one complete record with includeDetails: true, so every detail-enrichment field is populated:
{"type": "top_ad","country_code": "US","id": "7447454107521122322","vid": "v14025g50000ctsf5ofog65liauo61vg","ad_title": "2025 New Year 50% OFF! Buy 1 Free 1 for Christmas","brand_name": "New Year Sale","like": 9925,"ctr": 0.96,"cost": 2,"industry_key": "label_15100000000","industry": null,"objective_key": "campaign_objective_product_sales","objective": "Product Sales","cover": "https://p16-cc-sign-sg.tiktokcdn.com/v0201/v14025g50000ctsf5ofog65liauo61vg/...","duration": 42.47,"width": 576,"height": 1024,"video_download_url": "https://v16m-default.akamaized.net/6a2c28c7d4ff3136369beeccf86efcc5/.../mime_type=video_mp4","video_renditions": { "720p": "https://v16m-default.akamaized.net/..." },"ctrTier": "very_high","durationBucket": "30-60s","aspectRatio": "9:16","isVertical": true,"engagementScore": 10307.0,"hashtags": [],"likesPerSecond": 233.72,"comment": 302,"share": 58,"landing_page": "https://www.lablumos.com/products/charging-box2fd647b0-a2a4-4077-bbd7-9770b39dbbb4","voice_over": true,"keyword_list": ["for christmas", "buy 1 free 1", "50% off"],"pattern_label": [],"countries": ["VN", "TH", "AU", "GB", "IE", "ES", "NL", "FR", "DE", "US", "PH", "MY"],"detailFetched": true,"detailUrl": "https://ads.tiktok.com/business/creativecenter/topads/7447454107521122322/pc/en","scrapedAt": "2026-07-26T14:02:11Z"}
Note that industry is null here β TikTok's industry_key label_15100000000 is one of the opaque numeric codes with no public ID-to-name mapping, so the actor keeps the raw key and leaves the label unfabricated rather than guessing.
How do you filter and target specific ads?
This actor exposes filtering on three levels, and knowing which level a given filter runs at changes what it can do for you.
Endpoint-side filters β industry, objective, keyword, adLanguage, and adFormat β are sent straight to TikTok's top_ads/v2/list endpoint and narrow what TikTok returns before it ever reaches the actor. Use these first: they're free (no extra request) and they reduce what you're billed for, since only matching rows get pushed.
Scope precision β countryCodes (array, one signed session covers all of them) and period (7/30/180 days only β anything else is snapped to the nearest accepted value) control which slice of the Top Ads feed you're pulling. Because the realistic ceiling is ~40 ads per (country, period), countryCodes is also your main lever for volume: five countries gets you toward ~200 rows in one run, not one country with maxItems: 200.
Client-side quality thresholds β minLikes, minCtr, minDuration/maxDuration, and the keywords/excludeKeywords include/exclude lists run after the fetch, on rows TikTok already returned. They don't reduce what's billed (rows are fetched and charged before these filters drop them), so use them for precision on top of endpoint-side narrowing, not as a cost lever.
{ "countryCodes": ["US"], "industry": "ecommerce", "objective": "conversions", "sortOrder": "ctr" }
{ "countryCodes": ["US", "GB", "CA", "AU", "DE"], "period": "30", "maxItems": 40 }
{ "countryCodes": ["US"], "minLikes": 1000, "minCtr": 1.5, "keywords": ["sale"], "excludeKeywords": ["giveaway"] }
βΆοΈ Want to try other SimpleAPI scrapers?
| Scraper | What it extracts |
|---|---|
| ../Facebook-Group-Insights-Scraper | Facebook Group metadata and activity insights |
| ../Facebook-Group-Posts-&-Comments-Scraper | Posts and comment threads from public Facebook Groups |
| ../Facebook-Groups-Posts-&-Comments-Scraper-pay-per-events | Pay-per-event variant of the Groups posts/comments scraper |
| ../Facebook-Profile-&-Page-Photos-Scraper | Photos and media from public Facebook profiles and pages |
| ../Instagram-Followers-Enrichment-Scraper | Enriched follower data for Instagram accounts |
| ../Instagram-Profile-Phone-&-Contact-Scraper | Contact details surfaced on public Instagram profiles |
How to extract TikTok Creative Center data programmatically
The actor runs as a standard Apify Actor: one API call starts a run, and the results land in a dataset you read back as JSON β no separate signup flow or TikTok credentials beyond what the actor itself handles.
Python example
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_API_TOKEN>")run = client.actor("tiktok-creative-center-ads-insights-scraper").call(run_input={"countryCodes": ["US", "GB"],"industry": "ecommerce","sortOrder": "ctr","minLikes": 500,})for ad in client.dataset(run["defaultDatasetId"]).iterate_items():print(ad["brand_name"], ad["ad_title"], ad["ctr"], ad["video_download_url"])
Export to spreadsheets or CRM
From the Apify Console's Dataset tab, export directly to CSV or Excel β map brand_name β Company, ad_title β Ad Copy, ctr/like/cost β Performance columns, and video_download_url/landing_page β reference links, for a swipe-file spreadsheet or CRM import with no manual reformatting.
Is it legal to scrape TikTok Creative Center?
Yes. TikTok Creative Center Top Ads is a public inspiration library that TikTok itself operates and publishes for anyone to browse without logging in β the actor accesses only that publicly available page and its underlying public API responses. The records returned are advertiser creative and performance metadata (brand names, ad copy, engagement counts, video files), not personal data about private individuals, so this falls under standard terms-of-service and database-rights considerations rather than GDPR/CCPA personal-data rules. Scraped creative content remains the intellectual property of the respective advertisers. Consult legal counsel for commercial applications involving bulk storage or redistribution of this data.
β FAQ
What happens when an ad is removed from the Creative Center library?
The next run simply won't return it β the actor always queries the live Top Ads feed, so a delisted or expired ad drops out of the result set on its own rather than being flagged with a status field.
Can I get comments and shares along with the main ad data?
Yes, but only opt-in: set includeDetails: true to fetch comment, share, landing_page, and countries per ad from the top_ads/v2/detail endpoint. This costs one extra signed request per ad (charged as the detail_result event instead of row_result) and is slower than the base list feed, so it's off by default.
How accurate is the ad-performance data?
The actor returns like, ctr, and cost exactly as TikTok Creative Center's endpoint reports them at request time β it does not recompute or estimate any of these values. Because Creative Center itself only exposes relative/normalized metrics (a percentage CTR, an index-style cost) rather than absolute ad-spend figures, treat these as TikTok's own directional signals, not audited campaign numbers.
How many ads can I get per run?
The realistic ceiling is ~40 ads per (country, period) combination β this is a limit of TikTok's anonymous Creative Center tier, not the actor. maxItems (default 40, max 200) caps how many the actor will collect per country, but setting it above ~40 doesn't raise what TikTok actually returns. To get more rows in one run, add more entries to countryCodes β each country reuses the same signed session and carries its own ~40-ad ceiling, so five countries realistically nets ~200 rows.
What's the most useful filter combination for finding winning creative?
sortOrder: "ctr" combined with industry and objective narrows straight to the highest-click-through ads in your category and goal β that combination, plus a minLikes floor, is the fastest way to a clean swipe file without scrolling Creative Center's paginated UI by hand.
Does this scraper work with Claude, ChatGPT, and AI agent frameworks?
Yes, as a standard HTTP-callable Apify Actor: any agent framework that can call the Apify API (start a run, poll status, read the dataset) can drive it. No actor-specific MCP server integration is documented here beyond that standard API surface.
How does this compare to other TikTok Creative Center scrapers?
As observed on the Apify Store on 2026-07-26, parseforge/tiktok-creative-center-top-ads-scraper's documented data fields are limited to adId, allCountries, country, headline, industryCode, keywords, objective, scrapedAt, thumbnailUrl, videoDuration, and videoUrl β no engagement metrics (likes, CTR, cost) and no landing-page data. khadinakbar/tiktok-ads-scraper's README documents like, ctr, and tiered engagement scoring similar in spirit to this actor's ctrTier, but as of that same date its own FAQ states detail-level fields ("landing URLs, CTA text, advertiser IDs") are "on the roadmap" and not yet shipped β this actor ships that detail enrichment (landing_page, comment, share, countries) today as the opt-in includeDetails input, billed per ad via the detail_result event.
Can I use this without a TikTok account or API key?
Yes. No TikTok login, advertiser account, or API key is required β the actor captures its own anonymous signed Creative Center session via a headless browser. You only need an Apify account and a residential proxy, which defaults to Apify's own Residential proxy group unless you override proxyConfiguration.
Conclusion
The TikTok Creative Center Top Ads Scraper turns TikTok's public Top Ads inspiration library into structured, filterable JSON β ad copy, brand, engagement metrics, video files, and opt-in per-ad detail β without requiring a TikTok account or hand-built signed-session infrastructure. It's built for performance marketers building swipe files, agencies tracking client categories, and researchers mapping ad-format trends across countries, with an honest ~40-ad-per-country ceiling stated up front rather than discovered mid-run. Start a run from the Apify Console or trigger it via the apify_client Python example above to pull today's top-performing TikTok ad creatives into your own pipeline.