Tiktok Ads Library Creative Center Scraper avatar

Tiktok Ads Library Creative Center Scraper

Pricing

from $3.20 / 1,000 ad results

Go to Apify Store
Tiktok Ads Library Creative Center Scraper

Tiktok Ads Library Creative Center Scraper

Extract public TikTok ads, top creatives, landing pages, advertiser data, and creative insights from TikTok Ads Library and Creative Center for competitor research and marketing intelligence.

Pricing

from $3.20 / 1,000 ad results

Rating

0.0

(0)

Developer

Delowar Munna

Delowar Munna

Maintained by Community

Actor stats

0

Bookmarked

125

Total users

29

Monthly active users

8 hours ago

Last modified

Share

TikTok Ads Library & Creative Center Scraper — Ads, Creatives & Landing Pages

Other TikTok ad scrapers hand you a list of ads. This one hands you the strategy behind them.

Every row comes with the landing page the ad points to, the CTA and its category, the hook and offer in the copy, and the creative patterns detected in it — plus a shortlist / review / reference bucket, with a stated reason, so you know which ads are worth your time. It covers both the TikTok Ads Library and the TikTok Creative Center in one run, deduplicates across them, and needs no cookies and no login.

TikTok Ads Library & Creative Center Scraper


⚠️ Coverage — read this first

The two surfaces cover different regions. This trips people up, so it is the first thing on the page rather than a footnote.

SurfaceCoverageWhat it gives you
Creative Center🌍 Global — US, GB, AU, BR, JP, DE…Top-performing ads: video, caption, likes, CTR, industry, objective, duration
Ads Library🇪🇺 EU/EEA + UK, CH, TR only (33 regions)Public ad records: advertiser, first/last shown dates, reach, and — with Resolve Ad Details — CTA, objective and full DSA targeting

The TikTok Ads Library is the EU's Digital Services Act transparency archive. It is not a global ad library. Asking it for US or AU returns nothing — the actor will tell you so in the log rather than silently return an empty run.

Supported Ads Library regions: AT BE BG CH CY CZ DE DK EE ES FI FR GB GR HR HU IE IS IT LI LT LU LV MT NL NO PL PT RO SE SI SK TR

Other limits: TikTok caps Ads Library results at roughly 3,600 per query (300 pages × 12). Creative Center result counts vary by keyword — a niche term may only have 20 top ads in total.


Which mode should I use?

If you want to…UseCountries
Research winning creative, hooks and offers in any marketcreativeCenterAny
Find every public ad a specific EU advertiser is runningadsLibraryEU/EEA, UK, CH, TR
Get reach and audience targeting (DSA data)adsLibrary + Resolve Ad DetailsEU/EEA, UK, CH, TR
Broad competitive intelligencebothMix freely — each surface uses the countries it supports

Why this scraper

Four things no other TikTok ad scraper returns:

  • Landing-page intelligence — the URL the ad points to, its domain, and an inferred page type (product-page, lead-form, app-download…). This is the funnel, not just the ad. Turn on Resolve Ad Details to get it — TikTok only publishes the landing page on its per-ad detail endpoint, so it costs one extra API call per ad and is billed separately.
  • CTA text and a normalized CTA categoryshop-now, sign-up, download, learn-more
  • Hook, offer and creative-pattern tagsurgency-hook, discount-offer, social-proof, problem-solution, ugc-style, and eight more.
  • Analysis buckets with a reason — every ad is scored into shortlist / review / reference / low-priority, and tells you why.

From a real run — a BJ's Wholesale Black Friday ad, and the funnel behind it:

"caption": "Well, I know I'm shopping for a TV during Black Friday… @BJ's Wholesale Club",
"landingPageUrl": "https://bjs.com/deals/promo/black-friday/?utm_source=tiktok&utm_medium=paid",
"landingPageDomain": "bjs.com",
"landingPageType": "landing-page",
"objective": "Traffic",
"industry": "Online Shopping",
"likes": 2093,
"analysisReason": "Has landing page, Clear hook, 1 creative pattern(s) detected, Moderate engagement, Top creative"

