Tiktok Trending Hashtags Analytics Scraper & Top Videos avatar

Tiktok Trending Hashtags Analytics Scraper & Top Videos

Pricing

from $3.99 / 1,000 results

Go to Apify Store
Tiktok Trending Hashtags Analytics Scraper & Top Videos

Tiktok Trending Hashtags Analytics Scraper & Top Videos

TikTok Trending Hashtags Analytics Scraper — Scrape trending TikTok hashtags with views, growth metrics, engagement data, and top videos. Analyze hashtag performance, discover viral content, track trends, and identify high-performing videos and creators.

Pricing

from $3.99 / 1,000 results

Rating

0.0

(0)

Developer

Scrapio

Scrapio

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

0

Monthly active users

a day ago

Last modified

Share

TikTok Trending Hashtags Analytics Scraper & Top Videos reads TikTok's live Creative Center trending-hashtag board — rank, views in window, posts in window and the daily popularity curve for a country and time window — then opens every hashtag into the clips actually driving it: caption, plays, likes, comments, shares, posted-at, duration, the sound behind the clip, and the creator's follower and video counts. Unlike scraping frameworks that return raw HTML, it returns typed JSON, ready for your database or pipeline without parsing. This guide covers every input, every output field, and how teams deploy it for trend monitoring, content research and bulk hashtag audits.

It queries TikTok's own Creative Center trends loader for a country and ranking window, returning up to three trending hashtags with rank, views, posts and a daily popularity curve — the same board a logged-in ads user would see, read anonymously. For each hashtag it then opens TikTok's public hashtag embed to add the top videos driving that trend, and optionally opens each video's own embed to add full engagement and creator data. No TikTok account, login, cookie or session is required anywhere in the pipeline.

  • 🔥 Trending-hashtag board: rank, views-in-window, posts-in-window, industry tags and a daily trend curve, per country and period
  • 🎯 Exact lifetime stats per hashtag — viewCountExact and videoCountExact — pulled from TikTok's public hashtag embed, not estimated from the board
  • 🎬 Top videos per hashtag: caption, play count, author handle, cover images and the direct media URL
  • 📊 Full per-video engagement on request: likes, comments, shares, posted-at, duration, ad flag, filming location, every co-occurring hashtag, the sound, and the creator's follower/like/video counts
  • 🧪 A custom-hashtag mode that resolves names not on today's board through the same public embed instead of dropping them
  • 🗂️ A second flat "top-videos" dataset — one row per video — alongside the nested topVideos[] on the hashtag row

Features & Capabilities

This actor is a superset of the classic tiktok-trending-hashtags-analytics-scraper-pay-per-events actor: every classic input key still works with the same accepted values, and every classic output key still carries the same value — hashtag_id, hashtag_name, video_views, publish_cnt, rank and the nested analytics block are unchanged, so an existing downstream schema keeps working while the new fields sit alongside them.

Core features

  • Three result modes (result_type): top100 (ranking only, no analytics blob), top100_with_analytics (ranking plus trend curve and top creators, the default), analytics (a custom hashtag_list) — every mode emits the same column set
  • Board data per hashtag: video_views, publish_cnt, rank, dailyTrend[], trendPointCount, trendDirection (rising / flat / fading, derived by comparing the first and last thirds of the curve), industryIds, industryNames, topCreators[]
  • Exact hashtag lifetime stats from the public hashtag embed: viewCountExact, videoCountExact, viewsPerPostExact, hashtagDescription, hashtagCoverUrl
  • Per-video fields on topVideos[]: videoId, videoUrl, caption, playCount, diggCount, commentCount, shareCount, engagementRate, postedAt, durationSeconds, isAd, sound, author (handle, nickname, verified, follower/following/heart/video counts)
  • Off-board hashtag resolution (resolve_custom_hashtags): a hashtag_list name that isn't on today's board is still resolved through the public hashtag embed for its challenge ID, exact lifetime stats and top videos — rank and the trend curve stay null because only the board publishes those
  • Provenance flags on every row — countrySupported, countryFallbackApplied, periodAliasApplied, analyticsPeriodIgnored, newOnBoardIgnored, countsArePrecise — so a silently-remapped request never looks like a real result
