TikTok Commercial Content Library Ads Scraper avatar

TikTok Commercial Content Library Ads Scraper

Pricing

from $0.75 / 1,000 tiktok ad results

Go to Apify Store
TikTok Commercial Content Library Ads Scraper

TikTok Commercial Content Library Ads Scraper

Scrape public TikTok ads from the Commercial Content Library without login or an API key. Search by country, keyword, advertiser, dates, ad type, status, reach and audience, then extract advertiser, targeting, captions, CTAs, landing pages and media URLs.

Pricing

from $0.75 / 1,000 tiktok ad results

Rating

0.0

(0)

Developer

DataScraperES

DataScraperES

Maintained by Community

Actor stats

0

Bookmarked

9

Total users

8

Monthly active users

15 hours

Issues response

3 hours ago

Last modified

Share

Search the public TikTok Commercial Content Library and export structured advertising records without a TikTok login or official API key. Filter by market, keyword, advertiser, date, status, format, audience, and reach.

What this Actor does

The Actor queries TikTok's public advertising library, paginates matching results, removes duplicate ads, and optionally opens individual ad details. Each successful Dataset item includes the advertiser, campaign dates, reach band, caption, destination and available creative media. Optional diagnostic rows explain searches that returned no usable ads or could not be completed.

Use cases

  • Monitor competitor messaging, creatives, offers, and landing pages.
  • Research active campaigns by country, advertiser, or keyword.
  • Compare public audience and reach information across advertisements.
  • Export advertising evidence for market research and reporting.

How to use

  1. Select one or more countries in regions.
  2. Add search terms, advertiser business IDs, or leave both empty for a broad market search.
  3. Choose the date range and any audience or status filters.
  4. Set maxAds and maxPages, then start the Actor.
  5. Open the Dataset to export the resulting ad records.

The run log and status message show live progress: the current phase, saved ads, collected details when enabled, and elapsed time. The final message distinguishes completed, empty, partial, and stopped runs.

Input

Complete input contract (dates below are illustrative):

{
"regions": ["ES"],
"searchTerms": ["nike"],
"advertiserBusinessIds": [],
"queryType": 1,
"startDate": "2026-09-01",
"endDate": "2026-09-30",
"sortType": "create_time,desc",
"adType": 0,
"adStatus": 1,
"ageRanges": ["all"],
"reachRanges": ["all"],
"gender": "ALL",
"locale": "auto",
"maxAds": 12,
"maxPages": 10,
"includeDetails": true,
"saveErrors": true
}

regions defaults to Spain. searchTerms and advertiserBusinessIds can be combined. includeDetails requests additional public detail data but can make the run slower. maxAds caps unique ads across the run, while maxPages limits pagination for each search combination. Date values use YYYY-MM-DD; omitted dates cover the last 30 days through today. The maximum date span is 366 days. You can request up to 10,000 unique ads, 100 pages per search and 100 country/keyword combinations; these are limits rather than guaranteed counts.

Ads are deduplicated by ad ID across all selected countries and searches. The first occurrence supplies the result's search context; finding that ad again does not create another row or charge.

This exact input produced the complete output below:

{
"regions": [
"ES"
],
"searchTerms": [
"nike"
],
"maxAds": 12,
"maxPages": 1,
"includeDetails": true,
"saveErrors": true,
"advertiserBusinessIds": [],
"queryType": 1,
"sortType": "create_time,desc",
"adType": 0,
"adStatus": 1,
"ageRanges": [
"all"
],
"reachRanges": [
"all"
],
"gender": "ALL",
"locale": "auto"
}

Output

Successful rows have recordType: "ad". Media URLs can be temporary, and fields unavailable in the public library remain null. When saveErrors is enabled, diagnostic rows use a different recordType and are not successful ad results. A run-level SUMMARY record is stored in the default Key-value store.

