TikTok Ad Library Scraper
Under maintenancePricing
from $0.00001 / actor start
TikTok Ad Library Scraper
Under maintenanceScrape ads, advertisers, creatives and audience targeting from the official TikTok Commercial Content Library.
Pricing
from $0.00001 / actor start
Rating
5.0
(1)
Developer
Daya Crawler
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
18 days ago
Last modified
Categories
Share
Export every ad a brand is running on TikTok — the creative, how long it ran, who it reached and exactly who it was targeted at — straight from TikTok's own Commercial Content Library.
No login, no TikTok Ads account, no browser automation. Just a search term and a country.
What you get
| The ad | Ad ID, ad text, format, industry, link to the official ad page |
| The creative | Direct video URL and cover image — downloadable, watermark-free |
| The flight | First shown date, last shown date, number of days running |
| The reach | Estimated audience band, impressions, impressions per country |
| The advertiser | Name, business ID, registered location, paying sponsor |
| Their TikTok account (with targeting on) | Handle, display name, follower count, profile link |
| The targeting (optional) | Audience size, age groups, genders, interests, languages, devices, operating systems, cities |
What people use it for
- Competitor ad spy — pull every live ad of a competitor, see which creatives they keep running (high
daysRunning= an ad that works). - Creative research — download the winning videos in your industry before you brief your own.
- Ad targeting research — see the exact age, gender and interest targeting behind ads that scale.
- Market monitoring — run it on a schedule and track new advertisers entering your category.
- Compliance and research — the library is TikTok's DSA transparency dataset; this actor turns it into a spreadsheet.
Country coverage — read this first
TikTok only publishes this data for 33 countries: the EEA, the United Kingdom, Switzerland and Turkey.
Austria, Belgium, Bulgaria, Croatia, Cyprus, Czech Republic, Denmark, Estonia, Finland, France, Germany, Greece, Hungary, Iceland, Ireland, Italy, Latvia, Liechtenstein, Lithuania, Luxembourg, Malta, Netherlands, Norway, Poland, Portugal, Romania, Slovakia, Slovenia, Spain, Sweden, Switzerland, Turkey, United Kingdom
There is no US, Asian or Vietnamese ad library data — not in this actor, and not on TikTok's site either.
Input
{"searchTerms": ["nike", "adidas"],"countries": ["GB", "DE", "FR"],"lastDays": 30,"adFormat": "video","includeTargeting": true,"maxItems": 500}
| Field | Type | Default | Notes |
|---|---|---|---|
searchTerms | array | — | Required. Matched against advertiser names and ad content. Each term is searched in every country. |
countries | array | ["GB"] | Two-letter codes from the list above. |
lastDays | integer | 30 | How far back to look. Ignored if you set an exact range. |
dateFrom / dateTo | string | — | Exact range as YYYY-MM-DD. |
adFormat | string | all | all, video or image. |
sortBy | string | newest | newest or oldest, by last shown date. |
includeTargeting | boolean | false | Adds the targeting breakdown. One extra request per ad. |
maxItems | integer | 1000 | Hard stop across all terms and countries — your cost control. |
maxRequestRetries | integer | 6 | Retries per request, each from a fresh IP. TikTok answers "system busy" often; retries are normal. |
proxyConfiguration | object | Residential | TikTok blocks repeat IPs fast; keep residential proxies on. |
Output
One record per ad:
{"adId": "1878667481281921","adUrl": "https://library.tiktok.com/ads/detail/?ad_id=1878667481281921®ion=GB","country": "GB","searchTerm": "nike","advertiserName": "THE SOLE SUPPLIER LIMITED","advertiserBizId": "7412060919536336897","advertiserRegistryLocation": "United Kingdom","advertiserTikTokHandle": "jdofficial","advertiserTikTokFollowers": "3.6M","advertiserTikTokUrl": "https://www.tiktok.com/@jdofficial","adTitle": "Our current Nike obsession","adFormat": "video","industry": "Apparel & Accessories","firstShownDate": "2026-10-08","lastShownDate": "2026-10-10","daysRunning": 3,"estimatedAudience": "1K-10K","creativeAvailable": true,"videoUrl": "https://library.tiktok.com/api/v1/cdn/...","coverImageUrl": "https://p16-common-sign.tiktokcdn.com/...","targeting": {"audienceSize": "26.9M-32.9M","totalImpressions": "0-1K","countriesReached": 1,"impressionsByCountry": [{ "country": "GB", "impressions": "0-1K" }],"ageGroups": ["18-24", "25-34", "35-44"],"genders": ["female", "male"],"interests": [],"languages": [],"deviceModels": [],"operatingSystems": []},"scrapedAt": "2026-10-12T11:46:00.000Z"}
Export it as Excel, CSV, JSON, XML or pull it through the Apify API.
Tips
- Finding one brand's full ad set: search the brand's legal entity name as it appears in the library (e.g.
JD SPORTS FASHION PLC), not its TikTok handle. That returns only that advertiser's ads. - Finding evergreen winners: set
sortBytooldest— ads that are still running but started long ago are the ones that pay for themselves. - One keyword, one advertiser everywhere? That is TikTok's ranking, not a bug: a single advertiser running hundreds of near-identical ads fills the first pages. Search their competitor's legal name instead, or narrow the date range.
- Finding winning creatives: scrape with
includeTargeting: falsefirst, sort bydaysRunningdescending, then re-run on just the winners with targeting on. - Scheduling: set a schedule and
lastDays: 1to capture new ads daily and build your own historical archive. - Blank advertiser names? The search endpoint omits the advertiser on a minority of ads. Turning on
includeTargetingfills them in from the ad's detail page, together with the brand's TikTok handle and follower count. - Cost: every ad is one result.
includeTargetingdoubles the requests but gives the data nobody else exports.
Limitations
- Targeting is best-effort, and the shared proxy pool limits it. TikTok rejects the per-ad targeting lookup from IP addresses it has seen too often. Measured over several runs on Apify's shared residential proxies, about half the ads come back with targeting; from a clean IP the same lookups succeed every time. The other ads keep every other field and carry
targeting: null, and the run log tells you the exact count. To improve it, raise Retries per request (slower, costlier) or plug your own proxies into the Proxy section. - Reach and spend come as bands (
1K-10K), not exact numbers — that is how TikTok publishes them. - TikTok caps a single search at 5,000 ads. Split a big job by country or by shorter date ranges to go past it.
- Only ads that TikTok classifies as commercial content in the covered countries appear.
- Video URLs are signed and expire after a few hours. Download them soon after the run.
- TikTok withholds the creative file for a minority of ads. Those records still carry the advertiser, dates, reach and targeting, and are flagged with
creativeAvailable: false. - Expect roughly 1 ad per second without targeting. The endpoint answers "system busy" often; the actor simply rotates its session and retries, which is why runs are steady rather than fast.
Legal
This actor reads a public transparency database that TikTok is required to publish under the EU Digital Services Act. It collects no personal data and needs no login. You are responsible for how you use the exported data.