TikTok Ad Library Scraper — Ads, Creatives & Advertisers
Under maintenancePricing
from $2.00 / 1,000 tiktok ads
TikTok Ad Library Scraper — Ads, Creatives & Advertisers
Under maintenanceScrape TikTok's Commercial Content Library into clean JSON. Search ads by advertiser or keyword and export creatives, run dates, audience bands, and EU targeting. $3.50 per 1,000 ads — no TikTok API approval needed.
Pricing
from $2.00 / 1,000 tiktok ads
Rating
0.0
(0)
Developer
Jaybird Technologies
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 hours ago
Last modified
Categories
Share
TikTok Ad Library Scraper
Scrape TikTok's Commercial Content Library into clean JSON without an account, cookies, or API approval. Search by advertiser or keyword, filter by country and date, and export ad creatives, run dates, audience bands, and — for every ad — TikTok's disclosed EU targeting and advertiser details.
- $2.50 per 1,000 ads (FREE tier), no monthly rental. Higher Apify plans pay less per ad.
- Covers ads served in the EU/EEA, where TikTok is required to publish ad transparency data.
{"type": "ad","adId": "1869604317380609","advertiserName": "Zalando SE","caption": "Vai su Zalando","adFormat": "video","videoUrl": "https://library.tiktok.com/api/v1/cdn/.../video.mp4","coverImageUrl": "https://p16-common-sign.tiktokcdn.com/....image","firstShownDate": "2026-07-18","lastShownDate": "2026-07-18","estimatedAudience": "100K-200K","callToAction": "Shop now","advertisingObjective": "Sales","advertiserBusinessId": "6876456332912755458","advertiserRegistryLocation": "Germany","sponsor": "Zalando SE","totalImpressions": "200K-300K","impressionsByCountry": [{ "country": "IT", "impressions": "204K" }],"targeting": {"countries": ["IT"],"ageRanges": ["18-24", "25-34", "35-44", "45-54", "55+"],"genders": ["female", "male"],"targetAudienceSize": "20.8M-25.4M","operatingSystems": ["ANDROID"]},"adDetailUrl": "https://library.tiktok.com/ads/detail/?ad_id=1869604317380609®ion=all","query": "Zalando","queryType": "advertiser"}
What does it do?
- Advertiser search — pass a list of advertiser names. Results are filtered to that advertiser's own ads, so you get Zalando's ads rather than every creator who mentioned Zalando.
- Keyword search — free-text search across ad content and advertiser names.
- Targeting & advertiser enrichment — on by default, it pulls each ad's call to action, objective, advertiser business ID and registered country, audience-size estimate, and full targeting (countries, age bands, gender, languages, impressions by country). Turn it off for a faster, card-only run.
Why use this scraper?
- 💰 Flat, low price: $2.50 per 1,000 ads with full targeting enrichment included — no separate "detail" fee, and the same ad across two searches is never charged twice. No monthly fee.
- 🎯 Real EU targeting data: age bands, gender, audience size, and per-country impressions that TikTok discloses under its transparency obligations — most scrapers stop at the creative.
- 🔍 Clean advertiser results: advertiser searches are matched to the advertiser's own ads, not TikTok's loose fuzzy matches.
- 🎬 Full creatives: direct video and cover-image URLs, caption, format, and run dates.
- 🚫 No account, no login: touches only TikTok's public transparency API. It never asks for or uses credentials.
- 🗂️ Honest completeness: the run summary distinguishes true zero-result searches from blocked or incomplete work.
What data can it extract?
| Field | Description |
|---|---|
adId | TikTok's unique ad ID |
advertiserName | Advertiser account that ran the ad |
caption | Ad caption / creative text, when shown |
adFormat | video, image, or unknown |
videoUrl, coverImageUrl, imageUrls | Creative media (signed CDN URLs — see FAQ) |
firstShownDate, lastShownDate | Run dates (ISO YYYY-MM-DD) |
estimatedAudience | Audience band ("unique users seen"), e.g. 10K-100K |
callToAction, advertisingObjective | CTA label and campaign objective (enrichment) |
advertiserBusinessId, advertiserRegistryLocation, sponsor | Advertiser identity and paying entity (enrichment) |
totalImpressions, impressionsByCountry | Disclosed impression bands (enrichment) |
targeting | Countries, age bands, gender, audience size, languages, OS (enrichment) |
adDetailUrl | Permalink to the ad in the public library |
query, queryType, region, scrapedAt | Provenance for each row |
The default dataset contains ads only, so JSON, CSV, and Excel exports stay homogeneous. A separate OUTPUT key-value record holds one summary per search (totalAdsFound, adsScraped, date range covered) plus aggregate run health.
How to scrape the TikTok Ad Library
- Add one or more advertiser names to Advertisers, and/or a Keyword.
- Optionally scope by Target countries (EU/EEA ISO codes) and a date range.
- Leave Include targeting & advertiser details on for full data, or turn it off for a faster, cheaper card-only run.
- Set Max ads per search and run. Export the dataset as JSON, CSV, or Excel, or pull it via the Apify API.
How much will it cost?
Pay-per-event: $0.0025 per ad scraped — $2.50 per 1,000 ads at the FREE tier, no monthly rental, and targeting enrichment is included in the same price. Example: monitoring 10 advertisers at up to 100 ads each costs at most $2.50 per run. Billing is once per unique ad, so duplicates across searches are free. Higher Apify pricing tiers receive lower per-ad rates, and the Pricing tab is authoritative for the live rates.
Input example
{"advertisers": ["Zalando", "About You"],"keyword": "summer sale","countries": ["DE", "FR"],"startDate": "2026-01-01","endDate": "2026-07-01","includeTargeting": true,"maxResultsPerQuery": 100}
If no advertiser or keyword is supplied, the platform auto-test runs a small demo search capped at ten ads.
Output example
The OUTPUT key-value record holds diagnostics and one summary per search:
{"summaries": [{"type": "advertiser-summary","query": "Zalando","queryType": "advertiser","region": "all","totalAdsFound": 1000,"adsScraped": 100,"enrichmentFailures": 0,"blocked": false,"incomplete": false}],"queries": 1,"adsScraped": 100,"escalatedToResidential": 0,"chargeLimitReached": false,"charged": { "ad-scraped": 100 },"includeTargeting": true,"demoMode": false}
totalAdsFound is TikTok's own reported match estimate (capped at ~1,000); adsScraped is how many ads were actually stored after filtering. Local and non-pay-per-event runs report zero charged events even though they still write the dataset.
How it works
TikTok's Commercial Content Library is backed by a public JSON API — no login, no headless browser, no request signing. The Actor fetches a short-lived session token, then paginates the search endpoint and (when enrichment is on) requests each ad's detail record. Requests run on datacenter proxies and escalate to residential proxies if TikTok's rate limiter ("system busy") starts pushing back. There is no logged-in mode: the Actor only reads TikTok's public advertising-transparency surface.
EU/EEA scope — read this first
The Commercial Content Library only covers ads served in the EU/EEA, which TikTok is required to publish under its transparency obligations. Ads shown only outside that region are not in the source and cannot be returned, regardless of the countries you request. This is a scope of the data itself, not a limitation of the Actor. (A future update may add TikTok Creative Center "Top Ads" as a separate, global complement.)
FAQ
Is there an official TikTok ads API? TikTok offers a Commercial Content Library "research API," but it is gated behind an application and approval process. This Actor uses the same public data that powers the library's own website, with no approval needed.
How exact is advertiser matching? TikTok's search matches loosely, so a raw search for "Zalando" also surfaces unrelated handles that merely share a fragment. Advertiser searches filter results to ads whose advertiser name actually matches your query; use a Keyword search when you want the full loose match across ad content.
Why is totalAdsFound always around 1,000? That number is TikTok's own capped match estimate, not an exact count. Rely on adsScraped for what was actually stored.
Do the video and image URLs last? No. TikTok serves creatives from signed CDN URLs that expire after a short time. Download the media promptly rather than storing the URL for later.
Why do some ads have empty targeting? Targeting, impressions, and objective come from each ad's detail record and are only disclosed for EU/EEA-served ads. When enrichment is off, those fields are intentionally left null.
How does it handle blocking? TikTok answers "system busy" (HTTP 421) when an IP calls too fast. The Actor backs off, rotates proxy sessions, and escalates datacenter → residential. Genuinely blocked searches are reported in the run summary instead of being silently dropped.
Is it legal to scrape the Ad Library? The Actor collects public advertising-transparency data that TikTok is legally required to publish — no personal accounts, no logins, no private data. You remain responsible for lawful use of the output, including any GDPR obligations that apply to how you store and process it.
Can I schedule or integrate it? Yes. Export to Google Sheets, Drive, S3, or a database; use Zapier, Make, webhooks, schedules, or the Apify API.
Monitoring competitors across channels? See the Meta Ad Library Scraper, Google Ads Transparency Scraper, and LinkedIn Ad Library Scraper — one workflow across TikTok, Meta, Google, and LinkedIn.
The Actor collects public advertising-transparency data only. You remain responsible for lawful use of the output.