TikTok Hashtag Analytics avatar

TikTok Hashtag Analytics

Pricing

from $30.00 / 1,000 hashtag analytics reports

Go to Apify Store
TikTok Hashtag Analytics

TikTok Hashtag Analytics

Analyze TikTok hashtags: total views, video volume, average and median engagement, top creators and videos, creator concentration, related hashtags, sounds, posting activity, and trend tracking. One report per hashtag.

Pricing

from $30.00 / 1,000 hashtag analytics reports

Rating

0.0

(0)

Developer

Delowar Munna

Delowar Munna

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

4 days ago

Last modified

Categories

Security

Limited permissions

Share

TikTok Hashtag Analytics

Views, engagement, top creators, related hashtags & trend insights — one decision-ready report per TikTok hashtag.

TikTok Hashtag Analytics turns TikTok hashtag data into structured hashtag intelligence. For each hashtag you give it, the Actor reads TikTok's global hashtag counters (total views, total video count), collects a bounded sample of the hashtag's public videos, and returns one analytics report: average and median performance, percentiles, engagement / share / save rates, viral concentration, creator diversity and concentration, related hashtags, top sounds, posting activity, content freshness, format and duration mix, ad / AI-labelled share, and optional trend tracking over time.

It answers questions like:

  • Is #booktok too broad, or still worth targeting?
  • Which of my candidate hashtags has the strongest median video performance?
  • Is one viral post inflating the average?
  • Which creators dominate this hashtag, and how concentrated is it?
  • Which hashtags appear alongside it, and which sounds are most used?
  • Is the hashtag getting more active over time?

No TikTok login, no cookies, no proxy setup.


How is this different from a TikTok Hashtag Scraper?

TikTok Hashtag ScraperTikTok Hashtag Analytics
Question it answersWhich videos use this hashtag?How large, active, concentrated, competitive and performant is this hashtag?
One result rowone videoone hashtag report
Outputraw video recordsmedians, percentiles, rates, concentration, creator mix, related hashtags, sounds, activity, trends

If you need the raw videos, use a hashtag scraper. If you need to decide something about a hashtag, use this Actor. (You can still save the sampled videos alongside the report — see Save the sampled videos below.)


What does one result row represent?

One row = one hashtag analytics report. A run with 5 hashtags returns 5 rows. Hashtags that can't be analyzed (not found, invalid, no videos, provider error) still get a row with a status and statusMessage, so nothing disappears silently — those rows are free.


Global metrics vs. sample metrics

This is the most important thing to understand about the report:

  • global — TikTok's own hashtag-level counters: totalViews, videoCount, description, isCommerce, plus viewsPerVideoGlobal (totalViews / videoCount, a coarse aggregate, not a prediction of the views a new video will get). These describe the whole hashtag.
  • Everything else (performance, concentration, creators, activity, content, sounds, topCreators, topVideos, relatedHashtags, topSounds) is computed from the bounded video sample.

TikTok's hashtag video feed exposes a bounded, ranked sample, not every video that ever used the hashtag. So medianViews, topCreators, relatedHashtags or the format mix describe the observed sample, not the entire TikTok hashtag universe. Activity fields are deliberately named sampleVideosLast24h, sampleVideosLast7d… for the same reason: they count videos in the sample, not TikTok-wide publishing volume.

What does BOUNDED_SAMPLE mean?

coverage.status tells you how the sample ended:

StatusMeaning
BOUNDED_SAMPLEThe requested number of videos was collected. It is still a sample, never the full hashtag.
LIMITEDTikTok's feed (or your date filter) ran out before the requested size.
PARTIALAn upstream error cut the sample short. The report says so in statusMessage.
NO_RESULTSNo videos were returned.

There is deliberately no FULL status: the Actor never claims to have seen every video using a hashtag.


What's in a report

