TikTok [only $0.9💰]  Ad Library & Hashtag Trends Scraper avatar

TikTok [only $0.9💰] Ad Library & Hashtag Trends Scraper

Pricing

from $0.90 / 1,000 results

Go to Apify Store
TikTok [only $0.9💰]  Ad Library & Hashtag Trends Scraper

TikTok [only $0.9💰] Ad Library & Hashtag Trends Scraper

💰$0.9 per 1,000 results. Unlock TikTok's viral potential with real-time hashtag analytics, audience insights, and trend data—transform raw metrics into winning strategies with precision-scraped engagement stats, demographic breakdowns, and competitive intelligence that keep you ahead in the game.

Pricing

from $0.90 / 1,000 results

Rating

5.0

(1)

Developer

Muhamed Didovic

Muhamed Didovic

Maintained by Community

Actor stats

8

Bookmarked

129

Total users

6

Monthly active users

a day ago

Last modified

Share

TikTok Ads & Trends Scraper

Three scrapers in one actor. Pick a mode and run:

  • 📊 Trends mode — the top trending hashtags from the TikTok Creative Center, each with rank, post count, total views, a popularity curve, and top creators. Leave the country empty to sweep 27 markets in one run.
  • 🏆 Top Ads mode — the best-performing ad creatives from the TikTok Creative Center, ranked by CTR / likes / spend, with CTR, cost, likes, comments, shares, campaign objective, target countries, landing page and video URLs (37 fields per ad).
  • 🔍 Ad Library mode — individual ad creatives from the official TikTok Ad Library (library.tiktok.com): advertiser, video + cover, images, first/last-shown dates, estimated audience size, and moderation/rejection info. Searchable by keyword or advertiser, across the EU/EEA + UK + TR.

Overview

Three distinct TikTok data sources, one actor:

ModeData sourceBest for
Trendsads.tiktok.com/business/creativecenter (hashtags)Discovering what's organically popular — for content strategy, hashtag research, industry benchmarking
Top Adsads.tiktok.com/creative_radar_api (Top Ads board)Studying the best-performing paid creatives — for hook research, swipe files, CTR benchmarking
Ad Librarylibrary.tiktok.com (Ad Library + Other Commercial Content)Auditing what paid ads a brand is running, and disclosed branded creator posts — for competitive analysis and ad-transparency research

Choose your mode with the mode input field. The relevant filter group is the only one you need to fill in — fields outside the active mode are ignored.

⚠️ Ad Library availability: TikTok's Ad Library is a DSA-compliance transparency tool, so it only covers ads shown in EU/EEA + United Kingdom + Türkiye (33 regions: AT, BE, BG, CH, CY, CZ, DE, DK, EE, ES, FI, FR, GB, GR, HR, HU, IE, IS, IT, LI, LT, LU, LV, MT, NL, NO, PL, PT, RO, SE, SI, SK, TR). Other country values silently fall back to all regions with a warning in the log.


Features

All modes

  • Mode switch: pick Trends, Top Ads, or Ad Library with one input field
  • Country / region filter shared across modes
  • resultsLimit caps the dataset for cost control
  • Proxy support with built-in Apify Proxy integration
  • Concurrency tuning (maxConcurrency / minConcurrency)
  • Retry control with graceful skip on TikTok-side errors
  • Time window of 7 / 30 / 120 days
  • Multi-market sweep — leave country empty to collect all 27 supported markets in one run
  • Rich rows — rank, post count, total views, popularity time-series, top creators, direct Creative Center link

Top Ads mode

  • Ranking window of 7 / 30 / 180 days
  • Rank by For You / CTR / 2-second play rate / 6-second play rate / conversion rate (CVR) / likes / impressions / spend
  • Industry filter incl. sub-categories — the full Creative Center taxonomy (21 top-level industries + 267 sub-categories, e.g. Beauty & Personal Care > Skincare), applied server-side
  • More filters — target country, campaign objective, ad language, Spark vs Non-Spark ad format
  • Client-side refinementkeyword (title/brand contains) and minLikes
  • Full engagement + performance per ad — CTR (with computed benchmark tier), cost, likes, comments, shares, favorites
  • Full detail toggle (extractDetails) — adds target country list, landing page, keyword list and objectives from each ad's detail page
  • Video URLs in up to five renditions (360p–1080p) plus videoUrlBest, cover image, and the Creative Center link

