TikTok Trends Scraper: TikTok Creative Center Hashtags, Top Ads avatar

TikTok Trends Scraper: TikTok Creative Center Hashtags, Top Ads

Pricing

from $1.00 / 1,000 trending hashtags

Go to Apify Store
TikTok Trends Scraper: TikTok Creative Center Hashtags, Top Ads

TikTok Trends Scraper: TikTok Creative Center Hashtags, Top Ads

Scrape TikTok Creative Center trends: TikTok trending hashtags in 27 countries over 7, 30 or 90 days with every industry list, TikTok trending videos with weekly and monthly rankings and comments, and TikTok Top Ads with details. A TikTok ads scraper with exact numbers. No login.

Pricing

from $1.00 / 1,000 trending hashtags

Rating

0.0

(0)

Developer

Hyperbach

Hyperbach

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 hours ago

Last modified

Share

TikTok Creative Center trends with exact numbers: trending hashtags in 27 countries over 7, 30 or 90 days, top videos by views, engagement or 6-second view rate, and Top Ads with their landing pages and metrics — in one row shape. Logged out, TikTok shows 3 hashtags and 4 videos per list; this Actor reads every list of a country and period (the overall ranking and each of the 15 industry rankings; every sort, content tag and organic switch for videos) and merges them: about 46 hashtags per country and period instead of 3, about 85 videos per ranking instead of 4, each with every rank it holds. TikTok's weekly and monthly video rankings, back to mid-2025, with top comments on US videos. Follow the lists on a schedule and get only the hashtags that are new. Songs, creators and Top Products are gone from the Creative Center: ask for them and you get a labelled row saying so, free, not an empty success. No login, no cookies, proxies handled for you.

Why this scraper, not the other Creative Center actors

  • Past TikTok's 3 rows, by its own lists. Logged out, every Creative Center list serves 3 hashtags or 4 videos, page 2 is empty and the page size is ignored. Every filter value is a list of its own, so the Actor reads them all and merges them: 16 hashtag lists gave 46 distinct hashtags for US / 7 days, 84 video lists (all content and 13 content tags × 3 sorts × organic on / off) gave 113 distinct videos for US / Last 7 days (2026-10-02). Each row keeps every rank it holds (lists) and how many rows each list served (list_served), so a short list is said in the data, not hidden.
  • Exact numbers and real ids. Posts, views, the popularity curve, the hashtag's own industries and its top creators with handle, followers and user id, as the API gives them, not the page's rounded text. Video ids are strings (19 digits; a float loses the last digits).
  • The weekly and monthly rankings, and their history. Besides the rolling Last 7 / 30 days, TikTok keeps weekly (Monday to Sunday) and monthly video rankings — weekly back to 2025-07-27, monthly to 2025-05-31. videoSnapshots: 12 reads the last 12 weeks; videoSnapshotDates reads the rankings that held given dates. Every video row carries its window's start and end. Ready-made: TikTok's weekly top videos in the US, the last 12 weeks.
  • Comments and comment keywords on US videos. videoDetails adds up to 200 top comments with likes and the keywords TikTok extracts from them, from the Creative Center's own record (open logged out for US videos; other countries are login-only and are said so, not charged). Ready-made: Top TikTok videos in the US this week, with their top comments.
  • Honest about what TikTok removed. Songs, creators, Top Products and Keyword Insights are gone from the Creative Center (their routes answer deprecated or 404). Ask for one and the run checks it live and returns a free labelled row with TikTok's answer, so a pipeline can tell "gone" from "blocked". A run that could read nothing (refused, errors) ends FAILED; a list TikTok answers empty for your filters says so in the status; never a silent "0 rows, SUCCEEDED".
  • Trend signals from the curve. Direction, momentum, volatility, peak date and a stage (emerging, rising, peaking, declining, steady) computed from TikTok's own 0–100 curve, free; onlyRising, minPosts and minViews filter on them.
  • Top Ads in the same run. The Creative Center's Top Ads by country, period and sort, with the landing page, countries, likes, comments and shares, the per-second CTR and retention curves, the Spotlight picks, and the sweep past 20 per list. The same columns as our TikTok Ads Library Scraper.
  • Rank changes between runs. With trackChanges each row gets its previous rank, the change and the change per day, and whether it is new to the list; onlyNew delivers only entries a task has not delivered before; includeEnded says what left a list.
  • Fast and plain. No browser: 407 hashtags (US, UK and Germany × 7 / 30 / 90 days, every industry list) in 55 seconds on one exit. Every proxy exit is checked against TikTok before it is used.

Same competitor, other ad platforms

