Tiktok Hashtag Scraper
Pricing
from $2.40 / 1,000 hashtag results
Tiktok Hashtag Scraper
TikTok Hashtag Scraper extracts videos, creators, captions, stats, and hashtag page data from TikTok hashtags. Use it to monitor trends, track campaigns, discover creators, analyze niche content, and power research, analytics, and AI workflows.
Pricing
from $2.40 / 1,000 hashtag results
Rating
0.0
(0)
Developer

Delowar Munna
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 hours ago
Last modified
Categories
Share
Extract TikTok hashtag videos, creator data, music metadata, and hashtag analytics for research, campaign monitoring, trend discovery, and AI workflows.

What does this actor do?
TikTok Hashtag Scraper is an Apify Actor that extracts public TikTok data for one or more hashtags, including:
- Video records — video metadata, engagement metrics (plays, likes, comments, shares, saves), creator info, music data, hashtag matching, and analytics-ready derived fields
- Hashtag summary records — hashtag-level stats with view counts, video counts, descriptions, and related hashtags
- Hashtag lineage — every output row traces back to the exact input hashtag that produced it
This actor is designed for hashtag intelligence — not just fetching videos, but providing analytics-ready output for campaign tracking, niche research, creator discovery, and automation workflows.
Why use this actor?
- Multi-hashtag batching — scrape one or many hashtags in a single run with automatic deduplication
- Rich structured output — 50+ fields per video including creators, sounds, engagement stats, and hashtag summaries
- Hashtag lineage — every row shows which input hashtag produced it, making cross-hashtag comparison easy
- Analytics-ready derived fields —
engagementTotal,engagementRateSimple,engagementPerDay,videoAgeDays,captionLength,keywordHints, and more - Consistent null handling — missing optional fields return
null, never omitted unpredictably - Structured error handling — failed hashtags emit error records instead of breaking the run
- AI-ready datasets — feed results into clustering, summarization, trend scoring, and reporting pipelines
Input
| Parameter | Type | Default | Description |
|---|---|---|---|
hashtags | string[] | ["ai", "smallbusiness"] | Hashtag names or TikTok hashtag URLs to scrape (required) |
startUrls | object[] | [] | Optional TikTok hashtag page URLs (advanced) |
resultsPerHashtag | integer | 50 | Maximum videos to extract per hashtag (1–500) |
includeVideos | boolean | true | Include video records in output |
includeHashtagSummary | boolean | true | Emit hashtag summary records |
includeAuthorDetails | boolean | true | Include creator fields on video records |
includeMusicDetails | boolean | true | Include music/sound fields on video records |
includeRelatedHashtags | boolean | true | Extract related hashtags when available |
debugMode | boolean | false | Enable verbose logging |
proxyConfiguration | object | — | Apify proxy configuration (residential recommended) |
Hashtag input formats
The actor accepts hashtags in multiple formats and normalizes them automatically:
- Plain text:
ai - With hash:
#ai - Full URL:
https://www.tiktok.com/tag/ai
Duplicates are removed automatically.
Sample input: Campaign hashtag monitoring
Track branded and campaign hashtags to analyze top-performing posts and measure hashtag reach.
{"hashtags": ["nike", "justdoit", "nikerunning"],"resultsPerHashtag": 50,"includeVideos": true,"includeHashtagSummary": true,"includeAuthorDetails": true,"includeMusicDetails": true,"proxyConfiguration": {"useApifyProxy": true}}
Sample input: Niche research with URLs
Explore content under topic hashtags. You can mix plain names and full TikTok URLs.
{"hashtags": ["booktok", "#bookish", "https://www.tiktok.com/tag/readinglist"],"resultsPerHashtag": 30,"includeVideos": true,"includeHashtagSummary": true,"includeRelatedHashtags": true,"proxyConfiguration": {"useApifyProxy": true}}
Sample input: Creator discovery (minimal output)
Find creators posting under specific hashtags. Disable music details to keep the output focused.
{"hashtags": ["smallbusiness", "entrepreneur", "sidehustle"],"resultsPerHashtag": 100,"includeVideos": true,"includeAuthorDetails": true,"includeMusicDetails": false,"includeHashtagSummary": false,"proxyConfiguration": {"useApifyProxy": true}}
Output
The actor outputs a dataset where each video is one row with full hashtag lineage. Results are available in five dataset views:
- Overview — combined view with record type, key metrics, and hashtag lineage
- Videos — full video details with engagement data
- Engagement — engagement metrics and derived analytics fields
- Creators — creator/author data with their video performance
- Hashtag Summary — hashtag-level stats, view counts, and related hashtags

