TikTok Ads Library Scraper — EU Library & Creative Center avatar

TikTok Ads Library Scraper — EU Library & Creative Center

Pricing

from $15.00 / 1,000 results

Go to Apify Store
TikTok Ads Library Scraper — EU Library & Creative Center

TikTok Ads Library Scraper — EU Library & Creative Center

Scrape TikTok Ads Library (EU/EEA/UK) and Creative Center (global). Extract ad creatives, targeting data, reach estimates, CTR, video URLs, and industry insights. Dual-source coverage — no login required. Residential proxies built-in.

Pricing

from $15.00 / 1,000 results

Rating

0.0

(0)

Developer

Yuliia Kulakova

Yuliia Kulakova

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

TikTok Ads Library Scraper

Spy · Analyze · Outperform
The only TikTok ad scraper that covers both the EU Ads Library and the global Creative Center —
targeting data, reach estimates, CTR, video URLs, and industry insights. All in one run.

Why this one? · Data sources · Input · Output · Use cases · Pricing · Limitations


TikTok Ads Library Scraper pulls ad data from two complementary TikTok sources:

  • TikTok Ads Library — TikTok's official DSA transparency database for EU/EEA/UK. No login required. Returns targeting details, audience reach, and ad creatives for all ads shown in Europe.
  • TikTok Creative Center — TikTok's global top-performing ads showcase. Covers US, APAC, LATAM, and every other market. Returns CTR, engagement metrics, video URLs, and industry data.

Both sources are public and require no TikTok account.


✨ What makes this different

FeatureThis actorMost others
Covers both Ads Library + Creative Center✅ dual-source❌ one source only
Global coverage via Creative Center (US, APAC, LATAM…)❌ EU-only
EU DSA reach estimates (uniqueUsersSeen, usersTargetedEstimate)
CTR and engagement metrics (Creative Center)
Video CDN URLs + thumbnailPartial
Industry + campaign objective (Creative Center)
Budget tier (LOW / MEDIUM / HIGH)
Graceful handling of rate limits (429/403 logging)Silent failures
Warns when 3,600-result cap is reachedNo warning
Zero-result detection — no wasted compute
Residential proxies built-in (required for TikTok)

📡 Data sources explained

Source 1 — TikTok Ads Library (library)

PropertyDetail
URLhttps://library.tiktok.com/
Login required❌ No
CoverageEU-27 + EEA (IS, LI, NO) + Switzerland + UK
Why EU only?Mandated by EU Digital Services Act (DSA), Article 39
Result cap3,600 ads per query (TikTok platform limit — 300 pages × 12 ads)
Unique fieldstargetAgeGroups, targetGender, targetInterests, targetBehaviors, uniqueUsersSeen, uniqueUsersSeenByCountry, adPaidForBy, rejectedInCountries

Use this source when: you want DSA transparency data — who targeted whom, with what message, reaching how many people in Europe.


Source 2 — TikTok Creative Center (creative_center)

PropertyDetail
URLhttps://ads.tiktok.com/business/creativecenter/
Login required❌ No
CoverageGlobal — US, GB, AU, BR, JP, KR, IN, and 50+ more
Data typeTop-performing ads (sorted by CTR and engagement)
Unique fieldsctr, likes, industry, campaignObjective, budgetRange, videoMetrics

Use this source when: you want global competitive intelligence — what's performing best in your category, market, or country right now.


Source 3 — Both (both)

Runs both sources in a single actor run. Results are deduplicated automatically. Each result includes a source field so you always know where the data came from.


⚙️ Input

FieldTypeDefaultDescription
sourcestring"library"library · creative_center · both
searchTermsstring[]["Nike"]Keywords or brand names (library source only)
countriesstring[]["DE"]ISO 2-letter codes. Library: EU/EEA/UK only. Creative Center: any country.
adTypestring"ALL"ALL · VIDEO · IMAGE
dateFromstringShow ads first seen on/after this date (YYYY-MM-DD). Library only.
dateTostringShow ads first seen on/before this date (YYYY-MM-DD). Library only.
maxResultsinteger50Max ads per search term + country pair. Hard cap: 3,600 (library).
resolveAdDetailsbooleanfalseLibrary only. Fetch each ad's detail page to unlock: adPaidForBy, advertiserBusinessId, targetAgeGroups, targetGender, targetInterests, targetCountries, targetBehaviors. Adds ~3 sec per ad.

Note on countries: For source: "library", only European countries work (see supported list). For source: "creative_center", any country code works including US, GB, AU, BR, JP.


Example inputs

Quick test — Nike EU ads (library)

{
"source": "library",
"searchTerms": ["Nike"],
"countries": ["DE"],
"adType": "ALL",
"maxResults": 25
}

Multi-country competitor research — 3 brands × 3 EU markets