Ad Library mode

  • Paste-a-URL shortcut (startUrl) — copy a filtered URL straight from library.tiktok.com and the actor parses region, search terms, advertiser, sort, and date range out of it
  • Two library surfaces (sourceType) — Ad Library (paid ads with transparency data) or Other Commercial Content (disclosed branded creator posts)
  • Search by keyword or advertiser name (with "…" for exact-phrase match)
  • Date range (startDate / endDate — defaults to the last 30 days)
  • Sort by last-shown / first-shown date, or by reach / views (largest or smallest first)
  • API-first extraction — reads a pre-warmed signing token, then pages the library APIs over plain HTTP (fast, no browser-per-ad)
  • Full pagination with dedupe across all matching items up to resultsLimit

How to Use

  1. Pick a mode: choose Trends, Top Ads, or Ad Library via the mode field.
  2. Fill in the matching filter group — the input form groups fields under each mode's section.
  3. Run on Apify (or locally with npm start).
  4. Export results as JSON, CSV, or Excel from the Apify dataset view.

Input Configuration

{
"mode": "trends",
"country": "",
"days": 7,
"resultsLimit": 100,
"proxy": { "useApifyProxy": true }
}

Set country to a two-letter code (e.g. "US") for a single market, or leave it empty to sweep all 27 supported markets. days is the trend window (7 / 30 / 120). Each hashtag row includes rank, publishCount, views, a popularityCurve time-series and topCreators.

Example — Top Ads mode

{
"mode": "topAds",
"country": "US",
"period": 30,
"orderBy": "ctr",
"industryId": "14103000000",
"adFormat": "spark_ads",
"extractDetails": true,
"resultsLimit": 100,
"proxy": { "useApifyProxy": true }
}

industryId accepts the full Creative Center taxonomy — the example narrows the board to Beauty & Personal Care > Skincare. Leave it unset for all industries.

Example — Ad Library mode

{
"mode": "adLibrary",
"country": "DE",
"searchQuery": "nike",
"advertiserName": "",
"startDate": "2026-04-01",
"endDate": "2026-05-07",
"sortBy": "last_shown_date,desc",
"resultsLimit": 60,
"proxy": { "useApifyProxy": true }
}

Example — Ad Library via pasted URL

{
"mode": "adLibrary",
"startUrl": "https://library.tiktok.com/ads?region=FR&adv_name=adidas&sort_type=last_shown_date,desc",
"resultsLimit": 60,
"proxy": { "useApifyProxy": true }
}

Copy the URL straight out of your browser with filters applied — the actor parses region, search terms, advertiser, sort and date range from it (and auto-detects Ad Library vs Other Commercial Content). Discrete filter fields are ignored when startUrl is set.

Example — Other Commercial Content (branded creator posts)

{
"mode": "adLibrary",
"sourceType": "other_commercial_content",
"country": "DE",
"sortBy": "views_high",
"resultsLimit": 50,
"proxy": { "useApifyProxy": true }
}

Input Parameters

🎯 Start here — all modes

ParameterTypeDescriptionDefault
modeString"trends" / "topAds" / "adLibrary""trends"
countryStringTwo-letter country code, or "" for all. Trends sweeps 27 markets when empty; Top Ads supports most major markets; Ad Library is restricted to EU/EEA + UK + TR (see Overview)."US"
ParameterTypeDescriptionDefault
daysStringLook-back window: "7" / "30" / "120""7"

🏆 Top Ads mode — only used when mode = "topAds"

ParameterTypeDescriptionDefault
periodStringRanking window: "7" / "30" / "180" days"30"
orderByStringfor_you / ctr / play_2s_rate / play_6s_rate / cvr / like / impression / costfor_you
industryStringTop-level industry (18 options) or "all""all"
industryIdStringFull-taxonomy industry pick incl. sub-categories (289 options, e.g. Beauty & Personal Care > Skincare). Overrides industry when set.
objectiveStringCampaign objective (traffic, conversion, reach, app install, video views, lead gen, product sales, engagement)all
adLanguageStringTwo-letter language code of the ad copyall
adFormatStringspark_ads / non_spark_ads (empty = all)all
keywordStringClient-side filter — keeps ads whose title or brand contains this text
minLikesIntegerClient-side filter — keeps ads with at least this many likes
extractDetailsBooleanFetch each ad's detail endpoint for target countries, landing page, keyword list, objectivestrue

