Advanced TikTok Ad Library Scraper/API
Pricing
$2.50 / 1,000 results
Advanced TikTok Ad Library Scraper/API
Scrapes ads from the TikTok Commercial Content Library. Returns creative content, advertiser info, audience reach, targeting, and dates.
Pricing
$2.50 / 1,000 results
Rating
0.0
(0)
Developer
Practical Tools
Actor stats
0
Bookmarked
3
Total users
2
Monthly active users
5 days ago
Last modified
Categories
Share
TikTok Ad Library Scraper
Extract ads from the TikTok Commercial Content Library — including creative content, targeting breakdown, advertiser details, and audience reach — without needing a TikTok account or API key.
Accepts keyword and advertiser search queries with country, date range, and sort filters. Automatically paginates to collect up to any number of ads. Every ad includes full targeting detail: per-region impressions, age brackets, gender, and estimated audience size.
Features
- No login required — scrapes the public Commercial Content Library
- Full ad data — advertiser info, creative (video/images), dates, impressions, audience reach, and complete targeting breakdown
- Targeting detail — per-region location impressions, age brackets, gender targeting, audience size, interest and interaction targeting
- Flexible search — filter by keyword, advertiser name, region, date range, and sort order
- Automatic pagination — follows cursor-based pages until the limit is reached
- Proxy-ready — supports Apify residential proxies or custom proxy URLs
Input
| Field | Type | Description |
|---|---|---|
query | string | Keyword or advertiser name to search for. Leave empty to browse all ads. |
queryType | string | Whether the query searches ad content (1) or the advertiser's name (2). Defaults to 1 (keyword). |
region | string | EU/EEA country code (GB, DE, FR, etc.) or all for all regions (default: all). TikTok's Ad Library is an EU Digital Services Act requirement — only European markets are available. |
timeframe | string | Date range to search within: 7d, 30d, 90d, 180d, 365d, 730d (default: 365d) |
order | string | Sort order: last_shown_date,desc/asc, create_time,desc/asc, impression,desc/asc (default: last_shown_date,desc). See note below on impression sorting. |
limit | integer | Maximum number of ads to collect (default: 20). TikTok caps keyword searches at ~60 results and browse queries (no keyword) at ~1000. |
proxyConfiguration | object | Optional proxy settings. Residential proxies recommended if you encounter blocks. |
Note on impression sorting
Sorting by impression,desc/asc ranks results correctly server-side, but the impression field in the output will always be 0. TikTok does not expose exact impression counts in search results. To get impression ranges (e.g. "10M–20M"), enable Scrape Ad Details — the detail.targetingTotalImpressions field will then contain the range string.
Example input
{"query": "nike","queryType": "1","region": "GB","timeframe": "365d","order": "reach,desc","limit": 50}
Searching by advertiser
{"query": "Samsung","queryType": "2","region": "all","limit": 30}
Output
Each item in the dataset represents one ad:
{"id": "1861043703482497","advertiserName": "NATURE SPELL IRELAND LIMITED","adType": "2","firstShownDate": 1774870452,"lastShownDate": 1774870452,"estimatedAudience": "0-1K","impression": 0,"videos": [{"videoUrl": "https://library.tiktok.com/api/v1/cdn/...","coverImg": "https://p16-common-sign.tiktokcdn.com/..."}],"imageUrls": [],"detail": {"advertiserBizId": "7548443895533731847","advertiserRegistryLocation": "Ireland","advertiserSponsor": "NATURE SPELL IRELAND LIMITED","targetingLocations": [{ "region": "FR", "impressions": "0-1K" }],"targetingTotalImpressions": "0-1K","targetingAge": [{ "region": "FR", "brackets": ["18-24", "25-34", "35-44", "45-54", "55+"] }],"targetingGender": [{ "region": "FR", "genders": ["female", "male", "unknown"] }],"targetAudienceSize": "21.7M-26.6M","targetingAudience": "No","targetingInterest": "","targetingVideoInteractions": "","targetingCreatorInteractions": ""}}
Proxy
The TikTok Ad Library is a public transparency tool — no proxy is required in most cases. The actor runs cleanly on Apify's infrastructure without additional proxy configuration.
If you encounter blocks with very high volumes or repeated runs, you can optionally add residential proxies:
"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}