{
"source": "library",
"searchTerms": ["Adidas", "Nike", "Puma"],
"countries": ["DE", "FR", "NL"],
"adType": "ALL",
"maxResults": 100
}

Global top video ads — US market (Creative Center)

{
"source": "creative_center",
"countries": ["US"],
"adType": "VIDEO",
"maxResults": 50
}

Combined — EU library + global Creative Center

{
"source": "both",
"searchTerms": ["Samsung"],
"countries": ["DE", "US"],
"adType": "ALL",
"maxResults": 50
}

Date range — campaign window analysis

{
"source": "library",
"searchTerms": ["Zalando"],
"countries": ["DE"],
"dateFrom": "2025-01-01",
"dateTo": "2025-03-31",
"maxResults": 200
}

E-commerce swipe file — top image ads in UK

{
"source": "creative_center",
"countries": ["GB"],
"adType": "IMAGE",
"maxResults": 100
}

Supported library countries

The Ads Library source works only for EU/EEA/Switzerland/UK countries. Unsupported countries are automatically skipped with a warning — the actor does not crash.

EU-27: AT BE BG CY CZ DE DK EE ES FI FR GR HR HU IE IT LT LU LV MT NL PL PT RO SE SI SK
EEA: IS LI NO
Other: CH (Switzerland) GB (United Kingdom)

For any other country (US, AU, BR, JP…) use source: "creative_center".


📦 Output schema

Each item in the dataset represents one ad. The source field tells you whether it came from the Ads Library or Creative Center.

{
"adId": "7318291038472910337",
"source": "library",
"advertiserName": "Zalando SE",
"advertiserBusinessId": null,
"adPaidForBy": null,
"adText": null,
"videoUrl": "https://v19-webapp.tiktok.com/video/tos/.../.mp4",
"thumbnailUrl": "https://p19-sign.tiktokcdn-us.com/tos-useast5-p-0068-tx/.../cover.jpg",
"imageUrls": [],
"firstShownDate": "2025-02-10",
"lastShownDate": "2025-03-28",
"adStatus": "INACTIVE",
"daysRunning": 46,
"uniqueUsersSeen": null,
"uniqueUsersSeenByCountry": [],
"targetCountries": [],
"targetAgeGroups": [],
"targetGender": null,
"targetInterests": [],
"targetAudienceType": null,
"targetBehaviors": null,
"usersTargetedEstimate": null,
"rejectedInCountries": [],
"industry": null,
"campaignObjective": null,
"budgetRange": null,
"ctr": null,
"likes": null,
"videoMetrics": null,
"scrapedAt": "2025-04-04T14:23:11.000Z"
}

Library (default — resolveAdDetails: false): Returns advertiser name, video/image creatives, ad dates, and run status. Reach estimates and targeting data require resolveAdDetails: true.

Library example with resolveAdDetails: true (full targeting data unlocked):

{
"adId": "7318291038472910337",
"source": "library",
"advertiserName": "Zalando SE",
"advertiserBusinessId": "7123456789012345",
"adPaidForBy": "Zalando SE",
"adText": null,
"videoUrl": "https://v19-webapp.tiktok.com/video/tos/.../.mp4",
"thumbnailUrl": "https://p19-sign.tiktokcdn-us.com/tos-useast5-p-0068-tx/.../cover.jpg",
"imageUrls": [],
"firstShownDate": "2025-02-10",
"lastShownDate": "2025-03-28",
"adStatus": "INACTIVE",
"daysRunning": 46,
"uniqueUsersSeen": { "range": "10M-20M" },
"uniqueUsersSeenByCountry": [
{ "country": "DE", "impressions": "8.4M" },
{ "country": "AT", "impressions": "1.2M" }
],
"targetCountries": ["DE", "AT", "CH"],
"targetAgeGroups": ["18-24", "25-34", "35-44"],
"targetGender": "Female",
"targetInterests": ["Fashion & Accessories", "Shopping"],
"targetAudienceType": null,
"targetBehaviors": { "videoInteractions": true, "creatorInteractions": false },
"usersTargetedEstimate": "8.5M-10.4M",
"rejectedInCountries": [],
"industry": null,
"campaignObjective": null,
"budgetRange": null,
"ctr": null,
"likes": null,
"videoMetrics": null,
"scrapedAt": "2025-04-04T14:23:11.000Z"
}

Note: adText is always null for Library source — TikTok does not expose ad copy through any public Library API endpoint.

Creative Center example:

{
"adId": "7401234567890123456",
"source": "creative_center",
"advertiserName": "GlowLab Skincare",
"advertiserBusinessId": null,
"adPaidForBy": null,
"adText": "We tested 100 skincare products. This one actually works.",
"videoUrl": "https://v19-webapp.tiktok.com/video/tos/.../video.mp4",
"thumbnailUrl": "https://p16-sign-va.tiktokcdn.com/tos/.../cover.jpg",
"imageUrls": [],
"firstShownDate": null,
"lastShownDate": null,
"daysRunning": null,
"adStatus": "ACTIVE",
"uniqueUsersSeen": null,
"uniqueUsersSeenByCountry": [],
"targetCountries": ["US"],
"targetAgeGroups": [],
"targetGender": null,
"targetInterests": [],
"targetAudienceType": null,
"targetBehaviors": null,
"usersTargetedEstimate": null,
"rejectedInCountries": [],
"industry": "Beauty & Personal Care",
"campaignObjective": "TRAFFIC",
"budgetRange": "HIGH",
"ctr": 3.24,
"likes": 18400,
"videoMetrics": {
"duration": 28.5,
"width": 1080,
"height": 1920
},
"scrapedAt": "2025-04-04T14:23:45.000Z"
}

Creative Center: Returns ad title, video creative, performance metrics (CTR, likes), industry, campaign objective, and budget tier. Dates, reach figures, and targeting details are not available from TikTok's Creative Center API.


Field reference

FieldSourceTypeNotes
adIdbothstringUnique TikTok ad ID
sourcebothstringlibrary or creative_center
advertiserNamebothstringBrand running the ad
advertiserBusinessIdlibrary*string|nullRequires resolveAdDetails: true. TikTok business platform ID
adPaidForBylibrary*string|nullRequires resolveAdDetails: true. DSA transparency: who paid for the ad
adTextcreative_centerstring|nullAd title/copy. Null for library source
videoUrlbothstring|nullDirect CDN video URL (.mp4)
thumbnailUrlbothstring|nullCover image URL
imageUrlsbothstring[]Static image creative URLs. Populated for IMAGE ads
firstShownDatelibrarystring|nullFirst impression date (YYYY-MM-DD). Null for CC
lastShownDatelibrarystring|nullMost recent impression date. Null for CC
daysRunninglibraryinteger|nullDays since first shown. Null for CC
adStatusbothstringACTIVE or INACTIVE (CC always returns ACTIVE)
uniqueUsersSeenlibrary*object|null{range: "10M-20M"} impression estimate. Requires resolveAdDetails: true. Null for CC
uniqueUsersSeenByCountrylibrary*object[]Per-country breakdown [{country, impressions}]. Requires resolveAdDetails: true. Empty array otherwise
targetCountrieslibrary* / CCstring[]Library: requires resolveAdDetails: true. CC: always populated
targetAgeGroupslibrary*string[]Requires resolveAdDetails: true. Age brackets: 18-24, 25-34, etc.
targetGenderlibrary*string|nullRequires resolveAdDetails: true. Male, Female, or All
targetInterestslibrary*string[]Requires resolveAdDetails: true. Interest categories
targetAudienceTypelibrary*string|nullRequires resolveAdDetails: true
targetBehaviorslibrary*object|nullRequires resolveAdDetails: true. {videoInteractions, creatorInteractions}
usersTargetedEstimatelibraryinteger|nullEstimated targeted audience size. Null for CC
rejectedInCountrieslibrarystring[]Countries where ad was rejected. Empty for CC
industrycreative_centerstring|nullAdvertiser industry category. Null for library
campaignObjectivecreative_centerstring|nullTRAFFIC, CONVERSIONS, REACH, etc. Null for library
budgetRangecreative_centerstring|nullLOW / MEDIUM / HIGH. Null for library
ctrcreative_centerfloat|nullClick-through rate. Null for library
likescreative_centerinteger|nullVideo like count. Null for library
videoMetricscreative_centerobject|null{duration, width, height}. Null for library
scrapedAtbothstringISO 8601 scrape timestamp

Field availability by source

Fieldlibrarycreative_centerNotes
advertiserName
adTextNot returned by TikTok Library search API
videoUrl / thumbnailUrl
imageUrlsPopulated for IMAGE ads
firstShownDate / lastShownDateLibrary only
daysRunningComputed from dates
adStatus✅ (always ACTIVE)
uniqueUsersSeen✅*Requires resolveAdDetails: true. Returns {range: "10M-20M"}
uniqueUsersSeenByCountry✅*Requires resolveAdDetails: true. Per-country impressions
usersTargetedEstimate✅*Requires resolveAdDetails: true. Targeted audience size range
targetAgeGroups / targetGender✅*Library: enable resolveAdDetails: true
targetInterests / targetBehaviors✅*Library: enable resolveAdDetails: true
targetCountries✅*Library: enable resolveAdDetails: true
advertiserBusinessId / adPaidForBy✅*Library: enable resolveAdDetails: true
rejectedInCountriesDSA compliance data
industry / campaignObjectiveCC-only metrics
budgetRangeLOW / MEDIUM / HIGH tier
ctr / likesPerformance metrics from CC
videoMetricsDuration, dimensions