FeatureThis Actorcodebyte/tiktok-trending-hashtags-analyticsapi-empire/tiktok-trending-hashtags-analytics-scraper
Output formatTyped JSON, stable schema across all 3 modesJSON, schema varies by result_typeJSON
Top videos per hashtagtopVideos[] with full engagement + creator statsNot documentedNot documented
Off-board hashtag resolution✅ resolves via public hashtag embed instead of dropping❌ "TikTok will not return any data for this hashtag" (as documented on their listing)Not documented
Audience demographics (age, interest, region scores)Not returnedaudience_ages_readable, audience_interests, audience_countries (as documented on their listing)Not documented
Flat CSV/Excel-ready video table✅ second top-videos datasetNot documentedNot documented
Pricing model (Apify Store, checked 26 Jul 2026)Pay per eventPay per eventFlat price per month

If your use case is feeding structured trend data to an LLM or a dashboard, the off-board-resolution row is the decision-maker — a custom hashtag list where half the names silently vanish is a broken pipeline, not a minor gap.

When another tool might suit you better

If what you actually need is audience insight — age brackets, interest indexes, and regional popularity scores for a trend's viewers — codebyte's TikTok Trending Hashtags Analytics documents exactly that (audience_ages_readable, audience_interests, audience_countries, checked 26 Jul 2026), and this actor does not return any viewer-demographic data at all, because TikTok's public board and embed surfaces never expose it. This actor's depth is on the content side — the videos and creators behind a trend — not the audience behind it.

This actor covers trending hashtags, their top videos and the creators behind them. For TikTok's comment layer, use TikTok Comments Scraper: Top Comments By Language. For a single creator's own profile, hashtag mix and sound usage, use TikTok Profile Scraper With Hashtag & Sound Analytics. Both sit in the Scrapio account alongside this one and read the same platform from a different angle.

🏢 Social media agencies and content strategists

An agency managing multiple client accounts pulls the board for each client's country with result_type=top100_with_analytics, sorts by trendDirection == "rising", then opens topVideos[] on the surviving hashtags to see which format and sound are actually earning plays right now — before recommending a client jump on a tag that's already fading. topVideosAvgEngagementRate gives a ready comparison across hashtags without opening every video by hand.

📊 AI training data and RAG indexing

hashtagDescription, caption and hashtagsOnVideo carry the most descriptive text per record and chunk cleanly by hashtag or video, making them strong RAG-index candidates for a trend-research assistant. For training data, dailyTrend, trendDirection, engagementRate and topVideosAvgEngagementRate are structurally consistent typed primitives across every record, so a model can learn "trend curve shape vs. video engagement rate" without missing-field handling. Two concrete uses: indexing caption + hashtagsOnVideo so an agent can answer "which videos in this trend use this sound," and training a virality-scoring model on dailyTrend + engagementRate pairs.

📱 Competitive and market intelligence

Track industryNames alongside trendDirection across scheduled runs in your category (Beauty & Personal Care, Games, Food & Beverage and six others are ID-mapped and genuinely filterable) to see which trends a competitor's niche is riding before it shows up in a monthly report, and pull topCreators[].followerCount to see which creator tier is actually carrying a given trend.

🔬 Research and academic use

dailyTrend, trendDirection, viewCountExact and videoCountExact support public-culture and platform-diffusion research — how a hashtag's popularity curve evolves over a 7-, 30- or 90-day window — using only data any anonymous visitor to TikTok's Creative Center or hashtag pages can already see.

🎥 Product and SaaS development

Teams building a trend-monitoring dashboard or a content-calendar tool can schedule this actor against a country list and store trendDirection, dailyTrend and topVideos[] directly as the product's alerting and content-suggestion fields, without building trend-curve math or a video-embed fetcher of their own.

🍚 Input Parameters

Nothing is required ("required": [] in the schema) — every field has a default, so an empty input JSON {} runs the US board for the last 7 days with analytics and top videos on.