SectionFields (highlights)
IdentityinputHashtag (as you typed it), hashtag (canonical, lower-case, no #), hashtagId, hashtagUrl, region, mode, status
globaltotalViews, videoCount, description, isCommerce, viewsPerVideoGlobal
samplevideosRequested, videosFetched, duplicatesRemoved, filteredByDate, videosSampled, uniqueCreators, sampleStartAt, sampleEndAt
performanceavg and median views, likes, comments, shares, saves; p25Views, p75Views, p90Views, p90Likes, p90Shares; avg / median engagementRateByViews, saveRateByViews, shareRateByViews
concentrationtop1ViewSharePct, top5ViewSharePct, top10ViewSharePct (viral concentration); topCreatorVideoSharePct, top5CreatorVideoSharePct, top10CreatorVideoSharePct (creator concentration)
creatorsuniqueCreators, creatorDiversityRatio, verifiedCreators, verifiedCreatorSharePct; with enrichment: avg / median / p90 creator followers and the nano → mega tier mix
activityoldestSampleVideoAt, newestSampleVideoAt, sampleVideosLast24h/7d/30d, age buckets (0–1d, 1–7d, 7–30d, 30d+), medianVideoAgeHours, newContentSharePct
contentvideo / photo / slideshow share, avg & median views by format, avg & median duration, duration bands (≤15s, 16–30s, 31–60s, 60s+) with median views & engagement, adSharePct, aiGeneratedSharePct, topLocations
soundsuniqueSounds, originalSoundSharePct, topSoundVideoSharePct, top5SoundVideoSharePct
ListstopCreators[], topVideos[], relatedHashtags[], topSounds[]
signals[]explainable labels such as FRESH_CONTENT, CREATOR_CONCENTRATED, VIRAL_POST_CONCENTRATED (see below)
comparisonCOMPARE mode: this hashtag's rank within the run on 8 metrics
historysaved-snapshot comparisons and trend (TREND mode / comparison periods)
dataQualitycoverage % for views, likes, comments, shares, saves, timestamps, duration, sound, creator followers, ad label, AI label, location
coveragestatus, videosSampled, videosRequested, note

Why median metrics?

TikTok performance is extremely skewed: one viral post can have more views than the other 99 videos combined. An average then describes nobody. The median is the typical video. Every performance metric is returned as both, plus percentiles (p25 / p75 / p90 views), and the concentration section shows how much of the sample's views come from the top 1, 5 and 10 videos — so an outlier is visible rather than hidden.

How is engagement rate calculated?

Per sampled video: engagementRateByViews = (likes + comments + shares) / views. The report gives the average and the median across the sample. Similarly saveRateByViews = saves / views and shareRateByViews = shares / views. These are Coregent-derived indicators from public counters, not official TikTok metrics.

How are top creators identified?

Videos are grouped by creator ID (not username — usernames can change). For each creator in the sample you get videosInSample, sampleViews, sampleLikes, sampleShares and medianVideoViews. The list is ranked by sample views by default; you can rank by videos in the sample, sample likes, or followers (with enrichment).

How is creator concentration calculated?

top5CreatorVideoSharePct = share of the sampled videos posted by the 5 creators with the most videos in the sample (same for top 1 and top 10). creatorDiversityRatio = uniqueCreators / videosSampled (1.0 = every video from a different creator).

All other hashtags used in the sampled captions, excluding the hashtag itself (#BookTok, booktok and BOOKTOK count as one). For each: count (sampled videos using it), sharePct of the sample, sampleViews and medianViews of those videos. They are derived from the sample, not an official TikTok "related" list.

How are top sounds calculated?

Videos are grouped by TikTok's sound ID (not the title — titles repeat). For each sound: videosInSample, sampleViews, sampleEngagement, and whether it's an original sound. originalSoundSharePct shows how much of the sample uses creators' own audio rather than a shared track.

Opportunity signals

Signals are plain thresholds on metrics that are already in the report, so each one is explainable. They need at least 10 sampled videos.

SignalRule
HIGH_ACTIVITY≥ 10% of the sample posted in the last 24 hours
FRESH_CONTENTnewContentSharePct (sample videos < 7 days old) ≥ 50%
MATURE_HASHTAG≥ 70% of the sample is older than 30 days
HIGH_CREATOR_DIVERSITYcreatorDiversityRatio ≥ 0.9
CREATOR_CONCENTRATEDtop5CreatorVideoSharePct ≥ 30%
VIRAL_POST_CONCENTRATEDtop1ViewSharePct ≥ 30%
HIGH_SHARE_RATEmedianShareRateByViews ≥ 0.005
HIGH_SAVE_RATEmedianSaveRateByViews ≥ 0.01
RISING_HASHTAG / DECLINING_HASHTAGtrend classification (below) is RISING / FALLING

Input

FieldDefaultDescription
hashtags["booktok"]Required. booktok, #booktok or https://www.tiktok.com/tag/booktok. Up to 100 per run.
modeSNAPSHOTSNAPSHOT, COMPARE (adds within-run ranks) or TREND (compares with saved history).
videosPerHashtag40Sample size per hashtag, 20–1000. TikTok serves 20 videos per page, so multiples of 20 work best (20, 40, 100, 200, 500, 1000).
videosPublishedAfteremptyOnly analyze videos published on/after a date: 2026-10-01, 7 days ago, 30 days.
regionUSRegion for TikTok's hashtag feed: US, GB, FR, JP, VN or SG.
includeHashtagMetadatatrueGlobal counters (global section).
includeCreatorAnalyticstrueCreator diversity, concentration, verified share, top creators.
includeRelatedHashtagstrueCo-occurring hashtags.
includeSoundAnalyticstrueSound section and top sounds.
includeTopVideostrueMost-viewed sampled videos.
topVideosLimit / topCreatorsLimit / relatedHashtagsLimit / topSoundsLimit10 / 10 / 20 / 10List lengths.
topCreatorsSortBysampleViewssampleViews, videosInSample, sampleLikes or followers.
enrichCreatorProfilesfalseLook up the top creators' profiles to add follower statistics and the creator tier mix (billed per creator profile).
maxCreatorsToEnrich10Creators per hashtag to enrich (most-viewed first).
comparisonPeriods[]PREVIOUS, 7_DAYS, 30_DAYS, 90_DAYS. TREND mode defaults to previous + 7 + 30 days.
trackerKeyemptyName a tracking project; history is kept per tracker key.
saveHistorytrueSave a compact snapshot per report for later trend runs.
includeSampleVideosfalseSave every sampled video to the run's key-value store (HASHTAG_SAMPLE_VIDEOS).
maxConcurrency5Hashtags analyzed in parallel (1–15).

Example inputs

Run with defaults — one hashtag, a 40-video sample, one report:

{
"hashtags": ["booktok"]
}

Compare several hashtags (standard 100-video samples, within-run ranks):

{
"hashtags": ["booktok", "reading", "bookrecommendations"],
"mode": "COMPARE",
"videosPerHashtag": 100
}

Campaign research — recent videos only, deeper sample, follower stats for the top creators:

{
"hashtags": ["brandcampaign", "competitorcampaign"],
"videosPublishedAfter": "30 days ago",
"videosPerHashtag": 200,
"enrichCreatorProfiles": true,
"topCreatorsLimit": 20,
"maxCreatorsToEnrich": 20
}

Benchmark a whole niche — the run behind the screenshot and sample output below: 20 hashtags ranked against each other, follower stats for the top 3 creators of each, history started for later trend runs:

{
"hashtags": ["booktok", "romantasy", "cooking", "recipe", "fitness", "gymtok", "skincare", "makeup", "outfitinspo", "travel",
"dogsoftiktok", "catsoftiktok", "diy", "gardening", "cleantok", "football", "nba", "photography", "learnontiktok", "fashion"],
"mode": "COMPARE",
"videosPerHashtag": 40,
"topVideosLimit": 5,
"topCreatorsLimit": 5,
"relatedHashtagsLimit": 10,
"topSoundsLimit": 5,
"enrichCreatorProfiles": true,
"maxCreatorsToEnrich": 3,
"comparisonPeriods": ["PREVIOUS"],
"trackerKey": "readme-demo"
}

Historical tracking — schedule this daily or weekly:

{
"hashtags": ["aitools", "generativeai"],
"mode": "TREND",
"trackerKey": "ai-hashtags",
"videosPerHashtag": 100,
"comparisonPeriods": ["PREVIOUS", "7_DAYS", "30_DAYS"]
}

Output

Every dataset tab shows the same rows (one report per hashtag), with a different set of columns. The samples below are real records from the 20-hashtag Benchmark a whole niche run above (2026-11-02, US). Each shows the fields that tab displays, with lists cut to one or two items.

Overview

Overview table view

{
"hashtag": "catsoftiktok",
"status": "SUCCESS",
"global": { "totalViews": 774398775128, "videoCount": 58454065 },
"sample": { "videosSampled": 40 },
"performance": { "medianViews": 17241483, "avgViews": 31701798, "medianLikes": 3172280, "medianEngagementRateByViews": 0.1998 },
"creators": { "uniqueCreators": 39 },
"concentration": { "top5ViewSharePct": 46.6 },
"activity": { "newContentSharePct": 5 },
"signals": ["MATURE_HASHTAG", "HIGH_CREATOR_DIVERSITY", "HIGH_SHARE_RATE", "HIGH_SAVE_RATE"],
"coverage": { "status": "BOUNDED_SAMPLE" },
"hashtagUrl": "https://www.tiktok.com/tag/catsoftiktok",
"scrapedAt": "2026-11-02T04:25:32.852Z"
}

Performance

The average is about 21% above the median, the 90th-percentile video has 2.5× the median's views, and the top 10 videos hold 56.5% of the sample's views:

{
"hashtag": "recipe",
"sample": { "videosSampled": 40 },
"performance": {
"avgViews": 14346776, "medianViews": 11819738, "p25Views": 3906346, "p75Views": 17548694, "p90Views": 30004887,
"avgLikes": 662394, "medianLikes": 379861, "avgComments": 3962, "medianComments": 1554,
"avgShares": 110242, "medianShares": 80214, "avgSaves": 234688, "medianSaves": 132538,
"medianEngagementRateByViews": 0.0467, "medianShareRateByViews": 0.0064, "medianSaveRateByViews": 0.0142
},
"concentration": { "top1ViewSharePct": 10.4, "top10ViewSharePct": 56.5 }
}

Creators

A creator-concentrated hashtag: the official @nba account posted 6 of the 40 sampled videos. The follower counts come from creator enrichment:

{
"hashtag": "nba",
"creators": { "uniqueCreators": 26, "creatorDiversityRatio": 0.65, "verifiedCreatorSharePct": 34.6, "medianCreatorFollowers": 1678617, "creatorsEnriched": 3 },
"concentration": { "topCreatorVideoSharePct": 15, "top5CreatorVideoSharePct": 45, "top10CreatorVideoSharePct": 60 },
"topCreators": [
{ "username": "nba", "followers": 27417507, "tier": "MEGA", "verified": true, "videosInSample": 6, "sampleViews": 44007645 },
{ "username": "houseofdunk", "followers": 1089766, "tier": "MEGA", "verified": false, "videosInSample": 1, "sampleViews": 41979440 }
]
}

Content & sounds

{
"hashtag": "outfitinspo",
"activity": { "sampleVideosLast24h": 6, "sampleVideosLast7d": 10, "medianVideoAgeHours": 554.6 },
"content": { "videoSharePct": 100, "slideshowSharePct": 0, "medianDurationSeconds": 14.2, "adSharePct": 0, "aiGeneratedSharePct": 5 },
"sounds": { "uniqueSounds": 40, "originalSoundSharePct": 85 },
"relatedHashtags": [
{ "hashtag": "fyp", "count": 12, "sharePct": 30, "medianViews": 666195 },
{ "hashtag": "ootd", "count": 9, "sharePct": 22.5, "medianViews": 405509 }
],
"topSounds": [
{ "musicId": "7141385471120886533", "title": "original sound - xjustmxl", "author": "mel 🎸⚡️", "original": true, "videosInSample": 1, "sampleViews": 16458852 }
]
}

In COMPARE mode every report is ranked against the other hashtags in the run (1 = highest). #catsoftiktok ranked 1st of the 20 for median views, median engagement rate and share rate. This was the tracker's first run, so the history comparison says INSUFFICIENT_HISTORY until a later run has a snapshot to compare against:

{
"hashtag": "catsoftiktok",
"mode": "COMPARE",
"history": {
"trend": "INSUFFICIENT_HISTORY",
"trendBasis": null,
"comparisonCompatibility": "NO_HISTORY",
"snapshotsStored": 0,
"historySaved": true,
"comparisons": { "PREVIOUS": { "status": "INSUFFICIENT_HISTORY" } }
},
"comparison": {
"hashtagsCompared": 20,
"ranks": { "totalViews": 9, "videoCount": 8, "medianViews": 1, "medianEngagementRate": 1, "creatorDiversity": 2, "newContentShare": 15, "shareRate": 1, "saveRate": 3 }
},
"signals": ["MATURE_HASHTAG", "HIGH_CREATOR_DIVERSITY", "HIGH_SHARE_RATE", "HIGH_SAVE_RATE"],
"scrapedAt": "2026-11-02T04:25:32.852Z"
}

On a later run with the same trackerKey and sample settings, history.comparisons.PREVIOUS returns "status": "OK" with totalViewsDelta, videoCountDelta, medianViewsDelta and the other deltas described in the FAQ.

Full report

The complete #booktok record from the same run (lists cut to one or two items, description shortened):

{
"rowType": "tiktok_hashtag_analytics",
"status": "SUCCESS",
"statusMessage": null,
"mode": "COMPARE",
"inputHashtag": "booktok",
"hashtag": "booktok",
"hashtagId": "1622962893630470",
"hashtagUrl": "https://www.tiktok.com/tag/booktok",
"region": "US",
"global": {
"totalViews": 563687245637,
"videoCount": 88399598,
"description": "Calling all book creators! Share your favorite reads, recomm…",
"isCommerce": false,
"viewsPerVideoGlobal": 6377,
"source": "tiktok_hashtag_metadata"
},
"sample": {
"sampleMode": "TOP_OR_AVAILABLE",
"videosRequested": 40,
"videosFetched": 40,
"duplicatesRemoved": 0,
"filteredByDate": 0,
"videosPublishedAfter": null,
"videosSampled": 40,
"uniqueCreators": 38,
"sampleStartAt": "2023-08-23T15:45:51.000Z",
"sampleEndAt": "2026-11-01T17:04:58.000Z"
},
"performance": {
"totalSampleViews": 207071043,
"avgViews": 5176776,
"medianViews": 2508752,
"p25Views": 567294,
"p75Views": 6751075,
"p90Views": 16294187,
"avgLikes": 598680,
"medianLikes": 300704,
"avgComments": 2487,
"medianComments": 1443,
"avgShares": 45341,
"medianShares": 17930,
"avgSaves": 44012,
"medianSaves": 19221,
"p90Likes": 1180904,
"p90Shares": 109709,
"avgEngagementRateByViews": 0.1274,
"medianEngagementRateByViews": 0.1223,
"avgSaveRateByViews": 0.0119,
"medianSaveRateByViews": 0.0071,
"avgShareRateByViews": 0.0092,
"medianShareRateByViews": 0.0071
},
"concentration": {
"top1ViewSharePct": 13.7,
"top5ViewSharePct": 49,
"top10ViewSharePct": 70.9,
"topCreatorVideoSharePct": 5,
"top5CreatorVideoSharePct": 17.5,
"top10CreatorVideoSharePct": 30
},
"creators": {
"uniqueCreators": 38,
"creatorDiversityRatio": 0.95,
"verifiedCreators": 4,
"verifiedCreatorSharePct": 10.5,
"creatorsWithFollowerCount": 3,
"avgCreatorFollowers": 641233,
"medianCreatorFollowers": 24320,
"p90CreatorFollowers": 1509786,
"nanoCreatorSharePct": 0,
"microCreatorSharePct": 66.7,
"midCreatorSharePct": 0,
"macroCreatorSharePct": 0,
"megaCreatorSharePct": 33.3,
"topCreatorsRankedBy": "sampleViews",
"creatorsEnriched": 3,
"followerSource": "creator_profile_enrichment"
},
"activity": {
"oldestSampleVideoAt": "2023-08-23T15:45:51.000Z",
"newestSampleVideoAt": "2026-11-01T17:04:58.000Z",
"sampleVideosLast24h": 2,
"sampleVideosLast7d": 4,
"sampleVideosLast30d": 6,
"videosAge0to1d": 2,
"videosAge1to7d": 2,
"videosAge7to30d": 2,
"videosAge30dPlus": 34,
"medianVideoAgeHours": 3007,
"newContentSharePct": 10
},
"content": {
"videoSharePct": 100,
"photoPostSharePct": 0,
"slideshowSharePct": 0,
"avgViewsByFormat": {
"video": 5176776,
"photo": null,
"slideshow": null
},
"medianViewsByFormat": {
"video": 2508752,
"photo": null,
"slideshow": null
},
"avgDurationSeconds": 60.8,
"medianDurationSeconds": 15,
"durationBands": [
{
"band": "0-15s",
"videos": 21,
"sharePct": 52.5,
"medianViews": 2972742,
"medianEngagementRateByViews": 0.1398
}
],
"adVideoCount": 0,
"adSharePct": 0,
"aiGeneratedVideoCount": 0,
"aiGeneratedSharePct": 0,
"topLocations": [
{
"location": "US",
"videos": 20,
"sharePct": 50
},
{
"location": "GB",
"videos": 14,
"sharePct": 35
}
]
},
"sounds": {
"uniqueSounds": 40,
"originalSoundSharePct": 70,
"topSoundVideoSharePct": 2.5,
"top5SoundVideoSharePct": 12.5
},
"topCreators": [
{
"username": "therealemilyea1",
"creatorId": "63845873289306112",
"nickname": "Emily EA",
"profileUrl": "https://www.tiktok.com/@therealemilyea1",
"followers": 24320,
"verified": false,
"tier": "MICRO",
"videosInSample": 1,
"sampleViews": 28342534,
"sampleLikes": 4598969,
"sampleShares": 108376,
"medianVideoViews": 28342534
}
],
"topVideos": [
{
"videoId": "7634733634385235230",
"url": "https://www.tiktok.com/@therealemilyea1/video/7634733634385235230",
"caption": "Booktok hates to see us coming #viral #trend #BookTok ",
"createdAt": "2026-05-01T01:46:03.000Z",
"views": 28342534,
"likes": 4598969,
"comments": 5307,
"shares": 108376,
"saves": 159072,
"engagementRateByViews": 0.1663,
"durationSeconds": 7.5,
"format": "video",
"creator": {
"username": "therealemilyea1",
"creatorId": "63845873289306112",
"verified": false
},
"music": {
"musicId": "7624368171760257800",
"title": "No One Else",
"author": "prodshushy"
},
"hashtags": [
"viral",
"trend",
"booktok"
]
}
],
"relatedHashtags": [
{
"hashtag": "fyp",
"count": 12,
"sharePct": 30,
"sampleViews": 38530470,
"medianViews": 2716130,
"hashtagUrl": "https://www.tiktok.com/tag/fyp"
},
{
"hashtag": "bookish",
"count": 7,
"sharePct": 17.5,
"sampleViews": 8241828,
"medianViews": 574558,
"hashtagUrl": "https://www.tiktok.com/tag/bookish"
}
],
"relatedHashtagsDistinct": 84,
"topSounds": [
{
"musicId": "7624368171760257800",
"title": "No One Else",
"author": "prodshushy",
"original": false,
"videosInSample": 1,
"sampleViews": 28342534,
"sampleEngagement": 4712652
}
],
"signals": [
"MATURE_HASHTAG",
"HIGH_CREATOR_DIVERSITY",
"HIGH_SHARE_RATE"
],
"comparison": {
"hashtagsCompared": 20,
"ranks": {
"totalViews": 12,
"videoCount": 4,
"medianViews": 9,
"medianEngagementRate": 5,
"creatorDiversity": 5,
"newContentShare": 10,
"shareRate": 6,
"saveRate": 11
}
},
"history": {
"trackerKey": "readme-demo",
"snapshotsStored": 0,
"compatibleSnapshots": 0,
"comparisonCompatibility": "NO_HISTORY",
"comparisonCompatibilityNote": null,
"comparisons": {
"PREVIOUS": {
"status": "INSUFFICIENT_HISTORY"
}
},
"trend": "INSUFFICIENT_HISTORY",
"trendBasis": null,
"historySaved": true,
"historyNote": null
},
"dataQuality": {
"viewCoveragePct": 100,
"likeCoveragePct": 100,
"commentCoveragePct": 100,
"shareCoveragePct": 100,
"saveCoveragePct": 100,
"timestampCoveragePct": 100,
"durationCoveragePct": 100,
"soundCoveragePct": 100,
"creatorFollowerCoveragePct": 7.9,
"adLabelCoveragePct": 100,
"aiLabelCoveragePct": 100,
"locationCoveragePct": 100
},
"coverage": {
"status": "BOUNDED_SAMPLE",
"videosSampled": 40,
"videosRequested": 40,
"note": "Bounded sample of 40 videos from TikTok's hashtag feed — not every video using the hashtag."
},
"configHash": "ce183453d3d5",
"tikhubCalls": 6,
"scrapedAt": "2026-11-02T04:25:01.703Z",
"runId": "GKAC6xkPmuKuVr2g1"
}

A run summary (hashtags requested / succeeded / failed, videos requested / sampled / unique, reports created, trend comparisons, history snapshots saved) is stored in the run's key-value store as RUN_SUMMARY.


FAQ

Can I compare multiple hashtags? Yes. Put them all in hashtags and choose COMPARE mode. Each report gets comparison.ranks — its rank within the run (1 = highest) on total views, video count, median views, median engagement rate, creator diversity, new-content share, share rate and save rate. There is no single "best hashtag" score; you see the rank on every dimension.

Can I track hashtags over time? Yes. Every successful report saves a compact snapshot (unless you turn saveHistory off). Run TREND mode on a schedule and each report gets history.comparisons against the previous run and/or about 7, 30 or 90 days ago: totalViewsDelta, videoCountDelta, videoCountGrowthPct, medianViewsDelta, medianEngagementRateDelta, creatorDiversityDelta, newContentShareDelta. History starts with your first run; until a snapshot that old exists the period says INSUFFICIENT_HISTORY. Use trackerKey to keep separate histories per project.

Snapshots are only compared when they were taken with the same sample settings (sample size, date filter, region, enrichment) — history.comparisonCompatibility says HIGH or LOW. Runs less than 30 minutes apart don't create duplicate snapshots, and partial (error-truncated) samples are never saved.

What is trend momentum? history.trend is RISING, STABLE, FALLING or INSUFFICIENT_HISTORY, from the longest requested period that has a baseline. RISING = the hashtag's global video count grew by ≥ 0.5% per day and the sample is at least as fresh as before. FALLING = video-count growth ≤ 0.05% per day and the sample got less fresh. Anything in between is STABLE. It is a Coregent-derived classification, not TikTok trend data. Note that totalViewsDelta is the change in TikTok's cumulative counter between two observations — it is not "views earned by videos posted this week".

Does it require a TikTok login or cookies? No. It uses public TikTok data only, with no customer login, cookies or proxy configuration.

Does it use TikHub? Yes. TikTok data is fetched through TikHub's hosted TikTok API, browserlessly. That's why there's nothing to configure and no proxy section.

Are save / share metrics always available? Usually, but not guaranteed for every video. Check dataQuality — e.g. saveCoveragePct: 85 means 15% of the sampled videos didn't expose a save count.

How are missing metrics handled? Missing is never counted as zero. A median or average is computed only over the videos that carry that value, and dataQuality gives the coverage. A metric with no known values is null. Example: TikTok's hashtag feed doesn't include creator follower counts, so follower statistics stay null (with creatorFollowerCoveragePct: 0) unless you turn on creator enrichment — they're never reported as "0 followers".

What about AI-generated content and ads? aiGeneratedSharePct uses only TikTok's own AI-generated label — the Actor never infers it — and is computed over videos where TikTok exposed the label (aiLabelCoveragePct). adSharePct uses TikTok's ad flag the same way.

What's in topLocations? The creation region TikTok attaches to each video. It is creator/video metadata, not audience geography.

Can I get the sampled videos too? Turn on includeSampleVideos. Every normalized sampled video is saved in the run's key-value store as HASHTAG_SAMPLE_VIDEOS (grouped by hashtag). The dataset stays one report per hashtag.

What happens if one hashtag fails? The run continues. The failed hashtag gets a row with a status such as HASHTAG_NOT_FOUND, INVALID_HASHTAG, NO_RESULTS, RATE_LIMITED, VIDEOS_UNAVAILABLE or PROVIDER_ERROR, and isn't charged. Only exact hashtag names are analyzed: if TikTok has no hashtag with exactly that name, you get HASHTAG_NOT_FOUND rather than a report about a similar-sounding tag.

Can I use it via API or MCP? Yes — like any Apify Actor, run it from the Apify API, the JavaScript / Python clients, integrations (Make, Zapier, n8n…), or as a tool for AI agents through the Apify MCP server. Example:

curl -X POST "https://api.apify.com/v2/acts/coregent~tiktok-hashtag-analytics/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"hashtags": ["booktok", "reading"], "mode": "COMPARE", "videosPerHashtag": 100}'

How does pricing work?

Pay per event — you pay for analytics reports delivered, not for compute or proxies:

  • Hashtag analysis — charged per delivered report, one event per started 100 sampled videos. A report on up to 100 videos is one event; 101–200 videos is two; a 1,000-video report is ten.
  • Creator enrichment (optional) — charged per creator profile looked up when enrichCreatorProfiles is on.

Not charged: hashtags that are not found, invalid, return no videos or fail; history snapshots; the run summary; the saved sample videos. A report whose sample an upstream error cut short (PARTIAL_SAMPLE) is charged only for the videos it actually analyzed. See the Pricing tab for current rates — this README deliberately doesn't quote figures, because live prices are set on the platform. If you set a maximum cost per run, the Actor respects it: it shrinks or skips samples before doing work it couldn't charge for.


Notes and limitations

  • Unofficial product; not affiliated with, endorsed by, or connected to TikTok or ByteDance.
  • Hashtag video feeds are bounded, ranked samples. Sample analytics do not represent every TikTok video using the hashtag; global views and video counts are separate TikTok metadata.
  • TikTok's feed is ranked, not chronological: with a strict videosPublishedAfter the sample may be smaller than requested (coverage.status: LIMITED).
  • Creator follower counts change over time and are only available with enrichment.
  • Save / share counts and AI / ad labels may be missing for some videos — see dataQuality.
  • Trend classifications are Coregent-derived. Historical tracking starts only when you begin saving snapshots.
  • The Actor does not provide official TikTok Analytics, a complete hashtag census, audience demographics, reach, impressions, watch time, retention, conversion rates or search volume.
  • Use the data in line with TikTok's terms and applicable data-protection law.