TikTok Ads Library Scraper - Ad Creatives, Videos & Dates
Pricing
$3.00 / 1,000 ad scrapeds
TikTok Ads Library Scraper - Ad Creatives, Videos & Dates
Search the TikTok Ads Library by advertiser name, business ID or ad ID in any supported region. Get each ad's creative format, video and image URLs, first and last shown dates, audience range and rejection info as JSON, or a free count of matching ads.
Pricing
$3.00 / 1,000 ad scrapeds
Rating
0.0
(0)
Developer
SR
Maintained by CommunityActor stats
0
Bookmarked
213
Total users
68
Monthly active users
17 days ago
Last modified
Categories
Share
TikTok Ads Library Scraper
Search the TikTok Ads Library for advertiser names, creative media and publication dates. This TikTok ad library scraper returns structured records for active or stopped ads, a free count-only result, or a direct link to a known ad. Marketers, agencies and analysts use it to study competitors' TikTok ads, collect ad examples for creative briefs, and monitor how an advertiser's campaigns change over time, without copying results from the library website by hand.
The data comes from TikTok's public ad library (the Commercial Content Library at library.tiktok.com). You can run the Actor from Apify Console, schedule it, or call it as an API from your own code and receive the same JSON every time.
What the TikTok Ads Library Scraper collects
Use this Actor to review an advertiser's creative history, compare messages across regions, or collect media links for your own analysis. Each ad record includes its identifier, advertiser name, creative format, audit status, first and last shown dates, and the number of days between those dates. Where TikTok supplies them, records also include video URLs, cover images, image URLs, estimated audience and rejection information.
The source determines which fields have useful values. In the responses used to validate this Actor, impression was zero and spent was an empty string. Those values are retained as returned. They do not establish that an advertiser spent nothing, and the Actor does not estimate campaign budgets, conversions or return on advertising spend. Use the dates and creative content for analysis that the available data supports.
Input
Provide search, ad_id, or adv_biz_ids. The default search mode uses an advertiser name. The store's prefilled search is nike; a measured regional search used the following input:
{"search":"coolblue","region":"NL","limit":30}
The input above produced 30 records for Coolblue B.V. in a validation run. Results can change as advertisers publish or stop ads. A search never promises a fixed catalogue snapshot.
| Field | Default | What it controls |
|---|---|---|
search | Empty | Advertiser name, or the legacy keyword query |
ad_id | Empty | Returns one ad identifier and its library link |
adv_biz_ids | Empty | Advertiser business ID sent alongside the search |
region | all | Search region, such as NL, DE, FR or GB |
query_type | 1 | 1 searches by advertiser name; 0 retains legacy keyword behavior |
sort | last_shown_date,desc | Sort on first shown, last shown or impressions, ascending or descending |
ad_status | active | Active, inactive, or all ads |
only_total | false | Returns a count row instead of ad creatives |
start_date | One year before the run | Lower date bound in YYYY-MM-DD format |
end_date | Current time | Upper date bound in YYYY-MM-DD format |
limit | 20 | Number of ads requested, from 1 to 500 |
offset | 0 | Offset for resuming an earlier search |
search_id | Empty | Resume value from an earlier result's _next_search_id |
proxy_url | Empty | Optional advanced connection setting |
Set ad_status to inactive to examine stopped creative, or to all to include both active and stopped ads. The status describes the search filter; the separate audit_status field describes the creative's review status.
The legacy keyword mode, query_type: "0", can return advertisers unrelated to the query. This behavior was also observed in the previous Actor version. Use advertiser-name mode for a search that should concern a particular business. A business-ID filter is sent together with the search, so clear the search field when you intend to filter by ID alone.
region: "US" is unsupported by the library search. Use all for the global result set. Date filters apply to the source search. An ad-ID lookup returns its link without fetching creative content and ignores the date window.
How to use the TikTok Ads Library Scraper
- Enter an advertiser name in
search, for example a brand you want to follow. - Pick a
regionand choosead_status: active, inactive or all. - Set
limitto the number of ads you need, or setonly_totaltotruefor a free count first. - Start the run and download the dataset as JSON, CSV or Excel, or fetch it through the Apify API.
To call it from code, send the same input to the Apify API endpoint run-sync-get-dataset-items for this Actor and you receive the ad rows in the response.
Output
Every result is a dataset row. Ordinary ad rows preserve the existing field names and JSON types: ad_id, advertiser_name, audit_status, ad_type, first_shown, last_shown, days_shown, estimated_audience, impression, spent and deeplink. Search context appears in query, region, sort, ad_status, total_ads_in_search and pages_fetched.
Optional videos contain video_url and cover_image when supplied. image_urls is a list of image links. rejection_info contains reasons and affected regions when available. Missing media blocks remain absent. Media links may expire, so retrieve the media you need while the links remain valid.
New fields include result_type, _type, fetched_at, ad_text, source and platform. Creative identifiers, formats and dates are also available under shared names alongside the original names. An ad row has result_type: "ad". An ad-ID lookup has result_type: "ad_link" and contains the identifier, link and an explanatory note. It does not contain a fetched creative.
For only_total: true, the dataset contains one count row with total_ads, total_is_exact, total_note, the query and the search window. A count below 5000 is marked exact; a count of 5000 or more is marked as a lower bound, matching the existing Actor behavior. This is a count of matching library ads, not an advertiser's complete campaign or account history.
Download the dataset as JSON or your preferred Apify export format. The summary record retains itemCount and errorCount. The OUTPUT record also provides status, billing counts and warnings. When collection is interrupted after results have arrived, those results remain available and the output explains the interruption. A search with no ads completes successfully with an empty dataset and an error record describing the empty result.
Output example
This ad row is a real result from the previous Actor version for the input {"search": "coolblue", "region": "NL", "limit": 30}. Media links are signed and expire, so the links below may no longer open.
{"ad_id": "1877308015260690","advertiser_name": "Coolblue B.V.","audit_status": "approved","ad_type": "video","first_shown": "2026-09-27","last_shown": "2026-09-30","days_shown": 4,"estimated_audience": "100K-200K","impression": 0,"spent": "","deeplink": "https://library.tiktok.com/ads/detail/?ad_id=1877308015260690","videos": [{"video_url": "https://library.tiktok.com/api/v1/cdn/1790917006/video/aHR0cHM6Ly92NzcudGlrdG9rY2RuLmNvbS9hNjc5ODllZDZmNzIxMGU1ZTllODQ0Zjc2M2FiZGU4YS82YWJmOGUwOS92aWRlby90b3MvdXNlYXN0MmEvdG9zLXVzZWFzdDJhLXZlLTAwNTFjNzk5LWV1dHRwL29zQ21CaXdJSUQxUW5PQkRFQTBUNW9pRFpXTzAxQWZtM0JBeW9ZLw==/348dadcd-3144-48a9-953e-c3452c07c245?a=475769&bt=973&btag=e000b8000&bti=PDU2NmYwMy86&ft=.NpOcInz7ThHG~4GXq8Zmo&l=202610021256469A3FA202E92A1F90C769&mime_type=video_mp4&rc=ZWc4NDw2OTY8ZmY4ZTk2Z0BpamR2dHk5cng5ZDMzODYzNEBeNl8vNTUvNjUxMTJeLjBiYSNjMmFnMmRrZm9hLS1kMDFzcw%3D%3D&signature=9yOZ53fYRc8ndUQjZBoIuToas5Wr7B23TbBNVY%2FZtlI%3D&vvpl=1","cover_image": "https://p19-common-sign.tiktokcdn.com/tos-alisg-p-0051c001-sg/o8CNAqkaZWtebGaGQVQM4G84g6fUAhEJDgpjfb~tplv-tiktokx-origin.jpeg?dr=14582&refresh_token=475be666&x-expires=1790935200&x-signature=2bJAGCc5nxyfPDE8dTeFOog8NGM%3D&t=4d5b0474&ps=13740610&shp=0c75dd76&shcp=9b759fb9&idc=sg1"}],"image_urls": ["https://p19-common-sign.tiktokcdn.com/tos-alisg-p-0051c001-sg/o8CNAqkaZWtebGaGQVQM4G84g6fUAhEJDgpjfb~tplv-tiktokx-origin.jpeg?dr=14582&refresh_token=475be666&x-expires=1790935200&x-signature=2bJAGCc5nxyfPDE8dTeFOog8NGM%3D&t=4d5b0474&ps=13740610&shp=0c75dd76&shcp=9b759fb9&idc=sg1"],"query": "coolblue","region": "NL","sort": "last_shown_date,desc","ad_status": "active","total_ads_in_search": 36,"pages_fetched": 4,"_next_search_id": "eyJsYXN0X3NvcnQiOlsyMy45OTQ2MDgsMTc5MDcyNjQwMDAwMF0sIm5leHRfY3Vyc29yIjozMn0=","_next_offset": 32}
A count-only run for {"search": "coolblue", "region": "NL", "ad_status": "all", "only_total": true} returned this single row and no charged events:
{"result_type": "count","query": "coolblue","adv_biz_ids": null,"region": "NL","ad_status": "all","total_ads": 813,"total_is_exact": true,"total_note": null,"start_date": null,"end_date": null}
Use cases for TikTok Ads Library data
- Competitor research. List every active ad a competitor runs in a region, with its format and how long it has been shown. Ads that stay live for many days are often the ones that work.
- Creative inspiration. Collect TikTok ads examples with their video and cover image links to build mood boards and creative briefs for your own campaigns.
- Campaign monitoring. Schedule a daily or weekly run for a set of advertisers and compare
first_shownandlast_shownto see when new creative starts and old creative stops. - Market and regional comparison. Run the same advertiser in several regions to see which messages it uses in each market.
- Compliance and review. Check
audit_statusandrejection_infoto see which creatives were rejected and in which regions. - Lead research for agencies. Use the free count-only mode to see which brands advertise actively before you pitch them.
TikTok Ads Library Scraper compared with other options
| Option | What you get | Limits |
|---|---|---|
| TikTok ad library website | Browse ads one by one | No export, manual copying, no scheduling |
| TikTok Creative Center top ads | Popular ads by industry and objective | Selected top ads, not an advertiser's full library history |
| Ad spy tools | Dashboards with ad collections | Monthly subscription, data stays in their tool |
| This Actor | Structured JSON rows per ad, per advertiser and region, plus a free count | Only fields the library itself publishes; no spend estimates |
This Actor fits when you need the TikTok Ads Library as a data source: rows you can load into a spreadsheet, database or BI tool, on a schedule, and paid per ad delivered instead of per month.
Pricing
The existing pay-per-event price is $0.003 per scraped event. Each delivered ad row creates one event. An ordinary ad-ID lookup creates one event for its link row, matching the previous Actor version. Count-only requests are free of this event, including the combination of ad_id and only_total: true. Empty searches and soft errors create no scraped events. The Actor has no custom credits or additional start event.
A run from a user without a paid Apify plan delivers at most ten rows. Paying users keep the requested limit, up to 500 ads. Higher limits may require more search pages, so completion time depends on the requested volume and the source's response time.
FAQ
Is this the same as TikTok Creative Center?
No. Creative Center shows a selection of top-performing ads. This Actor searches the TikTok ad library, where you look up the ads of a specific advertiser, filtered by region, status and date.
Can I use the TikTok Ads Library Scraper as an API?
Yes. Every Apify Actor can be started through the Apify API. Send the input as JSON and read the dataset items from the response or from the run's dataset.
Does this return active and stopped ads?
Yes. Use ad_status: "active", "inactive" or "all". The default remains active. Change the filter when researching creative that an advertiser has already stopped running.
Can I retrieve one creative by its ad ID?
An ad_id request returns the identifier and a link to its TikTok library page. It does not retrieve the content of that detail page. Use an advertiser search to collect creative records and media available in the search results.
Are count-only requests charged per ad?
No. A count-only run delivers one summary row and zero scraped events. The count reports whether the figure is exact or a lower bound. It does not download all matching creative records.
How do I resume a search?
The Actor automatically collects pages up to the requested limit. For a separate run, the existing _next_search_id and _next_offset fields let you resume where the earlier search stopped. These fields are hidden by Apify exports that use clean=true; request the uncleaned dataset if you need them. Keep the original search filters unchanged when resuming.
Can this measure an advertiser's spend?
Only values actually supplied by the library are returned. Empty spend values and zero impression values are retained, and no campaign spend estimate is generated. The Actor is useful for creative and publication history even when those commercial metrics are unavailable.