ParameterRequiredTypeDescriptionExample Value
result_typeNostringtop100 = ranking only (analytics is an empty object). top100_with_analytics = ranking + trend curve + top creators. analytics = analytics for the names in hashtag_list. Every mode emits the same column set. Enum: top100, top100_with_analytics, analytics. Default "top100_with_analytics"."top100_with_analytics"
countryNostringThe country board to read. TikTok only publishes 27 country boards (US FR DE IT ES GB AR AU BR CA CO EG ID IL JP KR MY MX PH SA SG ZA TW TH TR AE VN). Every other code, and ALL, silently returns the United States board — the row carries countrySupported=false and countryFallbackApplied=true rather than hiding it. Default "US"."GB"
top100_periodNostringRanking window in days. Real upstream windows are 7, 30 and 9090 is genuinely served (a 90-point curve, a different tag set). 120 is accepted for backward compatibility, but TikTok silently serves the 7-day board for it; the row then carries periodAliasApplied=true and periodDays=7. Enum: 7, 30, 90, 120. Default "7"."30"
analytics_periodNostringLegacy field kept so older run configurations keep working. TikTok's trends surface has no separate analytics window — curve length is set by top100_period above. Echoed on the row as analyticsPeriodRequested, always flagged analyticsPeriodIgnored=true. 365 and 1095 do not exist upstream at all. Enum: 7, 30, 90, 120, 365, 1095. Default "30"."30"
top100_industryNostring, nullableTikTok's server ignores every industry parameter, so this actor filters after fetching, using the industry IDs TikTok stamps on each row. 9 industries are ID-mapped and really filterable: Apparel & Accessories, Beauty & Personal Care, Education, Food & Beverage, Games, News & Entertainment, Pets, Sports & Outdoor, Travel. Pick anything else and the run warns and keeps all rows rather than returning nothing. Enum includes all 21 industry labels plus "" for all industries. Default ""."Beauty & Personal Care"
top100_new_on_boardNobooleanKept for backward compatibility. TikTok ignores every new-on-board parameter and the payload carries no rank-change marker at all — turning this on changes nothing except the newOnBoardIgnored=true flag on the row. Default false.false
hashtag_listNoarrayHashtag names without the #. Used by result_type=analytics. Names on the live board keep their rank and trend curve; names not on today's board are resolved through TikTok's public hashtag embed when resolve_custom_hashtags is on. Default [].["skincare", "cleangirl"]
total_hashtagsNointegerUpper bound on saved hashtag rows. TikTok's board hard-caps at 3 hashtags per country+window (totalCount:3, hasMore:false on every slice tested) — a higher number cannot conjure more board rows, it only raises the ceiling for custom hashtags in analytics mode. Minimum 1, maximum 500. Default 10.10
include_top_videosNobooleanAdds topVideos[] to every hashtag row: video ID, URL, caption, play count, author handle, cover images and the direct media URL. Also fills the exact lifetime viewCountExact / videoCountExact for the hashtag. Costs one extra request per hashtag. Default true.true
videos_per_hashtagNointegerCap on topVideos[] per hashtag. TikTok returns at most 10 and often fewer, so values above 10 have no effect. Minimum 1, maximum 10. Default 10.10
fetch_video_detailsNobooleanOne extra request per video to add likes, comments, shares, posted-at, duration, ad flag, filming country, the sound, every co-occurring hashtag, the creator's follower/like/video counts, and a derived engagementRate. Default true.true
min_playsNointegerDrops topVideos below this play count. Applied after fetching — TikTok accepts no server-side play filter — so it trims output, it does not reduce request count. Minimum 0. Default 0.0
video_concurrencyNointegerParallel embed requests for videos. Minimum 1, maximum 16. Default 8.8
video_child_datasetNobooleanWrites every video to a second named dataset top-videos as one flat row per video (CSV/Excel friendly), in addition to the nested topVideos[] on the hashtag row. Child rows are never charged. Default true.true
resolve_custom_hashtagsNobooleanIn analytics mode, resolves hashtag_list names that are not on today's board through TikTok's public hashtag embed instead of dropping them. You get the challenge ID, exact lifetime views, exact post count and top videos; rank and the trend curve stay null because only the board publishes those. Default true.true
proxyConfigurationNoobjectOptional. Leave Apify Proxy on as a safety net; it is used only after a proven block. Residential is the best escalation tier for TikTok. Default {"useApifyProxy": true}.{"useApifyProxy": true}