With includeDetails: true, check detailFetched to confirm that enrichment succeeded. Details can include the advertiser's business name, objective, targeting, CTA, landing page and public TikTok profile link. If a detail request fails, the Actor retains the search result with detailFetched: false and a detailError on that ad row. Such a saved ad still counts as a delivered ad for pricing; success: true does not guarantee that every optional field was collected. Fields that TikTok does not publish remain null even when detailFetched is true.

The summary includes detailsFetched, detailsFailed and enrichmentStatus (COMPLETE, PARTIAL, FAILED, NO_ADS or NOT_REQUESTED). Detail failures also count toward errors, and the default results table shows the detail status. After three consecutive detail failures, collection stops with stopReason: "DETAIL_FAILURE_LIMIT". The run is marked as failed when this limit is reached or every attempted detail fails. Collected records and the summary remain available; charges for delivered ad records still apply. A successful detail resets the consecutive-failure counter.

If every search request fails, the run is also marked as failed. A completed search with no matching ads is a valid empty result and does not incur an ad-result charge.

Incomplete searches or requested details mark the run as failed while retaining delivered rows. Reaching maxPages while more results remain is incomplete; increase the page limit in a new run when appropriate. SUMMARY.collectionStatus distinguishes complete, partial and unconfirmed delivery. A spending limit can also stop collection with saved results available. Resuming an interrupted run with the same settings preserves already delivered ad identities; changed settings require fresh run storage.

This is a complete Dataset item from a real successful run:

{
"success": true,
"recordType": "ad",
"source": "tiktok_commercial_content_library",
"retrievedAt": "2026-09-14T07:52:51.473706Z",
"adId": "1875934620401137",
"region": "ES",
"searchTerm": "nike",
"searchPage": 1,
"searchUrl": "https://library.tiktok.com/ads?region=ES&query_type=1&sort_type=create_time%2Cdesc&ad_type=0&ad_status=1&ages=all&ad_reach=all&gender=ALL&adv_name=nike",
"detailUrl": "https://library.tiktok.com/ads/detail/?ad_id=1875934620401137&region=ES",
"detailFetched": true,
"advertiserName": "NIKE Retail B.V.",
"advertiserBusinessId": "6876453864464188162",
"paidBy": "INITIATIVE MEDIA B.V.",
"firstShownAt": "2026-09-11T00:00:00Z",
"lastShownAt": "2026-09-12T00:00:00Z",
"objective": "Traffic",
"uniqueUsersReached": "600K-700K",
"targeting": {
"location": {
"total_region": 1,
"total_impressions": "600K-700K",
"data": [
{
"region": "ES",
"impressions": "855K",
"breakdowns": [
{
"age": "18-24",
"gender": "FEMALE",
"impressions": "397K"
},
{
"age": "25-34",
"gender": "FEMALE",
"impressions": "335K"
},
{
"age": "35-44",
"gender": "FEMALE",
"impressions": "154K"
}
]
}
]
},
"age": [
{
"region": "ES",
"13-17": false,
"18-24": true,
"25-34": true,
"35-44": true,
"45-54": false,
"55+": false
}
],
"gender": [
{
"region": "ES",
"female": true,
"male": false,
"unknown": false
}
],
"target_audience_size": "3.2M-3.8M",
"audience": "No",
"interest": "Sports & Outdoors",
"video_interactions": "",
"creator_interactions": "",
"countries": [
"ES"
],
"cities": [],
"provinces": [],
"languages": [],
"device_models": [],
"operating_systems": [
"ALL"
],
"high_spending_power": "No",
"audience_exclude": "No"
},
"caption": "Sencilla por naturaleza. El legado de las pistas vive en cada pisada.",
"callToAction": "Comprar ahora",
"landingPage": "https://www.nike.com/es/w?q=moon%20shoe&vst=moon%20shoe?cp=12338624686_soc_CRXRWCYMK4PW",
"tiktokProfile": "https://www.tiktok.com/share/user/208464585232822272?source=ad_review",
"media": {
"imageUrl": "https://p16-common-sign.tiktokcdn.com/ad-site-i18n-sg/20260910c7c7dbe9fffd31f34e6cb4ae~tplv-tiktokx-origin.jpeg?dr=14582&refresh_token=b8c8d90f&x-expires=1789390800&x-signature=We4cspk8Ob9GyTWie0Sit5qOqaQ%3D&t=4d5b0474&ps=13740610&shp=0c75dd76&shcp=9b759fb9&idc=sg1",
"videoUrl": "https://library.tiktok.com/api/v1/cdn/1789372371/video/aHR0cHM6Ly92NzcudGlrdG9rY2RuLmNvbS9iYmUzYjRjNDAyZTRmNDFlNmU5YjY2NGVhNGVmZDYxOS82YWE3ZmMzYy92aWRlby90b3MvYWxpc2cvdG9zLWFsaXNnLXZlLTAwNTFjMDAxLXNnL29FSm5sRG9uSUFVTTlZVER1QmhFdm5FQ3ZRZU5nWkZJcWlCRndmLw==/2aa4bd10-8d50-4d2f-b238-1dde7e439c6d?a=475769&bt=487&btag=e000b0000&bti=PDU2NmYwMy86&ft=.NpOcInz7ThBnc0GXq8Zmo&l=2026091415525087FB8FCCB24AF9B66579&mime_type=video_mp4&rc=MztlZDY6OGVoOmk6O2hkZkBpM2ZrO3E5cjY6ZDMzODYzNEAwL2ItY2ItXmMxLTIwLjIxYSNgNGhjMmQ0L2VhLS1kMDFzcw%3D%3D&signature=WobUFOF8UzM6i2ADU4lNquHF0yiCWcIcDqguf%2F27H8c%3D&vvpl=1"
},
"filters": {
"region": "ES",
"searchTerm": "nike"
}
}

