TikTok Ads Library Scraper
Pricing
from $0.005 / actor start
TikTok Ads Library Scraper
Scrape the TikTok Ads Library: every ad shown in the EU, UK and Turkey with advertiser, first and last shown dates, video links, audience size and targeting. Just pick regions and dates. No login. Export to Excel, CSV or JSON, or use the API.
Pricing
from $0.005 / actor start
Rating
0.0
(0)
Developer
Automly
Maintained by CommunityActor stats
0
Bookmarked
16
Total users
3
Monthly active users
8 days ago
Last modified
Categories
Share

Extract ad records from the public TikTok Ads Library (EU, UK, and Turkey) — no login, no cookies, no TikTok account. Filter by region, date range, advertiser ID, or keyword and get a flat dataset with media links ready for download or analysis.
What does TikTok Ads Library Scraper do?
The TikTok Ads Library is a transparency portal mandated by the EU Digital Services Act (DSA). It exposes all ads served to EU member state audiences, UK audiences, and Turkey — including video URLs, cover images, estimated audience sizes, impression counts, and flight dates.
This actor collects every matching ad and delivers a clean, flat dataset. Use it for competitive research, brand monitoring, regulatory compliance tracking, or academic study of political advertising.
Features
- Scrape TikTok EU Ads Library without an account or cookies
- Filter TikTok ads by country across all EU member states, UK, and Turkey
- Search TikTok ads by keyword against advertiser name and ad content
- Filter by advertiser business ID to monitor specific brands
- Extract TikTok video ad URLs and cover images
- Filter TikTok ads by date range using ISO 8601 dates or unix timestamps
- Filter by ad type — video, image, or all creative formats
- Sort results by first shown or last shown date, ascending or descending
- Export TikTok ads data as JSON, CSV, or Excel via Apify datasets
- Get the original ad copy — the advertiser's caption on every ad, plus the call-to-action button, landing page link and campaign objective
- Extract targeting and sponsor data — per-region age/gender targeting, target audience size, advertiser sponsor name, and registered country
How to use
- Open the actor in Apify Console and click Try for free.
- Set Regions — enter one or more ISO country codes (e.g.
DE,FR,GB) or leave asallto cover every supported region. - Set Start date and End date to define the flight window (e.g.
2025-01-01to2025-12-31). - Optionally enter a Search query to filter by keyword, or add Advertiser business IDs to target specific brands.
- Set Max results to cap total records (default 1,000).
- Click Save & Run. Results appear in the Output tab as they come in.
Input parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
regions | array | Yes | ["all"] | ISO country codes or ["all"]. Supported: EU member states, GB, TR. |
startDate | string | Yes | — | ISO 8601 date (2025-01-01) or unix ms. Start of the ad flight window. |
endDate | string | Yes | — | ISO 8601 date or unix ms. Must be after startDate. |
query | string | No | "" | Free-text search against advertiser name and ad content. |
advertiserBusinessIds | array | No | [] | Limit results to these advertiser IDs. |
adType | enum | No | "all" | all, video, or image. Note: TikTok's image filter returns video-dominant results in practice; the actor passes the value through as-is. |
sortOrder | enum | No | "last_shown_date,desc" | One of: last_shown_date,desc · last_shown_date,asc · first_shown_date,desc · first_shown_date,asc. |
maxResults | integer | No | 1000 | Hard cap on total records returned. Minimum 1. |
fetchDetails | boolean | No | true | Adds sponsor, targeting, audience size, call to action, landing page link and campaign objective to each ad. The ad text comes with every ad either way. Adds about a minute to a 1,000-ad run. Turn it off when you don't need targeting data. |
proxyConfiguration | object | No | Apify proxy | Proxy settings. The default works for most runs. |
Example input
{"regions": ["DE", "FR", "GB"],"startDate": "2025-01-01","endDate": "2025-12-31","query": "skincare","adType": "video","sortOrder": "last_shown_date,desc","maxResults": 500}
Output example
Each record in the dataset is a flat object. Media links are temporary — download the files promptly, as the links expire about 6 hours after the run.
{"id": "1863026687376529","advertiser": "WONDERSKIN EUROPE LTD","type": "video","first_shown": "2026-04-19T08:30:06+00:00","last_shown": "2026-04-19T08:30:06+00:00","video_urls": ["https://library.tiktok.com/api/v1/cdn/.../a780febf-11a7-411c-b8b0-0913254efa91?VExpiration=1776744539&VSignature=..."],"cover_urls": ["https://p16-common-sign.tiktokcdn.com/tos-no1a-p-0037-no/sample.jpg?x-expires=1776744539&x-signature=..."],"image_urls": [],"estimated_audience": "0-1K","spent": "","impression": 0,"audit_status": "1","region": "DE","scraped_at": "2026-04-21T10:00:00+00:00","ad_detail_url": "https://library.tiktok.com/ads/detail/?ad_id=1863026687376529","sponsor": "WONDERSKIN EUROPE LTD","registry_location": "Germany","advertiser_business_id": "7228917820455878658","target_audience_size": "22.0M-26.9M","audience_interest": "","age_targeting": [{"region": "DE", "13-17": false, "18-24": true, "25-34": true, "35-44": true, "45-54": true, "55+": true}],"gender_targeting": [{"region": "DE", "female": true, "male": true, "unknown": true}],"location_impressions": [{"region": "DE", "impressions": "0-1K"}],"ad_text": "Your glow, all day long ✨ #skincare #makeup","call_to_action": "Shop now","landing_page_url": "https://www.example-shop.com/glow?utm_source=tiktok","advertising_objective": "Sales"}
Output fields
| Field | Type | Description |
|---|---|---|
id | string | Unique ad identifier from TikTok |
advertiser | string | Advertiser business name |
type | string | Creative category: video, image, or unknown |
first_shown | string | ISO 8601 UTC — when the ad first ran |
last_shown | string | ISO 8601 UTC — when the ad last ran |
video_urls | array | Video links (expire after ~6 h) |
cover_urls | array | Cover image links for video ads |
image_urls | array | Image links for image and carousel ads, in the order the ad shows them (video covers are in cover_urls) |
estimated_audience | string | TikTok's audience size bucket (e.g. "1K-10K") |
spent | string | Spend range if disclosed by TikTok (often empty) |
impression | integer | Impression count if disclosed |
audit_status | string | TikTok's review status code for the ad |
region | string | ISO country code the record was fetched under |
scraped_at | string | ISO 8601 UTC timestamp of the scrape |
ad_detail_url | string | Direct link to the ad's detail page on TikTok Ads Library |
sponsor | string | Sponsor name declared by the advertiser |
registry_location | string | Advertiser's registered country/location |
advertiser_business_id | string | TikTok advertiser business ID |
target_audience_size | string | Estimated target audience size range, e.g. "22.0M-26.9M" |
audience_interest | string | Interest-based targeting categories, if disclosed |
age_targeting | array | Per-region age group targeting booleans |
gender_targeting | array | Per-region gender targeting booleans |
location_impressions | array | Per-region impression bucket breakdown |
ad_text | string | The ad's original caption as the advertiser wrote it (TikTok's "Ad caption"). Comes with every ad; empty when the advertiser gave none |
call_to_action | string | Call-to-action button text, e.g. "Shop now". Needs Fetch per-ad details on; empty when the ad has no button |
landing_page_url | string | External website the ad links to, as TikTok shows it. Needs Fetch per-ad details on; empty when the ad links nowhere |
advertising_objective | string | Campaign goal set by the advertiser, e.g. "Sales" or "Reach". Needs Fetch per-ad details on |
How much does it cost?
You pay only for the results you get. See the Pricing tab for the current price. Apify's free plan gives you $5 of usage every month, enough to try the actor on real searches.
Tips to control costs:
- Set
maxResultsto cap the run before it starts. - Narrow
regionsto the specific countries you need instead of"all"(29 regions). - Use
startDate/endDateto limit the time window rather than relying solely onmaxResults. - Turn off
fetchDetailswhen you don't need targeting, sponsor, call-to-action or landing page data. You still get the ad text.
🤖 Use with AI agents (MCP)
This actor works as a tool for AI agents. Connect any MCP-compatible AI assistant or agent to the Apify MCP server at https://mcp.apify.com (sign in with your Apify account), and it can find this actor, fill in the input and read the results by itself. Ask in plain words, for example "Show the TikTok ads that ran in Germany this year", and the agent runs automly/tiktok-ads-library-scraper with an input like {"regions": ["DE"], "startDate": "2026-01-01", "endDate": "2026-10-01", "maxResults": 100}. Every input and output field has a plain description, so the agent knows what to type and what each column means. Agent runs cost the same as runs you start yourself.
FAQ
Which regions are supported?
All EU member states (Austria, Belgium, Bulgaria, Croatia, Cyprus, Czechia, Denmark, Estonia, Finland, France, Germany, Greece, Hungary, Ireland, Italy, Latvia, Lithuania, Luxembourg, Malta, Netherlands, Poland, Portugal, Romania, Slovakia, Slovenia, Spain, Sweden), plus the United Kingdom (GB) and Turkey (TR). This matches TikTok's own transparency scope under the EU Digital Services Act.
Does it need login, cookies, or an API key?
No. The TikTok Ads Library is public, so you need no TikTok account, cookies or API key.
Can it scrape US ads or other regions?
No. TikTok's Ads Library is limited to EU/UK/TR by TikTok's own policy. The US, Asia-Pacific, and other markets are not included in the transparency portal and cannot be scraped through this interface.
How fresh are the media URLs?
Video and image links expire about 6 hours after the run. If you need the media files, download them during or right after the run. The actor saves the links in the dataset; it does not download or re-host media.
Why does the image ad type filter return mostly video results?
That is how TikTok's own library filters: the image filter does not return only carousel/image ads. The type field in the output tells you what each ad really contains (video_urls vs. image_urls).
Supported regions reference
| Code | Country | Code | Country |
|---|---|---|---|
AT | Austria | IT | Italy |
BE | Belgium | LV | Latvia |
BG | Bulgaria | LT | Lithuania |
HR | Croatia | LU | Luxembourg |
CY | Cyprus | MT | Malta |
CZ | Czechia | NL | Netherlands |
DK | Denmark | PL | Poland |
EE | Estonia | PT | Portugal |
FI | Finland | RO | Romania |
FR | France | SK | Slovakia |
DE | Germany | SI | Slovenia |
GR | Greece | ES | Spain |
HU | Hungary | SE | Sweden |
IE | Ireland | GB | United Kingdom |
| — | — | TR | Turkey |
Related actors
- Facebook Ad Library Scraper — extract ads from Meta's transparency library
- Google Ads Transparency Scraper — search Google's political and election ad reports
- YouTube Ad Scraper — collect video ad data from YouTube
⭐ If TikTok Ads Library Scraper saves you time, a short review on the Reviews tab would mean a lot and helps other people find it.