TikTok Trending Hashtags Scraper With Exact View & Post Counts avatar

TikTok Trending Hashtags Scraper With Exact View & Post Counts

Pricing

$19.99/month + usage

Go to Apify Store
TikTok Trending Hashtags Scraper With Exact View & Post Counts

TikTok Trending Hashtags Scraper With Exact View & Post Counts

TikTok Trending Hashtags Scraper With Exact View & Post Counts Scrape trending TikTok hashtags with real-time metrics, related tags, growth data, and top content insights. This actor delivers structured JSON or CSV, perfect for tracking trends, researching audiences.

Pricing

$19.99/month + usage

Rating

0.0

(0)

Developer

Scraper Engine

Scraper Engine

Maintained by Community

Actor stats

1

Bookmarked

9

Total users

0

Monthly active users

16 hours ago

Last modified

Share

Scrape TikTok trending hashtags and resolve every one of them to its exact lifetime view count and post count — real integers, not the rounded strings TikTok prints on screen.

TikTok's Creative Center trends page renders hashtag volume as 212.2K posts and 188.7M views. Those are display strings. You cannot sort on them, you cannot threshold on them, and you cannot divide one by the other. This TikTok hashtag scraper takes each hashtag one step further, to TikTok's public challenge endpoint, and returns the true numbers — 492043129 views, 255650 posts — plus the saturation and efficiency metrics that only exact integers make possible.

These are two different measurements, and this actor labels them as such. The Creative Center figure is scoped to the market whose leaderboard you are reading; statsV2 is the hashtag's global lifetime total. #rainbowpfp genuinely shows 188.7M on the US leaderboard while its global lifetime count is 492,043,129. Both numbers are returned, in separately labelled columns. Neither is a rounding of the other, and the actor never presents one as the other.

What this TikTok hashtag scraper does

  • Exact global lifetime view & post counts. Every hashtag is resolved to viewCountExact and videoCountExact from TikTok's statsV2 payload — real integers, worldwide, all-time. The market-scoped strings TikTok displays are kept alongside them in their own columns.
  • Real challenge IDs and canonical URLs. Each row carries TikTok's own challengeId and a working https://www.tiktok.com/tag/<name> link.
  • Views-per-post efficiency. viewsPerPost = exact global views ÷ exact global posts. A hashtag with 1.2B views across 106K posts behaves very differently from one with 828M views across 2.1M posts, and only the exact integers reveal it.
  • Saturation against the run set. saturationVsRunMedian places each hashtag against the median views-per-post of the same run, with saturationSampleSize printed beside it so the ratio is never read out of context.
  • Post volume tiers. postVolumeTier buckets each hashtag as micro / small / mid / large / massive from its absolute post count.
  • Volume threshold filters. minViewCount and minPostCount filter on the real integers — impossible against a string like 188.7M.
  • Bring your own hashtag list. Measure any hashtags you name, trending or not. This is the volume path, and it needs no trending dependency at all.
  • Trending discovery by country. Read TikTok's current leaderboard for any of 72 markets over a 7-day or 30-day window.
  • Uncharged accounting row on every run. Records what was measured, what resolved, and what each filter removed, so a filtered or partially blocked run is auditable rather than mysterious.

Honest limits — read this before you buy

This actor runs fully logged out, with no TikTok account and no cookies. That is deliberate and it is what keeps it reliable. It also imposes two hard limits that competing TikTok trending hashtag scrapers tend not to state:

  1. Trending discovery returns exactly 3 hashtags per market and window. Rows 4 and beyond sit behind TikTok's "Log in to view more" wall. Verified against every pagination, page-size and sort parameter TikTok's page accepts. No public scraper can return a genuine "Top 100" logged out. If you need volume, use the custom hashtag list, which is unbounded.
  2. Only the 7-day and 30-day windows are real. TikTok's UI still advertises 120 days; it silently serves the 7-day data for it. The 365-day and 3-year options do not exist at all. This actor therefore offers 7 and 30 only, and normalises any legacy value with a warning in the log rather than pretending.

Fields that TikTok does not expose to logged-out traffic are not shipped as empty columns: no rank-change arrow, no "new to top 100" flag, no promoted flag, no audience demographics, no related hashtags, no top creators. Each of those is login-walled, and an always-blank column is worse than an absent one.

Use cases

  • Hashtag research for TikTok marketing — find which trending hashtags actually convert attention into views per post before you commit a content calendar to them.
  • Competitive and campaign benchmarking — track the exact lifetime volume of your branded hashtag against a set of rivals in one run.
  • Content strategy and saturation analysis — a hashtag with 2.1M posts is a crowded room; the tier and saturation columns tell you which ones you can still rank in.
  • Social listening and trend datasets — export to CSV, JSON or Excel, or pull the dataset straight from the Apify API into a warehouse.
  • Agency reporting — real integers survive a spreadsheet; 188.7M does not.

Input

FieldKeyTypeDefaultWhat it does
🎯 Measurement SourcemeasureModeenumtrendingtrending (top 3 per market/window), custom (your list only), trending_and_custom (both, de-duplicated)
#️⃣ My HashtagshashtagsToMeasurearray[]Hashtags to measure, with or without #. Required for custom mode
🌍 MarketmarketCodeenumUSWhich country's trending leaderboard to read (72 markets)
🕐 Trending WindowwindowDaysenum77 or 30. These are the only real TikTok windows
🔢 Resolve Exact View & Post CountsresolveExactCountsbooleantrueFetch the true global lifetime integers. Off = exact columns stay null, never guessed
🧭 Exact-Count RoutestatsRouteCountryenumautoResidential exit region for the exact-count lookup. auto tries CA, AU, NZ, JP, SG, BR, MX until one answers
⚡ Parallel Stat LookupsstatsConcurrencyinteger6Concurrent exact-count lookups, 1–12
👁️ Minimum Lifetime ViewsminViewCountinteger0Drop hashtags below this exact global lifetime view count. 0 disables
📝 Minimum Lifetime PostsminPostCountinteger0Drop hashtags below this exact global lifetime post count. 0 disables
🏷️ Industry Label ContainsindustryContainsstring""Keep only hashtags whose industry label matches, case-insensitive
🛡️ Proxy ConfigurationproxyConfigurationobjectdisabledOptional, for the trending-discovery request. The exact-count lookup always uses its own residential route