Why are some fields null? TikTok's public APIs only expose a subset of ad data. Fields marked ❌ are not returned by TikTok — this is a platform limitation, not a scraper bug. No TikTok scraper can retrieve data that TikTok doesn't expose publicly.


🎯 Use cases

Competitor creative intelligence Pull all active ads from your competitor's brand in their key markets. Analyze which video hooks, CTAs, and creative formats they're investing in — and how large an audience they're reaching.

Building a TikTok ad swipe file Use Creative Center source to extract top-performing video ads by country, industry, and objective. Filter by budgetRange: HIGH and ctr > 2.0 to collect only proven performers for your creative research.

EU DSA compliance monitoring Track political, social, or issue-based advertisers in Europe using the Ads Library source. The adPaidForBy, targetAgeGroups, targetGender, and targetInterests fields reveal who is being targeted and by whom — exactly what DSA Article 39 requires to be transparent.

Agency multi-brand reporting Run weekly scrapes for a portfolio of brands across multiple EU markets. Export to CSV, push to Google Sheets, or integrate via Apify API into your reporting dashboard.

E-commerce market intelligence Monitor competitor ads in specific countries before entering a new market. See what formats (video vs image), what hooks, and which brands are getting the highest CTR in your niche.

Ad spend estimation (EU only) While TikTok doesn't expose exact spend, uniqueUsersSeen + targetCountries gives you a strong signal of which campaigns are getting real budget. A campaign reaching 500K+ users across 5 EU countries is clearly a priority for that advertiser.

Creative trend analysis Track how creative formats are shifting over time. Run the same query monthly and compare: are competitors shifting from video to image? Are they testing new CTA types? Which hooks are disappearing and which are growing?

Influencer & creator strategy The targetBehaviors.creatorInteractions field reveals which advertisers are targeting users who engage with specific creator profiles — a strong signal about which creator niches are commercially attractive.


💰 Pricing

From $15.00 / 1,000 ads — no monthly fees, pay only for what you scrape.

ModeCoverage~Cost per 1,000 ads
source: "library"EU/EEA/UK DSA data~$15
source: "creative_center"Global top ads~$15
source: "both"Combined — max data~$16–17

The both mode runs two browser sessions (one per source) which adds a small amount of Apify platform compute on top of the base event fee. No monthly fees — pay only for what you scrape.


⚠️ Limitations

TikTok Ads Library is EU/EEA/UK only This is a hard platform constraint — TikTok built the Ads Library specifically for EU Digital Services Act compliance. US, APAC, LATAM, and Middle East markets are not available through this source. Use source: "creative_center" for global coverage.

3,600-result hard cap per query (library) TikTok caps the Ads Library at 300 pages × 12 ads = 3,600 results per search. The scraper detects this and logs a clear warning. To get more comprehensive data, run multiple narrower searches (e.g., different date ranges, different keywords).

No spend data TikTok does not expose actual ad spend figures — not even ranges. This is unlike Meta, which provides {min, max} spend for political ads. All TikTok spend intelligence tools (AdSpyder, PiPiAds, etc.) are using estimates, not real figures.

adText is null for Library source TikTok's Ads Library API does not expose ad copy text — not in the search API, not in the detail API. This is a deliberate platform choice. The Creative Center source does return adText (ad title) when the advertiser configured it.

Residential proxies required TikTok aggressively blocks datacenter IP ranges. The scraper uses residential proxies automatically — no configuration needed on your end.

Creative Center shows only top-performing ads The Creative Center does not return all ads — only ads that TikTok's algorithm has identified as top performers in a given period, country, and category. This is by design: it's a creative inspiration tool, not a complete ad archive.

TikTok page structure may change TikTok periodically updates their frontend. If results become empty after an update, open an issue and we'll push a fix within 24–48 hours.


🌍 Supported countries — quick reference

Ads Library (EU only)

CodeCountry
ATAustria
BEBelgium
BGBulgaria
CYCyprus
CZCzech Republic
DEGermany
DKDenmark
EEEstonia
ESSpain
FIFinland
FRFrance
GRGreece
HRCroatia
HUHungary
IEIreland
ITItaly
LTLithuania
LULuxembourg
LVLatvia
MTMalta
NLNetherlands
PLPoland
PTPortugal
RORomania
SESweden
SISlovenia
SKSlovakia
ISIceland
LILiechtenstein
NONorway
CHSwitzerland
GBUnited Kingdom

Creative Center (global — examples)

US GB AU CA DE FR BR MX JP KR IN ID TH PH VN SG MY ZA AE SA — and many more.