TikTok Ads Library Scraper: EU Ads, No Login
Pricing
from $0.80 / 1,000 ads
TikTok Ads Library Scraper: EU Ads, No Login
Scrape the TikTok Ad Library (EU Commercial Content Library) by advertiser or keyword across 32 EEA, Swiss and UK markets, no login. Advertiser, first and last shown, reach band, video and image URLs, status, and DSA targeting by country, age and gender on request. JSON, CSV, API. Pay per ad.
Pricing
from $0.80 / 1,000 ads
Rating
0.0
(0)
Developer
Automation Craft
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
3 days ago
Last modified
Categories
Share
TikTok Ads Library Scraper: EU Ads, No Login
Scrape the TikTok Ad Library (TikTok's EU Commercial Content Library at library.tiktok.com) by advertiser name, keyword or pasted URL, in any of the 32 EEA, Swiss and UK markets it serves, with no login, no cookies and no API key. Every ad row carries the advertiser, the ad title, first and last shown dates, the reach band TikTok publishes ("Unique users seen"), status and rejection notes, and the video and image URLs. Turn on ad details and each ad also gets the Digital Services Act block: reach by country, age and gender, and the targeting the advertiser declared.
You pay per ad delivered. Duplicates, ads your dedup memory already knows, query summaries, status rows, refused pages and empty runs cost nothing.
Quick start
- Open the Actor and type advertiser names or keywords into Advertiser names, keywords or Ad Library URLs, one per line, exactly as you would in the Ad Library search box (
nike,adidas). You can also paste anylibrary.tiktok.com/ads?...URL; its region, dates and filters are applied to that query. - Pick one or more Ad target countries. The library only serves EEA, Swiss and UK markets, because it exists under the EU Digital Services Act.
- Set Max ads per query and Max ads (total). Leave both at 0 for everything the library serves.
- Tick Fetch ad details if you want reach by country, age and gender and the declared targeting on every ad (8.00 per 1,000 detail records, see the pricing section for the speed it runs at).
- Run it. Download the Ads view as JSON, CSV or Excel, read the Query summaries view for the totals TikTok reported, or read the dataset through the API.
- For a weekly competitor watch, give the run a Dedup memory name and schedule it: every later run returns only ads it has not delivered yet, and known ads are never charged again.
What you get
Ad rows (type: "ad")
Measured on 846 ads from 17 platform runs on 2026-09-22 (advertiser name 99%, title 85%, first and last shown 100%, reach band 100%, video URLs 90%, image URLs 77%, rejection reasons 1%; on the 29 ads with details: landing URL 59%, call to action 79%, objective 100%, reach by region 100%).
| Field | What it is |
|---|---|
adId, libraryUrl | TikTok's id and the public detail page |
advertiserName | the legal entity name shown on the ad |
title | the ad text TikTok shows as the title |
firstShown, lastShown, daysShown | ISO 8601 dates and the inclusive day count between them |
region | the target country the query ran in |
estimatedAudience, estimatedAudienceMin, estimatedAudienceMax | the reach band as printed ("1K-10K") and parsed to numbers |
impressions | the impression figure TikTok publishes on the row (0 for most commercial ads) |
auditStatus, auditStatusCode, sorAuditStatus | approved, rejected, pending or approved-after-appeal, plus TikTok's raw codes |
adType, showMode | TikTok's content type and display mode codes |
videoUrls, videoCovers, imageUrls | signed CDN URLs of the creative (they expire, fetch what you want to keep) |
rejectionReasons, rejectionInfo | TikTok's printed reasons when an ad was removed |
hasDetails, externalUrl, callToAction, advertisingObjective, subject | the detail block headline fields (with Fetch ad details) |
targeting | reach by country with age and gender breakdowns (reachByRegion[], bands parsed to numbers) and every targeting parameter the advertiser declared (locations, languages, interests, devices, operating systems, spending power) |
advertiser | the advertiser block when TikTok publishes it |
query, shard, isNew, scrapedAt | which query and date window surfaced the ad; isNew is always true for delivered rows |
Query summary rows (type: "query-summary"), one per query x region, free
totalReported is the count TikTok printed for the query, capReached says whether it hit TikTok's 5,000 row limit, shards and pagesFetched say how much work it took, adsDelivered, knownSkipped, detailsDelivered and detailsRefused say what you got, and stopReason is one of complete, max-ads-per-query, max-ads-reached, charge-limit, end-of-results or blocked.
The run summary (type: "summary"), free
Counters for queries, pages, page loads and their time, ads seen, delivered and charged, duplicates and known ads skipped, details delivered and refused, refused pages, and billing counters that report attempted and platform confirmed charges separately.
How much does it cost to scrape the TikTok Ad Library?
Live prices at the BRONZE tier; Silver 10 percent and Gold 20 percent off the result events, no discount on the Actor start event.
| Event | Price | When it is charged |
|---|---|---|
| Ad | $1.00 per 1,000 | once per unique ad delivered |
| Ad detail record | $8.00 per 1,000 | once per ad that carries the DSA detail block |
| Actor start | $2.00 per run per GB of memory | once per run; a 1 GB run pays it once |
The Store pricing card shows these same prices per 1,000 events: "$1.00 / 1,000" on the Ad row means one ad costs a tenth of a cent, and "$8.00 / 1,000" on the Ad detail record row means one detail record costs 0.8 cents. A query that delivers 500 ads costs 500 x $1.00 / 1,000 plus the start event, about $0.50. Adding details to all 500 adds 500 x $8.00 / 1,000, about $4.00; the detail record is priced for the page reloads it costs (see below).
Measured platform cost on 8 runs without details: about $0.114 per 1,000 ads on the default 1 GB memory with the datacenter proxy (the price is $1.00 per 1,000).
About detail speed. TikTok opens its detail endpoint for some page loads and refuses it for others (measured on Apify: about one load in three is open, and an open load serves every detail read made on it). The Actor reads details while a load is open and reloads the query page on the first refusal, up to six times per page; a refused record is never charged. Expect roughly 2 ads with details per minute per worker; a run without details reads about 50 ads per minute per worker. Set Max detail records to keep a big run fast and cheap.
Input
| Field | Type | Notes |
|---|---|---|
queries | array | advertiser names, keywords or pasted library.tiktok.com URLs (an ads/detail/?ad_id= URL fetches that one ad) |
regions | array | EEA, Swiss and UK ISO codes or names; all for every market |
adIds | array | ad ids to fetch directly |
advertiserIds | array | TikTok business ids (adv_biz_ids) to restrict every query to |
lastShownAfter, lastShownBefore | date | the "last shown" window, default the last year |
adType | 0, 1 or 2 | TikTok's content type filter; 0 keeps everything |
gender | ALL, MALE, FEMALE | the audience gender filter |
maxAdsPerQuery, maxAds | integer | caps, 0 = no cap |
includeDetails, maxDetails | boolean, integer | the DSA detail block and how many ads get it |
dedupMemoryName, resetDedupMemory | string, boolean | cross run memory |
proxyConfiguration, maxConcurrency | object, 1 to 3 | Apify datacenter proxy by default; parallel query workers |
{"queries": ["nike"],"regions": ["ES", "DE"],"maxAdsPerQuery": 200,"includeDetails": true,"maxDetails": 50,"dedupMemoryName": "nike-eu-watch"}
What this Actor does NOT do
- It does not cover ads shown outside the EEA, Switzerland and the UK. TikTok's Ad Library is the company's Digital Services Act transparency surface and only holds ads targeted at those markets. Worldwide Top Ads live in the Creative Center (see the sibling Actor below).
- It does not report ad spend. TikTok publishes reach bands, never money; rows carry
estimatedAudience, not a spend figure. - It does not host videos or images. Media URLs are signed CDN links that expire; download what you want to keep.
- It does not sort by anything other than last shown date (newest first) or filter by age band or reach band. TikTok's API rejects those parameters for anonymous visitors, so they are not offered rather than silently ignored.
- It does not go past TikTok's 5,000 rows per query on its own terms; it splits the date window automatically and the query summary says when a shard still reported the cap.
FAQ
Do I need a TikTok account, cookies or an API key?
No. The Ad Library is a public page and this Actor reads it the way a signed-out visitor does, through a headless browser that TikTok issues its access token to. Nothing in the input asks for a credential.
Which countries does the TikTok Ad Library cover?
The 27 EU member states plus Iceland, Liechtenstein, Norway, Switzerland and the United Kingdom, 32 markets in total. TikTok publishes the library under the EU Digital Services Act, so ads shown only outside those markets are not in it.
Does the TikTok Ad Library show ad spend?
No. TikTok publishes a reach band per ad ("Unique users seen", for example 1K-10K) and, in the detail block, that band by country, age and gender. This Actor delivers the band as printed and parsed to numbers; it does not invent a spend figure.
How many ads can one query return?
TikTok caps every query at 5,000 rows and serves 12 per page. When a query hits the cap the Actor splits the date window in half and reads the halves, down to single days, and the query summary reports whether any shard still hit the cap.
Why are ad details slower than ads?
TikTok opens its detail endpoint for some page loads and refuses it for others, so the Actor reads details while a load is open and reloads the query page on the first refusal, up to six times per page. Details that TikTok refuses are never charged.
How do I get only the ads that are new since last week?
Put a name in dedupMemoryName and use the same name every run. Ads already delivered under that name are skipped free of charge.
Why does this Actor run with limited permissions?
Least privilege. It can only reach its own storages: the dataset it writes and the one named key-value store it creates for your dedup memory. It cannot read anything else in your Apify account.
More data tools by Automation Craft
- TikTok Creative Center Scraper: Top Ads, No Login
- Meta Ad Library Scraper - All Placements, Filters
- Facebook Ads Library Scraper - Page Ads, No Login
- Instagram Ads Library Scraper - Creatives, Video
- LinkedIn Ad Library Scraper: Ads by Company
- Google Trends Scraper
Changelog
- 0.1.0 (2026-09-23): first release.