VOOZH about

URL: https://apify.com/crawlerbros/tiktok-ads-library-scraper-pro

โ‡ฑ TikTok Ads Library Scraper Pro ยท Apify


Pricing

from $1.00 / 1,000 results

Go to Apify Store

TikTok Ads Library Scraper Pro

Scrape TikTok's public ad transparency library by query, advertiser, region, and date range. Pulls ad text, video URL, advertiser, impression buckets, and per-region/age/gender targeting. Pro filters: regionFilter, industryFilter, minImpressions, daysActive derived field.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

๐Ÿ‘ Crawler Bros

Crawler Bros

Maintained by Community

Actor stats

0

Bookmarked

37

Total users

20

Monthly active users

2 months ago

Last modified

Share

Scrape TikTok's public Ad Library (DSA transparency database) at scale. Extract every ad currently shown in EU/EEA, UK, Switzerland, and Turkey โ€” with full per-ad targeting breakdowns, advertiser identification, creative URLs, and impression data.

What is TikTok Ads Library Scraper Pro?

TikTok publishes its full ad transparency database under the EU Digital Services Act (DSA). This actor calls TikTok's official library.tiktok.com JSON API directly โ€” no browser, no cookies, no login โ€” and emits clean, structured data ready for analysis.

No browser. No login. Proxy rotation enabled by default to reduce TikTok's per-IP limit exceed rate limits on cloud runs.

