TikTok Ad Library Scraper avatar

TikTok Ad Library Scraper

Pricing

from $1.50 / 1,000 ad scrapeds

Go to Apify Store
TikTok Ad Library Scraper

TikTok Ad Library Scraper

Extract ads from TikTok's Commercial Content Library: advertiser, ad video, run dates, estimated audience and category for ads shown in Europe.

Pricing

from $1.50 / 1,000 ad scrapeds

Rating

0.0

(0)

Developer

PulseData

PulseData

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

13 minutes ago

Last modified

Share

This actor extracts ads from TikTok's official Commercial Content Library, the ad repository TikTok publishes for Europe. You search by advertiser or by what the ad says and get one JSON item per ad with the advertiser, the ad video, run dates, estimated audience and the ad's category. It costs $1.50 per 1,000 ads plus a run start fee of $0.005 per GB of memory, which is $0.01 per run at the default 2 GB.

No TikTok account, cookies or login are needed.

Features

  • Scrape all TikTok ads of a competitor by advertiser name.
  • Search TikTok ads by keyword in the ad content, with double quotes for an exact phrase.
  • Download TikTok ad videos: a direct MP4 link and cover image for each creative.
  • Get TikTok ads for one European country with countryCode.
  • Filter TikTok ads by the date they were shown with startDate and endDate.
  • Export TikTok Ad Library data to CSV, Excel or JSON through the Apify dataset.

Use cases

  • Competitor ad tracking: which videos a brand runs right now, how long each has been live and how large the estimated audience got. Ads that stay live for a long time are usually the ones that work.
  • Creative research: download the ad videos for a swipe file or to study hooks, formats and lengths.
  • Category overview: search a keyword and see which advertisers push that product type in a country.
  • Agency pitches: show a prospect what its competitors run on TikTok, with dates and reach.
  • Brand monitoring: find ads that use your brand name in the ad content.

Input

{
"queries": ["Nike", "\"running shoes\""],
"countryCode": "DE",
"startDate": "2026-06-01",
"endDate": "2026-09-20",
"maxAdsPerQuery": 200
}
FieldTypeDefaultMeaning
queriesarray(required)Advertiser names or keywords, one per line. The library matches both. Wrap a phrase in double quotes for an exact match
countryCodestringDEWhich country's library to search: DE, FR, ES, IT, NL, PL, GB and other EU/EEA countries plus the UK and Switzerland
startDatedate90 days before endDateStart of the period an ad was shown, YYYY-MM-DD
endDatedatetodayEnd of that period
maxAdsPerQueryinteger1000 means no limit
proxyConfigurationobjectApify UnblockerTikTok rejects datacenter and residential proxies
debugDumpbooleanfalseSaves a screenshot and the page HTML to the key-value store, only for bug reports

Output

One item per ad:

{
"query": "Nike",
"region": "DE",
"adId": "1876613526161602",
"url": "https://library.tiktok.com/ads/detail/?ad_id=1876613526161602&region=DE",
"advertiserName": "Unisport A/S",
"title": "#sneakers #custom #nike",
"subject": "Apparel & Accessories",
"firstShown": "2026-09-17",
"lastShown": "2026-09-19",
"daysShown": 3,
"estimatedAudience": "10K-100K",
"impressions": null,
"spent": null,
"videoUrl": "https://library.tiktok.com/api/v1/cdn/.../video/...mp4",
"coverImageUrl": "https://p16-common-sign.tiktokcdn.com/...",
"videoUrls": ["https://library.tiktok.com/api/v1/cdn/.../video/...mp4"],
"imageUrls": [],
"adStatus": "approved",
"rejectionInfo": null,
"scrapedAt": "2026-09-25T08:00:00.000Z"
}

title is the ad caption with hashtags, subject is TikTok's category, and estimatedAudience is TikTok's range of unique users reached. impressions and spent are filled only where TikTok publishes them. adStatus is TikTok's review status for the ad (in our tests always approved). Where TikTok restricted the ad in one or more countries, rejectionInfo holds the reason and the affected regions.

Coverage and limits

TikTok publishes this library for the EU and EEA plus the UK and Switzerland. Ads that only ran outside those countries are not in it. One run searches one country.

The date filter matches the period an ad was shown, not when it was created. TikTok keeps ads in the library for a limited time, so a long lookback can return less than you expect. Results are sorted by last shown date, newest first.

The library signs its API calls in the browser, so the actor opens the library page in a headless browser, lets TikTok make the first search, and pages through results by replaying that signed request. When the signature expires it signs a new one. This is why the actor runs with 2 GB of memory by default. A query of 200 ads takes roughly a minute.

Pricing

EventPrice
ad-scraped, per ad returned$0.0015
apify-actor-start, per run$0.005 per GB of run memory ($0.01 at the default 2 GB)

Worked example: 200 ads of one advertiser at the default memory cost 200 × $0.0015 + $0.01 = $0.31.

FAQ

Do I need a TikTok account? No. The Commercial Content Library is public and the actor never logs in.

Can I download the videos? videoUrl is a direct MP4 link from TikTok's CDN. The links are signed and expire after a few hours, so download them soon after the run.

Does the search look at the advertiser or at the ad text? Both. TikTok's library has one search box for advertiser name or keyword, and so does this actor.

Why do I get fewer ads than the total in the log? maxAdsPerQuery caps each query, and TikTok sometimes returns the same ad on two pages. The actor removes those duplicates.

Does it return every ad in the library, or only active ones? Every ad in the library that matches the query and the date range, including ads TikTok moderated in another country. Those still show up, with the reason and the affected regions in rejectionInfo, which helps when you want to see which competitor creatives ran into TikTok's ad policies.

Does it return targeting or spend? No targeting fields. spent and impressions are passed through only when TikTok includes them.

Can I schedule it or call it via API? Yes. Save a task, add an Apify schedule, and fetch the dataset as JSON, CSV or Excel through the API, or send it to Google Sheets, Make, Zapier or n8n.