🔍 Ad Library mode — only used when mode = "adLibrary"

ParameterTypeDescriptionDefault
startUrlStringPaste a filtered library.tiktok.com URL — filters are parsed from it and the fields below are ignored
sourceTypeStringad_library (paid ads) or other_commercial_content (branded creator posts)ad_library
searchQueryStringKeyword or advertiser name to search. Wrap in "…" for exact-phrase match. In Other Commercial Content mode this matches the creator's username."nike"
advertiserNameStringOptional filter by registered advertiser name (Ad Library only)
startDateStringEarliest last-shown / posted date (YYYY-MM-DD)30 days ago
endDateStringLatest last-shown / posted date (YYYY-MM-DD)today
sortByStringlast_shown_date,desc / last_shown_date,asc / first_shown_date,desc / first_shown_date,asc / reach_high / reach_low / views_high / views_lowlast_shown_date,desc

📦 Output & limits — all modes

ParameterTypeDescriptionDefault
resultsLimitIntegerHard cap on dataset rows100
maxConcurrencyIntegerMaximum parallel requests10
minConcurrencyIntegerMinimum parallel requests1
maxRequestRetriesIntegerRetries per failed request before skipping8
proxyObjectProxy configuration (Apify Proxy recommended)Apify Proxy

Output Structure

The actor produces a different row shape per mode, distinguishable by the type field:

  • Trends rows (type: "hashtag_trend"): hashtagName, rank, country, period, publishCount, views, industryIds, a popularityCurve time-series, and topCreators. See Trends mode output.
  • Top Ads rows (type: "top_ad"): 37 fields per ad — rank, title, brand, CTR (+ computed tier), cost, likes/comments/shares, objective, industry, target countries, landing page, and video URLs in up to five renditions. See Top Ads mode output.
  • Ad Library rows (type: "ad"): adId, advertiserName, adTitle, videoUrl, videoCover, imageUrls, firstShownDate / lastShownDate, estimatedAudience, rejectionInfo, region. See Ad Library mode output.
  • Other Commercial Content rows (type: "commercial_content"): creator username, view buckets, posted date, video/cover URLs. See Other Commercial Content output.

If you need several row shapes in one place, run the actor once per mode and join on whatever business key you need (e.g. advertiser name).


The Trends-mode scraper provides detailed information for each hashtag. Here's the complete field documentation based on the JSON structure:

Sample row

{
"type": "hashtag_trend",
"hashtagId": "7659867926865903649",
"hashtagName": "marvelrivalss9",
"rank": 1,
"country": "US",
"period": 7,
"publishCount": 133653,
"views": 37575559,
"industryIds": ["25000000000"],
"popularityCurve": [
{ "timestamp": 1783382400, "value": 0 },
{ "timestamp": 1783555200, "value": 24.68 },
{ "timestamp": 1783728000, "value": 100 }
],
"topCreators": [
{ "creatorId": "0", "nickname": null, "avatarUrl": "https://p16-common-sign.tiktokcdn.com/..." }
],
"link": "https://ads.tiktok.com/business/creativecenter/hashtag/marvelrivalss9/pc/en?countryCode=US&period=7",
"scrapedAt": "2026-07-16T07:15:00.000Z"
}
FieldTypeDescription
typestringAlways "hashtag_trend".
hashtagId / hashtagNamestringTikTok's hashtag identifier and name (without the #).
ranknumberRank within the country + period slice (1 = top).
country / periodstring / numberThe market and trend window (7 / 30 / 120 days) this row came from.
publishCountnumberNumber of posts using the hashtag.
viewsnumberTotal video views for the hashtag.
industryIdsstring[]Creative Center industry IDs the hashtag maps to.
popularityCurvearrayPopularity time-series — [{ timestamp (unix s), value (0–100 index) }].
topCreatorsarrayNotable creators using the hashtag — [{ creatorId, nickname, avatarUrl }].
linkstringDirect Creative Center page for the hashtag.
scrapedAtstringISO timestamp of extraction.