Input example

{
"measureMode": "trending_and_custom",
"marketCode": "US",
"windowDays": "7",
"hashtagsToMeasure": ["payday", "rainbowpfp", "fyp"],
"resolveExactCounts": true,
"statsConcurrency": 6,
"minViewCount": 0,
"minPostCount": 0
}

Backward compatibility

Input written for the original TikTok Trending Hashtags Scraper still runs unchanged. result_type, country, top100_period, analytics_period, top100_industry, hashtag_list, hashtags and period are all accepted and mapped onto the interface above; when supplied, they take precedence over the fields on this page. Inputs that TikTok's live surface can no longer honour — top100_new_on_board, total_hashtags, numeric top100_industry IDs — are accepted and reported as ignored in the run log, rather than silently falling back to unfiltered data.

Output

Every hashtag becomes one dataset row.

{
"rowType": "trending",
"hashtagName": "payday",
"rank": 2,
"marketCode": "US",
"marketName": "United States",
"windowDays": 30,
"industryName": "Beauty & Personal Care",
"industryNames": ["Beauty & Personal Care"],
"viewsFormatted": "828.6M",
"postsFormatted": "2.1M",
"viewCountExact": 16810394190,
"videoCountExact": 4403431,
"viewsPerPost": 3817.6,
"viewsPerPostRunMedian": 1924.5,
"saturationVsRunMedian": 1.984,
"saturationSampleSize": 3,
"postVolumeTier": "large",
"isCommerce": false,
"challengeId": "22989",
"hashtagUrl": "https://www.tiktok.com/tag/payday",
"statsSource": "tiktok.com/api/challenge/detail statsV2 (via CA)",
"statsFetchedAt": "2026-07-19T00:00:00Z",
"errorReason": null,
"sourceUrl": "https://ads.tiktok.com/creative/creativeCenter/trends/hashtag?region=US&period=30",
"scrapedAt": "2026-07-19T00:00:00Z"
}

In that row viewsFormatted/postsFormatted are the US leaderboard figures and viewCountExact/videoCountExact are the global lifetime totals — two different measurements, both real.

FieldTypeNotes
rowTypestringtrending, custom, or accounting
hashtagNamestringHashtag without the #. Unicode-safe
ranknumberLeaderboard position, trending rows only. null on custom rows
marketCode / marketNamestringThe resolved market. Never labelled global
windowDaysnumber7 or 30
industryName / industryNamesstring / arrayTikTok tags some hashtags with more than one industry; both are returned
viewsFormatted / postsFormattedstringExactly what TikTok's leaderboard displays for the selected market. Not the same quantity as the exact columns
viewCountExactnumberExact global lifetime views from statsV2
videoCountExactnumberExact global lifetime posts from statsV2
viewsPerPostnumberExact global views ÷ exact global posts. null when either is missing
viewsPerPostRunMediannumberMedian across the run. null below 3 observations
saturationVsRunMediannumberThis hashtag ÷ the run median. null below 3 observations
saturationSampleSizenumberHow many hashtags the median was computed over
postVolumeTierstringmicro / small / mid / large / massive, from the absolute post count
isCommercebooleanTikTok's commerce flag. Genuinely false for nearly every hashtag
challengeIdstringTikTok's own numeric hashtag ID
hashtagUrlstringCanonical tiktok.com/tag/... link
statsSource / statsFetchedAtstringProvenance of the exact counts
errorReasonstringTyped reason when a hashtag could not be resolved
sourceUrl / scrapedAtstringProvenance of the row

Legacy keys hashtag_id, hashtag_name, video_views, publish_cnt, rank, industry_info, country_info, period, rank_diff_type and analytics are also present on every row, carrying the same real values, so existing integrations keep working.

Each run also pushes one uncharged accounting row (rowType: "accounting") recording how many hashtags were measured, how many resolved to exact counts, how many were removed by each filter, and which proxy tier was used — so a heavily filtered run is auditable rather than looking broken. Blocked or unparseable pages likewise produce an uncharged row with a typed errorReason instead of a charged empty result.

Data accuracy notes

Routing. TikTok answers the exact-count endpoint with an empty body for US and EU traffic — including Apify's own datacenter egress — while serving it normally elsewhere. Measured across rotated residential exits: Canada 4/4, Australia 4/4, New Zealand 4/4, Japan 4/4, Singapore 4/4, Brazil 4/4, Mexico 4/4 returned real data; United States 0/8, United Kingdom 0/8, Germany 0/8, Ireland 0/4, Italy 0/4, Spain 0/4, Poland 0/4, India 0/4 returned nothing. The actor therefore routes exact-count lookups through a residential exit in a region that answers, falling through the list until one does. Because the counts are worldwide lifetime totals, the route has no effect on the values.

TikTok's challenge payload contains two stat blocks. stats.videoCount is a hard zero on every hashtag tested and stats.viewCount is rounded — 491400000 where the true figure is 491447586. This actor reads statsV2 exclusively. Where a value is genuinely unavailable it is returned as null; it is never returned as 0.

Compliance

This actor collects only publicly available, logged-out hashtag statistics. It uses no account, no cookies and no credentials. Review TikTok's terms and your local regulations before running it at scale.