Example input

{
"result_type": "top100_with_analytics",
"country": "US",
"top100_period": "7",
"top100_industry": "Beauty & Personal Care",
"total_hashtags": 10,
"include_top_videos": true,
"videos_per_hashtag": 10,
"fetch_video_details": true,
"min_plays": 0,
"video_concurrency": 8,
"video_child_dataset": true,
"resolve_custom_hashtags": true,
"proxyConfiguration": { "useApifyProxy": true }
}

Supported hashtag and country inputs

  1. Trending board, default mode — leave hashtag_list empty and result_type at top100_with_analytics; the actor reads TikTok's live board for country and top100_period and returns up to 3 hashtags with full analytics and top videos.
  2. Custom hashtag list, on-board or not — set result_type: "analytics" and hashtag_list: ["skincare", "cleangirl"]. Names currently on the board keep their rank and trend curve; names that aren't are resolved through the public hashtag embed when resolve_custom_hashtags is true, or skipped with a log line when it's false.
  3. Ranking only, fastest mode — set result_type: "top100" to skip the analytics blob entirely (it comes back as {}), useful when you only need rank, video_views and publish_cnt.

Hashtag names in hashtag_list are passed without the leading #; the actor strips one if you include it. country accepts any of TikTok's 27 published two-letter board codes — every other value, and ALL, fall back to the US board rather than erroring.

📦 Output Format

Typed, normalized JSON, one row per hashtag, pushed live as each hashtag finishes processing. The default dataset view surfaces 22 columns as a flat table; every key documented below is present on the underlying row regardless of which view you're looking at. Export as JSON, CSV or Excel from the Apify Console, or read the dataset through the Apify API.

Output for a hashtag row