Hashtag summary record
When includeHashtagSummary is enabled, the actor emits one summary record per hashtag with entity-level metadata. This record appears first in the dataset with recordType: "hashtag-summary".
{"recordType": "hashtag-summary","inputHashtag": "Google","normalizedHashtag": "google","hashtagUrl": "https://www.tiktok.com/tag/google","scrapedAt": "2026-03-17T01:57:53.970Z","sourceType": "hashtag","hashtagName": "google","hashtagDisplayName": "google","hashtagId": "12902","hashtagDescription": "google | 2.7M posts Watch the latest videos about #google on TikTok.","hashtagViewCount": 2700000,"hashtagVideoCount": 2700000,"hashtagCoverUrl": null,"relatedHashtags": null}
Video record
Each video record carries full hashtag lineage, summary data, video metadata, engagement metrics, creator info, music data, hashtag matching, and derived analytics.
{"recordType": "video","inputHashtag": "Google","normalizedHashtag": "google","hashtagUrl": "https://www.tiktok.com/tag/google","hashtagRankContext": 5,"scrapedAt": "2026-03-17T01:57:55.267Z","sourceType": "hashtag","hashtagName": "google","hashtagDisplayName": "google","hashtagId": "12902","hashtagDescription": "google | 2.7M posts Watch the latest videos about #google on TikTok.","hashtagViewCount": 2700000,"hashtagVideoCount": 2700000,"relatedHashtags": null,"videoId": "7262839443147590944","videoUrl": "https://www.tiktok.com/@gamingdenji/video/7262839443147590944","createTime": "2023-08-02T21:26:29.000Z","caption": "7 Google Easter eggs ! #easteregg #google","textLanguage": "en","duration": 61,"width": 576,"height": 1024,"coverUrl": "https://p16-common-sign.tiktokcdn-us.com/...","dynamicCoverUrl": "https://p16-common-sign.tiktokcdn-us.com/...","shareUrl": "https://www.tiktok.com/@gamingdenji/video/7262839443147590944","region": null,"originalItem": false,"isAd": false,"isPinned": false,"isSponsored": false,"playCount": 6800000,"likeCount": 507400,"commentCount": 10800,"shareCount": 27100,"saveCount": 177700,"engagementTotal": 723000,"engagementRateSimple": 0.106324,"authorId": "7038016246633382917","authorUniqueId": "gamingdenji","authorNickname": "GamingDenji","authorProfileUrl": "https://www.tiktok.com/@gamingdenji","authorAvatarUrl": "https://p16-common-sign.tiktokcdn-us.com/...","authorVerified": false,"authorFollowerCount": 402300,"authorFollowingCount": 2,"authorHeartCount": 31700000,"authorVideoCount": 108,"musicId": "7262839400319486753","musicTitle": "son original","musicAuthorName": "GamingDenji","musicOriginal": true,"musicUrl": "https://v16m.tiktokcdn-us.com/...","musicDuration": 61,"musicCoverUrl": "https://p16-common-sign.tiktokcdn-us.com/...","videoHashtags": ["easteregg", "google"],"matchedInputHashtag": true,"matchedHashtagExact": true,"relatedMatchedHashtagsCount": 0,"captionLength": 42,"hasMention": false,"hasLinkInCaption": false,"videoAgeDays": 957,"engagementPerDay": 755,"keywordHints": ["easteregg", "google", "easter", "eggs"]}
Engagement view record
The engagement view highlights metrics and derived analytics for quick comparison.
{"videoId": "7616668738456276246","caption": "La mise à jour de Google Maps, en cours de déploiement aux États-Unis...","authorUniqueId": "brutofficiel","playCount": 2200000,"likeCount": 172900,"commentCount": 447,"shareCount": 11700,"saveCount": 10900,"engagementTotal": 195947,"engagementRateSimple": 0.089067,"engagementPerDay": 48987,"videoAgeDays": 4,"captionLength": 104,"hasMention": false,"hasLinkInCaption": false,"isAd": false,"isSponsored": false,"normalizedHashtag": "google"}
Creators view record
The creators view surfaces author details alongside their video performance.
{"authorUniqueId": "brutofficiel","authorNickname": "Brut.","authorProfileUrl": "https://www.tiktok.com/@brutofficiel","authorVerified": true,"authorFollowerCount": 19800000,"authorFollowingCount": 62,"authorHeartCount": 885600000,"authorVideoCount": 14900,"videoId": "7616668738456276246","caption": "La mise à jour de Google Maps, en cours de déploiement aux États-Unis...","playCount": 2200000,"engagementTotal": 195947,"normalizedHashtag": "google"}
Error record
Failed hashtags emit structured error records so individual failures don't break the run.
{"error": true,"errorMessage": "No data found for hashtag #invalidtag","inputHashtag": "invalidtag","normalizedHashtag": "invalidtag","hashtagUrl": "https://www.tiktok.com/tag/invalidtag","scrapedAt": "2026-03-17T05:30:00.000Z","sourceType": "hashtag"}
Output fields
Lineage fields (all video records)
| Field | Description |
|---|---|
recordType | "video" or "hashtag-summary" |
inputHashtag | The original hashtag input as provided |
normalizedHashtag | Cleaned, lowercase hashtag name |
hashtagUrl | Full TikTok hashtag page URL |
hashtagRankContext | Position/rank of this video on the hashtag page |
scrapedAt | ISO 8601 timestamp of extraction |
sourceType | Always "hashtag" |
Hashtag summary fields (repeated on each video row)
| Field | Description |
|---|---|
hashtagName | Hashtag name |
hashtagDisplayName | Display title |
hashtagId | TikTok internal hashtag ID |
hashtagDescription | Hashtag description (if available) |
hashtagViewCount | Total view count |
hashtagVideoCount | Total video count (best-effort) |
relatedHashtags | Array of related hashtag names (best-effort) |
Video fields
| Field | Description |
|---|---|
videoId | TikTok video ID |
videoUrl | Full video URL |
createTime | Video creation time (ISO 8601) |
caption | Video caption/description |
textLanguage | Content language (if available) |
duration | Duration in seconds |
width, height | Video dimensions (if available) |
coverUrl, dynamicCoverUrl | Cover image URLs |
shareUrl | Share URL |
region | Region/country code (best-effort) |
isAd, isPinned, isSponsored | Content flags |
Engagement fields
| Field | Description |
|---|---|
playCount | Play/view count |
likeCount, commentCount, shareCount, saveCount | Engagement counts |
engagementTotal | Sum of likes + comments + shares + saves |
engagementRateSimple | engagementTotal / playCount |
Author/creator fields
| Field | Description |
|---|---|
authorId, authorUniqueId, authorNickname | Author identification |
authorProfileUrl, authorAvatarUrl | Author links |
authorVerified | Verified badge status |
authorFollowerCount, authorFollowingCount | Follow counts |
authorHeartCount, authorVideoCount | Author stats |
Music/sound fields
| Field | Description |
|---|---|
musicId, musicTitle, musicAuthorName | Sound identification |
musicOriginal | Whether the sound is original |
musicUrl | Playback URL (best-effort) |
musicDuration | Sound duration in seconds |
musicCoverUrl | Sound cover art URL |
Hashtag matching fields
| Field | Description |
|---|---|
videoHashtags | Array of hashtag strings on the video |
matchedInputHashtag | Whether the video's hashtags include the input hashtag |
matchedHashtagExact | Exact match with input hashtag |
relatedMatchedHashtagsCount | Count of related hashtags found on the video |
Derived/analytics fields
| Field | Description |
|---|---|
captionLength | Length of caption in characters |
hasMention | Whether caption contains @mentions |
hasLinkInCaption | Whether caption contains a URL |
videoAgeDays | Age of video in days |
engagementPerDay | engagementTotal / videoAgeDays |
keywordHints | Extracted keywords from caption |
Best-effort fields
The following fields depend on what TikTok includes in its responses. They are extracted when available and returned as null when not:
hashtagVideoCount, hashtagCoverUrl, relatedHashtags, region, textLanguage, saveCount, musicUrl, width, height, dynamicCoverUrl
Use cases
- Campaign hashtag monitoring — track how many videos appear under branded or event hashtags and analyze top posts
- Niche research — explore content under topic hashtags like fitness, AI, books, beauty, or finance
- Creator discovery — find creators repeatedly posting under a specific hashtag
- Content ideation — see what captions, sounds, and formats succeed inside a hashtag
- Competitive tracking — compare multiple brand or category hashtags in a single run
- AI workflow input — feed hashtags and related videos into enrichment, categorization, summarization, or scoring pipelines
Tips and best practices
- Use
normalizedHashtagto trace results — every record includes the hashtag that produced it - Check
recordType— the Overview tab shows"hashtag-summary"and"video"so you can easily distinguish record types - Start small — use
resultsPerHashtag: 10–20for initial exploration, then increase - Batch multiple hashtags — scrape many hashtags in a single run for comparative analysis
- Schedule for monitoring — run on a schedule to track hashtag momentum over time
- Use derived fields —
engagementPerDayandvideoAgeDayshelp identify fast-growing content - Toggle output sections — disable
includeMusicDetailsorincludeAuthorDetailsto reduce output size when you don't need those fields
Proxy configuration
Residential proxies are recommended for reliable TikTok scraping.
{"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Integrations
- Google Sheets — export hashtag data to spreadsheets for team dashboards
- Slack/email — set up notifications when new content appears under a hashtag
- Webhooks — trigger downstream workflows when a run completes
- API — access results programmatically via the Apify API
- Other actors — feed discovered video URLs into TikTok Video Scraper for deeper analysis
Limitations
- Results per hashtag depend on how much data TikTok returns on the hashtag page. The actual number may be lower than
resultsPerHashtag. - Some fields are best-effort and may be
nulldepending on what TikTok includes in its page data (see "Best-effort fields" above). - This actor scrapes public hashtag pages. It does not access private or restricted content.
- TikTok hashtag pages do not reliably support sorting; results reflect TikTok's default ordering.
FAQ
How many results can I get per hashtag? Up to 500 per hashtag. The actual number depends on how much data TikTok returns for that hashtag page.
Why are some fields null?
Fields like region, textLanguage, saveCount, and musicUrl depend on what TikTok includes in its page data. They are extracted on a best-effort basis and returned as null when unavailable.
What is the first record with mostly empty video fields?
That's the hashtag-summary record (recordType: "hashtag-summary"). It contains hashtag-level metadata only — not video data. Use the recordType column in the Overview tab to identify it.
What is the difference between inputHashtag and normalizedHashtag?
inputHashtag is exactly what you typed (e.g., #AI, https://www.tiktok.com/tag/ai). normalizedHashtag is the cleaned lowercase form (ai).
Can I scrape specific video pages? This actor is designed for hashtag intelligence. For scraping specific video URLs, use TikTok Video Scraper.
What happens if a hashtag fails?
Failed hashtags emit a structured error record with error: true and errorMessage, so you can identify failures without the whole run breaking.
Is the hashtag-summary record charged?
Yes. The pay-per-event pricing charges for each record pushed to the dataset, including summary records. Error records are not charged.