TikTok Ad Library - Free To Use
Pricing
Pay per usage
TikTok Ad Library - Free To Use
Scrape ads from the TikTok Ad Library by keyword, advertiser name, or URL. Export advertiser, creative type, first/last shown dates, audience size, video/image creatives, and download media files permanently. Full targeting data (regions, age, gender) on demand. No login required.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
FlowExtract API
Maintained by CommunityActor stats
1
Bookmarked
3
Total users
2
Monthly active users
8 hours ago
Last modified
Categories
Share
🔍 TikTok Ad Library Scraper Export TikTok ads by keyword, advertiser, or URL
Formula:
Scrapes TikTok ads+from the TikTok Ad Library (library.tiktok.com)+as clean, structured JSON
TikTok Ad Library Scraper extracts ads from the official TikTok Ad Library search by keyword, by advertiser name, or paste a library URL directly, and get back advertiser, creative type, shown dates, estimated audience, video and image creatives, and (optionally) full targeting data. No login, no cookies, no browser automation.
Perfect for competitive ad researchers, performance marketers, and agencies who need TikTok ad creative and targeting intelligence without manually clicking through the Ad Library.
Why scrape the TikTok Ad Library?
The TikTok Ad Library is TikTok's public DSA transparency portal, holding roughly one year of ads served across the EU/EEA. It exposes the actual creatives, the advertiser behind them, how long each ad ran, and per ad the age, gender, and regional impression breakdown. That is competitor intelligence you would otherwise pay a SaaS subscription for.
Here are some of the most common use cases:
- Competitor ad monitoring: Track every ad a rival advertiser is running, with first/last shown dates.
- Creative research: Pull the actual video and image creatives competitors use to model your own.
- Targeting intelligence: See which countries, age bands, and genders an advertiser targets (with Fetch Ad Detail).
- Market & trend analysis: Search a keyword across all regions to map who is advertising in a category.
- Ad compliance & due diligence: Capture ad copy, audit status, and rejection reasons for a brand.
What data can the TikTok Ad Library Scraper extract?
🏷️ Ad Identity
idUnique TikTok ad identifiernameAdvertiser display nametypeCreative format (videoorimage)audit_statusTikTok moderation status
📅 Timeline
first_shown_dateFirst date the ad ran (Unix ms, UTC)last_shown_dateMost recent date the ad ran (Unix ms, UTC)
📊 Reach
estimated_audienceBucketed audience size (e.g.0-1K,1K-10K)
🎬 Creatives
videosPlayable signed video URL + cover imageimage_urlsImage creative URLsvideo_download_url/cover_download_url/image_download_urlspermanent re-hosted links, present only when Download Media is enabled (originals are always kept alongside)
🎯 Full Targeting (only when Fetch Ad Detail is enabled)
- Creative title & advertising objective
- Advertiser registry location & business ID
- Target audience size and targeted countries
- Per-region impressions with age (13-17 … 55+) and gender breakdowns
🔖 Provenance
region,sort,source_url,_sourcewhich search produced the record
⚙️ How to use the TikTok Ad Library Scraper
You provide URLs, keyword filters, or both. Each URL and each keyword counts as one input item.
Total results = (number of URLs + number of keywords) × Maximum Results. Example: 5 URLs + 6 keywords = 11 inputs. At 16 Maximum Results → 11 × 16 = 176 ads maximum.
Input Options
Start URLs (Array)
Paste full library.tiktok.com/ads URLs copied from your browser. Region, dates, sort order, and advertiser filters are read directly from the URL no extra config.
| Input value | What it extracts |
|---|---|
https://library.tiktok.com/ads?region=DE&adv_name=nike | Ads matching "nike" in Germany |
https://library.tiktok.com/ads?region=all&adv_name=...&query_type=2&adv_biz_ids=... | A specific advertiser's ads, all regions |
{"startUrls": [{ "url": "https://library.tiktok.com/ads?region=DE&adv_name=nike&sort_type=last_shown_date,desc" }]}
Keyword Filters (Array of objects)
Build searches manually. Each entry runs independently with its own region, date range, and sort order.
queryThe keyword or advertiser name.searchAsAdvertiser(boolean, defaultfalse) Off: match the text against ad content (TikTok's "Search this exact phrase"). On: treat the text as an advertiser name and return that advertiser's ads (TikTok's "Advertiser name").regionOne target country (orallfor EU/EEA). The API processes one region per search.dateFrom/dateToDate range. See the date window note below.sortOrdernewest,oldest,created,created-asc,popular,unpopular.
{"keywords": [{ "query": "summer sale", "region": "DE", "sortOrder": "newest" },{ "query": "Apify Technologies s.r.o.", "searchAsAdvertiser": true, "region": "AT" }],"maxResults": 10}
maxResults (Integer)
- Default:
10 - Maximum ads collected per URL and per keyword. Set to
0to collect everything the API returns (up to TikTok's hard cap of 1,000 per query). Start with10to test.
fetchAdDetail (Boolean)
- Default:
false - When on, the scraper makes one extra request per ad to collect full advertiser, creative, and targeting detail. This is slower one additional request per ad.
downloadMedia (Boolean)
- Default:
false - When on, each ad's video and images are downloaded to permanent storage and the links are added to the output (
video_download_url,cover_download_url,image_download_urls). TikTok's own media links are signed and expire after a few hours; this re-hosts them so they stay accessible. - Media is downloaded by the Universal Downloader actor and saved to your account's storage (free accounts: files expire in ~7 days; paid accounts: retained).
⏱️ Performance note both options add time.
fetchAdDetailadds one request per ad.downloadMediaadds a separate download per ad (a few seconds each). Each one alone makes a run noticeably slower; enabling both together compounds the cost for large result counts (e.g. 1,000 ads) expect a substantially longer run. If you only need metadata, leave both off. Turn them on when you specifically need the full detail and/or permanent media files.
📆 The date window (important)
The TikTok Ad Library only retains about one year of "last shown date" history, and the earliest selectable day slides forward daily. This scraper handles that automatically:
- No dates given → defaults to roughly the last year (today back to ~364 days).
- Start date too old → clamped up to the earliest available day, with a warning. The run continues.
dateFromafterdateTo→ the entry is rejected with a clear message (dates are reversed).- Entire range older than ~1 year → the entry is rejected (nothing to scrape there).
💰 Pricing
🎉 This Actor is currently FREE to use. You only pay Apify's standard platform usage for the run. There are no per-result charges at this time.
Pricing may change in the future. Any change will be shown transparently here and in the Apify Store before you run.
📊 Sample Output
Without fetchAdDetail (details is null):
{"id": "1866984139925698","name": "nexxtstyyle","type": "video","audit_status": "1","first_shown_date": 1780495093000,"last_shown_date": 1780495093000,"estimated_audience": "0-1K","videos": [{ "video_url": "https://library.tiktok.com/api/v1/cdn/.../video.mp4", "cover_img": "https://p19-common-sign.tiktokcdn.com/.../cover.jpeg" }],"image_urls": [],"details": null,"region": "DE","sort": "last_shown_date,desc","source_url": "URL: https://library.tiktok.com/ads?region=DE&adv_name=nike&sort_type=last_shown_date,desc","_source": "tiktok_ad_library_scraper"}
With fetchAdDetail (details populated truncated):
{"id": "1866984139925698","name": "nexxtstyyle","type": "video","estimated_audience": "0-1K","videos": [ { "video_url": "...", "cover_img": "..." } ],"details": {"ad": { "title": "Nike☀️🔝 #nike #summer", "advertising_objective": "Reach", "estimated_audience": "1K-10K" },"advertiser": { "name": "Nextstyleee", "adv_biz_ids": "7555084503564304385", "registry_location": "Emirates" },"targeting": {"target_audience_size": "23.6M-28.8M","countries": ["ES", "FR", "IT", "DE", "BE"],"location": {"total_region": 5,"data": [{ "region": "ES", "impressions": "2K", "breakdowns": [ { "age": "18-24", "gender": "FEMALE", "impressions": "0-1K" } ] }]}}},"region": "DE","source_url": "URL: https://library.tiktok.com/ads?region=DE&adv_name=nike","_source": "tiktok_ad_library_scraper"}
With downloadMedia (permanent links added alongside originals):
{"id": "1866996966152193","name": "nikesk87","type": "video","videos": [{"video_url": "https://library.tiktok.com/api/v1/cdn/.../video.mp4?...","cover_img": "https://p16-common-sign.tiktokcdn.com/.../cover.image?...","video_download_url": "https://api.apify.com/v2/key-value-stores/<store>/records/video-...mp4?signature=...","cover_download_url": "https://api.apify.com/v2/key-value-stores/<store>/records/image-...image?signature=..."}],"image_urls": [],"image_download_urls": [],"region": "DE","_source": "tiktok_ad_library_scraper"}
The originals (video_url, cover_img, image_urls) are always kept; the *_download_url fields are added only when Download Media is on.
❓ Frequently Asked Questions
Do I need a TikTok account to use this Actor? No. The TikTok Ad Library is a public transparency portal. This scraper requires no login, cookies, or credentials.
How far back can I search? About one year. The TikTok Ad Library retains roughly 365 days of "last shown date" history, and the window slides forward daily. Dates older than that are automatically clamped or skipped with a clear message.
Can I scrape multiple keywords and URLs in one run?
Yes. Provide any mix of URLs and keyword filters they are processed in the same run (URLs first, then keywords), each capped at maxResults.
What's the difference between keyword search and advertiser search?
A keyword search matches your text against ad content. Turning on searchAsAdvertiser treats your text as an advertiser name and returns that advertiser's ads the same split TikTok shows as "Search this exact phrase" vs "Advertiser name."
Why is the run slow when I enable Download Media or Fetch Ad Detail?
Both add per-ad work. fetchAdDetail makes one extra request per ad; downloadMedia downloads each ad's video and images (a few seconds per ad) via the Universal Downloader. Enabling both together compounds the time, so a large run (e.g. 1,000 ads) can take substantially longer. Leave them off if you only need metadata and the original (short-lived) media URLs.
Where are downloaded media files stored, and do they expire? They're saved to your own Apify account's key-value store by the Universal Downloader. On free accounts, unnamed storage expires in about 7 days; on paid accounts it's retained. The original TikTok URLs expire after a few hours regardless that's why Download Media exists.
What happens if the run is aborted or hits a block mid-way? Results are written in real time, one ad at a time, as they are scraped. Anything already collected is saved. A failing source is skipped and the next one continues one bad input never loses the whole run.
Why did one of my keyword/URL entries get skipped?
Most likely its date range was reversed (dateFrom after dateTo) or fell entirely outside TikTok's ~1-year retention. The run log states exactly which entry and why.
⚖️ Legal & Ethical Use
This Actor extracts publicly visible data from the TikTok Ad Library the same information anyone can see in their browser on library.tiktok.com.
Please use this tool responsibly:
- Only use the data for lawful purposes such as research, competitive analysis, and compliance.
- Comply with TikTok's Terms of Service and applicable data protection regulations (GDPR, CCPA, etc.).
- Do not use extracted data for spam, harassment, or unsolicited outreach.
For questions about a specific use case, contact us at flowextractapi@outlook.com.
🔄 How results are saved
Results stream into your dataset in real time each ad is pushed the moment it is scraped, in order (URLs first, then keywords). There is no end-of-run batch dump:
| Trigger | Behavior |
|---|---|
| Each ad scraped | Pushed to the dataset immediately |
| Source fails or is blocked | That source is skipped; already-pushed ads are retained |
| Budget/charge limit reached | Run stops cleanly; everything collected so far is kept |
| Run aborted | Already-pushed ads remain in the dataset |
🚫 Error Handling
| Situation | What you see | What to do |
|---|---|---|
| Reversed dates | Date From … is after Date To … | Swap the dates so the start comes first |
| Range too old | range … is entirely older than TikTok's ~1-year retention | Choose dates within the last year |
| Date out of range at runtime | TikTok rejected the date range as out of its ~1-year retention window | Narrow the range to the last year |
| Initial block | TikTok blocked the initial request | Try again later, or enable a proxy |
| No valid input | No scrapeable sources | Check your URLs, keywords, and dates |
💬 Support & Contact
Get Help
- 🌐 Website: flowextractapi.com
- 📧 Email: flowextractapi@outlook.com
- 🙋 Apify Profile: FlowExtract API
- 💬 GitHub Issues: FlowExtractAPI
Social Media
- 💼 LinkedIn: flowextract-api
- 🐦 Twitter: @FlowExtractAPI
- 📱 Facebook: flowextractapi
🌟 Related Actors by FlowExtract API
🏠 Real Estate Data
domain.com.au Scraper Extract Australian property listings from domain.com.au with full enrichment, agent contacts, schools, and market insights.
Realtor.com Scraper Extract US property listings from Realtor.com. Pricing, agent contacts, tax history, AVM estimates, nearby schools, flood and noise data, and full listing history.
PropertyFinder Scraper Extract property listings from PropertyFinder across UAE, Saudi Arabia, Bahrain, Egypt, and Qatar.
Idealista Scraper API Advanced Idealista property data extraction with API access.
Idealista Scraper Extract Spanish real estate listings from Idealista.
Leboncoin.fr Scraper Extract French classified listings from Leboncoin real estate, vehicles, jobs, and more.
AI Contact Intelligence Extractor Extract emails, phones, contacts & custom data using AI.
🍔 Food & Delivery
DoorDash Scraper Scrape store listings, full menus, featured items, and customer reviews from DoorDash.
🎬 Video & Media Tools
YouTube Transcript & Metadata Extractor Extract complete video transcripts with timestamps and comprehensive metadata.
YouTube Full Channel, Playlists, Shorts, Live Extract complete playlist information with all video details from any YouTube playlist.
Zoom Scraper | Downloader & Transcript Extract Zoom meeting recordings, transcripts, and metadata.
Loom Scraper | Downloader & Transcript Download Loom videos and extract transcripts.
🛠️ Developer & Security Tools
Screenshot Fast, reliable webpage screenshots with customizable options.
Ultimate Screenshot Advanced screenshot tool with full-page capture, custom viewports, and quality controls.
📱 Social Media Tools
Facebook Ads Scraper Pro Extract Facebook ads data for competitor analysis and market research.
LinkedIn Ad Library Scraper Extract comprehensive advertising data from LinkedIn's Ad Library.
Ready to extract TikTok ad data? Start using TikTok Ad Library Scraper now!