What you get out of every ad

  • Ad identity โ€” adId, adUrl, adType (video / image), adFormat (single video / carousel / spark ad / image)
  • Creative assets โ€” adVideoUrl, adVideoCover, adImages[], plus a full adVideos[] list for carousels
  • Dates โ€” adStartDate, adEndDate, derived daysActive, avgImpressionsPerDay
  • Reach โ€” adImpressions (TikTok's bucket like 10K-100K), exact adImpressionsExact when present, adSpent
  • Advertiser identity โ€” advertiserName, advertiserBusinessName, advertiserBusinessId, advertiserCountry (registry country), advertiserSponsor (different from name when ad runs through an agency), advertiserTikTokUser (linked TT account when present), advertiserIndustry
  • Targeting breakdown โ€” per-region targetingByLocation[], per-region age buckets in targetingByAge[], per-region gender selection in targetingByGender[], total targetAudienceSize, plus targetingTotalRegions, targetingTotalImpressions
  • Audience targeting flags โ€” audienceTargeting (Yes/No), interestTargeting, videoInteractionsTargeting, creatorInteractionsTargeting (only emitted when non-empty)
  • Compliance โ€” auditStatus, auditStatusLabel (approved, rejected, in_review, removed), sorAuditStatus, rejectionInfo, auditReasons
  • Misc โ€” ctaText, landingPageUrl, adLanguages, adPlatforms (TikTok / CapCut / Pangle / Lemon8), creativeId, creativeName, dataSource, commercialContentIndicator, showMode

How to use

Quick start

{
"query":"shopify",
"region":"DE",
"maxItems":100
}

Filter by advertiser only

{
"advertiserName":"Temu",
"region":"all",
"maxItems":500
}

Direct lookup by ad ID

{
"adIds":["1863424159438849","1863615078571137"]
}

Pro filters โ€” surgical narrowing of the result set

{
"query":"supplements",
"region":"all",
"regionFilter":["DE","FR","ES"],
"industryFilter":["health","beauty"],
"languageFilter":["en","de"],
"ctaFilter":["Shop Now","Buy"],
"minImpressions":50000,
"maxItems":1000
}

Input parameters

ParameterTypeDefaultDescription
queryStringshopifyFree-text search โ€” company name, domain, or ad text. Empty = browse all ads.
adIdsArray[]Direct list of TikTok ad IDs. Bypasses search and fetches each ad's detail page directly.
advertiserNameString""Filter by advertiser name (substring match).
regionStringallTikTok ad region code. EU/EEA + UK/CH/TR are covered (DSA mandate). Use all for cross-region.
startDateString1 year agoEarliest ad start date (YYYY-MM-DD).
endDateStringtodayLatest ad end date (YYYY-MM-DD).
sortByEnumlast_shown_date,descOne of: last_shown_date/create_time/impression ร— asc/desc.
quickSearchBooleantrueWhen true, skip the per-ad detail fetch โ€” faster, but omits targeting / advertiser registry / audience fields. Set false for full detail enrichment.
maxItemsInteger10Hard cap on emitted ads (1-5000).
regionFilterArray[]Pro. Only emit ads that target one of these regions (matched against targetingByLocation).
industryFilterArray[]Pro. Only emit ads whose advertiser industry contains one of these substrings.
languageFilterArray[]Pro. Only emit ads in these languages (e.g. en, de). Ads without a detected language are kept (avoids over-filtering).
ctaFilterArray[]Pro. Only emit ads whose CTA button text contains one of these substrings (e.g. Shop Now, Learn More). Ads without a CTA are dropped.
minImpressionsIntegerunsetPro. Drop ads below this many impressions (numeric value parsed from TikTok's bucket like 10K-100K).
useApifyProxyBooleantrueRoutes requests through Apify's proxy pool and rotates sessions when TikTok returns limit exceed.
requestDelaySecsInteger1Delay between API requests. Increase this for slower, gentler runs when TikTok is rate-limiting sampled IPs.
timezoneStringUTCIANA timezone for date-range bucketing.

Default empty-input runs use query="shopify", quickSearch=true, and maxItems=10 so Apify's daily test emits real records quickly when TikTok is not rate-limiting the sampled IPs.

Output

Each ad is pushed as a separate dataset row. Empty fields are omitted (no nulls). Sample row:

{
"recordType":"ad",
"adId":"1863424159438849",
"adUrl":"https://library.tiktok.com/ads/detail/?ad_id=1863424159438849",
"adType":"video",
"adFormat":"single_video",
"advertiserName":"STYLEGRID TRADING LIMITED",
"advertiserBusinessName":"STYLEGRID TRADING LIMITED",
"advertiserBusinessId":"7477502534530105361",
"advertiserId":"7477502534530105361",
"advertiserCountry":"Hong Kong",
"advertiserSponsor":"LINGTOK LIMITED",
"adVideoUrl":"https://library.tiktok.com/api/v1/cdn/.../video.mp4",
"adVideoCover":"https://p16-common-sign.tiktokcdn.com/.../cover.jpeg",
"adImages":["https://p16-common-sign.tiktokcdn.com/.../cover.jpeg"],
"adStartDate":"2025-08-12",
"adEndDate":"2026-04-29",
"adImpressions":"10K-100K",
"auditStatus":"1",
"auditStatusLabel":"approved",
"sorAuditStatus":"1",
"showMode":1,
"targetingByLocation":[
{"region":"DE","impressions":"32K"}
],
"targetingTotalRegions":1,
"targetingTotalImpressions":"10K-100K",
"targetingByAge":[
{"region":"DE","ages":["25-34","35-44","45-54","55+"]}
],
"targetingByGender":[
{"region":"DE","genders":["female","male","unknown"]}
],
"targetAudienceSize":"17.4M-21.2M",
"audienceTargeting":"No",
"daysActive":261,
"avgImpressionsPerDay":38,
"scrapedAt":"2026-04-29T11:39:32+00:00"
}

Output field reference

FieldTypeDescription
adIdStringTikTok's internal ad ID.
adUrlStringPublic ad library detail URL.
adTypeStringvideo or image.
adFormatStringGranular format โ€” single_video, carousel, spark_ad, image.
advertiserNameStringAdvertiser display name (from search card).
advertiserBusinessNameStringRegistered advertiser business name (from detail).
advertiserBusinessIdStringTikTok's internal advertiser business ID.
advertiserIdStringAlias of advertiserBusinessId (kept for backwards compatibility).
advertiserCountryStringRegistry country of the advertiser legal entity (e.g., Germany, Hong Kong).
advertiserSponsorStringSponsor / agency that placed the ad on the advertiser's behalf โ€” often differs from advertiserName.
advertiserTikTokUserObjectLinked TikTok user account (id, nickname, uniqueId, avatarUrl) when present.
advertiserIndustryStringIndustry classification (when published).
adVideoUrlStringDirect URL to the ad's primary video.
adVideoCoverStringCover image URL.
adVideosArrayAll videos for carousel ads, each {videoUrl, coverImage}.
adImagesArrayAll static images.
adStartDateStringFirst-shown date (YYYY-MM-DD, UTC).
adEndDateStringLast-shown date (YYYY-MM-DD, UTC).
adImpressionsStringTikTok's impression bucket (e.g. 10K-100K, 1M-10M).
adImpressionsExactIntegerExact impression count if TikTok publishes one.
adSpentStringSpend bucket if TikTok publishes one.
auditStatusStringTikTok's audit code.
auditStatusLabelStringHuman label โ€” approved, rejected, in_review, removed.
sorAuditStatusStringStatement-of-Reasons audit status (DSA Article 17 compliance).
rejectionInfoObjectRejection-reason payload (only if non-empty).
auditReasonsArrayList of audit-reason codes (only if present).
showModeIntegerRaw show-mode code from TikTok.
targetingByLocationArray[{region, impressions}] per-region impression breakdown.
targetingTotalRegionsIntegerNumber of distinct regions the ad was shown in.
targetingTotalImpressionsStringAggregate impression bucket across all regions.
targetingByAgeArray[{region, ages: [...]}] โ€” list of age buckets selected per region.
targetingByGenderArray[{region, genders: [...]}] โ€” list of genders selected per region.
targetAudienceSizeStringTotal addressable audience bucket (e.g. 22.0M-26.9M).
audienceTargetingStringYes if a custom-audience was used, else No.
interestTargetingStringInterest categories targeted (only if non-empty).
videoInteractionsTargetingStringVideo-interaction targeting rule (only if non-empty).
creatorInteractionsTargetingStringCreator-interaction targeting rule (only if non-empty).
ctaTextStringCall-to-action button label (e.g. Shop Now).
landingPageUrlStringLanding-page URL the CTA links to.
adLanguagesArrayDetected language(s) (e.g. ["en", "de"]).
adPlatformsArrayPlatforms the ad ran on (TikTok, CapCut, Pangle, Lemon8).
creativeIdStringTikTok creative ID.
creativeNameStringTikTok creative name.
dataSourceStringDSA-transparency or commercial-content.
commercialContentIndicatorBooleanSet when ad is flagged as commercial-content.
daysActiveIntegerDerived: adEndDate - adStartDate + 1.
avgImpressionsPerDayIntegerDerived: adImpressions lower bound รท daysActive.
scrapedAtStringISO timestamp when this row was emitted.

Empty fields are stripped โ€” only fields with actual data appear in each row.

FAQ

Why are non-EU regions not supported?

The TikTok Ad Library is a DSA (EU Digital Services Act) transparency mandate. TikTok only publishes ads shown in EU/EEA + UK/CH/TR. The actor returns HTTP 400 for unsupported regions, so we restrict the input enum.

Do I need a proxy?

Proxy rotation is enabled by default because TikTok often rate-limits cloud datacenter IPs with a limit exceed response. If every sampled proxy session is capped, retry after the cooldown window, lower maxItems, or increase requestDelaySecs.

What's the difference between quickSearch=true and quickSearch=false?

quickSearch=true skips the per-ad detail fetch and emits only the search-card data โ€” faster (1 request per page of 50 ads), but omits targeting breakdowns, advertiser registry country, sponsor, and audience targeting.

quickSearch=false makes one extra detail-endpoint call per ad to enrich each row with the full targeting breakdown.

How fresh is the data?

TikTok's ad library refreshes within minutes of an ad being shown. The adStartDate / adEndDate reflect the current display window.

Why do some ads have no adVideoUrl / adImages?

Some ads are fully removed (auditStatus="2" rejected) but still listed in the transparency database with creative assets stripped. Those rows still expose advertiser identity and targeting metadata.

Can I scrape spark ads (organic-style)?

Yes. Set region and a query that matches the advertiser. Spark ads emit with adFormat="spark_ad".

Use cases

  • Competitive intelligence โ€” Track every ad your competitors run in Europe, including targeting strategy.
  • Creative analysis โ€” Download competitor creative, study CTAs, formats, and language strategies.
  • Sponsorship research โ€” Identify which agencies (advertiserSponsor) place ads for which brands.
  • Compliance / DSA monitoring โ€” Flag rejected or in-review ads, audit reasons, sponsor disclosures.
  • Market sizing โ€” Aggregate impression buckets per industry, region, age bucket.
  • Influencer due diligence โ€” Inspect advertiserTikTokUser to see which brands run paid amplification on a creator's content.

Legal

This actor only extracts publicly-available data from TikTok's official transparency portal. Ensure your downstream use complies with TikTok's Terms of Service, GDPR, and applicable local laws.

Related scrapers

  • TikTok Profile Scraper โ€” profile and video metadata
  • TikTok Comments Scraper โ€” full comment threads with replies
  • TikTok Hashtag Scraper โ€” videos by hashtag
  • TikTok Post Scraper โ€” video downloads with metadata

You might also like

Tiktok Ad Library Scraper

ivanvs/tiktok-ad-library-scraper

Extract details about ads from TikTok Ad Library. Scrape ad details like when it was run, ad targeting, advertiser and content of ad. Download ad data in JSON, XML, Excel format.

TikTok Ads Scraper

data_xplorer/tiktok-ads-library-pay-per-event

๐Ÿฅ‡ The most complete TikTok Ads scraper. Two modes: Ads Library (EU transparency, targeting, spend) + Top Ads (Creative Center, engagement metrics, 80+ countries). Search by keyword, advertiser, industry. Extract videos, performance data & creative assets.

150

5.0

TikTok Ads Library FAST

data_xplorer/tiktok-ads-library-fast

๐Ÿ”ฎ Unlock TikTok's ad intelligence with our powerful scraper. Extract competitor campaigns, creative assets and performance metrics. Search by keyword, advertiser name or ID across all regions. Get comprehensive ad data for market-leading insights.

209

5.0

TikTok Ads Scraper

lexis-solutions/tiktok-ads-scraper

Find and scrape current and past ads on TikTok. Get video URL, dates and locations, impressions, and more. Download and analyze data from the TikTok Ads Library for competitive analysis.

๐Ÿ‘ User avatar

Lexis Solutions

685

4.9

Threads by Meta Scraper, Posts, Profiles & Engagement Data

george.the.developer/threads-scraper

Extract posts, profiles, and engagement data from Threads by Meta. Monitor brand mentions, track competitor activity, analyze trending content. Perfect for social media managers and market researchers.

78

Google Ads Scraper

happitap/google-ads-scraper

Google Ads Scraper - Extract Ads from Google Ads Transparency Center, Extract comprehensive data from Google Ads including text, image, and video advertisements directly from the official Google Ads Transparency Center. Perfect for competitive intelligence, ad research, and market analysis.

TikTok Ads Scraper โ€” Creative Center Top Ads

khadinakbar/tiktok-ads-scraper

Scrape TikTok Creative Center Top Ads. Get video URLs, brands, CTR tiers, Spark Ads, likes & creative intel $3.00/1K.

64

TikTok Ads Library Scraper โ€” EU Library & Creative Center

brilliant_gum/tiktok-ads-library-scraper

Scrape TikTok Ads Library (EU/EEA/UK) and Creative Center (global). Extract ad creatives, targeting data, reach estimates, CTR, video URLs, and industry insights. Dual-source coverage โ€” no login required. Residential proxies built-in.

๐Ÿ‘ User avatar

Yuliia Kulakova

203

Tiktok Ads Scraper

silva95gustavo/tiktok-ads-scraper

Scrape video ads from the TikTok Ads Library and unlock key insights into high-performing creatives. Extract comprehensive ad data, including advertiser name, video URL, target regions, total impressions, and more. Explore top TikTok ads to boost your competitive research and marketing strategy.

๐Ÿ‘ User avatar

Gustavo Silva (Coherent Paradox)

398

5.0

Tiktok Creative Center Top Ads

codebyte/tiktok-creative-center-top-ads

Find top performing ads on TikTok Creative Center. Get detailed analytics and insights on your competitors ads.