TikTok Ads Library Scraper — EU Ad Library & Top Ads avatar

TikTok Ads Library Scraper — EU Ad Library & Top Ads

Pricing

from $1.05 / 1,000 ads

Go to Apify Store
TikTok Ads Library Scraper — EU Ad Library & Top Ads

TikTok Ads Library Scraper — EU Ad Library & Top Ads

Scrape TikTok's EU Ad Library (advertiser, ad text, video, first/last shown, reach by country, targeting) and Creative Center Top Ads (CTR, likes, industry, objective). Only-new monitor mode, advertiser summary. Pay per ad.

Pricing

from $1.05 / 1,000 ads

Rating

0.0

(0)

Developer

LatentLark

LatentLark

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

an hour ago

Last modified

Share

TikTok Ads Library Scraper — EU Ad Library & Top Ads (Creative Center)

For performance marketers, agencies and ad-spy / competitor-research teams. Pull competitors' TikTok ads from both of TikTok's public ad sources in one Actor:

  • 🇪🇺 EU Ad Library (library.tiktok.com): every ad shown in the EU/EEA, Switzerland, the UK and Turkey, with advertiser, ad text, video, first/last shown, reach by country and age/gender/interest targeting, landing page and call to action.
  • 🏆 Creative Center Top Ads (ads.tiktok.com): TikTok's curated best-performing ads in the US and 27 other markets, with CTR, likes, industry, objective, landing page and video in up to 1080p.

Outcome: a clean table of what your competitors run on TikTok right now, plus a weekly "only new ads" feed for monitoring, with no login, no TikTok account and no residential proxy.

  • 🔎 Search by keyword or advertiser (name, Name|bizId or an advertiser link). Exact phrases with "quotes".
  • ♾️ Past TikTok's ceilings: automatic query slicing beyond the EU Library's short pages and Top Ads' 20-ads-per-filter anonymous cap, deduped by ad id.
  • 🔔 Monitor mode: onlyNewSinceLastRun returns only ads you have not seen before (per monitorKey). Skipped ads are free.
  • 📊 Advertiser summary rows: ad count, new ads, countries, industries and landing domains per advertiser.
  • 🟢 Soft fail: if TikTok rate-limits or nothing is found, the run still SUCCEEDS with a free status row explaining why, so schedules stay green.
  • 💸 Pay per ad: $1.50 per 1,000 ads (+$1.00 per 1,000 with details).

Quick start (first run in about 30 seconds)

  1. Click Try for free (or Start in Console). The form is prefilled with source EU Ad Library, keyword nike, country DE, last 30 days and 10 ads max, details on.
  2. Click Start. In about a minute you get ~10 Nike ads shown in Germany (advertiser, ad text, video, cover, first/last shown, reach in DE, targeting, landing page) plus an advertiser summary row, for about $0.03.
  3. Swap in your competitors' names or keywords and countries, raise Max ads per keyword/advertiser (default 200), or switch Source to Top Ads for US creatives.

What you can do with it

  • Competitor ad spy: every TikTok ad a brand ran in Europe in the last 7/30/90/365 days, with the landing pages and offers they push.
  • Creative research: Top Ads by CTR or likes for your industry (e.g. Apparel & Accessories, Beauty & Personal Care) and objective (Conversions, Traffic…) to brief UGC creators.
  • Weekly new-ads alerts: schedule the Actor with onlyNewSinceLastRun and pipe new rows to Slack, email or Google Sheets.
  • Targeting and reach intel (EU): which countries, ages and genders a competitor targets and the estimated reach per country.
  • Lead generation for agencies: brands actively spending on TikTok ads in a market, with their landing domains.
  • Straight into a spreadsheet: send the dataset to Google Sheets with Google Sheets Export.

Input

