Apify actor · whoareyouanas/tiktok-ad-scraper
TikTok Ad Library & Creative Scraper - Spy on Competitor Ads
Research creatives from TikTok Ad Library, Creative Center, or both. Export available ad copy, advertiser context, media links, dates, and source-specific targeting or performance signals.
Documentation checked 2026-10-29 · deployed build 0.0.6 · run through your Apify account
01 / Overview
Match the actor to the job.
Two public sources
Select the transparency Ad Library or Creative Center according to your research question.
URL or parameters
Provide a supported source URL or build a search with mode, country, query, and filters.
Creative exports
Keep advertiser details and available media or metrics in structured records.
02 / Input
Start with a clear, bounded input.
targetUrl can identify the source directly. For parameter searches, choose scrapeMode and a compatible country. Ad Library and Creative Center have different geography and filter coverage. Start with a small maxResults.
{
"targetUrl": "https://library.tiktok.com/ads?query=nike®ion=DE",
"maxResults": 10
}Replace example targets and credential placeholders before running. These are documentation examples, not a promise of currently available source results.
| Field | Type / required | Default | Purpose |
|---|---|---|---|
| scrapeMode | string | "ad_library" | Choose which TikTok data source to scrape. Ad Library covers EU/EEA with rich targeting data. Creative Center covers 50+ countries globally with performance metrics. 'Both' runs both sources. Options: ad_library, creative_center, both |
| targetUrl | string | Not specified | Paste a TikTok Ad Library or Creative Center URL directly. If provided, all parameter fields below are ignored. |
| searchQuery | string | Not specified | Keyword or advertiser name to search for (e.g. 'nike', 'shopify', 'gaming app'). |
| advertiserId | string | Not specified | TikTok advertiser business ID to look up all ads from a specific advertiser. |
| maxResults | integer | 10 | Maximum number of ads to return. Set to 0 for unlimited. Ad Library has a platform cap of ~3,600 results per query. Minimum: 0 · Maximum: 10000 |
All other input controls (11)
| Field | Type / required | Default | Purpose |
|---|---|---|---|
| country | string | "all" | Country code for filtering. For Ad Library: EU/EEA countries only (e.g. DE, FR, IT, ES, NL, GB). For Creative Center: any of 50+ countries (e.g. US, JP, BR, IN). Options: all, US, GB, DE, FR, IT, ES, NL, PL, BE, SE, AT, DK, FI, IE, PT, CZ, RO, HU, SK, BG, HR, LT, SI, LV, EE, CY, LU, MT, GR, CH, NO, IS, LI, JP, KR, AU, BR, MX, IN, ID, TH, VN, PH, MY, SG, TW, CA, AR, CL, CO, PE, EG, SA, AE, TR, ZA, NG, KE |
| industry | string | "all" | Filter by industry vertical. Only applies to Creative Center mode. Options: all, apparel_and_accessories, beauty_and_personal_care, ecommerce, education, finance, food_and_beverage, games, health, home_improvement, news_and_entertainment, tech_and_electronics, travel, vehicle |
| objective | string | "all" | Filter by campaign objective. Only applies to Creative Center mode. Options: all, app_install, traffic, lead_generation, conversions, reach, video_views, community_interaction |
| timePeriod | string | "30" | Time window for results. For Ad Library: custom date range via startDate/endDate. For Creative Center: preset windows. Options: 7, 30, 180 |
| startDate | string | Not specified | Start date for Ad Library search in YYYY-MM-DD format. Defaults to 1 year ago. |
| endDate | string | Not specified | End date for Ad Library search in YYYY-MM-DD format. Defaults to today. |
| sortBy | string | "last_shown_date_newest" | Sort order for results. Options: last_shown_date_newest, last_shown_date_oldest, published_date_newest, published_date_oldest, unique_users_high, unique_users_low, reach, ctr, likes |
| quickSearch | boolean | false | If enabled, skips detail page visits for faster, cheaper scraping. Returns search-level fields only (no targeting or detailed reach data). Recommended for large-volume scrapes. |
| maxConcurrency | integer | 1 | Number of parallel requests. Keep at 1 for stability. Increase to 2-3 only if you need faster scraping. Minimum: 1 · Maximum: 5 |
| requestHandlerTimeoutSecs | integer | 300 | Maximum time to wait for scraping to complete per page. Minimum: 60 · Maximum: 900 |
| proxyUrl | string | Not specified | Residential proxy URL for reliable scraping. Format: http://groups-RESIDENTIAL:[email protected]:8000. TikTok aggressively blocks datacenter IPs. External proxies (BrightData, Oxylabs) also supported. |
03 / Output
Know what each returned row represents.
- The returned fields depend on the selected source and quickSearch setting.
- Reach, targeting, and performance fields can be estimates or source-specific labels. Preserve their context instead of treating them as verified sales.
{
"adId": "12345678",
"advertiserName": "Nike",
"advertiserBusinessId": "987654321",
"advertiserLocation": "US",
"videoUrl": "https://v16m.tiktokcdn.com/...",
"videoUrlHd": "https://v16m.tiktokcdn.com/...",
"coverImageUrl": "https://p16-sign.tiktokcdn.com/...",
"adCopy": "Just Do It. Shop the latest Nike collection.",
"firstShownDate": "2025-01-15",
"lastShownDate": "2025-03-20",
"status": "active",
"estimatedAudience": "500K-1M",
"estimatedAudienceMin": 500000,
"estimatedAudienceMax": 1000000,
"reachByCountry": {
"DE": 250000,
"FR": 150000,
"IT": 100000
},
"targetGender": [
"FEMALE",
"MALE"
],
"targetAgeRange": [
"18-24",
"25-34"
],
"targetCountries": [
"DE",
"FR",
"IT"
],
"targetInterests": [
"Sports",
"Fashion"
],
"likes": 15000,
"ctr": 2.5,
"viewRate2s": 45.2,
"viewRate6s": 28.7,
"industry": "Apparel & Accessories",
"campaignObjective": "Traffic",
"adFormat": "Single Video",
"source": "ad_library",
"sourceUrl": "https://library.tiktok.com/ads?id=12345678",
"scrapeDate": "2025-03-28T10:00:00.000Z"
}Example values illustrate the published contract. Available fields and populated values depend on the source, mode, and result status.
Fields in the documented output view
adId
Ad ID
advertiserName
Advertiser
advertiserBusinessId
Business ID
advertiserLocation
Location
paidForBy
Paid For By
status
Status
adFormat
Format
firstShownDate
First Shown
lastShownDate
Last Shown
estimatedAudience
Est. Audience
estimatedAudienceMin
Audience Min
estimatedAudienceMax
Audience Max
videoUrl
Video
coverImageUrl
Cover
adCopy
Ad Copy
targetGender
Target Gender
targetAgeRange
Target Age
audienceSize
Audience Size
likes
Likes
ctr
CTR
viewRate2s
2s View Rate
viewRate6s
6s View Rate
industry
Industry
campaignObjective
Objective
videoDuration
Duration (s)
detailUrl
Detail URL
source
Source
sourceUrl
Source URL
Output views select columns. They do not necessarily filter record types or exhaust the full JSON payload. Use structured JSON when you need nested arrays or objects.
Dataset links and run artifacts (2)
- Overview
- Overview of all scraped ads with key metrics and details
- All Ads (Full Data)
- Complete dataset with all fields including targeting, reach, and creative assets
04 / Pricing
Understand the billable unit.
These are the active public event prices checked on 2026-10-29, in USD. They describe each event, not a universal flat price for a run. Confirm your current Apify plan and run budget before starting.
| Billable event | Rate (USD) | When it applies |
|---|---|---|
Actor Start apify-actor-start | $0.00005 / event | Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). Start units depend on allocated memory: one event per GB, with at least one event. |
Ad scraped apify-default-dataset-item | $0.005 / event | One scraped TikTok ad with creative, targeting, reach, and advertiser data $5.00 per 1,000 of this event. Other events and separate services are additional. |
- The ad event and startup event below come from the current public pricing configuration.
- The README's source or mode examples are not a universal all-in cost guarantee.
A result limit and a spending cap are different controls. Account charges, applicable taxes, and separately billed providers or proxies must be considered where relevant. A cap setting is not a minimum invoice charge.
05 / API & automation
Use the same input from your workflow.
Test a small run in Apify Console, inspect its records and charges, then save a task or call the actor from your own application. Keep your Apify token in an environment variable. Source-specific credentials, if required, are separate from the Apify API token.
# Save the input example as input.json and set APIFY_TOKEN.
# This request starts an asynchronous, potentially billable run.
curl --request POST \
'https://api.apify.com/v2/acts/whoareyouanas~tiktok-ad-scraper/runs' \
--header "Authorization: Bearer $APIFY_TOKEN" \
--header 'Content-Type: application/json' \
--data @input.jsonThe response identifies the run. Wait for it to finish, inspect its status, and use its default dataset and key-value store to retrieve results. A successful run can still contain partial or failed records; check the output contract above before continuing downstream.
Coverage & interpretation
Check the result before relying on it.
- The transparency library and Creative Center are different datasets; combining them does not create a complete global ad inventory.
- An export saves returned records, not a permanent copy of source-hosted media files.
Questions
Before you build an integration.
What do I need to provide?
targetUrl can identify the source directly. For parameter searches, choose scrapeMode and a compatible country. Ad Library and Creative Center have different geography and filter coverage. Start with a small maxResults.
What should I check in the output?
- The returned fields depend on the selected source and quickSearch setting.
- Reach, targeting, and performance fields can be estimates or source-specific labels. Preserve their context instead of treating them as verified sales.
How do I budget the run?
- The ad event and startup event below come from the current public pricing configuration.
- The README's source or mode examples are not a universal all-in cost guarantee.
Keep exploring
Practical guides for the next step.
TikTok Ad Library: How to Research Competitor Ads in 2026
TikTok is a $30B+ ad platform. Learn how to access competitor ad creatives, targeting demographics, and reach data from the TikTok Ad Library and Creative Center.
Read the guideTop 5 Apify Scrapers to Automate Marketing Research
A practical stack of Apify scrapers for automating marketing research across Meta ads, Google ads, TikTok ads, Facebook Groups, and Reddit.
Read the guideTop 7 Web Scrapers for Competitor Research in 2026
Compare the best web scrapers for competitor ad research, social listening, lead generation, and market research across Meta, Google, TikTok, Reddit, websites, and Facebook Groups.
Read the guide