Our ad library scrapers share their column names — advertiser_name, body_text, cta, destination_url, first_shown, last_shown, days_shown, regions and more — so one competitor's ads from every platform land in one table with no mapping.

  • Google Ads Transparency Scraper — every ad an advertiser runs on Google Search, YouTube and Display, with the copy read from image ads, run dates and, for political ads, spend.
  • Meta Ad Library Scraper — every ad a page runs on Facebook, Instagram, Messenger, WhatsApp and Threads, with the landing URL, media, run dates and EU reach.
  • LinkedIn Ad Library Scraper — every ad a company runs on LinkedIn, with the full detail page: payer, impressions by country and the targeting the advertiser chose.
  • TikTok Ads Library Scraper — every ad an advertiser runs in TikTok's Ad Library, with targeting, reach per country, payer and landing page.

Who it's for

  • Social media and content teams — what is trending this week in each market and industry, with the curve and the creators behind it, and which videos lead by views, engagement or 6-second retention.
  • Performance marketers and agencies — the trends and the Top Ads of a market side by side: hashtags to ride, ads that win, their landing pages and CTR buckets.
  • Trend researchers and data teams — a daily or weekly feed of the lists with stable ids, every rank, the window dates and rank changes, ready to join across runs.
  • Developers and AI agents — one row shape for every section, a compact output, a typed run summary, and labelled rows for what TikTok does not serve.

Quick start

Trending hashtags in the US, every industry list

{
"sections": [
"hashtags"
],
"hashtagCountries": [
"US"
],
"hashtagPeriods": [
"7"
]
}

Hashtags in all 27 countries, 7 and 30 days, overall lists

{
"sections": [
"hashtags"
],
"hashtagCountries": [
"ALL"
],
"hashtagPeriods": [
"7",
"30"
],
"hashtagIndustries": [
"Overall"
]
}

Top videos in the US, last 7 days, with comments

{
"sections": [
"videos"
],
"videoCountries": [
"US"
],
"videoPeriods": [
"last_7_days"
],
"videoDetails": true
}

The weekly video ranking of the last 12 weeks

{
"sections": [
"videos"
],
"videoCountries": [
"US"
],
"videoPeriods": [
"weekly"
],
"videoSortBy": [
"views"
],
"videoContentTags": [
"All"
],
"videoOrganic": "all_views",
"videoSnapshots": 12
}

Top Ads in the US by CTR, with details

{
"sections": [
"topAds"
],
"topAdsCountries": [
"US"
],
"topAdsPeriod": "30",
"topAdsSortBy": "ctr",
"maxItems": 20
}

Everything at once, with a trend digest

{
"sections": [
"hashtags",
"videos",
"topAds"
],
"hashtagCountries": [
"US"
],
"videoCountries": [
"US"
],
"topAdsCountries": [
"US"
],
"trendDigest": true,
"maxItems": 200
}

Output

One row per hashtag (per country and period), per video (per country and ranking), per Top Ad; section and row_type say which:

