Home › Guides › TikTok Ads Library scraper
TikTok Ads Library scraper: targeting, reach and payer for every ad — plus Creative Center Top Ads
TikTok publishes two public ad sources. The Ad Library is its ad repository for the EU Digital Services Act, extended to Switzerland, the UK and Turkey: for the ads shown there it lists targeting, unique users by country, age and gender, who paid for the ad, the advertiser's registered country and TikTok account, landing page and call to action. Creative Center Top Ads covers 28 countries, with likes, comments, shares, CTR rank, the video and second-by-second retention and CTR curves. The TikTok Ads Library & Top Ads Scraper reads both — no TikTok account, no login, no cookies, no API key.
Who it's for
- Competitor creative research — a brand's ads in Europe, up to 5,000 per search term, with copy, video, landing page, call to action and how many people each ad reached per country.
- Targeting intelligence — which ages, genders and countries a competitor targets, audience sizes, interests and whether they use custom audiences.
- New-business leads for agencies and ad-tech — a country's TikTok advertisers ranked by reach, with their landing domains, TikTok accounts and the agency that pays for their ads.
- Brand protection — ads using your brand name in their text, by any advertiser, including removed ads with TikTok's reason and the countries where they were removed.
- Creative inspiration — Creative Center Top Ads per country and industry, with likes, CTR rank and retention and CTR curves.
- Market monitoring — scheduled runs that return only new ads per brand or category.
Three kinds of rows
Every row has every key present, with null where TikTok publishes nothing. recordType tells the rows apart:
| recordType | One row per | What it holds |
|---|---|---|
ad | Ad Library ad | Ad text, format, video or images, landing URL and domain, app store link, call to action, objective, category; first and last shown, days shown, unique users (TikTok's range); reach by country with age and gender; target countries, ages, genders, audience size, interests, custom audience; advertiser name, business ID, payer, registered country and TikTok account |
advertiser | Advertiser in a search | Ads found and ads with video, first and last shown, countries reached, summed reach range, largest ad reach, landing domains, app store links, calls to action, objectives and categories with counts, sample ads, payer, registered country, TikTok account and a link to all their ads |
topAd | Creative Center Top Ad | Title, brand, industry, objectives, countries, CTR rank, likes, comments, shares, budget level, video with duration and size, landing page; retention and CTR curves with Analytics on |
status | Search that found nothing | The reason, in error — never charged |
Targeting, reach by country, payer and the other advertiser details come from each ad's detail page, which is read when Ad details is on (the default). A real ad row, trimmed, from a test run on 2026-10-01 — advertiser search NIKE Retail B.V., all countries, last 90 days:
{
"recordType": "ad",
"adId": "1875934571618481",
"advertiserName": "NIKE Retail B.V.",
"paidBy": "INITIATIVE MEDIA B.V.",
"advertiserCountry": "Netherlands",
"advertiserTikTokUsername": "nike",
"adFormat": "video",
"landingDomain": "nike.com",
"callToAction": "Shop now",
"objective": "Traffic",
"firstShown": "2026-10-01",
"uniqueUsersSeen": "300K-400K",
"targetCountries": ["NL"],
"targetAudienceSize": "1.3M-1.6M",
"targetInterests": ["Sports & Outdoors"],
"detailStatus": "ok"
}
Input example: a competitor's ads
One advertiser, all countries, last 90 days:
{
"mode": "library",
"searchTerms": ["NIKE Retail B.V."],
"searchBy": "advertiser",
"datePreset": "last90",
"maxAdsPerQuery": 200
}
Search terms can be keywords, advertiser names or library.tiktok.com links (a search, an advertiser or one ad). Filters cover the library countries, the last 7, 30, 90, 180 or 365 days or custom dates, active and inactive ads, ad format and sort order; maxAdsPerQuery goes up to 5,000 per search term. Put a keyword in double quotes for the exact phrase — without quotes, TikTok matches ads containing any of the words.
Advertiser rows: who advertises, and which agency pays
With Output set to Advertisers or Both, every search also returns one row per advertiser. Leave the search term empty and you get the ads shown in the chosen countries and period (TikTok lists up to 5,000); sorted by reach, that becomes a ranked list of a country's TikTok advertisers without a keyword. Each row carries the payer — the “Ad paid for by” entity, often the media agency — plus the registered country, TikTok account, landing domains and app store links.
{
"mode": "library",
"searchTerms": [],
"countries": ["DE"],
"datePreset": "last30",
"sortBy": "reachHigh",
"maxAdsPerQuery": 300,
"includeDetails": false,
"output": "advertisers"
}
That input returned 222 advertiser rows in 3.7 minutes on 2026-10-01. One row from the same kind of search, trimmed:
{
"recordType": "advertiser",
"advertiserName": "McDonald's Deutschland Inc.",
"paidBy": "OMD München GmbH",
"advertiserCountry": "Germany",
"advertiserTikTokUsername": "mcdonaldsde",
"adsFound": 1,
"countriesReached": ["DE"],
"largestAdReach": "1M-10M",
"landingDomains": ["mcdonalds.com"]
}
Read totalAdReachMin and totalAdReachMax with care: they are the sum of each ad's unique-user range, so one person who saw three ads counts three times. Use them to rank advertisers, not as a head count. An ad found by two search terms counts for the first one only, and the few ads with neither an advertiser name nor a business ID — 8 of 300 in a test in France — belong to no advertiser row.
Top Ads, and why CTR rank is a rank
Creative Center shows 20 ads per filter combination to visitors who are not logged in, and hides keyword search. With sweepFilters on (the default), the scraper combines sort orders, objectives and industries to collect beyond that limit — in the US over 30 days, 124 of the 129 ads TikTok lists, from 49 combinations.
CTR rank is a rank, not a rate. Without a login, Creative Center shows where an ad's CTR ranks, not the rate itself. A ctrRank of “Top 25%” means the ad is in the best quarter; ctrTopPercent holds the same number (25), and lower is better. budgetLevel is Creative Center's budget label (Low, Medium, High). With Analytics on, each Top Ad also gets retentionCurve and ctrCurve as second-by-second points.
{
"mode": "topAds",
"topAdsCountries": ["US"],
"topAdsPeriod": "30",
"maxTopAds": 50,
"includeTopAdAnalytics": true
}
Measured fill rates
Share of rows with a value, measured on the Apify platform on 2026-10-01:
| Field | One big brand, 1,000 ads | 300 keyword ads, many small advertisers |
|---|---|---|
| Advertiser name, first/last shown, unique users | 100% | 99–100% |
| Business ID, who paid, registered country | 99.7% | 98–100% |
| Reach by country · targeting (countries, ages, genders, audience size) | 99.7% | 99–100% |
| Reach by age and gender | 86% | 79% |
| Landing URL | 66% | 51% |
| Call to action · objective | 86% · 86% | 46% · 79% |
| Video or image | 54% (catalog ads have none) | 100% |
| Advertiser's TikTok account | 90% | 15% |
| Interests | 20% | 6% |
Advertiser rows for France ranked by reach (221 rows): name, business ID, payer, registered country and countries reached 100%; landing domain or app store link 80%; call to action 85%; TikTok account 59%. Top Ads (380 ads, 5 countries): title, video, CTR rank, likes, comments, shares, objectives and countries 99.5–100%; industry 95%; landing page 71%; brand 19%.
Speed on the same day (1 GB memory): the form default of 10 ads with details took 24 s; one advertiser's 1,000 ads with details 19 min; 1,000 keyword ads without details 5.2 min; Top Ads for 5 countries × 100 gave 380 ads in 3 min. Ad details are the slow part — TikTok allows only a few detail pages per session — so turn them off when you need a fast list.
Honest limits
- No US ads in the Ad Library. It covers the 30 EU/EEA countries, Switzerland, the UK and Turkey. For US creative inspiration, use Top Ads mode.
- No ad spend. TikTok does not publish it in the EU library (0 of 335 ads had a value), so there is no spend field.
- Turkey has targeting but no reach. Ages, genders and audience size are published; reach numbers stay
null. - The payer can flip. TikTok sometimes returns the advertiser's own name instead of the paying agency for the same ad — 5 times in 25 repeated reads of two ads with an agency payer. Advertiser rows prefer an agency payer when any of the advertiser's ads shows one.
- New ads start low. Of ads first shown in the last two days, 83–85% showed
0-1Kusers in two keyword tests with many small advertisers, and 42% for NIKE Retail, until TikTok updates the number. - Not every ad has a landing page. Many “Shop now” sales videos have none in the library; app ads link to an app store instead, and some catalog ads have neither video nor images.
- Keyword searches stop at 5,000 results, some of them listed twice, so a full search gives fewer different ads (
temu, 30 days: 4,440). - Media links expire. TikTok signs video links for a few hours;
mediaExpiresAtandvideoUrlExpiresAtsay when. Download soon after the run. - Brand is often empty on Top Ads, because it is often empty in Creative Center itself.
- Personal data. Advertiser names can be names of people (sole traders); handle personal data according to the GDPR. The scraper is not affiliated with TikTok.
Pricing
Pay per event, only for delivered rows: each Ad Library ad row, each ad row that also carries its detail page, each advertiser row, each Top Ads row (detail included) and each Top Ads row with retention and CTR curves. Status rows — a search with no ads, an unknown advertiser, a failed source — are never charged, and an ad found by two search terms is delivered and charged once. Current prices are on the actor's Pricing tab.
Related
More ad-intelligence scrapers on foXLabs. For Facebook and Instagram ads with EU reach, payer and agency detection, see the Facebook Ads Library scraper guide; for LinkedIn's Ad Library and company pages, LinkedIn company data without a login.
Frequently asked questions
Do I need a TikTok account or cookies?
No. The scraper reads the public Ad Library and Creative Center pages without a TikTok account, login, cookies or API key.
Which countries does the TikTok Ad Library cover?
The 30 EU/EEA countries, Switzerland, the United Kingdom and Turkey. It is TikTok's ad repository for the EU Digital Services Act, extended to those three countries. US ads are not in it; use Top Ads mode for US creative inspiration.
How far back does the Ad Library go?
TikTok keeps an ad for one year after it was last shown.
What is ctrRank?
Without a login, Creative Center shows where an ad's CTR ranks, not the rate itself. “Top 25%” means the ad is in the best quarter. ctrTopPercent holds the same number (25), and lower is better.
How does monitoring work?
With onlyNewAds, delivered ad IDs are remembered per search term, countries and filters in a key-value store in your account named after monitorName. The next run skips them, so a scheduled run returns only ads you have not received before.
Try it: start with one of the inputs above, or the form's 10-ad default, then pull the rows through the Apify API or into Make, n8n or Zapier.
Open the TikTok Ads Library Scraper →Or browse all foXLabs datasets on Apify.