FieldWhat it does
sourceeuLibrary (default), topAds or both
keywordsEU: advertiser name or ad text (nike, meal kit); "quotes" = exact phrase. Top Ads: only used with topAds.matchKeywords
advertisersEU only: advertiser name (exact legal name works best, e.g. NIKE Retail B.V.), Name|bizId, or an advertiser link from library.tiktok.com
countriesEU: EU/EEA + CH, GB, TR (empty = all). Top Ads: US, GB, DE, FR, JP, BR… or ALL (empty = US)
dateRangeEU: last7days, last30days (default), last90days, lastYear or custom with startDate/endDate
onlyActiveEU: only ads still running
topAds{period: 7|30|180, sortBy: for_you|ctr|like|impression|play_6s_rate|cvr, industry, objective, adLanguage, slice, matchKeywords}
maxAdsPerQueryMax ads per keyword/advertiser × country (EU) or per country × period × filter (Top Ads). Default 200, prefilled 10
includeDetailsLanding page, CTA, objective, reach by country, targeting (EU); landing page, countries, comments/shares (Top Ads). Default on
onlyNewSinceLastRun + monitorKeyMonitor mode: only ads not seen in earlier runs for this key
outputAdvertiserSummaryOne summary row per advertiser (default on)
proxyConfigurationApify datacenter proxy (default). Residential is not needed

EU example (two competitors, three countries, last 90 days):

{
"source": "euLibrary",
"advertisers": ["NIKE Retail B.V."],
"keywords": ["adidas"],
"countries": ["DE", "FR", "IT"],
"dateRange": "last90days",
"maxAdsPerQuery": 100,
"includeDetails": true
}

Top Ads example (US e-commerce, best CTR, last 30 days):

{
"source": "topAds",
"countries": ["US"],
"topAds": { "period": 30, "sortBy": "ctr", "industry": "Apparel & Accessories" },
"maxAdsPerQuery": 50
}

Output

One dataset item per ad (rowType: "ad"). EU Ad Library row (with details):

{
"rowType": "ad",
"source": "euLibrary",
"adId": "1879578150853938",
"advertiserName": "NIKE Retail B.V.",
"advertiserBizId": "6876453864464188162",
"adText": "Neue Winterausrüstung in Nike Factory Stores.",
"videoUrl": "https://library.tiktok.com/api/v1/cdn/…/video/…",
"coverImageUrl": "https://p16-common-sign.tiktokcdn.com/…",
"landingUrl": "https://www.nike.com/de/retail?cp=…",
"landingDomain": "nike.com",
"firstShown": "2026-10-20T00:00:00Z",
"lastShown": "2026-10-25T00:00:00Z",
"daysActive": 6,
"countries": ["DE"],
"reachTotal": "200K-300K",
"reachByCountry": { "DE": "209K" },
"targeting": {
"age": [{ "region": "DE", "18-24": true, "25-34": true, "35-44": true, "45-54": false }],
"gender": [{ "region": "DE", "female": true, "male": true }],
"target_audience_size": "15.2M-18.6M",
"provinces": ["Berlin"]
},
"industry": "Apparel & Accessories",
"objective": "Traffic",
"callToAction": "Learn more",
"tiktokUsername": "nike",
"advertiserRegistryLocation": "Netherlands",
"adLibraryUrl": "https://library.tiktok.com/ads/detail/?ad_id=1879578150853938",
"detailsFetched": true,
"isNew": true,
"sourceInput": "nike",
"scrapedAt": "2026-10-26T22:05:25+00:00"
}

Top Ads row (with details):

{
"rowType": "ad",
"source": "topAds",
"adId": "7685323149223460884",
"advertiserName": null,
"adText": "Ekorren Schlafsofa",
"videoUrl": "https://v16m-default.tiktokcdn.com/…",
"landingUrl": "https://www.sweef.de?utm_source=tiktok…",
"landingDomain": "sweef.de",
"countries": ["DE", "SE"],
"ctr": 0.78,
"likes": 0,
"industry": "Furniture",
"industryParent": "Home Improvement",
"objective": "Conversions",
"videoDurationSec": 30.9,
"topAdsPeriodDays": 30,
"topAdsUrl": "https://ads.tiktok.com/business/creativecenter/topads/7685323149223460884/pc/en",
"detailsFetched": true,
"isNew": true,
"sourceInput": "DE / 30d"
}

Advertiser summary row (rowType: "advertiserSummary"):