fieldmeaning
record_idUnique across sections and runs of the same list: hashtag:<country>:<period>:<id>, video:<country>:<period>:<end date>:<id>, top_ad:<id>; free rows carry their own (section:songs, not_listed:…). Deduplicate on this.
sectionhashtags, videos, top_ads, summary, or the name of a section TikTok dropped (songs, creators, products, keywordInsights).
row_typehashtag, video, ad (charged rows); section_unavailable, section_returned, not_listed, no_snapshot, not_found, ended, caption_hashtag, advertiser_profile, landing_page (free); digest (the trend digest).
countryISO country code of the list the row comes from.
country_nameThe country's name.
periodHashtags and Top Ads: the window in days (7, 30, 90, 180); videos: last_7_days, last_30_days, weekly or monthly.
period_daysDays the window covers.
period_startVideos: the first day of the ranking's window.
period_endVideos: the last day of the ranking's window — the snapshot TikTok keys the list by.
rankPosition in list (1 = top). Hashtags: TikTok's rank; videos: the position in the list; Top Ads: the position in the order you asked for.
listThe list the rank is from: Overall or an industry for hashtags; sort / content tag / organic for videos; the Top Ads list.
listsEvery list of the slice this entry ranked in, with its rank there (a hashtag can top the overall list and an industry list).
list_servedRows TikTok served in that list. Logged out TikTok shows 3 hashtags and 4 videos per list.
list_totalTikTok's own count for the list (videos: 100 ranked; hashtags: the rows it serves logged out).
hashtag_idTikTok's hashtag id, as a string.
hashtag_nameThe hashtag without #.
hashtag_urlThe hashtag's tiktok.com page.
creative_center_urlThe hashtag's Creative Center page for this country and period.
postsVideos posted with the hashtag in the period (exact, as the API gives it).
viewsHashtags: views of the hashtag's videos in the period; videos: the video's views in the window. Exact.
industriesThe hashtag's own industries, by name (TikTok's taxonomy).
industry_idsThe same industries, by id.
popularity_curveTikTok's 0–100 popularity per day (peak = 100) over the window: [{date, value}], one point per day the hashtag was present.
curve_pointsDays in the curve.
trend_directionup / down at ±10 % momentum, else flat.
trend_momentum_pctMean of the curve's last 3 points against the 3 before them, in %; when those 3 are all 0, against the mean of every earlier point; null when every earlier point is 0 (not there yet).
trend_volatilityStandard deviation of the day-to-day changes of the curve, in points.
trend_stageemerging (present on fewer than half the window's days and not falling), peaking (latest ≥ 90), rising, declining or steady.
trend_peak_dateThe latest day the curve hit its maximum.
trend_averageMean of the curve.
trend_latestThe curve's last value.
top_creatorsTikTok's top 3 creators for the hashtag: rank, user id, handle, nickname, followers, country, avatar, profile URL (and the stored avatar with downloadMedia).
video_idTikTok's video id, as a string (19 digits; never a float).
video_page_urlThe video's tiktok.com page.
titleThe video's caption.
video_created_atWhen the video was posted (UTC).
views_lifetimeThe video's views since it was posted.
organic_viewsViews in the window not from ads.
organic_views_lifetimeOrganic views since it was posted.
engagement_rateTikTok's engagement rate in the window (a share, 0.0012 = 0.12 %).
engagement_rate_lifetimeThe same since it was posted.
six_second_view_rateShare of views that watched 6 seconds, in the window.
six_second_view_rate_lifetimeThe same since it was posted.
creator_usernameThe video creator's handle.
creator_nicknameThe creator's display name.
creator_urlThe creator's tiktok.com page.
creator_idThe source's creatorID of the video.
author_idThe source's authorID of the video.
creator_bioThe creator's bio as TikTok shows it.
creator_avatar_urlThe creator's avatar (a signed link that expires).
creator_followersThe creator's followers.
creator_store_regionWith videoDetails: the creator's store region (US videos only).
creator_typeWith videoDetails: the source's creator type code.
content_tagsTikTok's content tags of the video (Beauty & Care, Fashion, Food & Beverage, Lifestyle & Leisure, Technology & Finance).
content_tag_idsThe same tags, by id.
top_commentsWith videoDetails: the video's top comments with likes, date, comment id, user id and name (US videos).
top_comments_countHow many comments the detail record held.
comment_keywordsWith videoDetails: the keywords TikTok extracts from the comments, with mentions (when it has them).
creative_idThe Top Ad's id.
ad_urlThe ad's Creative Center page.
ad_formatvideo (the Creative Center renders every Top Ad as a video).
creative_availableWhether the ad carries a video or a cover.
advertiser_nameThe brand name TikTok shows.
body_textThe ad's caption.
hook_textThe caption's first line or sentence.
objectiveThe campaign objective.
objectivesEvery objective of the detail record.
industryThe ad's industry, by name.
industry_idThe same, by id.
destination_urlWhere the ad leads (detail record).
landing_domainThe landing page's domain.
ctr_top_percentTikTok's CTR rank bucket: 6.0 = "Top 6 %" — lower is better; not a click rate.
likesThe ad's likes.
commentsThe ad's comments (detail record).
sharesThe ad's shares (detail record).
cost_levelTikTok's budget tier of the ad (1–3).
is_search_adWhether TikTok marks it a search ad.
sourceThe detail record's source (where TikTok took the ad from).
keyword_listThe detail record's keyword list.
pattern_labelsTikTok's creative pattern labels.
voice_overWhether the ad has a voice-over.
highlight_textSpotlight ads: TikTok's expert note.
regionsCountries the ad ran in (detail record).
keyframesWith topAdsMetrics: per-second CTR, CVR, clicks, conversions and retention curves.
keyframe_highlightsThe seconds TikTok marks on the curves.
percentilesWith topAdsMetrics: CTR, CVR, clicks, conversions and impressions percentiles.
copy_lengthCharacters in the caption.
sentiment_scoreAFINN sentiment of an English caption (−1…1); null for other languages.
image_urlThe ad's cover image (signed link).
video_urlsEvery rendition of the ad video, best first, with its height.
video_duration_sThe ad video's length in seconds.
video_widthPixels.
video_heightPixels.
cover_urlThe video's or the ad's cover (a signed link that expires).
video_urlThe video file (a signed link that expires at media_expires_at).
media_expires_atWhen TikTok's signed video link stops working.
hashtagsHashtags written in the video title or the ad caption.
mentions@handles written in the title or caption.
text_languageen when the title or caption is English, else null.
analysis_angletagAds: the persuasion angle (problem_solution, social_proof, scarcity, discount, feature, lifestyle, curiosity, education, comparison, brand, other).
analysis_cta_intenttagAds: what the ad asks the viewer to do.
analysis_tonetagAds: the tone of the copy.
analysis_sentimenttagAds: valence from −1 to 1.
analysis_offer_typetagAds: what the ad offers.
analysis_funnel_stagetagAds: awareness, consideration or conversion.
analysis_confidencetagAds: the confidence of each tag.
analysis_hookanalyzeAds: the hook line.
analysis_offeranalyzeAds: the concrete offer.
analysis_audienceanalyzeAds: who the ad is written for.
analysis_strategyanalyzeAds: what the advertiser is trying to achieve.
transcripttranscribeVideos: the spoken words.
transcript_languagetranscriptTiming: the language spoken (ISO 639-1).
hook_3stranscribeVideos: the first words; with transcriptTiming, the words of the first 3 seconds of speech.
speech_secondstranscriptTiming: seconds of speech.
transcript_segmentstranscriptTiming: the transcript with start and end times.
media_filesdownloadMedia: the files stored in the run's key-value store, with links that do not expire.
image_file_urldownloadMedia: the stored cover.
video_file_urldownloadMedia: the stored video.
detail_statusok, skipped (not asked), login_required (TikTok serves it logged in only), not_found, or failed: …. Only ok is charged.
source_urlThe Creative Center page of the row: a hashtag's own page (= creative_center_url), a video list's page, a Top Ad's page.
scraped_atWhen the run read the row (UTC).
first_seen_atWith the memory: the day this task first met the entry.
last_seen_atWith the memory: the last day this task met it.
ended_atended rows: the day a complete read no longer found it.
times_seenWith the memory: runs of this task that met the entry.
previous_rankWith the memory: the rank the last earlier run of this task delivered it at (the newest snapshot of that run).
rank_changeprevious_rank − rank: positive = moved up.
rank_velocity_per_dayrank_change divided by the days since the previous rank; null when the previous rank is from the same day.
is_newWith the memory: true the first time this task meets the entry.
change_typeWith the memory: new, seen_before, or changed (a Top Ad whose likes or CTR moved).
changed_fieldsThe fields that moved.
noteFree rows: what TikTok answered, or why the row is there.
source_answerFree rows of a dropped section: the head of TikTok's answer.
run_tagYour runTag, copied onto every row.
summary_video_countSummary rows: videos that carry it.
summary_ad_countSummary rows: Top Ads that carry it.
summary_is_trendingcaption_hashtag rows: the same run delivered it as a trending hashtag.
summary_record_idsSummary rows: the rows behind it.
summary_advertisersSummary rows: the brands behind it.
summary_landing_domainsadvertiser_profile rows: the brand's landing domains.
summary_countriesadvertiser_profile rows: ads per country.
digest_summarytrendDigest: what is trending in the lists the run read.
digest_themestrendDigest: themes with the entries behind each.
digest_risingtrendDigest: hashtags with rising curves, by name.
digest_watchtrendDigest: concrete things to act on, each tied to an entry.

Example record:

{
"record_id": "hashtag:US:7:1513566",
"section": "hashtags",
"row_type": "hashtag",
"country": "US",
"country_name": "United States",
"period": "7",
"period_days": 7,
"period_start": null,
"period_end": null,
"rank": 1,
"list": "Overall",
"lists": [
{
"list": "Overall",
"industry_id": null,
"rank": 1
},
{
"list": "Education",
"industry_id": "10000000000",
"rank": 1
}
],
"list_served": 3,
"list_total": 3,
"hashtag_id": "1513566",
"hashtag_name": "cornell",
"hashtag_url": "https://www.tiktok.com/tag/cornell",
"creative_center_url": "https://ads.tiktok.com/creative/creativeCenter/trends/hashtag/1513566?period=7&region=US",
"posts": 27353,
"views": 344944638,
"industries": [
"Education"
],
"industry_ids": [
"10000000000"
],
"popularity_curve": [
{
"date": "2026-09-24",
"value": 0.0
},
{
"date": "2026-09-25",
"value": 10.2
},
{
"date": "2026-09-26",
"value": 36.07
},
{
"date": "2026-09-27",
"value": 52.63
},
{
"date": "2026-09-28",
"value": 68.26
},
{
"date": "2026-09-29",
"value": 88.81
},
{
"date": "2026-09-30",
"value": 100.0
}
],
"curve_points": 7,
"trend_direction": "up",
"trend_momentum_pct": 159.9,
"trend_volatility": 5.36,
"trend_stage": "peaking",
"trend_peak_date": "2026-09-30",
"trend_average": 50.85,
"trend_latest": 100.0,
"top_creators": [
{
"rank": 1,
"user_id": "7246021639602144302",
"handle": "followmyquotes",
"nickname": "quoteme",
"followers": 2734,
"country": "US",
"avatar_url": "https://p16-common-sign.tiktokcdn.com/tos-maliva-avt-0068/cd5e59161f18c58bf68fe7981fbff774~tplv-tiktokx-cropcenter:300:300.jpeg?dr=14577&refresh_token=789e0e35&x-expires=1791090000&x-signature=V0%2BbEWewbUPdQjY0QjjWcMqihqw%3D&t=4d5b0474&ps=13740610&shp=a5d48078&shcp=429d27ce&idc=my2",
"profile_url": "https://www.tiktok.com/@followmyquotes"
},
{
"rank": 2,
"user_id": "7446288931253568555",
"handle": "nudf29",
"nickname": "nudf29",
"followers": 12824,
"country": "US",
"avatar_url": "https://p16-common-sign.tiktokcdn.com/tos-maliva-avt-0068/06634f1828ac8758a4bec43a0c7ebd35~tplv-tiktokx-cropcenter:300:300.jpeg?dr=14577&refresh_token=1daa1846&x-expires=1791090000&x-signature=3MxYoRzzyA6Mi8YnkSmbNAZyOKw%3D&t=4d5b0474&ps=13740610&shp=a5d48078&shcp=429d27ce&idc=my2",
"profile_url": "https://www.tiktok.com/@nudf29"
},
{
"rank": 3,
"user_id": "7558704309278409742",
"handle": "ajyaps69_",
"nickname": "aj",
"followers": 585749,
"country": "US",
"avatar_url": "https://p16-common-sign.tiktokcdn.com/tos-maliva-avt-0068/f586357f37a6db82177803fba20c4c9d~tplv-tiktokx-cropcenter:300:300.jpeg?dr=14577&refresh_token=e26c64b4&x-expires=1791090000&x-signature=2%2BSIU8%2BrtkRpQ2vM%2BWuvVLPmA%2Fk%3D&t=4d5b0474&ps=13740610&shp=a5d48078&shcp=429d27ce&idc=my2",
"profile_url": "https://www.tiktok.com/@ajyaps69_"
}
],
"video_id": null,
"video_page_url": null,
"title": null,
"video_created_at": null,
"views_lifetime": null,
"organic_views": null,
"organic_views_lifetime": null,
"engagement_rate": null,
"engagement_rate_lifetime": null,
"six_second_view_rate": null,
"six_second_view_rate_lifetime": null,
"creator_username": null,
"creator_nickname": null,
"creator_url": null,
"creator_id": null,
"author_id": null,
"creator_bio": null,
"creator_avatar_url": null,
"creator_followers": null,
"creator_store_region": null,
"creator_type": null,
"content_tags": null,
"content_tag_ids": null,
"top_comments": null,
"top_comments_count": null,
"comment_keywords": null,
"creative_id": null,
"ad_url": null,
"ad_format": null,
"creative_available": null,
"advertiser_name": null,
"body_text": null,
"hook_text": null,
"objective": null,
"objectives": null,
"industry": null,
"industry_id": null,
"destination_url": null,
"landing_domain": null,
"ctr_top_percent": null,
"likes": null,
"comments": null,
"shares": null,
"cost_level": null,
"is_search_ad": null,
"source": null,
"keyword_list": null,
"pattern_labels": null,
"voice_over": null,
"highlight_text": null,
"regions": null,
"keyframes": null,
"keyframe_highlights": null,
"percentiles": null,
"copy_length": null,
"sentiment_score": null,
"image_url": null,
"video_urls": null,
"video_duration_s": null,
"video_width": null,
"video_height": null,
"cover_url": null,
"video_url": null,
"media_expires_at": null,
"hashtags": null,
"mentions": null,
"text_language": null,
"analysis_angle": null,
"analysis_cta_intent": null,
"analysis_tone": null,
"analysis_sentiment": null,
"analysis_offer_type": null,
"analysis_funnel_stage": null,
"analysis_confidence": null,
"analysis_hook": null,
"analysis_offer": null,
"analysis_audience": null,
"analysis_strategy": null,
"transcript": null,
"transcript_language": null,
"hook_3s": null,
"speech_seconds": null,
"transcript_segments": null,
"media_files": null,
"image_file_url": null,
"video_file_url": null,
"detail_status": null,
"source_url": "https://ads.tiktok.com/creative/creativeCenter/trends/hashtag/1513566?period=7&region=US",
"scraped_at": "2026-10-02T05:31:34Z",
"first_seen_at": null,
"last_seen_at": null,
"ended_at": null,
"times_seen": null,
"previous_rank": null,
"rank_change": null,
"rank_velocity_per_day": null,
"is_new": null,
"change_type": null,
"changed_fields": null,
"note": null,
"source_answer": null,
"run_tag": null,
"summary_video_count": null,
"summary_ad_count": null,
"summary_is_trending": null,
"summary_record_ids": null,
"summary_advertisers": null,
"summary_landing_domains": null,
"summary_countries": null,
"digest_summary": null,
"digest_themes": null,
"digest_rising": null,
"digest_watch": null
}

Pricing

Pay only for what a run actually returns, with no start fee and no platform usage billed to you. Prices fall with your Apify plan.

per 1,000 rowsFreeStarterScaleBusiness
Trending hashtag (hashtag)$2.00$1.70$1.40$1.00
Top video (video)$2.00$1.70$1.40$1.00
Comments and keywords on that video (video_details)+$1.00+$0.85+$0.70+$0.50
Ad (ad)$0.80$0.68$0.56$0.40
Ad detail record on that ad (ad_details)+$1.20+$1.02+$0.84+$0.60
Top Ads curves and percentiles (ad_metrics)+$3.00+$2.55+$2.50+$2.50
Typed tags on that ad (ad_tags)+$1.00+$0.85+$0.70+$0.70
Written analysis of that ad (ad_analysis)+$6.00+$5.10+$4.20+$3.00
per oneFreeStarterScaleBusiness
Transcript, per started minute of video (transcript)$0.02$0.017$0.015$0.0125
Stored image or cover (media_file)$0.002$0.0017$0.0014$0.001
Stored video (media_video)$0.02$0.017$0.015$0.014
Trend digest (trend_digest)$0.05$0.045$0.04$0.04

A trending hashtag or a top video is $2.00 per 1,000 on the Free plan and $1.00 on Business; a Top Ad with its detail record is $2.00 per 1,000 (the same price as in our TikTok Ads Library Scraper). + fees are charged per row that actually carries the thing: a video detail or a Top Ads detail that is login-only or could not be read is delivered marked (detail_status) and not billed; a silent video is not billed a transcript; the image and video links are in every row free, and a stored copy (downloadMedia) is billed once per file, never again for a file two rows share. Labelled rows for removed sections, watched hashtags not in the lists, ended entries and summary rows are free. maxItems is exact and never overshot; before the first request the log says the most the run can cost at your plan's prices. Nothing is billed for a run that failed. Enterprise plans have their own rates — the Actor's Pricing tab shows the price for your plan.

Usage patterns

  • A daily trends feed — Save a task with your countries, periods and trackChanges, and schedule it daily: every row carries its rank, the previous rank and the change per day, and is_new marks entries new to the list. Add onlyNew to receive and pay for only what a task has not delivered before. Apify's integrations on the task send the result to Slack, e-mail or a sheet. Ready-made: Monitor new trending TikTok hashtags daily.
  • Market and industry research — hashtagCountries: ["ALL"] with the industry lists gives every country's top hashtags per industry; industries on each row is the hashtag's own industries, and lists says which rankings it tops. minPosts, minViews and onlyRising narrow it to what moves. Ready-made: Rising TikTok hashtags with 1M+ views in the US, UK and Germany.
  • Video ranking history — The weekly and monthly rankings are kept by TikTok: videoSnapshots reads the last N, videoSnapshotDates the ones that held given dates. Rows of different weeks have different record_ids and the same video_id, so a sheet shows how long a video stayed on top.
  • Watching hashtags — hashtags keeps only the hashtags you name. One that is not in TikTok's logged-out lists for a country and period comes back as a free not_listed row, so absence is a fact in the data. Ready-made: Check whether your hashtags are trending on TikTok, per country.
  • Creative research — Top Ads with topAdsMetrics carry the per-second CTR and retention curves; transcribeVideos adds the spoken words (charged per started minute of video) and, with transcriptTiming, the timed first three seconds, tagAds typed angle and offer tags, summaryRows the hashtags used across video titles and ad captions and whether they are also trending. downloadMedia stores the covers and videos under links that do not expire. Ready-made: Store TikTok Top Ads videos and covers with links that last.

Input configuration

fieldtypedefaultwhat it does
sectionsarray[]The Creative Center lists to read, in one run and one row shape (section says which). Empty = trending hashtags, unless you give startUrls, adIds or the Spotlight. Songs, creators, Top Products and Keyword Insights are gone from TikTok's Creative Center: asking for one checks its old route on the run and returns a free labelled row with TikTok's answer, never an empty success.
hashtagCountriesarray["US"]The 27 markets the Creative Center ranks hashtags in. Each country × period is its own set of lists.
hashtagPeriodsarray["7"]Ranking windows. TikTok ranks hashtags over 7, 30 or 90 days (120 and 180 are gone).
hashtagIndustriesarray[]Empty = every list: the overall ranking plus each of the 15 industry rankings, merged into one row per hashtag with its rank in each (lists). Logged out, TikTok shows 3 hashtags per list, so the full sweep gives about 46 hashtags per country and period instead of 3. Pick lists to read only those.
hashtagsarray[]Keep only these hashtags (#skincare, skincare, or a tiktok.com/tag/ link). A watched hashtag that is not in TikTok's logged-out lists for a country and period comes back as a free not_listed row.
minPostsinteger0Keep hashtags with at least this many posts in the period. 0 = all.
minViewsinteger0Keep hashtags with at least this many views in the period. 0 = all.
onlyRisingbooleanfalseKeep hashtags whose popularity curve is rising (trend_direction: up).
videoCountriesarray["US"]The five markets the Creative Center ranks videos in.
videoPeriodsarray["last_7_days"]The rolling 7 / 30-day windows, or TikTok's weekly and monthly rankings. Every row carries the window's start and end dates (period_start, period_end).
videoSortByarray[]Empty = all three. Each sort is its own list of 4 (logged out).
videoContentTagsarray[]Empty = all content plus each of the 13 content tags (the 5 the page offers and 8 more TikTok serves). Each is its own list.
videoOrganicboth / all_views / organic_only"both"TikTok ranks videos on all views or on organic views only; both reads both lists.
videoSnapshotsinteger1How many rankings to read per country and period, newest first: 12 with the weekly ranking = the last 12 weeks. TikTok keeps weekly rankings back to 2025-07-27, monthly to 2025-05-31, the rolling windows about 31 days; an end it does not keep comes back as a free no_snapshot row.
videoSnapshotDatesarray[]Read the rankings that hold these dates (YYYY-MM-DD) instead: the week ending on the Sunday on or after a date, the month of a date, or the rolling window ending on it.
videoDetailsbooleanfalseOne more call per video: up to 200 top comments with likes, the comment keywords TikTok extracts, the creator's store region. TikTok serves this record logged out for US videos only; other countries' rows say detail_status: login_required and are not charged for it.
topAdsCountriesarray["US"]Used when sections has Top Ads. An ad seen in several countries' lists comes once.
topAdsPeriod7 / 30 / 180"30"The Top Ads period.
topAdsSortByfor_you / ctr / like / impression / play_2s_rate / play_6s_rate / cvr"ctr"TikTok's own order of the list. for_you changes between sessions; ctr is stable. rank on each row is the position in this order.
topAdsIndustriesarray[]Creative Center industries by name (Apparel & Accessories, Games) or id.
topAdsObjectivesarray[]Campaign objectives. Product sales (and Conversions) give the commerce ads rivals sell as "trending products".
topAdsLanguagesarray[]Ad languages (ISO 639-1).
topAdsFormatall / video / image"all"The ad format filter.
topAdsLikesall / top_20 / top_40 / top_60 / top_80 / top_100"all"TikTok's likes tier filter.
topAdsKeywordstringKeep ads whose caption or brand contains these words. The Creative Center serves no keyword search logged out, so the lists are swept and matched (this switches topAdsSweep on).
topAdsSweepbooleanfalseLogged out a Top Ads list holds 20 ads. The sweep reads the same country and period under every sort, objective, likes tier, industry and language and keeps the new ads.
topAdsDetailsbooleantrueOne more call per ad: landing page, countries, comments, shares, objectives, keyword list.
topAdsMetricsbooleanfalseTen more calls per ad: the per-second CTR, CVR, clicks, conversions and retention curves and the five percentiles TikTok shows on the ad page.
topAdsSpotlightbooleanfalseThe hand-picked Spotlight ads with TikTok's expert note.
startUrlsarray[]Creative Center URLs copied from the browser: a trends hashtag list (its country, period and industry are kept), a hashtag's page, the top videos page, a Top Ads list or ad page, the Spotlight page. A text file, CSV or published Google Sheet with one URL per line works too.
adIdsarray[]Creative Center Top Ads ids (or their page URLs) to fetch with their detail record. An id TikTok no longer has comes back as a free not_found row.
maxItemsinteger0The most charged rows (hashtags, videos, Top Ads together) this run delivers. 0 = no limit. Free rows (labels, summaries) do not count.
trackChangesbooleanfalseRemember this task's lists between runs: every row gets previous_rank, rank_change, rank_velocity_per_day, is_new, first_seen_at and times_seen.
onlyNewbooleanfalseDeliver and charge only hashtags, videos and Top Ads this task has not delivered before (a Top Ad whose likes or CTR changed comes back as changed). Turns the memory on.
includeEndedbooleanfalseA free ended row for each entry an earlier run delivered that a complete read of the same list no longer returns. Turns the memory on.
stateStoreNamestringName of the memory between runs. Empty = derived from the lists (not the dates), so the same task always meets its own memory.
summaryRowsbooleanfalseFree rows after the data: each hashtag used in the run's video titles and ad captions (and whether it is also trending), each Top Ads brand, each landing page.
outputFormatfull / compact"full"compact is for sheets and AI agents; billing is the same. With downloadMedia it keeps the stored files' links (image_file_url, video_file_url, media_files).
downloadMedianone / images / all"none"TikTok's media links expire (media_expires_at). Store the files in the run's key-value store and get links that do not; a file two rows share is stored and billed once per run.
transcribeVideosbooleanfalseThe spoken words of each top video and Top Ad, with the language and the first three seconds (hook_3s). A video without speech is not charged.
transcriptTimingbooleanfalseWith transcribeVideos: word timestamps from a second model call, so hook_3s is the words of the first three seconds of speech and speech_seconds and transcript_segments are filled. Without it the transcript is the spoken words and hook_3s its first eight words.
tagAdsbooleanfalseTyped tags from the caption: angle, CTA intent, tone, offer type, funnel stage and sentiment, each with its confidence (analysis_*). The same tags as our other ad library actors.
analyzeAdsbooleanfalseA short written read of each Top Ad: hook, offer, audience, strategy.
trendDigestbooleanfalseOne digest row at the end: what is trending in the lists this run read, the themes, the rising hashtags and what to act on, written from the rows' own numbers.
openaiApiKeystringYour own key for transcribeVideos, analyzeAds and trendDigest, if you want the model usage on your account. Not needed: the Actor has its own.
runTagstringYour own label, copied onto every row (run_tag).
resumeFromRunIdstringThe id of a run of this Actor with the same input that stopped early (timeout, abort): this run continues where it stopped, without delivering or billing its rows again.

FAQ

Why 3 hashtags per list? The Creative Center page shows more.

Logged out, TikTok's API serves 3 hashtags and 4 videos per list; the page shows more only to signed-in TikTok accounts. This Actor does not use accounts or cookies. It reads every list TikTok has for a country and period and merges them, which gives about 46 hashtags and 85 videos instead of 3 and 4, and each row says how many rows its lists served.

Where are songs, creators and Top Products?

TikTok removed them from the Creative Center: the old routes answer deprecated (songs, creators, Keyword Insights) or 404 (Top Products), and the pages redirect. Ask for them in sections and the run checks the route again and returns a free labelled row with TikTok's answer; if TikTok brings a section back, that row says so.

Why are comments only on US videos?

TikTok serves the video's detail record (comments, comment keywords) to logged-out readers for US videos only; for Japan, Vietnam, Thailand and Indonesia it answers "login required". Those rows say detail_status: login_required and are not charged for the detail.

What do the period dates mean for videos?

period_end is the snapshot TikTok keys the list by: the Sunday of a weekly ranking, the last day of a monthly one, the last day of a rolling window. period_start is the first day of the window.

What is never charged?

Labelled rows for removed sections, watched hashtags not in the lists, snapshots TikTok does not keep, Top Ads ids TikTok no longer has, entries that left a list, summary rows; a video detail that is login-only or failed; a repeat of a file two rows share (stored and billed once); and any run that failed.

How is the CTR of a Top Ad shown?

As TikTok's rank bucket: ctr_top_percent 6.0 means "CTR Top 6 %" in the Creative Center — lower is better. It is not a click-through rate.

Integration

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('hyperbach/tiktok-creative-center-scraper').call({"sections": ["hashtags"], "hashtagCountries": ["US"], "hashtagPeriods": ["7"]});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Python

from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')
run = client.actor('hyperbach/tiktok-creative-center-scraper').call(run_input={'sections': ['hashtags'], 'hashtagCountries': ['US'], 'hashtagPeriods': ['7']})
items = client.dataset(run['defaultDatasetId']).list_items().items

CLI

$apify call hyperbach/tiktok-creative-center-scraper --input '{"sections": ["hashtags"], "hashtagCountries": ["US"], "hashtagPeriods": ["7"]}'

REST

curl -X POST "https://api.apify.com/v2/acts/hyperbach~tiktok-creative-center-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H 'Content-Type: application/json' -d '{"sections": ["hashtags"], "hashtagCountries": ["US"], "hashtagPeriods": ["7"]}'

Support

apify@hyperbach.com

This page is generated from the Actor's schemas and a live sample — it cannot describe a field the Actor does not have.