TikTok Ads Library Scraper: EU Ads, No Login avatar

TikTok Ads Library Scraper: EU Ads, No Login

Pricing

from $0.80 / 1,000 ads

Go to Apify Store
TikTok Ads Library Scraper: EU Ads, No Login

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

Automation Craft

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

3 days ago

Last modified

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

  1. 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 any library.tiktok.com/ads?... URL; its region, dates and filters are applied to that query.
  2. 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.
  3. Set Max ads per query and Max ads (total). Leave both at 0 for everything the library serves.
  4. 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).
  5. 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.
  6. 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%).

FieldWhat it is
adId, libraryUrlTikTok's id and the public detail page
advertiserNamethe legal entity name shown on the ad
titlethe ad text TikTok shows as the title
firstShown, lastShown, daysShownISO 8601 dates and the inclusive day count between them
regionthe target country the query ran in
estimatedAudience, estimatedAudienceMin, estimatedAudienceMaxthe reach band as printed ("1K-10K") and parsed to numbers
impressionsthe impression figure TikTok publishes on the row (0 for most commercial ads)
auditStatus, auditStatusCode, sorAuditStatusapproved, rejected, pending or approved-after-appeal, plus TikTok's raw codes
adType, showModeTikTok's content type and display mode codes
videoUrls, videoCovers, imageUrlssigned CDN URLs of the creative (they expire, fetch what you want to keep)
rejectionReasons, rejectionInfoTikTok's printed reasons when an ad was removed
hasDetails, externalUrl, callToAction, advertisingObjective, subjectthe detail block headline fields (with Fetch ad details)
targetingreach 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)
advertiserthe advertiser block when TikTok publishes it
query, shard, isNew, scrapedAtwhich 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.

EventPriceWhen it is charged
Ad$1.00 per 1,000once per unique ad delivered
Ad detail record$8.00 per 1,000once per ad that carries the DSA detail block
Actor start$2.00 per run per GB of memoryonce 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

FieldTypeNotes
queriesarrayadvertiser names, keywords or pasted library.tiktok.com URLs (an ads/detail/?ad_id= URL fetches that one ad)
regionsarrayEEA, Swiss and UK ISO codes or names; all for every market
adIdsarrayad ids to fetch directly
advertiserIdsarrayTikTok business ids (adv_biz_ids) to restrict every query to
lastShownAfter, lastShownBeforedatethe "last shown" window, default the last year
adType0, 1 or 2TikTok's content type filter; 0 keeps everything
genderALL, MALE, FEMALEthe audience gender filter
maxAdsPerQuery, maxAdsintegercaps, 0 = no cap
includeDetails, maxDetailsboolean, integerthe DSA detail block and how many ads get it
dedupMemoryName, resetDedupMemorystring, booleancross run memory
proxyConfiguration, maxConcurrencyobject, 1 to 3Apify 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

Changelog

  • 0.1.0 (2026-09-23): first release.