TikTok Ads Library Scraper avatar

TikTok Ads Library Scraper

Pricing

from $2.99 / 1,000 ads

Go to Apify Store
TikTok Ads Library Scraper

TikTok Ads Library Scraper

Collect public commercial-content ads from the TikTok Ads Library, including advertiser identity, ad text, dates, reach signals, media, detail URLs, and search provenance.

Pricing

from $2.99 / 1,000 ads

Rating

0.0

(0)

Developer

w3crawler

w3crawler

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

TikTok Ads Library Scraper searches the public TikTok Commercial Content Library for commercial ads that match an advertiser or ad-text query in a supported European market. It returns only source-backed ad identity, ad copy, first and last shown dates, reach and impression bands, media URLs, and search provenance exposed by the public library page. It does not log in, collect private advertiser data, solve challenges, or turn a blocked library response into an invented record.

Get started

  1. Open the Actor Store page and select Try for free or open the Input tab.
  2. Set the required country to a two-letter EU/EEA or Great Britain code, and replace the smoke-test query with your advertiser or ad-text term.
  3. Keep maxItems and maxScrolls small for the first run, then increase them after you inspect the output.
  4. Start the Actor, open the dataset, and export the saved ads as JSON, CSV, or Excel. Open Run summary (OUTPUT_SUMMARY) to check the outcome, deduplicated count, and filtered-out reasons.

Input

country is required. The other fields are optional, and the defaults below are ready to use. Unsupported field names and out-of-range values are rejected before the browser starts.

FieldTypeRequired?DefaultMeaning
querystringOptionalNikeAdvertiser name or ad-text query submitted to the public search form, up to 200 characters. The default is a bounded smoke-test value; live availability depends on the public page.
countrystringRequiredDETwo-letter EU/EEA or Great Britain country code used as the ad target region.
maxItemsintegerOptional50Global maximum number of distinct rich ad records emitted, from 1 to 200.
maxScrollsintegerOptional5Maximum load-more or scroll attempts on the results page, from 0 to 20.
requestDelayMsintegerOptional500Delay before and between page interactions, from 0 to 5,000 ms.
maxConcurrencyintegerOptional1Bounded browser concurrency, from 1 to 3. One is recommended for the interactive Ads Library.
maxRequestRetriesintegerOptional1Maximum retries for failed browser requests, from 0 to 2.
requestTimeoutSecsintegerOptional60Per-page request and selector timeout, from 10 to 120 seconds.
proxyConfigurationobjectOptionalNot suppliedOptional Apify Proxy or custom HTTP(S) proxy. Proxy use does not bypass access controls.

Full default input, excluding the optional proxy object:

{
"query": "Nike",
"country": "DE",
"maxItems": 50,
"maxScrolls": 5,
"requestDelayMs": 500,
"maxConcurrency": 1,
"maxRequestRetries": 1,
"requestTimeoutSecs": 60
}

The Actor drives the public TikTok Commercial Content Library search form. Advertiser names, ad copy, date ranges, reach bands, and media are read only where the public page renders them. The library's coverage is limited to the markets it publishes; the Actor does not query other advertising databases.

Output

The dataset contains one row per unique public ad. Each row reflects the library page at collection time. Optional values are omitted when the library does not publish them, and the Actor never writes diagnostic or placeholder rows to the dataset. In the saved 2026-10-25 run, adText, impressions, platform, adStatus, and videoUrl were not exposed, so those fields are absent from every saved row.

FieldTypeAvailabilityMeaning
adIdstringWhen publishedStable TikTok ad identifier when exposed.
advertiserNamestringWhen publishedAdvertiser identity shown by the library.
detailUrlstringWhen publishedPublic ad detail URL.
adTextstringWhen publishedPublic ad copy when exposed.
firstShownstringWhen publishedFirst shown date or source label, in the library's displayed format.
lastShownstringWhen publishedLast shown date or source label, in the library's displayed format.
uniqueUsersstringWhen publishedPublic unique-user reach value or band.
impressionsstringWhen publishedPublic impression value or band.
platformstringWhen publishedPlatform label shown by the source.
adStatusstringWhen publishedBusiness ad status shown by the source.
thumbnailUrlstringWhen publishedEntity-associated ad thumbnail URL.
videoUrlstringWhen publishedEntity-associated public video URL when exposed.
sourcestringWhen publishedProvenance source identifier.
sourcePageUrlstringWhen publishedLibrary search page that produced the record, including its query and region parameters.
querystringWhen publishedQuery used for this search.
countrystringWhen publishedAd target country code used for this search.
pageNumintegerWhen publishedObserved source page number; interactive load-more results remain page 1.
positionintegerWhen publishedPosition within the observed result batch before global deduplication.
rankintegerWhen publishedOne-based emission rank after global deduplication.
scrapedAtstringAlwaysUTC timestamp when the ad row was saved.

The example below is a real saved row from the 2026-10-25 run. The thumbnail URL is the signed CDN URL returned by the library at collection time.