{
"hashtag_id": "1234567890123456789",
"hashtag_name": "cleangirl",
"video_views": 84213900,
"publish_cnt": 15420,
"rank": 2,
"analytics": {
"video_views": 84213900,
"publish_cnt": 15420,
"rank": 2,
"industry_ids": ["14000000000"],
"trend": [{ "timestamp": 1753142400, "value": 0.62 }],
"creators": [{ "handleName": "glowwithava", "nickname": "Ava", "creatorRank": 1, "followedCnt": 412000, "ttUID": "6812345678901234567", "countryCode": "US" }]
},
"rowType": "hashtag",
"rowSource": "trending_board",
"errorReason": null,
"hashtagUrl": "https://www.tiktok.com/tag/cleangirl",
"scrapedAt": "2026-07-26T09:12:03Z",
"sourceUrl": "https://ads.tiktok.com/creative/creativeCenter/trends/hashtag?__loader=creativeCenter%2Ftrends%2F%28tab%29%2Fpage&__ssrDirect=true&region=US&period=7",
"regionCode": "US",
"regionName": "United States",
"requestedCountry": "US",
"countrySupported": true,
"countryFallbackApplied": false,
"periodDays": 7,
"requestedPeriodDays": 7,
"periodAliasApplied": false,
"analyticsPeriodRequested": "30",
"analyticsPeriodIgnored": true,
"newOnBoardRequested": false,
"newOnBoardIgnored": true,
"industryFilterRequested": "Beauty & Personal Care",
"industryFilterMode": "client_side",
"videoViewsInt": 84213900,
"publishCntInt": 15420,
"industryIds": ["14000000000"],
"industryNames": ["Beauty & Personal Care"],
"industryIdsUnmapped": [],
"dailyTrend": [{ "date": "2026-07-19", "timestamp": 1753142400, "value": 0.62 }],
"trendPointCount": 7,
"trendDirection": "rising",
"topCreators": [
{
"handle": "glowwithava",
"nickname": "Ava",
"profileUrl": "https://www.tiktok.com/@glowwithava",
"creatorRank": 1,
"followerCount": 412000,
"avatarUrl": "https://p16-sign.tiktokcdn.com/avatar.jpeg",
"ttUid": "6812345678901234567",
"boardRegion": "US"
}
],
"topCreatorCount": 1,
"viewCountExact": 291840112,
"videoCountExact": 48302,
"viewsPerPostExact": 6041.9,
"hashtagStatsSource": "tiktok_tag_embed",
"hashtagDescription": "Minimal, dewy, effortless skincare and makeup looks.",
"hashtagCoverUrl": "https://p16-sign.tiktokcdn.com/cover.jpeg",
"topVideos": [
{
"videoId": "7398217463829104897",
"videoUrl": "https://www.tiktok.com/@glowwithava/video/7398217463829104897",
"caption": "5 minute clean girl routine #cleangirl #skincare",
"playCount": 2140933,
"authorHandle": "glowwithava",
"authorUrl": "https://www.tiktok.com/@glowwithava",
"coverUrl": "https://p16-sign.tiktokcdn.com/videocover.jpeg",
"originCoverUrl": "https://p16-sign.tiktokcdn.com/origincover.jpeg",
"dynamicCoverUrl": "https://p16-sign.tiktokcdn.com/dynamiccover.jpeg",
"mediaUrl": "https://v16.tiktokcdn.com/video.mp4",
"width": 576,
"height": 1024,
"isPrivate": false,
"foundVia": "tag_embed",
"sourceHashtag": "cleangirl",
"detailsFetched": true,
"diggCount": 184300,
"commentCount": 2140,
"shareCount": 9800,
"postedAt": "2026-07-20T14:02:11Z",
"postedAtUnix": 1753023731,
"durationSeconds": 32,
"isAd": false,
"isOriginal": true,
"locationCreated": "US",
"engagementRate": 0.091,
"engagementTotal": 196240,
"hashtagsOnVideo": ["cleangirl", "skincare", "grwm"],
"sound": { "musicId": "7398000112233445566", "musicName": "original sound", "authorName": "glowwithava", "original": true },
"author": { "uniqueId": "glowwithava", "nickname": "Ava", "verified": false, "secUid": "MS4wLjABAAAA...", "followerCount": 412000, "followingCount": 312, "heartCount": 8340000, "videoCount": 641, "diggCount": 91200 },
"countsArePrecise": false
}
],
"topVideoCount": 1,
"topVideosTotalPlays": 2140933,
"topVideosMaxPlays": 2140933,
"topVideosAvgEngagementRate": 0.091,
"topVideosWithDetails": 1,
"countsArePrecise": false,
"charged": true
}

Output for a top video row (top-videos child dataset)

Written only when video_child_dataset and include_top_videos are both on — one flat row per video, in a second, separately-named dataset called top-videos, alongside the nested topVideos[] on the parent hashtag row above.

{
"hashtag_id": "1234567890123456789",
"hashtag_name": "cleangirl",
"regionCode": "US",
"periodDays": 7,
"hashtagRank": 2,
"videoId": "7398217463829104897",
"videoUrl": "https://www.tiktok.com/@glowwithava/video/7398217463829104897",
"caption": "5 minute clean girl routine #cleangirl #skincare",
"playCount": 2140933,
"diggCount": 184300,
"commentCount": 2140,
"shareCount": 9800,
"engagementTotal": 196240,
"engagementRate": 0.091,
"postedAt": "2026-07-20T14:02:11Z",
"durationSeconds": 32,
"isAd": false,
"isOriginal": true,
"locationCreated": "US",
"authorHandle": "glowwithava",
"authorUrl": "https://www.tiktok.com/@glowwithava",
"authorNickname": "Ava",
"authorVerified": false,
"authorFollowerCount": 412000,
"authorVideoCount": 641,
"authorHeartCount": 8340000,
"soundId": "7398000112233445566",
"soundName": "original sound",
"soundAuthor": "glowwithava",
"soundIsOriginal": true,
"hashtagsOnVideo": ["cleangirl", "skincare", "grwm"],
"coverUrl": "https://p16-sign.tiktokcdn.com/videocover.jpeg",
"dynamicCoverUrl": "https://p16-sign.tiktokcdn.com/dynamiccover.jpeg",
"mediaUrl": "https://v16.tiktokcdn.com/video.mp4",
"width": 576,
"height": 1024,
"isPrivate": false,
"detailsFetched": true,
"countsArePrecise": false,
"foundVia": "tag_embed",
"scrapedAt": "2026-07-26T09:12:03Z"
}

