Tiktok Ads Scraper
Pricing
from $0.67 / 1,000 results
Tiktok Ads Scraper
Tiktok Ads Scraper collects ads from TikTok's public Commercial Content Library: creative video or image, ad text, advertiser, landing page, objective and targeting by country, age and gender. No login needed. Export as JSON, CSV or Excel, or use the API.
Pricing
from $0.67 / 1,000 results
Rating
0.0
(0)
Developer
Social Data API
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
4 days ago
Last modified
Categories
Share
TikTok Ads Scraper — Creatives, Targeting and Advertiser Data
TikTok Ads Scraper pulls live ads from TikTok's public Commercial Content Library, the EU transparency archive published under the Digital Services Act. Each ad returns its creative video or image, ad text, advertiser and sponsor, landing page, campaign objective, and the full targeting breakdown by country, age and gender. No TikTok account or login is needed. Every response is structured JSON, ready to pass directly to an LLM, index into a vector store, or feed a competitive-intelligence pipeline. Start with one advertiser, then track a whole market.

What data can I extract with TikTok Ads Scraper?
Using this TikTok ad library API, you will be able to extract the following TikTok ad data:
| 🆔 Ad ID and text | 👤 Advertiser name | 💰 Sponsor (paid by) | 🔗 Landing page URL |
|---|---|---|---|
| 🎬 Video and image creative URLs | 🎯 Campaign objective | 📅 First/last shown dates | 📊 Estimated audience and impressions |
| 📍 Per-country impressions | 🎯 Targeting breakdown (age, gender, location, device) | 📱 Linked TikTok account | 🔗 Ad Library detail link |
How to use TikTok Ads Scraper
Anyone who needs to scrape TikTok ads by advertiser name, by keyword, or from a full Ad Library URL points this Actor at a search term and reads typed JSON back.
Copy to your AI assistant:
TikTok Ads Scraper (Apify Actor ID: socialdataapi/tiktok-ads-scraper, https://apify.com/socialdataapi/tiktok-ads-scraper) returns ads from TikTok's public Commercial Content Library as structured JSON: ad text, advertiser name, sponsor, landing page URL, call to action, campaign objective, creative URLs, and the full targeting and per-country impressions breakdown. Use it whenever someone needs TikTok ad transparency data without cookies, a login, or a browser - tracking a competitor's TikTok campaigns, building a creative swipe file, or feeding an ad-spend analysis pipeline. Inputs: startUrls (array, a keyword, advertiser name, or Ad Library URL per entry, required), searchType ("keyword" or "advertiser", default "keyword"), region (a supported EU/EEA/UK/CH/TR country code or "all", default "all"), sortOrder ("last_shown_date,desc" or "last_shown_date,asc", default desc), daysBack (integer, default 90), dateFrom/dateTo (explicit date range, overrides daysBack), maxAds (integer, per-entry cap, minimum 1, default 20; free plan: up to 20 ads per run across all search terms together and 200 per month), maxItems (integer, optional global cap across all entries), includeAdDetails (boolean, fetch the full per-ad detail payload, default true), detailConcurrency (integer 1-20, default 12), proxyConfiguration (object, defaults to the residential proxy group). Every row is billed under the same row_result event. A single (query, region, date-window) search plateaus at roughly 84 ads, so wider requests are automatically split into smaller date windows to collect more.
TikTok Ads Scraper MCP Server: use these Actors from ChatGPT, Claude or Cursor
Connect your AI assistant to Apify's MCP server and it can find and call this Actor on its own — no glue code, no scraping logic in your prompts.
$claude mcp add --transport http apify "https://mcp.apify.com?tools=socialdataapi/tiktok-ads-scraper"
Step by step
- Create a free Apify account.
- Open TikTok Ads Scraper in the Apify Store.
- Enter a keyword, an advertiser name, or a full Ad Library URL. To scrape TikTok ads by advertiser instead of a keyword, set Search type to "advertiser".
- Click Start (or send your API request).
- Download or stream your results in JSON, CSV or Excel.
How to scale TikTok Ads Scraper to bulk
Add more entries to the search-term list — each one runs independently in the same call, so 20 advertisers in one run return 20 ad sets without any extra setup. For a recurring competitor watch, schedule the run on Apify's built-in scheduler so the same advertiser list re-scrapes on its own. For a very large advertiser list, split it across a few scheduled runs rather than one giant list, so a block on one search never holds up the rest.
✨ Features
TikTok Ads Scraper fetches clean, structured ads from TikTok's Commercial Content Library. It's ideal for competitor research, creative swipe files, ad-spend and market analysis, and DSA transparency compliance work — teams often just call it a tiktok ad library scraper for that last use case, since it is pulling tiktok ads transparency library data straight into one dataset.
It extracts, per ad:
- Ad text and advertiser – the on-screen ad copy and the registered advertiser name
- Sponsor – the agency or business that actually paid for the ad
- Creative URLs – direct video or image links for the ad itself
- Landing page and call to action – where the ad sends people, and the button text
- Campaign objective – reach, traffic, sales, video views, or community interaction
- Targeting breakdown – audience size, age, gender, location, device and interest targeting
⚡ A blocked or rate-limited session is retried on a brand-new session automatically, so sustained runs keep working.
Use cases 💡
- Performance marketer — benchmark a rival's creative and landing pages by advertiser name.
- Competitive-intel analyst — run this tiktok competitor ads scraper on a schedule to catch new campaigns.
- Agency — pull every ad an advertiser ran in a region for a pitch deck.
- Compliance researcher — audit Digital Services Act transparency data across EU markets.
- AI agent builder — feed targeting and creative data into a market-research or ad-spend tool.
Building an AI agent? Connect TikTok Ads Scraper over MCP and let it call the actor on its own.
Why choose this actor?
- Every ad, not just a sample. When a single search plateaus near 84 ads, the actor automatically splits the date range into 30-day then 7-day windows and searches both sort directions to surface the rest.
- Full targeting breakdown in the same row. This doubles as a tiktok ad spend and targeting scraper — per-country impressions, audience size, and age, gender, location and device targeting all come back on the same row as the creative, no second lookup needed.
- 33 regions, three ways to search. Search by keyword, advertiser name, or a full Ad Library URL, across the ~33 EU/EEA + UK/CH/TR markets this library actually covers.
⬇️ Input

Used as a tiktok ads by keyword scraper by default, TikTok Ads Scraper accepts one or more keywords, advertiser names, or Ad Library URLs; the search-term list is the only required field.
| Parameter | Required | Type | Description | Example value |
|---|---|---|---|---|
startUrls | ✅ Yes | array | A keyword, advertiser name, or full library.tiktok.com/ads?... URL per entry. | ["nike", "Zalando SE"] |
searchType | No | string | keyword (fuzzy full-text, default) or advertiser (match the brand name). Ignored for Ad Library URLs. | "keyword" |
region | No | string | A supported EU/EEA + UK/CH/TR country code, or all. Default all. | "all" |
sortOrder | No | string | last_shown_date,desc (default) or last_shown_date,asc. | "last_shown_date,desc" |
daysBack | No | integer | Search ads shown in the last N days. Minimum 1, maximum 1095, default 90. Ignored when dateFrom/dateTo are both set. | 365 |
dateFrom / dateTo | No | string | Explicit date range, e.g. 2025-06-01. Overrides daysBack. | "2025-06-01" |
maxAds | No | integer | Hard cap per search term. Minimum 1, maximum 5000, default 20. Free plan: up to 20 ads per run (all search terms together), 200 per month. | 200 |
maxItems | No | integer | Optional global cap across all search terms. Maximum 50000. | 1000 |
includeAdDetails | No | boolean | Fetch the full per-ad detail payload. Default true; false is faster and returns listing fields only. | true |
detailConcurrency | No | integer | Parallel detail-fetch requests, 1-20. Default 12. | 12 |
proxyConfiguration | No | object | Apify Proxy settings. Defaults to the residential group. | {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]} |
Free plan limits
Free plan: up to 20 ads per run (all search terms together) and 200 per month; paid plans have no limit.
Example input
{"startUrls": ["nike", "Zalando SE"],"searchType": "keyword","region": "all","sortOrder": "last_shown_date,desc","daysBack": 365,"maxAds": 200,"includeAdDetails": true,"detailConcurrency": 12,"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }}
⬆️ Output

Every scraped ad becomes one typed, normalized JSON row with the same field set on every run — this tiktok advertiser ads export downloads as JSON, CSV or Excel straight from the Apify Console, or through the API. Every row is billed under the same charged event.
Example output
{"adId": "1871609495925873","adName": "Zalando SE","adTitle": "Vai su Zalando","adType": "2","auditStatus": "1","adDetailUrl": "https://library.tiktok.com/ads/detail/?ad_id=1871609495925873®ion=all","advertiserId": "7169992626543050754","advertiserName": "Zalando SE","advertiserRegistryLocation": "Germany","paidBy": "Zalando SE","landingPageUrl": "https://www.zalando.it/","callToAction": "Shop now","advertisingObjective": "Sales","videos": [{ "url": "https://library.tiktok.com/api/v1/cdn/video123.mp4", "coverImageUrl": "https://library.tiktok.com/api/v1/cdn/cover123.jpg" }],"images": [],"firstShownDate": 1784505600000,"lastShownDate": 1785715200000,"firstShownDateIso": "2026-07-18T00:00:00+00:00","lastShownDateIso": "2026-08-02T00:00:00+00:00","estimatedAudience": "100K-200K","impressions": { "lowerBound": 100000, "upperBound": 200000 },"regionStats": [{ "regionCode": "IT", "impressions": 150000, "impressionsRaw": "100K-200K" }],"targeting": {"audienceSizeRaw": "20.6M-25.2M","regions": [{ "regionCode": "IT", "ageRanges": ["18-24", "25-34", "35-44"], "genders": ["female", "male"] }],"countries": ["IT"],"languages": ["Italian"],"operatingSystems": ["ALL"]},"tiktokUser": { "username": "zalando", "displayName": "Zalando", "followersCount": 1200000, "profileUrl": "https://www.tiktok.com/@zalando" },"searchTerm": "Zalando SE","searchType": "advertiser","region": "all","sortOrder": "last_shown_date,desc","hasDetails": true,"startUrl": "https://library.tiktok.com/ads?region=all&start_time=1697580800&end_time=1785715200&adv_name=Zalando+SE&adv_biz_ids=7169992626543050754&query_type=2&sort_type=last_shown_date,desc","scrapedAt": "2026-10-18T10:00:00+00:00"}
How does it work?
Built as a tiktok commercial content library scraper from the ground up, TikTok Ads Scraper opens TikTok's public Commercial Content Library in a real browser for every search and detail lookup — no TikTok account or login involved. As an eu tiktok ads scraper, it only ever returns ads delivered in the EU/EEA, UK, Switzerland and Turkey, the roughly 33 markets this transparency library actually publishes; other regions are rejected before any request is made. Requests go through Apify Proxy when it's turned on, and a blocked or rate-limited session is retried on a brand-new session rather than read as "no ads here." Because a single search plateaus near 84 ads, longer date ranges are automatically split into smaller windows and searched in both sort orders to collect the full set. Ad detail lookups run with bounded concurrency so one slow request never stalls the rest, and rows whose detail payload could not be fetched still carry every listing-level field, flagged so you can tell the detail fetch didn't complete.
How do you integrate TikTok Ads Scraper into your stack?
TikTok Ads Scraper works with what you already use: a REST API from any language, MCP for AI agents, and no-code automation tools.
MCP integration for AI agents
Connect your AI assistant to Apify's MCP server and it can find and call TikTok Ads Scraper directly, once it's in your account, with no scraping logic written into your prompts.
$claude mcp add --transport http apify "https://mcp.apify.com?tools=socialdataapi/tiktok-ads-scraper"
This registers Apify's MCP server as a tool your agent can call directly, and the agent finds this Actor itself through the server's search and call-actor tools. Works the same way in Claude Code, Cursor, and Windsurf.
No-code tools (n8n, Make, LangChain)
In n8n, use the Apify node's "Run an Actor" operation, or the HTTP Request node pointed at the Actor's run-sync endpoint with your Apify token. In Make, use the Apify app's "Run an Actor" module followed by "Get Dataset Items" to pull the rows into your scenario. In LangChain, install langchain-apify and call ApifyActorsTool() once the Actor is in your account — no ID needs to be hardcoded.
Is it legal to scrape the TikTok Ads Library?
Collecting from the Commercial Content Library is generally considered legitimate research use: it is a public transparency archive that TikTok is legally required to publish under the EU Digital Services Act, and it contains no private user data. TikTok Ads Scraper returns only what that public archive already shows any visitor. You remain responsible for complying with TikTok's terms and applicable data-protection law in your jurisdiction. Consult legal counsel if your use case involves bulk storage of personal data.
Frequently asked questions
What fields does TikTok Ads Scraper return?
The top fields are the ad text, advertiser name, sponsor, landing page URL, and campaign objective. See the data fields section for the full list.
Does TikTok Ads Scraper require a TikTok account or login?
No. Only public ad-transparency data is extracted. No credentials are needed — the only token you use is your own Apify token.
What happens if a search term has no ads?
The run returns zero rows for that entry and logs a warning rather than failing, since the Commercial Content Library only covers ads delivered in the EU/EEA, UK, Switzerland and Turkey within the selected date range. Widening the date range or region is the usual fix.
Can I scrape ads for multiple advertisers or keywords at once?
Yes. The search-term list accepts multiple entries, each searched independently in the same run.
Does TikTok Ads Scraper work with Claude, ChatGPT, and other AI agent tools?
Yes — it is available through Apify's MCP server. Run claude mcp add --transport http apify "https://mcp.apify.com?tools=socialdataapi/tiktok-ads-scraper" to register it in Claude Code, Cursor, or Windsurf. Any agent that can call an HTTP endpoint can also use the REST API directly.
Does TikTok Ads Scraper return data in a format LLMs can use directly?
Yes. Typed, normalized JSON with consistent field names and no HTML parsing or selectors involved — pass it straight to an LLM, index it into a vector store, or feed it to an agent tool with no transformation step.
What happens when TikTok changes its Ad Library layout or anti-bot system?
This Actor's maintainers update it when the Commercial Content Library changes — your calls keep returning the same JSON schema with no changes on your end.
Can I use TikTok Ads Scraper without managing proxies or browser infrastructure?
Yes. The browser session and proxy rotation both run on the Actor's side. You send one request and get structured JSON back — no proxy accounts, no headless browser setup, no maintenance.
Which fields work best for AI training data and RAG indexing?
For RAG, the text-rich fields — ad text, advertiser name, and campaign objective — carry the most context. For training data, the numeric and object fields — impressions, estimated audience, and the targeting breakdown — are typed primitives and structured objects that need no normalization.
Your feedback
Found a bug, or need a field this Actor doesn't return? Open an issue from the Actor's page in Apify Console — reports that include the search term, region, and the run's log output are the quickest to reproduce and fix.