TikTok Video Scraper - Hashtag & Sound Reach avatar

TikTok Video Scraper - Hashtag & Sound Reach

Pricing

$19.99/month + usage

Go to Apify Store
TikTok Video Scraper - Hashtag & Sound Reach

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

ScrapeFlow

Maintained by Community

Actor stats

1

Bookmarked

5

Total users

0

Monthly active users

3 days ago

Last modified

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's tiktok.com/tag/<name> page and intercepts the api/challenge/detail XHR response TikTok's own page makes, reading viewCount and videoCount directly 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 reads api/music/detail for usage count, duration, album, and whether it's an original sound.
  • The more reliable stats field preferred automatically. _parse_challenge_detail() prefers statsV2's exact figures over stats, since the comment notes stats.videoCount can be zero or rounded on the less-precise field.
  • Hashtags ranked by real reach, not caption order. rankHashtagsByReach sorts each video's hashtagStats[] by actual view count descending, so the hashtag driving the most real reach for that video surfaces first.
  • Mentions filled honestly from caption metadata. extractMentions parses @mentions out of textExtra (type 0 entries), populating both a simple username list and a detailedMentions[] 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

FieldExample ValueNotes
text / createTimeISO / webVideoUrlcaption / posted date / link
diggCount / shareCount / playCount / commentCount / collectCount / repostCountreal engagement stats
authorMetanested creator identityfollowers, verified, bio, etc.
musicMetanested sound identitymusicId, musicName, musicAuthor
mentions / detailedMentions["janedoe"] / full mention objectsParsed from caption @mentions
hashtagsarray of {id, name, title, cover}

Reach enrichment fields (new in this variant)

FieldExample ValueNotes
hashtagStatsarray 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

ParameterRequiredTypeDescriptionExample Value
postURLsYesarrayTikTok video URLs, one per line.["https://www.tiktok.com/@apifyoffice/video/7200360993149553925"]
enrichHashtagStatsNobooleanLook up each hashtag's real view/video count. Default true.true
enrichSoundStatsNobooleanLook up the video's sound's real usage stats. Default true.true
extractMentionsNobooleanParse @mentions from the caption. Default true.true
rankHashtagsByReachNobooleanSort hashtagStats[] by view count descending. Requires hashtag reach on. Default true.true
scrapeRelatedVideosNobooleanAlso pull TikTok's related videos for each URL. Default false.false
resultsPerPageNointegerRelated 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?

ScraperWhat it extracts
TikTok Trending Hashtags Scraper β€” Daily Growth HistoryDecoded daily popularity sparkline
TikTok Trending Hashtags β€” Trend CreatorsCreators driving a trending hashtag
TikTok Profile Scraper β€” Engagement Rate & Posting CadenceCreator engagement and cadence metrics
TikTok Comments Scraper β€” Full Reply ThreadsNested 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 ApifyClient
client = 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.

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.