Note on volume: the Creative Center's public (logged-out) hashtag surface exposes the top 3 hashtags per country × period. Leaving country empty sweeps all 27 supported markets in one run to build a larger dataset. (TikTok deprecated the older bulk hashtag endpoint in 2026.)

Top Ads mode output

One row per ad from the Creative Center Top Ads board, in true ranking order.

Sample row (abridged)

{
"type": "top_ad",
"adId": "7069234203623735297",
"rank": 1,
"adTitle": "Shop the viral serum everyone's talking about",
"brandName": "medicube",
"ctr": 1.84,
"ctrTier": "high",
"cost": 2,
"likes": 40719,
"comments": 212,
"shares": 1183,
"favorite": 3216,
"objectiveKey": "campaign_objective_conversion",
"industryKey": "label_14103000000",
"industryName": "Skincare",
"keywordList": ["serum", "skincare"],
"countryCodes": ["US"],
"landingPage": "https://…",
"videoDuration": 27.5,
"videoCover": "https://p16-….jpeg",
"videoUrl720p": "https://v16m-….mp4",
"videoUrl1080p": "https://v16m-….mp4",
"videoUrlBest": "https://v16m-….mp4",
"period": 30,
"orderBy": "for_you",
"countryCode": "US",
"creativeCenterUrl": "https://ads.tiktok.com/business/creativecenter/topads/7069234203623735297/pc/en",
"detailFetched": true,
"scrapedAt": "2026-07-31T21:00:00.000Z"
}

Field notes — Top Ads mode

FieldDescription
rankThe ad's true position in TikTok's ranking, independent of client-side filters.
ctr / ctrTierClick-through rate (%) and a benchmark band (low / average / high / exceptional) computed by the actor from fixed CTR thresholds.
costTikTok's relative spend score (1–5), not a currency amount.
industryKey / industryNameTikTok's opaque industry code and its human-readable label, resolved via the full 549-entry Creative Center taxonomy (sub-categories included).
countryCodes, landingPage, keywordList, objectivesPopulated when extractDetails is on (one extra request per ad).
videoUrl360pvideoUrl1080p, videoUrlBestAll renditions TikTok returns; videoUrlBest is the highest available. CDN links are signed and typically expire within 24–48 h — download promptly if you archive.

Note on volume: the anonymous Top Ads surface serves only the first page (~20 ads) per (ranking × industry × country × period) combination — deeper pages require TikTok login. To build bigger datasets, sweep multiple industries (289 taxonomy options), rankings (8 orderBy values), and periods.

Ad Library mode output

Each row is one ad from the official TikTok Ad Library, retrieved over the public API (the actor warms one signing token via a single headless page-load, then pages the search endpoint over plain HTTP).

Sample row

{
"type": "ad",
"adId": "1870848124471298",
"advertiserName": "S.F. TRADING S.R.L.",
"adTitle": "Relax Your Body with a Professional Massage",
"adType": "2",
"auditStatus": "1",
"sorAuditStatus": "1",
"firstShownDate": 1784179992000,
"lastShownDate": 1784179992000,
"estimatedAudience": "0-1K",
"impressions": 0,
"spent": "",
"showMode": 1,
"videoUrl": "https://library.tiktok.com/api/v1/cdn/.../video/...",
"videoCover": "https://p16-common-sign.tiktokcdn.com/...",
"imageUrls": [],
"rejectionInfo": null,
"region": "DE",
"matchedQuery": "nike",
"matchedAdvertiser": null,
"adDetailUrl": "https://library.tiktok.com/ads/detail?ad_id=1870848124471298&region=DE",
"scrapedAt": "2026-07-16T07:57:00.000Z"
}

Field descriptions — Ad Library mode