Output for a top creator entry (topCreators[])

Nested inside every hashtag row when the board reports named top creators for that trend.

{
"handle": "glowwithava",
"nickname": "Ava",
"profileUrl": "https://www.tiktok.com/@glowwithava",
"creatorRank": 1,
"followerCount": 412000,
"avatarUrl": "https://p16-sign.tiktokcdn.com/avatar.jpeg",
"ttUid": "6812345678901234567",
"boardRegion": "US"
}

boardRegion is TikTok's stamp of the board slice's region, not necessarily the creator's home country — the field is named to keep that distinction honest rather than implying it is the creator's location.

Schema stability and export options

The classic contract — hashtag_id, hashtag_name, video_views, publish_cnt, rank and the nested analytics block — is preserved byte-for-byte from the earlier actor this one supersedes, and is also exposed as its own "classic" dataset view for anyone migrating from it. Every new field sits alongside those five, so an existing integration keeps working untouched. Rows that fail — an unusable board response, or an off-board hashtag that can't be resolved — are pushed as accounting rows (rowType: "run_accounting" or "hashtag_unresolved", charged: false) rather than silently dropped, so a run's row count is always explainable. Export the dataset as JSON, CSV or Excel from the Apify Console, or read it live through the Apify API while the run is still in progress, since rows are pushed as each hashtag finishes rather than buffered to the end.

🎯 Strategy 1: Real-time enrichment pipeline

Trigger the actor from a content-calendar tool or a new-brief workflow with country set to your target market and result_type: "top100_with_analytics". Append trendDirection, topVideosAvgEngagementRate and the top topVideos[].caption/sound back to the brief so a content team sees, in one pass, which format and sound are actually working in a live trend before drafting a script.

🎯 Strategy 2: Scheduled monitoring and alerting

Use an Apify Schedule to run the actor daily against your tracked countries and industries. Because trendDirection is already computed per run from that run's own curve, filter the dataset for trendDirection == "rising" after each scheduled run and wire an Apify webhook on run success to notify your team the moment a tag in your niche starts climbing — no manual diffing between runs required.

🎯 Strategy 3: Bulk dataset build

Put every hashtag you track into hashtag_list with result_type: "analytics" and resolve_custom_hashtags on, so both on-board and off-board names come back populated rather than silently missing rows. There is no built-in fan-out across multiple countries in one run — start one Actor run per country through the Apify API for a multi-market sweep — and aggregate the resulting top-videos child dataset to CSV for a video-level research set.

Strategy comparison at a glance

StrategyBest forRun patternOutput format
Real-time enrichmentContent-brief and creative researchOn-demand, single-country runHashtag row → content brief field
Scheduled monitoringRising-trend alerting per niche/countryApify Schedule + webhook on trendDirectionDefault dataset view, filtered
Bulk dataset buildCustom hashtag tracking, video-level researchOne run per country, hashtag_list arraytop-videos child dataset → CSV
Scraper NameWhat it extracts
TikTok Comments Scraper: Top Comments By LanguageVideo comments with language detection, ranked by engagement
TikTok Profile Scraper With Hashtag & Sound AnalyticsA single creator's profile, hashtag mix and sound usage breakdown
Instagram Hashtag Analytics Scraper (Scrapio)Instagram's equivalent hashtag-analytics data, for teams tracking both platforms

