TikTok Hashtag Scraper - Videos, Views & Tag Analytics avatar

TikTok Hashtag Scraper - Videos, Views & Tag Analytics

Pricing

Pay per event

Go to Apify Store
TikTok Hashtag Scraper - Videos, Views & Tag Analytics

TikTok Hashtag Scraper - Videos, Views & Tag Analytics

Scrape TikTok hashtags: every video posted under a tag with its caption, author, views, likes, comments and shares, plus the tag's own total views and video count. Filter by date and likes, sort, and download the videos and covers.

Pricing

Pay per event

Rating

0.0

(0)

Developer

SR

SR

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

TikTok Hashtag Scraper: videos, views and tag analytics

Give it hashtags and get two things back. One row per video posted under each tag, with the caption, the author and their follower count, the views, likes, comments and shares, the sound and the post date. And one row per hashtag carrying its total view count, which is the number that tells you whether a tag is worth posting under at all.

No login, no API key, no TikTok developer account.

What you get

Per video: video_id, url, description, created_at, handle, nickname, author_id, author_verified, follower_count, author_video_count, play_count, like_count, comment_count, share_count, collect_count, duration_seconds, width, height, cover_url, play_url, download_url, music_title, music_author, music_id, hashtags, is_ad, and the hashtag that produced the row.

Counts arrive as integers, not as the 1.2M strings the site shows.

Per hashtag: hashtag, hashtag_id, url, description, view_count, is_commerce.

Optional: eight extra author fields (bio, avatar, region, following count, lifetime likes), and downloads of the videos, thumbnails, avatars, sound artwork and photo-post slideshow images into the run's key-value store.

Why a hashtag is worth measuring

A hashtag is the only free distribution lever on TikTok. Which tag a post carries decides which feed it is eligible for, and the difference between a tag with 27 billion views and one with 200 billion is the difference between a niche and a firehose.

Two questions this answers and the app does not. Which accounts actually get reach under a tag, which is the video rows grouped by handle and sorted by views. And whether a tag is still alive, which is the post dates on the rows: a tag whose top results are two years old is a tag nobody is posting under now.

The one thing to know before you run it

The videos come from TikTok's search, not from the hashtag page's own feed, because that feed is closed. The endpoint the hashtag page uses to list its videos answers with an empty response. That is not a limitation of this Actor: TikTok's own hashtag page, loaded in a real browser with every parameter it normally sends, gets the same empty response and renders zero videos.

So a tag's videos are fetched by searching for the tag, which does work, and the run summary reports videosFromSearch rather than implying a feed that does not exist. In practice the result is the same set of videos you would see on the tag page, ranked TikTok's way.

video_count on a hashtag row is empty on purpose. TikTok still sends the field and it reads 0 on every tag tested, including #booktok at 551.1 billion views and #fyp at 128 trillion. Publishing that zero would put a sortable column in your export claiming the biggest tags on the platform have no videos in them. view_count is live and correct, and that is the figure the hashtag row is for.

Input

FieldTypeNotes
hashtagsarrayOne per line. #coffee, coffee and the full tag link are the same tag. Required.
maxVideosPerHashtagintegerDefault 60. Set to 0 for reach figures only.
includeHashtagStatsbooleanDefault on. One extra request per tag. Free.
resultsPerPageinteger1 to 30, default 30.
sortByselectrelevance, most_liked, most_viewed, most_commented, most_shared, newest, oldest.
oldestPostDatestringYYYY-MM-DD, an ISO timestamp, or 7 days / 3 months.
newestPostDatestringSame formats.
leastDiggsintegerMinimum likes.
mostDiggsintegerMaximum likes. Useful for finding small accounts rather than the same viral posts.
excludeAdsbooleanDrop rows TikTok marks as advertising.
scrapeAdditionalAuthorMetabooleanEight extra author fields. Free.
shouldDownloadVideosbooleanStore the MP4 and put a working link on the row.
shouldDownloadCoversbooleanStore the thumbnail.
shouldDownloadAvatarsbooleanStore the author avatar.
shouldDownloadMusicCoversbooleanStore the sound artwork.
shouldDownloadSlideshowImagesbooleanStore each image of a photo post.
maxMediaDownloadsintegerCeiling across every download option. Default 50.
countrystringTwo-letter code. Results are regional.
languagestringTwo-letter code.
proxyCountryCodestringWhere the request should appear to come from.

Filters cost pages, and the summary says so

Every filter is applied to the rows the run collected. TikTok's search endpoint accepts a sort and a date parameter and then ignores both, which was measured rather than assumed: the same tag returned an identical result ordering across every value of each.

So a narrow date window or a high like threshold reads more pages and returns fewer rows, which is the opposite of how a server-side filter behaves. The summary carries videosScanned next to videosRejectedByFilters and pagesRead, so a filter that matched little reads as a filter rather than as a tag that has gone quiet.

Speed

One tag, three pages: 99 videos in 5.4 seconds, all 99 carrying a view count, 89 carrying a playable media address. The other ten are photo posts, which have no video at all and come back with their slideshow images instead.

The tag's reach figures are one extra request and took 0.3 seconds.

A raw media address from TikTok is not a link you can use. Paste one into a browser, a CMS or a colleague's message and it returns 403. Turn on a download option and the file is stored in the run's key-value store with a public link on the row, which works anywhere.

Photo posts have no video. Those rows carry slideshow_images and the slideshow download option stores each image.

What people use this for

Finding creators to work with. Video rows grouped by handle, sorted by views, filtered to accounts under a follower ceiling. That is a shortlist of people getting reach in a niche without the follower count to price accordingly.

Content research. Sort by most liked within a date window and you have the formats that are working under a tag this month, not the ones that worked in 2024.

Tag selection. Run twenty candidate tags with maxVideosPerHashtag at 0 and you get twenty reach figures in a few seconds, for the price of twenty requests.

Brand monitoring. A branded tag run daily, with the post-date filter set to the last day, is every new post carrying your tag.

Notes

View, like and comment counts are live and change through the day. A run is a snapshot.

A tag that does not exist is reported by name with the reason, rather than returning zero rows that look like a tag nobody uses.

Free Apify plans are capped at 10 results per run. The run stops collecting at that point rather than doing the whole crawl and discarding it.