Pricing

The Actor uses pay-per-event pricing. One ad-result event is charged for each unique successful ad record delivered to the Dataset. Apify selects the price for your plan automatically:

Apify planPrice per adEquivalent per 1,000 ads
Free$0.001$1.00
Bronze$0.0009$0.90
Silver$0.0008$0.80
Gold$0.00075$0.75
Platinum$0.00075$0.75
Diamond$0.00075$0.75

Diagnostic rows, duplicates, empty searches, failed requests, and SUMMARY do not trigger an ad-result charge. You can set a maximum total charge for a run in Apify to limit spending.

ActorBest for
LinkedIn Ad Library Scraper – No LoginComparing public advertising campaigns and creatives on LinkedIn.
TikTok Hashtag Scraper for Public VideosResearching organic TikTok videos and engagement around campaign topics.
TikTok Profile Scraper – Bio, Stats & PlaylistsEnriching public advertiser or creator accounts with profile-level data.

Limits and data quality

Requested limits are maxima, not guaranteed result counts. Availability depends on the public library, chosen filters, country coverage, and temporary source restrictions. Reach values are published ranges rather than exact audience totals. Creative URLs may expire, and includeDetails can still leave fields empty when TikTok does not expose them.

Frequently asked questions

Do I need a TikTok account or API key?

No. The Actor works with the public Commercial Content Library.

Why did I receive fewer ads than maxAds?

The filters may match fewer public ads, pagination may end, duplicates may be removed, or the source may temporarily restrict a request. Inspect diagnostic rows and SUMMARY.

Are images and videos downloaded?

No. The Dataset contains available public media URLs.

Responsible use

Use the results only for lawful purposes. Respect TikTok's terms, applicable privacy and advertising rules, copyright, and the rights of advertisers and people represented in public data. This Actor is unofficial and is not affiliated with TikTok.

Support

Open an issue in the Actor's Issues tab and include the run ID, selected region, search term, and relevant diagnostic status. Never include passwords, tokens, or private credentials.