TikTok Trending Hashtags Analytics Scraper works with any language or tool that can make an HTTP request, since it is a standard Apify Actor called through the Apify API.

Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("<YOUR_USERNAME>/tiktok-trending-hashtags-analytics-top-videos").call(run_input={
"result_type": "top100_with_analytics",
"country": "US",
"top100_period": "7",
"include_top_videos": True,
"fetch_video_details": True,
})
rows = []
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
if item.get("rowType") != "hashtag":
continue
rows.append({
"hashtag": item["hashtag_name"],
"rank": item["rank"],
"trend": item["trendDirection"],
"top_video_caption": (item["topVideos"][0]["caption"] if item["topVideos"] else None),
})
for r in rows:
print(r["hashtag"], r["rank"], r["trend"], r["top_video_caption"])

Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('<YOUR_USERNAME>/tiktok-trending-hashtags-analytics-top-videos').call({
country: 'US',
top100_period: '7',
include_top_videos: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const item of items) {
if (item.rowType === 'hashtag' && item.trendDirection === 'rising') {
console.log(`🔥 #${item.hashtag_name} is rising — ${item.topVideoCount} top video(s)`);
}
}

Async and scheduled pipelines

For fire-and-forget large jobs, start the run through the Apify API's async run endpoint rather than the default synchronous call(), and use an Apify webhook on run success to be notified instead of polling. For recurring work — daily trend checks, weekly industry sweeps — use Apify Schedules to trigger the run on a cron expression; there is no actor-specific notification mechanism beyond the platform's own webhooks.

🏢 Social media agencies and content strategists

An agency covering 10 client accounts across different countries runs the actor per country, filters trendDirection == "rising", then reads topVideos[].sound and caption to brief creators on the specific format and audio currently earning plays in that market.

📊 Growth and marketing teams

A brand marketer tracks industryNames filtered to their category alongside topCreators[].followerCount to identify which creator tier — micro or macro — is actually driving views in a trend before deciding who to approach for a paid collaboration.

📱 Competitive and market intelligence

An analyst schedules runs against a competitor's category and country, watching trendDirection and topVideosAvgEngagementRate shift week over week to catch a rival's content strategy pivot before it's visible anywhere else.

🔬 Researchers

Academic and social researchers building a public-culture dataset pull dailyTrend, trendDirection, viewCountExact and videoCountExact across countries and time windows — public-data-only, no login or private API involved.

🎥 Product and SaaS development

Teams building a trend-monitoring or content-calendar product schedule the actor against a country and industry list and store trendDirection, dailyTrend and topVideos[] directly as the product's alerting and content-suggestion fields.

Scraping publicly accessible web data is broadly permissible in the United States — hiQ Labs v. LinkedIn (9th Circuit, 2019) held that accessing data with no login wall does not violate the Computer Fraud and Abuse Act. TikTok Trending Hashtags Analytics Scraper reads only TikTok's own Creative Center trends board and its public hashtag/video embeds — surfaces any anonymous visitor can already load — with no login, cookie or private content accessed.

Violating TikTok's Terms of Service through automated collection is a contractual matter between the account holder and TikTok, not a criminal one — the risk is account or access restriction, not prosecution.

The hashtag board data — rank, views, posts, trend curves and industry tags — is aggregate content-performance data, not personal data. But topVideos[].author and topCreators[] carry a public username, avatar and follower count, which is personal data under GDPR and CCPA even though TikTok displays it to any anonymous visitor. TikTok Trending Hashtags Analytics Scraper does not collect private data, email addresses, phone numbers, or anything gated behind a login — only what TikTok already shows a logged-out visitor. This actor returns only publicly accessible data. What you do with that data is your responsibility — consult legal counsel for commercial applications involving personal data.

❓ Frequently asked questions

Yes. It reads TikTok's Creative Center trends loader and the public www.tiktok.com/embed/tag/<name> and /embed/<videoId> surfaces, all logged out with no cookies. No TikTok account, login or API key is needed — the one credential you provide is your own Apify token.

How does it handle TikTok's anti-scraping measures?

The Creative Center loader is TLS/JA3-gated: a plain HTTP client is served a ~50-byte empty payload, so the actor uses curl_cffi with a Chrome-131 TLS impersonation profile to get the real ~7 KB response, and never launches a browser. The embed surfaces use a separate mobile-Chrome impersonation profile. Both surfaces retry up to 3 times with exponential backoff on a failed or empty-shell response, and an optional Apify Proxy — direct connection is tried first, and proxy is used only after a proven block.

Can I run it at scale without getting blocked?

There's no documented uptime or success-rate figure to quote, but the behavior is: video-embed requests run in parallel up to video_concurrency (default 8, maximum 16), and TikTok's own board hard-caps at 3 hashtags per country+window regardless of total_hashtags — so "at scale" here means running against more countries or more custom hashtags, not asking one run for more board rows than exist.

Live, per run. Every run fetches the Creative Center board and the hashtag/video embeds fresh — nothing is cached between runs — and every row carries scrapedAt, a UTC timestamp set once per run.

Why does total_hashtags accept up to 500 when the board only ever returns 3?

Because the same input also caps custom hashtags in analytics mode. TikTok's trending board itself hard-caps at exactly 3 hashtags per country+window (totalCount:3, hasMore:false on every combination tested) — that's TikTok's ceiling, not this actor's, and no total_hashtags value above 3 can raise it. Set total_hashtags above 3 only when you're also passing a longer hashtag_list for custom analytics.

Which TikTok fields work best for AI training and RAG indexing?

For RAG indexing: hashtagDescription, caption and hashtagsOnVideo carry the most descriptive text per record and chunk cleanly by hashtag or video. For training data: dailyTrend, trendDirection, engagementRate and topVideosAvgEngagementRate are the most structurally consistent typed fields across records. Everything returns as typed primitives, arrays or nested objects — no HTML parsing or normalization pass needed before indexing.

What happens to creator and author data in topVideos and topCreators?

It's returned exactly as TikTok's public embed shows it to any anonymous visitor — handle, nickname, verification flag, avatar, and follower/following/heart/video counts — with no private fields (email, phone, DMs) ever accessed. Because a public handle and follower count are personal data under GDPR/CCPA, storage and downstream use of those fields is your responsibility as the data controller; TikTok Trending Hashtags Analytics Scraper does not collect anything beyond what's already publicly displayed.

Yes. It's callable as a standard HTTP-triggered Actor through the Apify API, so LangChain, CrewAI, n8n or a hand-written tool definition can invoke it and receive typed JSON with no parsing step required before passing it into a context window.

How does it compare to other TikTok hashtag scrapers?

Checked on the Apify Store on 26 Jul 2026: codebyte's TikTok Trending Hashtags Analytics documents audience demographics (age brackets, interest indexes, regional scores) that this actor does not return, but also documents that an off-board custom hashtag simply returns no data — this actor resolves it through the public hashtag embed instead. api-empire's TikTok Trending Hashtags Analytics Scraper markets up to 500 hashtags per run and 40+ countries; this actor is explicit that TikTok's board itself caps at 3 hashtags per country+window and that only 27 country boards are real, with every other code silently falling back to the US board rather than quietly serving unverifiable numbers.

Does the industry filter actually work on TikTok's side?

No — TikTok's server ignores every industry parameter tested (19 spellings, zero effect), so top100_industry is applied client-side in this actor, matching board rows against the industry IDs TikTok itself stamps on each row. Only 9 industries have a confirmed ID mapping (Apparel & Accessories, Beauty & Personal Care, Education, Food & Beverage, Games, News & Entertainment, Pets, Sports & Outdoor, Travel); choosing any other listed industry logs a warning and keeps every row rather than silently returning nothing.

ℹ️ Disclaimer

TikTok Trending Hashtags Analytics Scraper extracts only publicly available data from TikTok's Creative Center trends board and its public hashtag and video embeds. This tool is intended for lawful use cases only. Users are responsible for complying with TikTok's terms of service and applicable data protection laws in their jurisdiction.