TikTok Ads Library Scraper avatar

TikTok Ads Library Scraper

Pricing

from $1.00 / 1,000 results

Go to Apify Store
TikTok Ads Library Scraper

TikTok Ads Library Scraper

Scrape the TikTok Ads Library: advertisers, creatives, reach and DSA targeting data across the EU, EEA and UK.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

Anton DataScout

Anton DataScout

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

TikTok Ads Library Scraper — Ad Copy, Reach & Targeting

TikTok Ads Library Scraper status

Scrape the TikTok Ads Library by advertiser and country, and get back what competitors are actually running: the ad copy, the creative, the landing page — plus the transparency data TikTok is legally required to publish under the EU Digital Services Act: how many people saw each ad, in which country, split by age and gender.

No login, no API key, no browser.

Table of contents


Why this TikTok ads scraper

Typical TikTok ads scraperThis Actor
Advertiser and creatives
Ad copyoften documented as "not available"✅ returned
Impressions per countrypaid add-on or missing✅ included
Age × gender breakdownpaid add-on or missing✅ included
Advertiser's TikTok account + followers✅ included
Who paid for the ad (paidForBy)rarely
Landing page + objective + CTApartial
Exact-advertiser mode✅ returns the advertiser's full ad set
Failed detail requestssilently empty columns✅ reported with the HTTP status

Competing Actors put ad copy and targeting behind a resolveAdDetails-style toggle and bill it separately, on top of the per-ad price. Here it is on by default and included in the price.


The targeting data nobody bills you extra for

The TikTok Ads Library exists because Article 39 of the EU Digital Services Act forces large platforms to publish an ad repository. That law is why this data is unusually good — and this Actor keeps all of it:

"totalImpressionsLabel": "1M-10M",
"topAgeGroup": "25-34",
"topGender": "FEMALE",
"impressionsByCountry": [{ "country": "DE", "impressions": 5300000, "impressionsLabel": "5.3M" }],
"ageGenderBreakdown": [
{ "country": "DE", "age": "18-24", "gender": "MALE", "impressions": 767000 },
{ "country": "DE", "age": "18-24", "gender": "FEMALE", "impressions": 900000 }
]

Every display string like "5.3M" also gets a numeric twin, so you can sort and sum in a spreadsheet without cleaning anything first. topAgeGroup and topGender are computed by summing impressions across the grid, not by taking the first row.


Broad vs exact advertiser match

This matters more than it sounds:

  • Broad match — finds any advertiser whose name contains your text. Searching Nike returns roughly a thousand ads, mixed with unrelated accounts that merely have "nike" in the name.
  • Exact advertiser name — matches the registered company in full, e.g. NIKE Retail B.V.. In testing this returned 4,198 ads, all genuinely Nike's.

Start broad to discover the exact legal name (it comes back as advertiserName), then re-run in exact mode to pull that advertiser's complete history.


Use cases

1. Competitor ad research

See every ad a competitor ran in a market, with the copy, the creative and the landing page. Long-running ads with high reach are the ones worth studying.

2. Creative swipe file

Download video and image creatives with their objective and call to action attached, so you know what each creative was actually trying to do.

3. Audience validation

Before you guess who a product sells to, look at who the ads actually reached: impressions by age and gender, per country, straight from the platform.

4. Market entry research

Compare the same advertiser across countries — who advertises in France but not Poland, and how reach differs between them.

5. Agency and sponsor mapping

paidForBy names the media agency behind the ad, and advertiserRegistryLocation gives the registered country. Useful for mapping who buys media for whom.

6. Influencer and brand-account discovery

Every ad links back to the TikTok account that ran it, with follower count and verification status.

7. Compliance and brand monitoring

Track ads mentioning your brand, and spot rejected ads through the isRejected flag.


Input

FieldDescription
CountriesTwo-letter codes. EU-27, EEA, UK, Switzerland and Türkiye — 33 in total.
Search termsAdvertiser names. Required — TikTok returns nothing for an empty query.
Match modeBroad, or exact registered company name.
Advertiser business IDOptional. Pins the search to one exact advertiser.
Time windowDays back, or an explicit start and end date.
Sort byMost recent, or highest reach first.
Include ad copy and targetingOn by default. One extra request per ad.
Max ads per country and termYour cost ceiling.
{
"regions": ["DE", "FR"],
"searchTerms": ["NIKE Retail B.V."],
"searchBy": "exact",
"daysBack": 90,
"sortBy": "impression,desc",
"maxResultsPerQuery": 200
}

Output

42 fields per ad. A trimmed sample:

{
"adId": "1866065258633346",
"adUrl": "https://library.tiktok.com/ads/detail/?ad_id=1866065258633346",
"adText": "Wenn du deinem Instinkt vertraust, gehört das Spiel dir.",
"callToAction": "Learn more",
"advertisingObjective": "Video views",
"externalUrl": "https://www.nike.com/de/fussball",
"firstShownDate": "2026-05-24",
"lastShownDate": "2026-07-15",
"daysRunning": 53,
"estimatedAudience": "1M-10M",
"topAgeGroup": "25-34",
"topGender": "FEMALE",
"advertiserName": "NIKE Retail B.V.",
"advertiserRegistryLocation": "Netherlands",
"paidForBy": "INITIATIVE MEDIA B.V.",
"accountUsername": "nikefootball",
"accountFollowers": 573400,
"accountIsVerified": true
}

Grouped into identity · creative (copy, CTA, objective, landing page, video and image URLs) · schedule (first shown, last shown, days running) · reach · DSA targeting · advertiser · TikTok account · status · provenance.


Cost

Pay per ad returned. maxResultsPerQuery caps each country/term pair, so the bill is knowable before the run starts.

Ad copy and targeting are included — no separate enrichment fee. A 36-ad run with full details takes about 25 seconds.


Honest limits

  • EU, EEA, UK, Switzerland and Türkiye only — 33 countries. The library is a DSA compliance product; there is no US or APAC data in it. Codes outside the list are skipped with a warning instead of failing the run.
  • A search term is required. An empty query returns zero results from TikTok, so the Actor refuses it up front rather than finishing with an empty dataset.
  • No spend figures. TikTok publishes reach, not money. Any tool claiming TikTok ad spend is estimating.
  • Reach is banded. Audience sizes come as ranges like 1M-10M; the numeric estimatedAudienceMin/Max fields expose both ends.
  • Some detail requests are refused. TikTok rate-limits ad detail calls per IP. The Actor spreads them across a pool of independent sessions and retries on a fresh one, which recovers the large majority — but any ad that still fails is logged with its HTTP status and keeps its search-level fields. An empty adText is always traceable to a real refusal, never a silent gap.
  • Proxy: datacenter proxies are enough. The library answers from any region, so residential proxies only add cost.

FAQ

Do I need a TikTok account or API key? No. The Ads Library is public by law.

Why is there no US data? Because the library only exists to satisfy EU regulation. TikTok publishes no equivalent archive for the US.

Can I get a competitor's complete ad history? Yes — run a broad search first to learn their exact registered name, then re-run in exact mode.

Can I download the videos? videoUrls and imageUrls contain direct CDN links you can fetch or hand to Apify's storage.

How current is it? Ads appear in the library while they run, so a daily scheduled run gives you a live feed of competitor activity.

Is scraping the TikTok Ads Library legal? It collects only the public transparency data TikTok is required to publish, with no login and no personal data. How you use the data is your responsibility.