TikTok Hashtag Scraper - Video Analytics
Pricing
from $3.00 / 1,000 hashtag video founds
TikTok Hashtag Scraper - Video Analytics
Scrape public TikTok videos from one or more hashtags with views, likes, comments, shares, saves, engagement rate, creator handle and bio, music, captions and timestamps, plus quality filters applied before you are charged. No cookies needed.
Pricing
from $3.00 / 1,000 hashtag video founds
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
8
Total users
3
Monthly active users
3 days ago
Last modified
Categories
Share
What is TikTok Hashtag Scraper?
TikTok Hashtag Scraper is an Apify Actor for public hashtag feeds. It accepts one or more hashtag names or TikTok /tag/ URLs and returns one record per saved TikTok video. Each record can include the hashtag, creator handle, caption, play count, likes, comments, shares, saves, engagement rate, timestamps, thumbnails, creator metadata (handle, display name, bio, verification and, when TikTok exposes them, follower and total-like counts), music metadata, and an optional raw source payload. The output is shaped for analysis, automation, and Apify MCP workflows, with a default dataset for rows and a RUN_SUMMARY record for execution diagnostics.
Best fit and connected workflows
Use this Actor when a workflow starts from known hashtags and needs structured video analytics from public TikTok hashtag feeds. It fits social listening, creator research, campaign monitoring, trend tracking around a niche, and dataset building for downstream analysis.
Common connected workflows include:
- Discover hashtags or seed video URLs in a separate TikTok search or trending workflow, then pass the verified hashtag feed into this Actor.
- Combine the dataset with spreadsheets, BI tools, notebooks, or AI agents that summarize engagement patterns.
- Route video-level research to the related TikTok search or trending Actors when you want discovery first, then use this Actor for hashtag feed analytics.
Related Actors:
- When you need to find which hashtags are trending first, use TikTok Trending Hashtags Scraper, then pass those tags into this Actor to scrape their videos.
- When you start from keywords rather than hashtags, use TikTok Search Scraper for videos, hashtags and users.
Practical scenario
Maya, a social media analyst, starts with the hashtags fitness and booktok. She runs the Actor with a minimum view threshold and keeps photo posts enabled because her reporting team wants to compare all feed types that appear in those hashtag pages.
The dataset returns fields such as authorUsername, caption, playCount, likeCount, commentCount, shareCount, engagementRate, createdAt, and videoUrl. Maya uses engagementRate and playCount to identify high-performing posts, opens videoUrl to review the content, and then shares the selected creators with the campaign team for follow-up outreach.
Input
Use hashtag names or /tag/ URLs to target public TikTok hashtag feeds. Quality filters are applied before rows are saved and charged.
| Field | Type | Description |
|---|---|---|
hashtags | array of strings | Hashtag names with or without #, such as fitness or #booktok. |
hashtagUrls | array of strings | TikTok /tag/ URLs, such as https://www.tiktok.com/tag/skincare. |
maxVideosPerHashtag | integer | Maximum filter-passing videos to save and charge for per hashtag. |
region | string | Two-letter ISO country code used to localize hashtag results. |
minViews | integer | Keeps rows at or above the play count threshold. |
minLikes | integer | Keeps rows at or above the like count threshold. |
minComments | integer | Keeps rows at or above the comment count threshold. |
minShares | integer | Keeps rows at or above the share count threshold. |
minDurationSeconds | integer | Keeps rows at or above the minimum duration. |
maxDurationSeconds | integer | Keeps rows at or below the maximum duration. |
includePhotoPosts | boolean | Includes image carousel posts when true. |
maxPagesPerHashtag | integer | Safety cap for feed pagination per hashtag. |
includeRawData | boolean | Adds the raw source payload under rawResult in each row. |
Example input
{"hashtags": ["fitness", "booktok"],"hashtagUrls": [],"maxVideosPerHashtag": 25,"region": "US","minViews": 10000,"minLikes": 0,"minComments": 0,"minShares": 0,"minDurationSeconds": 0,"maxDurationSeconds": 0,"includePhotoPosts": true,"maxPagesPerHashtag": 20,"includeRawData": false}
Output
The default dataset contains one row per saved TikTok hashtag video. The output is normalized for analysis and agent workflows. RUN_SUMMARY contains data-route usage, per-hashtag counts, filter statistics, and stop reason.
| Field | Type | Description |
|---|---|---|
hashtag | string | The hashtag feed that returned the row. |
provider | string | Data route that served the row (primary-route or fallback-route). |
resultPosition | integer | 1-based rank within the hashtag results. |
page | integer | Feed page where the row was found. |
isPhotoPost | boolean | True when TikTok returned an image carousel post. |
videoId | string | TikTok aweme or video ID. |
videoUrl | string | Canonical TikTok URL for the video when available. |
caption | string | Video caption or description text. |
createdAt | string | ISO 8601 post timestamp. |
durationSeconds | integer | Video length in seconds. |
region | string | TikTok region code returned for the video. |
authorId | string | Creator numeric user ID when exposed by TikTok. |
authorSecUid | string | Creator stable secUid when exposed by TikTok. |
authorUsername | string | Creator handle without the @ prefix. |
authorNickname | string | Creator display name. |
authorVerified | boolean | Verified status for the creator account. |
authorAvatarUrl | string | Creator profile picture URL. |
authorBio | string | Creator profile bio when the feed includes it. |
authorFollowers / authorFollowing | integer | Creator follower and following counts. Omitted when the hashtag feed does not report them (common). |
authorTotalLikes / authorVideoCount | integer | Creator lifetime likes and video count, omitted when the feed does not report them. |
playCount | integer | View or play count. |
likeCount | integer | Like count. |
commentCount | integer | Comment count. |
shareCount | integer | Share count. |
collectCount | integer | Bookmark or collect count. |
engagementRate | number | (likes + comments + shares) / plays, rounded to 4 decimals. |
coverUrl | string | Video cover or thumbnail URL. |
imageUrls | array of strings | Image URLs for photo carousel posts. |
hashtags | array of strings | Hashtags present in the caption or challenge metadata. |
musicId | string | Sound or music track ID. |
musicTitle | string | Sound or music track title. |
musicAuthor | string | Sound or music author. |
scrapedAt | string | ISO 8601 timestamp when the row was scraped. |
rawResult | object | Raw source payload when includeRawData is enabled. |
Example output record
{"hashtag": "fitness","resultPosition": 1,"page": 1,"isPhotoPost": false,"videoId": "7412345678901234567","videoUrl": "https://www.tiktok.com/@runner/video/7412345678901234567","caption": "suitable running shoes #running #fitness","createdAt": "2024-06-01T00:00:00.000Z","durationSeconds": 32,"region": "US","authorId": "111","authorSecUid": "MS4wLjABC","authorUsername": "runner","authorNickname": "Runner","authorVerified": true,"authorAvatarUrl": "https://p16.tiktokcdn.com/avatar.jpg","playCount": 250000,"likeCount": 12000,"commentCount": 340,"shareCount": 210,"collectCount": 90,"engagementRate": 0.0502,"coverUrl": "https://p16.tiktokcdn.com/cover.jpg","imageUrls": [],"hashtags": ["running", "fitness"],"musicId": "900","musicTitle": "Original sound","musicAuthor": "runner","scrapedAt": "2026-07-09T12:00:00.000Z"}
How it works
This Actor reads public TikTok hashtag feeds through a managed data route with an automatic fallback route. Rows that pass the configured filters are saved to the dataset and counted as charged events. The dataset is normalized, and the run summary is written to the key-value store at RUN_SUMMARY for diagnostics and cost visibility.
The Actor also supports these operational choices:
- Hashtag names or
/tag/URLs as input - Per-hashtag caps through
maxVideosPerHashtag - Region-localized hashtag results through
region - Photo-post inclusion through
includePhotoPosts - Optional raw source payloads through
includeRawData
Pricing
This Actor uses Pay per event with Apify platform usage included. The live Pricing tab shows the current pricing details for your plan and usage context, so review it before running production jobs.
The charged events are:
apify-actor-start- charged once when the Actor starts after input validationhashtag-video-found- charged once per saved TikTok hashtag video after filters
A simple example in words: if one run saves ten videos, the Actor start event is charged once, and the video-found event is charged ten times. Filtered-out rows are not saved and are not charged.
Use with AI agents (MCP)
This Actor is usable through Apify MCP as a tool for collecting structured TikTok hashtag video analytics. It returns compact, machine-readable rows plus execution diagnostics, which makes it practical for agent workflows that need hashtags, creators, engagement metrics, captions, timestamps, thumbnails, and music metadata.
Actor identity: khadinakbar/tiktok-hashtag-scraper
Collect public TikTok hashtag videos for the hashtags
fitnessandbooktok, keep only rows that meet aminViewsthreshold, and return the saved dataset items plus the run summary.
Output interpretation:
- The dataset contains one row per saved hashtag video.
providershows which data route served the row.resultPositionandpageshow where the record appeared in feed pagination.engagementRateis derived from likes, comments, and shares divided by plays.scrapedAtis the collection timestamp for the row.
Provenance and scope:
- The Actor targets public hashtag feeds only.
RUN_SUMMARYrecords data-route usage, per-hashtag counts, filter stats, and stop reason.includeRawDatacan attach the raw source payload underrawResultfor debugging or custom parsing.
Pagination and cost guidance:
maxPagesPerHashtagis a safety cap for feed pagination.maxVideosPerHashtagis the per-hashtag save-and-charge cap.- Raising either setting can increase the number of pages visited or rows saved, depending on filter strictness.
API example
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('khadinakbar/tiktok-hashtag-scraper').call({hashtags: ['fitness', 'booktok'],maxVideosPerHashtag: 25,region: 'US',minViews: 10000,includePhotoPosts: true,includeRawData: false,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.slice(0, 3));
Best results and outcome guidance
Use hashtag names that match the exact feed you want to study. When you already have /tag/ URLs, provide them directly. Set region to the country code that matches the audience you want to review. Use the quality filters to shape the dataset around your analysis goal:
minViewsfor reach-focused samplesminLikesfor visible engagementminCommentsfor discussion-heavy postsminSharesfor spread-oriented contentminDurationSecondsandmaxDurationSecondsfor clip-length bandsincludePhotoPostswhen you want all hashtag-feed content, or set it to false for video-only analysis
For compact agent prompts, keep includeRawData set to false. Enable it when you need raw payload inspection or custom downstream parsing.
Continue the workflow
- When you want the videos themselves, then pass selected
videoUrlvalues to TikTok Video Downloader - No Watermark MP4 + MP3.
Design note
I found that the output contract includes a dedicated collectCount field for saves and a separate RUN_SUMMARY record for data-route telemetry and filter stats, which makes the dataset and diagnostics cleanly separated.
FAQ
Can I start from hashtag names or hashtag URLs?
Yes. This Actor accepts both plain hashtag names and TikTok /tag/ URLs.
Can I use this for TikTok profiles or keyword search?
This Actor is built for public hashtag feeds. For discovery and broader search workflows, use the related TikTok search or trending Actors, then pass verified public URLs or IDs into this Actor when hashtag feed analytics are needed.
Which data route served my rows?
The Actor tries its primary data route first and falls back automatically. The provider field in each row and RUN_SUMMARY show which route served the saved rows.
Where are execution diagnostics stored?
Execution diagnostics are stored in the key-value store under RUN_SUMMARY. The default dataset contains the normalized hashtag video rows.
How do I control the number of saved rows?
Use maxVideosPerHashtag for the per-hashtag cap and the quality filters to narrow the set before rows are saved.
Responsible use
This Actor works with public TikTok hashtag data through a managed data route. Use the exported dataset in ways that respect TikTok's terms, creator rights, privacy laws, copyright rules, and your local regulations. Review the live Pricing tab before production runs and choose input settings that match your collection scope and data-handling requirements.