FieldTypeDescription
typestringAlways "ad".
adIdstringTikTok's ad identifier.
advertiserNamestringThe advertiser / page name.
adTitlestringThe ad's creative title / caption (when present).
adTypestringTikTok's internal ad-type code.
auditStatus / sorAuditStatusstringModeration status codes.
firstShownDate / lastShownDatenumberUnix ms timestamps for the ad's active window.
estimatedAudiencestringAudience-size bucket (e.g. "0-1K").
impressionsnumberReported impressions (often 0 for small ads).
spentstringReported spend bucket, when disclosed.
videoUrl / videoCoverstringAd video and cover image URLs.
imageUrlsstring[]Static image creatives, when present.
rejectionInfoobject | nullPolicy-rejection detail — reasons, affected_regions, when the ad was actioned.
regionstringThe Ad Library region the ad was matched in.
matchedQuery / matchedAdvertiserstringThe keyword / advertiser filter that surfaced this ad.
adDetailUrlstringLink to the ad's Ad Library detail page.
scrapedAtstringISO timestamp of extraction.

Coverage: the TikTok Ad Library only covers EU/EEA + UK + Turkey. Set country to a supported code (e.g. DE, FR, GB) — other values fall back to all. Per-ad audience targeting (age/gender/interest breakdown) lives behind a separate per-ad-signed endpoint and is not included in this bulk export.

Other Commercial Content output

When sourceType is other_commercial_content (or the pasted startUrl points at that surface), each row is one disclosed branded creator post.

Sample row

{
"type": "commercial_content",
"contentId": "v26044gc0000d92o8tvog65laio69740",
"creatorUsername": "nikolaisavic",
"creatorProfileUrl": "https://www.tiktok.com/@nikolaisavic",
"brandNames": [],
"contentLabel": "1",
"auditStatus": "1",
"showMode": "1",
"postedTime": "1782941168",
"postedAt": "2026-07-01T21:26:08.000Z",
"videoViews": "20M-30M",
"contentViews": "20M-30M",
"videoUrl": "https://library.tiktok.com/api/v1/cdn/…/video/…",
"videoCover": "https://p16-common-sign.tiktokcdn.com/…",
"imageUrls": [],
"region": "DE",
"matchedQuery": null,
"scrapedAt": "2026-07-31T21:06:49.101Z"
}

Field notes — Other Commercial Content

FieldDescription
contentIdTikTok video id — empty for photo posts (showMode: "2").
creatorUsername / creatorProfileUrlThe posting creator. TikTok's transparency surface exposes only the username (no display name / follower count at this level).
brandNamesDisclosed partner brands. TikTok returns this field but it is empty on the vast majority of posts.
showMode"1" = video post, "2" = photo post.
videoViews / contentViewsView-count buckets (e.g. "0-1K", "20M-30M") — TikTok does not expose exact counts.
postedTime / postedAtPost date as unix seconds and ISO timestamp.

Search behaviour: on this surface, searchQuery matches the creator's username (brand-keyword search is not supported by TikTok's API and returns 0 results). Sorting supports posted date and video views (views_high / views_low); reach options map to the views sort.

Key Notes

  1. Data Freshness: All three sources update frequently — Trends near real-time, Top Ads as the board refreshes, Ad Library when ads are submitted/audited.
  2. Rate Limits: The actor handles TikTok's rate limiting gracefully — failed requests are retried with backoff, and TikTok-side error codes are treated as skip-not-retry where retrying can't help, to avoid retry storms.
  3. Proxies Recommended: Using residential proxies helps avoid IP-based rate limiting on the Creative Center endpoints.
  4. Ad Library coverage: The Ad Library (both surfaces) is only available for EU/EEA + UK + TR. Country values outside that list fall back to all.
  5. Top Ads depth: The anonymous Creative Center serves only the first ~20 ads per filter combination — sweep industries/rankings/periods for volume (deeper pages and keyword search are login-gated by TikTok).
  6. Data Availability: Some metrics are bucketed by TikTok (audience and view ranges like "10M-20M"), spend is a relative 1–5 score in Top Ads, and signed CDN video links typically expire within 24–48 hours.

Explore More Scrapers

If you found this TikTok Ads Scraper useful, check out the rest of the TikTok toolkit:

Browse the full portfolio at memo23's Apify profile.

Support

Additional Services