TikTok Video Scraper - Hashtag & Sound Reach
Pricing
$19.99/month + usage
TikTok Video Scraper - Hashtag & Sound Reach
π₯ TikTok Video Scraper - Hashtag & Sound Reach extracts TikTok video data at scale β captions, hashtags, views, likes, comments, shares, sounds, author, publish time & URLs. π Perfect for analytics, trend research, and content planning. β‘ Fast, reliable, CSV/JSON & API-ready exports.
Pricing
$19.99/month + usage
Rating
0.0
(0)
Developer
ScrapeFlow
Maintained by CommunityActor stats
1
Bookmarked
5
Total users
0
Monthly active users
3 days ago
Last modified
Categories
Share
TikTok Video Scraper β Hashtag and Sound Reach
TikTok Video Scraper β Hashtag & Sound Reach turns a TikTok video URL into full post data plus real reach metrics for every hashtag and sound the video uses β total views and video count per hashtag, usage count and metadata per sound β pulled directly from each tag's and sound's own TikTok page. It's built for content strategists who want to know how big a hashtag or sound actually is before using it, trend researchers ranking a video's hashtags by real reach rather than caption order, and social listening teams who need mentions parsed out of captions alongside engagement data. No login is required. Every section below documents an input, an output field, or exactly how reach enrichment is fetched.
What is TikTok Video Scraper β Hashtag & Sound Reach?
This Actor scrapes full TikTok video data from a post URL, then β for every hashtag and sound the video uses β opens that hashtag's or sound's own TikTok page in a headless browser and intercepts the real API response carrying its true view/usage statistics, rather than guessing reach from the single video alone.
Key capabilities, read from the source:
- Real hashtag reach via page interception, not estimation.
collect_reach_stats()navigates to each unique hashtag'stiktok.com/tag/<name>page and intercepts theapi/challenge/detailXHR response TikTok's own page makes, readingviewCountandvideoCountdirectly from TikTok's real numbers β capped at 60 unique hashtags per run to keep enrichment bounded. - Real sound reach the same way. The same interception pattern opens each sound's
tiktok.com/music/<slug>-<id>page and readsapi/music/detailfor usage count, duration, album, and whether it's an original sound. - The more reliable stats field preferred automatically.
_parse_challenge_detail()prefersstatsV2's exact figures overstats, since the comment notesstats.videoCountcan be zero or rounded on the less-precise field. - Hashtags ranked by real reach, not caption order.
rankHashtagsByReachsorts each video'shashtagStats[]by actual view count descending, so the hashtag driving the most real reach for that video surfaces first. - Mentions filled honestly from caption metadata.
extractMentionsparses@mentionsout oftextExtra(type0entries), populating both a simple username list and adetailedMentions[]array with user ID,secUid, and character positions β fields the base extraction otherwise leaves empty. - Residential proxy specifically for tag/sound pages. Reach enrichment routes through a US residential proxy since tag and music pages are more bot-gated than the video page itself; the Actor logs when no residential proxy is available and falls back to a direct attempt.
What data can I extract with TikTok Video Scraper β Hashtag & Sound Reach?
Every field below is read directly from normalize_data(), _parse_challenge_detail(), and _parse_music_detail() in src/main.py β the dataset's default view surfaces 13 of these as table columns.
Video fields
| Field | Example Value | Notes |
|---|---|---|
text / createTimeISO / webVideoUrl | caption / posted date / link | |
diggCount / shareCount / playCount / commentCount / collectCount / repostCount | real engagement stats | |
authorMeta | nested creator identity | followers, verified, bio, etc. |
musicMeta | nested sound identity | musicId, musicName, musicAuthor |
mentions / detailedMentions | ["janedoe"] / full mention objects | Parsed from caption @mentions |
hashtags | array of {id, name, title, cover} |
Reach enrichment fields (new in this variant)
| Field | Example Value | Notes |
|---|---|---|
hashtagStats | array of {name, id, viewCount, videoCount} | One entry per video hashtag, ranked by viewCount when rankHashtagsByReach is on |
soundStats | {musicId, title, authorName, videoCount, duration, album, original} | The video's own sound, with real usage count |
Why not build this yourself?
TikTok publishes no API for hashtag or sound reach at all β the only place this data exists is embedded in the internal XHR calls a real hashtag or sound page makes when a browser loads it, which means genuinely rendering those pages (not just fetching their HTML) and intercepting the specific API responses. Those pages are also more aggressively bot-gated than a plain video page, which is why this Actor routes them through a residential proxy specifically rather than reusing whatever connection worked for the video fetch itself. On top of that, TikTok's own stats fields are inconsistent β videoCount on the less-precise stats object can come back zero or rounded β so reading the wrong field silently produces a wrong number rather than an error.
How to use data extracted from TikTok Video Scraper β Hashtag & Sound Reach?
Content strategy and hashtag selection
Scrape a competitor's or your own recent videos with enrichHashtagStats on and rankHashtagsByReach to see which hashtags are actually driving reach versus which are just along for the ride in the caption.
Sound and audio trend research
Use soundStats.videoCount across a batch of videos to gauge how widely a specific sound is being used before deciding whether to build content around it.
Social listening and mention tracking
Turn on extractMentions to get a structured list of every account a video's caption references, useful for tracking who's being tagged in a content category or campaign.
AI agents and reach-scoring pipelines
Because hashtagStats and soundStats carry real numbers pulled from each tag/sound's own page, an agent can score a video's hashtag strategy directly from the dataset without a separate lookup step.
πΌ Input sample
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
postURLs | Yes | array | TikTok video URLs, one per line. | ["https://www.tiktok.com/@apifyoffice/video/7200360993149553925"] |
enrichHashtagStats | No | boolean | Look up each hashtag's real view/video count. Default true. | true |
enrichSoundStats | No | boolean | Look up the video's sound's real usage stats. Default true. | true |
extractMentions | No | boolean | Parse @mentions from the caption. Default true. | true |
rankHashtagsByReach | No | boolean | Sort hashtagStats[] by view count descending. Requires hashtag reach on. Default true. | true |
scrapeRelatedVideos | No | boolean | Also pull TikTok's related videos for each URL. Default false. | false |
resultsPerPage | No | integer | Related videos per URL, when enabled. TikTok typically caps at 12-16. Default 10. | 10 |
{"postURLs": ["https://www.tiktok.com/@apifyoffice/video/7200360993149553925"],"enrichHashtagStats": true,"enrichSoundStats": true,"rankHashtagsByReach": true}
Common pitfall: this Actor's charged event is named item_result, not row_result β distinct from the naming convention used by most other Actors in this catalogue. Check for item_result specifically in your run's cost breakdown.
π½ Output sample
Output is one JSON row per video, pushed to the run's default dataset and charged as one item_result event per row.
{"id": "7200360993149553925","text": "Check out this new feature! #producttips #howto","diggCount": 4500,"playCount": 125000,"commentCount": 210,"authorMeta": { "name": "apifyoffice", "fans": 12000 },"mentions": ["janedoe"],"hashtagStats": [{ "name": "producttips", "id": "12345", "viewCount": 85000000, "videoCount": 12400 },{ "name": "howto", "id": "67890", "viewCount": 450000000, "videoCount": 89000 }],"soundStats": {"musicId": "6789012345","title": "Original Sound","authorName": "apifyoffice","videoCount": 342,"original": true},"webVideoUrl": "https://www.tiktok.com/@apifyoffice/video/7200360993149553925"}
How do you filter and target specific videos and hashtags?
Reach enrichment is the primary value-add β leave it on for real numbers. enrichHashtagStats/enrichSoundStats are what distinguish this Actor from a plain video scraper; turning them off returns only the base video data with no reach context.
Ranked hashtags surface what actually matters. rankHashtagsByReach reorders hashtagStats[] so the highest-view hashtag comes first β useful when a video's caption lists 5+ hashtags and you want to know which one is genuinely carrying reach.
Related videos expand scope past your input list. scrapeRelatedVideos is a separate feature from reach enrichment β use it when you want to discover more videos in the same content space starting from a single seed URL.
Three real examples:
{ "postURLs": ["https://www.tiktok.com/@brand/video/123"], "enrichHashtagStats": true, "rankHashtagsByReach": true }
Single-video hashtag-reach audit, ranked by real view count.
{ "postURLs": ["https://www.tiktok.com/@creator/video/456"], "enrichSoundStats": true, "enrichHashtagStats": false }
Sound-usage-only lookup, skipping hashtag enrichment for speed.
{ "postURLs": ["https://www.tiktok.com/@brand/video/789"], "scrapeRelatedVideos": true, "resultsPerPage": 15 }
Seed-video discovery expanded into 15 related videos.
βΆοΈ Want to try other scrapers?
| Scraper | What it extracts |
|---|---|
| TikTok Trending Hashtags Scraper β Daily Growth History | Decoded daily popularity sparkline |
| TikTok Trending Hashtags β Trend Creators | Creators driving a trending hashtag |
| TikTok Profile Scraper β Engagement Rate & Posting Cadence | Creator engagement and cadence metrics |
| TikTok Comments Scraper β Full Reply Threads | Nested comment threads with creator-answer detection |
How to extract TikTok hashtag and sound reach data programmatically
This Actor runs as a standard Apify Actor call β one API call in, structured JSON dataset out, using your Apify API token.
Python example
from apify_client import ApifyClientclient = ApifyClient("<YOUR_API_TOKEN>")run = client.actor("<YOUR_USERNAME>/tiktok-video-scraper-hashtag-sound-reach").call(run_input={"postURLs": ["https://www.tiktok.com/@apifyoffice/video/7200360993149553925"],"enrichHashtagStats": True,"rankHashtagsByReach": True,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():for h in item.get("hashtagStats") or []:print(h["name"], h["viewCount"])
Export to spreadsheets or CRM
Every dataset supports one-click CSV/Excel export from the Apify Console. hashtagStats is a nested array, so most spreadsheet workflows will want to iterate it via the API for per-hashtag analysis.
Is it legal to scrape TikTok video and hashtag data?
Scraping publicly visible TikTok videos, hashtag pages, and sound pages is generally lawful, since this data is published for anyone to view without logging in β the underlying legal question was tested directly in hiQ Labs v. LinkedIn (9th Cir.), which held that scraping public, non-password-protected data does not violate the U.S. Computer Fraud and Abuse Act. Creator identity fields are business-relevant public data, but consult legal counsel for commercial applications, particularly around large-scale storage of mentioned-user data.
β FAQ
Why does hashtag reach enrichment need a proxy when the video fetch doesn't?
Hashtag and sound pages are more aggressively bot-gated than a plain video page β this Actor routes them through a US residential proxy specifically for that reason, while the base video fetch works without one.
Is hashtagStats view count the same as what's shown on the hashtag page?
Yes β it's read directly from the same api/challenge/detail response TikTok's own hashtag page fetches when a browser loads it, preferring the more precise statsV2 figures over the less reliable stats object.
Why is there a 60-hashtag cap on enrichment?
collect_reach_stats() caps unique hashtags and sounds at 60 per run to keep enrichment browser time bounded β a batch with more than 60 distinct hashtags across all videos will only enrich the first 60 encountered.
Does rankHashtagsByReach change which hashtags are included?
No β it only reorders hashtagStats[] by view count descending; every hashtag the video actually uses is still included, just sorted so the highest-reach one comes first.
What happens if I only need sound stats, not hashtag stats?
Turn enrichHashtagStats off and leave enrichSoundStats on β each enrichment type is independently toggleable, so you only pay the extra browser-navigation cost for the reach data you actually need.
How does this compare to other TikTok video scrapers?
As observed on the Apify Store on 2026-07-26, lurkapi/tiktok-scraper-all-in-one and newpo/super-tiktok-scraper both extract TikTok video data, but neither documents fetching real hashtag/sound reach statistics from each tag's and sound's own page β that enrichment layer is unique to this Actor.
Does this work with AI agent frameworks?
Yes β call it as a standard HTTP endpoint via the Apify API from any agent framework capable of making an API call; there's no MCP-specific integration for this Actor.
Conclusion
TikTok Video Scraper β Hashtag & Sound Reach turns a video URL into full post data plus real, page-sourced reach statistics for every hashtag and sound it uses β not estimated, not guessed. It fits content strategy, trend research, and mention tracking that need to know a hashtag or sound's true scale before building around it. Start a run from the Apify Console or the Apify API with your target video URLs to get your first reach-enriched export.