And from the Ads Library — who an ad was actually targeted at:

"advertiserName": "HongKong AdTiger Media Co., Limited",
"ctaText": "Learn more",
"countries": ["NL","FI","PL","IT","SE","CH","BE","DE","DK","FR","IE","NO","GB"],
"targetAgeGroups": ["13-17","18-24","25-34","35-44","45-54","55+"],
"targetGender": ["female","male","unknown"],
"targetAudienceSize": "131.5M-160.8M",
"reachRange": "0-1K"

Plus:

  • No cookies, no login. Some Creative Center scrapers require you to paste your own TikTok session cookies. This one does not.
  • Dual-surface with deduplication — an ad found on both surfaces becomes one row, with its lineage preserved.
  • Flat, CSV-ready schema with four pre-configured dataset views. Opens cleanly in Sheets or Excel.
  • A run summary in the Key-Value Store: totals by country, industry, advertiser, CTA and creative pattern.

Input

Example 1 — Landing-page intelligence ⭐

Start here. Top skincare ads in the US, each with the landing page it drives to.

{
"mode": ["creativeCenter"],
"searchTerms": ["skincare"],
"countries": ["US"],
"sortBy": "likes",
"resolveAdDetails": true,
"maxResults": 25
}

resolveAdDetails is what fills landingPageUrl, landingPageDomain and landingPageType. Without it those columns are null — TikTok only publishes the landing page on its per-ad detail record.

Example 2 — Competitor ads in the EU, with DSA targeting

Everything a German advertiser is running: who they are, what they're saying, and who they're targeting.

{
"mode": ["adsLibrary"],
"advertisers": ["Kärcher"],
"countries": ["DE"],
"dateFrom": "2026-01-01",
"dateTo": "2026-06-30",
"resolveAdDetails": true,
"maxResults": 50
}

Set dateFrom / dateTo. Without a window TikTok returns only ads first shown today, so every campaign looks like it ran for 0 days.

The residential proxy this needs is applied automatically — there is nothing for you to configure.

Example 3 — Both surfaces at once

{
"mode": ["adsLibrary", "creativeCenter"],
"searchTerms": ["air fryer"],
"countries": ["DE", "US"],
"dateFrom": "2026-01-01",
"dateTo": "2026-06-30",
"resolveAdDetails": true,
"maxResults": 30
}

DE is used for both surfaces; US is used for Creative Center only (the Ads Library has no US data) — and the log says so. maxResults is split round-robin, so you get both surfaces rather than whichever one filled up first.

Example 4 — Filtered creative research

Beauty ads optimised for conversions, in English, most-liked first.

{
"mode": ["creativeCenter"],
"countries": ["US", "GB"],
"industries": ["Beauty & Personal Care"],
"objectives": ["Conversions"],
"adLanguage": "en",
"sortBy": "likes",
"resolveAdDetails": true,
"maxResults": 50
}

No searchTerms needed — filters alone are a valid discovery method.

Example 5 — Recurring competitor monitoring 💰

The cheapest run there is. Keep a list of competitor ad IDs and re-check them on a schedule. No search, no discovery — you pay only for the ads you asked for, and they always come back fully enriched.

{
"mode": ["adsLibrary"],
"adIds": ["1870685981562098", "1870657101304081"],
"resolveAdDetails": true
}

Pair this with an Apify schedule to track whether a competitor's ads are still running, and how their targeting changes.

Parameters