{
"adId": "1879578146577730",
"advertiserName": "NIKE Retail B.V.",
"detailUrl": "https://library.tiktok.com/ads/detail/?ad_id=1879578146577730",
"firstShown": "10/20/2026",
"lastShown": "10/24/2026",
"uniqueUsers": "200K-300K",
"thumbnailUrl": "https://p16-common-sign.tiktokcdn.com/ad-site-i18n-sg/20261013c7c792c0bae9a7f64a2aac85~tplv-tiktokx-origin.jpeg?dr=14582&refresh_token=15480dbb&x-expires=1792980000&x-signature=jPsunDVlCKwvBg2veTcG4Wu3xGY%3D&t=4d5b0474&ps=13740610&shp=0c75dd76&shcp=9b759fb9&idc=sg1",
"source": "library.tiktok.com",
"sourcePageUrl": "https://library.tiktok.com/ads?region=DE&start_time=1790369525249&end_time=1792961525250&adv_name=Nike&adv_biz_ids=&query_type=1&sort_type=create_time,desc&ad_type=0&ad_status=1&ages=all&ad_reach=all&gender=ALL",
"query": "Nike",
"country": "DE",
"pageNum": 1,
"position": 1,
"rank": 1,
"scrapedAt": "2026-10-25T20:52:10.573Z"
}

Run summary

Run summary is stored separately from the dataset in the run's key-value store under OUTPUT_SUMMARY. It reports the search, the number of distinct ads, and counts for candidates that were filtered out or blocked.

FieldMeaning
statusActor process outcome: SUCCEEDED or FAILED.
dataStatusCompleteness of saved ads: COMPLETE, PARTIAL, NO_RESULTS, or FAILED.
sourcePublic library host used for the run.
sourceUrlFinal library search URL used for the run, including query and region parameters.
queryAdvertiser or ad-text query submitted to the public search form.
countryTwo-letter ad target country code used for the run.
requestedMaxItemsAd limit requested in the input.
normalCountDistinct ads saved in the dataset.
candidateCountAd candidates found on the page before validation and deduplication.
diagnosticCountOperational issues recorded for the run; these are logged and counted, not written as dataset rows.
blockedCountPage responses that showed an access block or challenge.
failedRequestCountBrowser or page requests that failed.
pagesProcessedResult-page loads processed, including the initial load.
filteredOutCountCandidates rejected because they did not meet the rich public-ad contract.
filteredOutReasonsObject mapping each rejection reason to its candidate count.
fixtureModeWhether the run parsed a bundled test fixture instead of the live library.
completedAtTime the summary was written, in ISO UTC.
runStatusCanonical run status; matches status.
StatusData statusMeaning
SUCCEEDEDCOMPLETEAds were saved without an extraction problem.
SUCCEEDEDPARTIALAds were saved, but a later page or extraction problem kept the run from completing. Saved rows remain available.
SUCCEEDEDNO_RESULTSThe library completed cleanly and exposed no ads matching the query.
FAILEDFAILEDA fatal error occurred before any usable ad was saved.

Example OUTPUT_SUMMARY from the 2026-10-25 run:

{
"status": "SUCCEEDED",
"dataStatus": "COMPLETE",
"source": "library.tiktok.com",
"sourceUrl": "https://library.tiktok.com/ads?region=DE&start_time=1790369525249&end_time=1792961525250&adv_name=Nike&adv_biz_ids=&query_type=1&sort_type=create_time,desc&ad_type=0&ad_status=1&ages=all&ad_reach=all&gender=ALL",
"query": "Nike",
"country": "DE",
"requestedMaxItems": 5,
"normalCount": 5,
"candidateCount": 6,
"diagnosticCount": 0,
"blockedCount": 0,
"failedRequestCount": 0,
"pagesProcessed": 1,
"filteredOutCount": 0,
"filteredOutReasons": {},
"fixtureMode": false,
"completedAt": "2026-10-25T20:52:11.310Z",
"runStatus": "SUCCEEDED"
}

Coverage and limitations

The Actor uses the public TikTok Commercial Content Library, not an authenticated advertising API. It searches the advertiser and ad-text fields exposed by the public form and supports only the countries that library publishes, including EU/EEA markets and Great Britain. It honors the visible load-more control up to maxScrolls; the library has no numbered pagination in this workflow, so pageNum stays at 1.

A search can return partial or empty results because the library itself has no matching ads, hides a field, or changes its page structure. A CAPTCHA, login wall, or access denial stops the run rather than being treated as zero ads. Reach and impression values are the bands displayed by the library, not exact measurement data. Detail pages are linked, not opened, so fields that exist only on a detail page are outside this Actor's scope. Signed media URLs can expire after collection.

Usage and support

Cost depends on Apify compute, proxy traffic, browser time, and the number of maxScrolls iterations. Start with a small maxItems, one scroll, and a narrow query; inspect the dataset and the filteredOutReasons in OUTPUT_SUMMARY before scaling. See the Actor's Pricing tab for current account rates.

Use the Actor Issues page to report a problem. Include the run ID, the input used, and the run summary; do not include tokens, cookies, or private data. This Actor is not affiliated with TikTok. Use it only for public data and in accordance with the source's terms, robots guidance, and applicable law. Public pages can contain personal information; use the output only for lawful purposes.