{ "rowType": "advertiserSummary", "source": "euLibrary", "groupedBy": "advertiser", "advertiserName": "NIKE Retail B.V.", "advertiserBizId": "6876453864464188162", "adCount": 30, "newAdCount": 30, "firstShown": "2026-10-14T00:00:00Z", "lastShown": "2026-10-25T00:00:00Z", "countries": ["DE"], "industries": ["Apparel & Accessories"], "landingDomains": ["nike.com"] }
  • Status rows (rowType: "status", free) explain soft failures: reason (e.g. eu_library_busy, top_ads_rate_limited, top_ads_no_results, top_ads_unknown_filter, advertiser_not_resolved), a hint, and retry: true/false.
  • Storage → Key-value store → SUMMARY: per keyword/country ads found, slices used, server totals, errors.
  • Dataset view Ads shows a table with cover thumbnails.

Pricing

Pay per event, with volume discounts on higher Apify plans:

EventWhat it isFree planBronzeSilverGold+
apify-actor-startOnce per run (per GB of memory; default 512 MB = one start)$0.005$0.005$0.005$0.005
adOne ad saved to the dataset$0.0015$0.00135$0.0012$0.00105
ad-detailsExtra detail fetch that succeeded for an ad (includeDetails)$0.001$0.0009$0.0008$0.0007
advertiser-summaryOne advertiser summary row$0.003$0.0027$0.0024$0.0021
  • Free: status rows, ads skipped by only-new mode, duplicates, and details that failed to load.
  • Examples (Free plan): 10 ads with details + 1 summary ≈ $0.04; 1,000 EU ads without details ≈ $1.51; 1,000 ads with details ≈ $2.51 plus summary rows.
  • Set Max cost per run in Console to cap spend; the Actor stops cleanly at the limit.

How it works and limitations

  • EU Ad Library covers Europe only. It is TikTok's DSA transparency archive: ads shown in the EU/EEA, Switzerland, the UK and Turkey. For US creatives use source: "topAds".
  • Top Ads is a curated sample, not a full library. Anonymous Creative Center access returns at most 20 ads per (country, period, sort order, industry, objective). With slice: true (default) the Actor combines sort orders and industry/objective sub-filters to go further (e.g. 142 of 143 US ads for 30 days). TikTok's pool itself tops out around 400 ads for 180 days or ALL countries.
  • Top Ads brand is often empty. Creative Center hides brand_name for many ads, so advertiserName can be null. Use landingDomain to identify the brand; advertiser summaries for Top Ads are grouped by landing domain (2+ ads per group).
  • Top Ads has no keyword search without a login. topAds.matchKeywords: true filters the fetched Top Ads by your keywords client-side.
  • EU short pages. TikTok's EU search often stops after ~50 ads per query; the Actor re-requests, flips sort orders, halves date windows and splits by country to go further, deduping by ad id.
  • "System busy" (HTTP 421). TikTok's EU Library answers some requests with 421; the Actor re-mints its session token and retries automatically (about 1 in 5 requests on datacenter proxies, all recovered in tests). Persistent 421s end with a free eu_library_busy status row.
  • Reach and targeting come from the EU detail page and are TikTok's own estimates (ranges like 200K-300K).
  • Video and image URLs are signed TikTok CDN links that expire after some days; download what you need soon after the run.
  • Public data only: no login, no TikTok account, no private data.

FAQ

I got 0 results. Check the source and countries first: EU Ad Library only has ads shown in Europe (a US-only brand returns nothing; use Top Ads). Try a wider dateRange (last90days), a shorter keyword (nike instead of nike air max 90 sale), or remove quotes. For advertisers, use the exact legal name shown in the library (e.g. NIKE Retail B.V., not Nike) or paste the advertiser link. For Top Ads, try period: 180, a parent industry, or fewer filters. The status row and the SUMMARY record say what happened.

Why is advertiserName empty on Top Ads? TikTok does not show the brand for many Creative Center ads. Use landingDomain and topAdsUrl.

Can I get US ads with reach and targeting? No public TikTok source has that for the US. EU ads have reach/targeting; US ads are available only as Top Ads (CTR, likes, industry, objective).

How do I monitor a competitor weekly? Turn on Only new ads since last run, set a Monitor key (e.g. nike-weekly), and create a schedule. Each run returns only ads not seen before for that key.

Some runs show top_ads_rate_limited or eu_library_busy. TikTok throttled the requests. Partial results are kept, the run succeeds, and you can re-run later.

More from LatentLark