ParameterTypeDefaultDescription
modeselect[]bothWhich surfaces to scrape: Ads Library, Creative Center, or both
searchTermsstring[]["skincare"]Keywords
advertisersstring[][]Advertiser / brand names (Ads Library)
adLibraryUrlsstring[][]Direct library.tiktok.com URLs
adIdsstring[][]Fetch specific ads by ID, skipping search entirely. The cheapest way to monitor a known set of competitor ads on a schedule — and these rows always come back fully enriched
advertiserIdsstring[][]Ads Library. Look up advertisers by their DSA business ID (the advertiserId in the output)
countriesselect[]["US"]52 countries. Each option says which surface covers it — "Germany (DE) — both", "United States (US) — Creative Center only"
industriesselect[][]21 industries (Creative Center)
objectivesselect[][]Traffic, App Installs, Conversions, Video Views, Reach, Lead Generation, Product sales
adFormatsselect[][]Video, Image
adLanguageselectall16 languages (Creative Center)
creativeCenterPeriodselect180 days7 / 30 / 180 days — the only windows TikTok supports. 180 is the maximum, so it is also the "all time" option. Short windows are frequently empty
sortByselectrecommendedCreative Center. TikTok's recommended order, or most-liked first. Matters when maxResults is small — it decides whether you get the best ads or an arbitrary slice
dateFrom, dateTodateAds Library. Set these. Without a date window TikTok returns only ads first shown today — see the FAQ
maxResultsinteger25Max ads returned (cap 3,600 — TikTok's own limit). You are charged per ad — start small
resolveAdDetailsbooleanfalseAdds landing pages. See above. Charged as ad-detail-result

At least one of searchTerms, advertisers, adLibraryUrls, countries or industries is required.

Creative analysis, landing-page normalization, deduplication and the run summary are always on — they cost nothing extra, so there is no reason to make you choose. Proxying is handled internally: a residential proxy is used automatically, and only when the Ads Library detail path needs it.


Output

Every example below is copied verbatim from a real run (25 ads, both surfaces, resolveAdDetails: true). Nothing here is hand-written.

The schema is stable: 58 columns on every run — whichever surfaces you scrape, whether or not Resolve Ad Details is on. Fields that do not apply come back null rather than disappearing, so a Sheets formula, a BI import or a downstream script never breaks because a column went missing.

What it looks like in a table

sourceSurfaceadvertiserNamecaptionlandingPageDomainctaCategoryobjectivereachRangelikesanalysisBucket
adsLibraryHongKong AdTiger Media Co., LimitedThis cleaning job is open nowlearn-moreSales0-1Kreference
creativeCenterWell, I know I'm shopping for a TV during Black Friday… @BJ's Wholesale Clubbjs.comTraffic2093review
creativeCenterUnder eye protection using not just your typical occlusive…doublebaycosmeceuticals.com.auTraffic4778shortlist

The two surfaces complement each other: the Ads Library tells you who, when and to whom; Creative Center tells you what worked and where it sent people.

Creative Center row — the landing page is the point

A real BJ's Wholesale Black Friday ad. Note landingPageUrl — the actual funnel, with TikTok's own UTM parameters intact.

{
"sourceSurface": "creativeCenter",
"sourceInputType": "search",
"scrapedAt": "2026-07-14T12:05:24.967Z",
"adId": "7576424992980811793",
"videoUrl": "https://v16m-default.tiktokcdn.com/.../video/tos/maliva/...",
"videoThumbnailUrl": "https://p16-common-sign.tiktokcdn.com/tos-maliva-p-0068c799-us/...",
"caption": "Well, I know I'm shopping for a TV during Black Friday, all because of the amazing deals going on right now @BJ's Wholesale Club 👀 … #BJsWholesalePartner #ad",
"landingPageUrl": "https://bjs.com/deals/promo/black-friday/?trc=onso%7Cingm%7Cinf%7C…&utm_source=tiktok&utm_medium=paid",
"landingPageDomain": "bjs.com",
"landingPageType": "landing-page",
"adFormat": "Video",
"objective": "Traffic",
"industry": "Online Shopping",
"countries": ["US"],
"videoDuration": 33.367,
"likes": 2093,
"comments": 20,
"shares": 15,
"ctrRanking": "0.31",
"performanceLabel": "moderate-interest creative",
"hookText": "Well, I know I'm shopping for a TV during Black Friday, all because of the amazi",
"creativeSummary": "video with emotional appeal (Traffic objective)",
"creativePatternTags": ["emotional-appeal"],
"analysisBucket": "review",
"analysisReason": "Has landing page, Clear hook, 1 creative pattern(s) detected, Moderate engagement, Top creative (Creative Center)",
"isTopCreative": true,
"detailResolved": true,
"position": 1
}

Ads Library row — the DSA transparency data

Advertiser identity, the CTA, and who the ad was actually targeted at. This is the data brilliant_gum charges $15/1,000 for.

{
"sourceSurface": "adsLibrary",
"sourceInputType": "search",
"adId": "1870685981562098",
"videoUrl": "https://library.tiktok.com/api/v1/cdn/.../video/...",
"imageUrls": ["https://p16-common-sign.tiktokcdn.com/tos-alisg-p-0051c001-sg/..."],
"caption": "This cleaning job is open now",
"advertiserName": "HongKong AdTiger Media Co., Limited",
"ctaText": "Learn more",
"ctaCategory": "learn-more",
"objective": "Sales",
"adFormat": "Video",
"countries": ["NL","FI","PL","IT","SE","CH","BE","DE","DK","FR","IE","NO","GB"],
"startDate": "2026-07-14T12:05:31.000Z",
"endDate": "2026-07-14T12:05:31.000Z",
"durationDays": 0,
"reachRange": "0-1K",
"targetAgeGroups": ["13-17","18-24","25-34","35-44","45-54","55+"],
"targetGender": ["female","male","unknown"],
"targetAudienceSize": "131.5M-160.8M",
"reachByCountry": [
{ "country": "NL", "impressions": "0-1K" },
{ "country": "DE", "impressions": "0-1K" },
{ "country": "GB", "impressions": "0-1K" }
],
"analysisBucket": "reference",
"analysisReason": "Clear CTA: Learn more, Clear hook",
"detailResolved": true
}

⚠️ startDate === endDate and durationDays: 0 above because this run set no date window. TikTok then defaults to "last shown, newest first" and returns only ads first shown today. Set dateFrom / dateTo and you get real campaign spans (verified: 57–89 days). See the FAQ.

Field availability by source

Fields are null when TikTok does not publish them for that surface — not because the scraper missed them. All figures below are counted from the same real 25-ad run (12 Ads Library + 13 Creative Center).

FieldAds LibraryCreative Center
adId, adFormat, objective, countries, scrapedAt✅ 12/12✅ 13/13
videoUrl✅ 10/12✅ 13/13
imageUrls✅ 12/12
caption, hookText✅ 10/12✅ 13/13
landingPageUrl / Domain / Type🔓 12/13
advertiserName✅ 12/12⚠️ 1/13 — TikTok rarely publishes the brand here
advertiserId🔓 12/12
ctaText, ctaCategory🔓 12/12
industry✅ 13/13
startDate, endDate, durationDays✅ 12/12
reachRange✅ 12/12
targetAgeGroups, targetGender, targetAudienceSize, reachByCountry🔓 12/12
likes, comments, shares, ctrRanking, performanceLabel✅ 13/13
videoDuration✅ 13/13
analysisBucket, analysisReason, creativeSummary✅ 12/12✅ 13/13

✅ published · ⚠️ sometimes · ❌ not published by TikTok for this surface · 🔓 needs Resolve Ad Details · ⭐ no competitor returns this

Always null unless the data exists: adUrl, adDescription, advertiserProfileUrl, regions, adLanguage, musicTitle, impressions (see FAQ), topLikesPercentage, errorType, errorMessage.


Creative analysis

Derived with text heuristics — helpful for triage, not official TikTok metrics.

FieldWhat it is
hookTextThe opening line of the ad copy
offerTextDetected offer ("50% Off", "free shipping", "discount code")
ctaCategoryshop-now, learn-more, sign-up, download, subscribe, contact, watch, apply, claim, other
creativePatternTagsugc-style, product-demo, testimonial, urgency-hook, discount-offer, social-proof, question-hook, listicle, problem-solution, emotional-appeal, product-closeup, comparison
performanceLabelviral-creative, high-interest, moderate-interest, low-interest
analysisBucketshortlist (60+), review (35+), reference (15+), low-priority
analysisReasonPlain-English explanation of the bucket
landingPageTypeproduct-page, collection-page, lead-form, content-page, app-download, homepage, other

Pricing

Usage-based. You are charged per ad returned, so you only pay for results.

EventWhenRate
ad-resultEvery ad row in the datasetsee the Actor's pricing tab
ad-detail-resultOnly with resolveAdDetails, and only for ads actually enrichedsee the Actor's pricing tab

What a run costs

RunEvents
25-ad test run25 × ad-result
1,000 ads1,000 × ad-result
1,000 ads + resolveAdDetails1,000 × ad-result + 1,000 × ad-detail-result

You are never charged for:

  • Failed extractions. If a source breaks, the error row is written so you can see it — free.
  • Ads that could not be detail-enriched (a 403'd ad costs you nothing).
  • The run summary.

Creative analysis, landing-page enrichment, deduplication and the summary are included at no extra cost.


FAQ

Why did my Ads Library run return nothing for the US? The TikTok Ads Library is the EU's DSA transparency archive — EU/EEA, UK, CH and TR only. There is no US data in it. Use creativeCenter for the US; it is global.

Do I need TikTok cookies or a login? No. Neither surface requires an account.

Do I need to configure a proxy? No. There is no proxy option, because there is nothing for you to decide. A residential proxy is applied automatically to the one path that needs it — Ads Library detail pages, which TikTok rate-limits per IP. Creative Center detail (where landing pages come from) goes through an API and needs no proxy at all.

Why is landingPageUrl empty? Turn on Resolve Ad Details. TikTok does not put the landing page in its ad search results — only in the per-ad detail record. That is one extra API call per ad, so it is opt-in and billed as ad-detail-result. With it on, landing pages come back on 100% of Creative Center rows.

Why is advertiserName empty on Creative Center rows? TikTok does not publish the brand for most Creative Center top ads — roughly 15% carry one. It is not a scraping failure. For reliable advertiser identity, use the Ads Library.

Why is impressions empty, and what is reachRange? TikTok never publishes an exact impression count for the Ads Library — it publishes a bucket: "0-1K", "1K-10K", "100K-1M". That bucket is reachRange, and it is the honest value. impressions stays null unless TikTok gives a real number, rather than us inventing one from the bucket's lower bound.

Why do all my Ads Library ads say they started today, and ran for 0 days? Because you did not set a date window. With no dateFrom/dateTo, TikTok defaults to a recent window sorted by "last shown, newest first" — so you only ever see ads first shown today, whose start and end dates are therefore the same. Set dateFrom and dateTo and you get real campaign spans (verified: ads running 61–66 days).

What is an analysisBucket? A triage score. shortlist means the ad has a clear hook, a detected offer, strong engagement and recognisable creative patterns — worth studying. low-priority means none of that fired. analysisReason always tells you why.

How many ads can I get? TikTok caps the Ads Library at ~3,600 per query. Creative Center depends on the keyword — a niche term may only have 20 top ads that exist at all.

My Creative Center run returned zero ads. Is it broken? Probably not — check creativeCenterPeriod. TikTok's top-ads index is sparse over short windows. Measured on skincare / US: 0 ads over 7 days, 0 over 30 days, 23 over 180 days. The default is 180 for exactly this reason. If you pick a shorter window and get nothing, the log will tell you to widen it.

Is this legal? It reads only public, officially-published TikTok surfaces — the DSA transparency archive and the public Creative Center. It accesses no private advertiser accounts, no campaign performance data and no non-public audience data.


Limitations

  • The Ads Library is EU/EEA + UK/CH/TR only. This is TikTok's constraint, not ours.
  • impressions and reachByCountry are TikTok's own range buckets, not exact counts.
  • Creative-analysis fields are keyword heuristics, not official TikTok signals, and will not catch every creative style.
  • resolveAdDetails requires a residential proxy and adds ~3 seconds per ad.
  • Ad copy is rarely published on the Ads Library surface; brand names are rarely published on Creative Center.
  • TikTok may change its page structure or APIs at any time.