TikTok Hashtag Scraper - Videos, No Watermark, No Login
Pricing
from $0.25 / 1,000 result returneds
TikTok Hashtag Scraper - Videos, No Watermark, No Login
Scrape TikTok videos by hashtag. Every row has a link to the video with no watermark. Rows also carry plays, likes, comments, shares and saves. The author and the sound are included. Branded posts are marked. No login or API key. $0.25 per 1,000 videos.
Pricing
from $0.25 / 1,000 result returneds
Rating
5.0
(1)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
28
Total users
8
Monthly active users
a day ago
Last modified
Categories
Share
TikTok Hashtag Scraper: videos posted under any tag, with the counts attached
Give it hashtags and you get the videos TikTok is showing under them, one row each, with plays, likes, comments, shares and saves, the author, the sound and a video link without the watermark. Nothing to log into.
The thing to know before your first run: the limit is run wide, not per tag. Put in three hashtags with a limit of 50 and you get 50 videos in total, and the first tag can use the lot. Run one tag at a time if you need a fair split. A hashtag feed is also what TikTok chooses to show a visitor today, not the full history of the tag.
| Input | Hashtags, or tiktok.com/tag/ links |
| Output | One row per video |
| Ceiling | 2,000 videos per run |
| Account needed | None from you |
| Price | $0.25 per 1,000 videos, flat on every plan |
๐ What TikTok Hashtag Scraper does
It walks the feed behind each tag and flattens every video into one row. Tags are taken with or
without the #, and a /tag/ link works too.
The same video showing up under two of your tags is returned once and billed once. Paging stops when TikTok stops handing out a cursor, or at your limit, whichever comes first.
Some field names are TikTok's own rather than the words in the app:
| Field | What it is |
|---|---|
diggCount | Likes. |
collectCount | Saves. |
playAddr | The video file without the watermark. downloadAddr is the watermarked one. |
isAd | Branded content. Useful for keeping promoted posts out of an organic reach read. |
A tag that does not exist or comes back empty gets a row saying so, and the run moves on to the next tag.
๐ฅ What you give it
{"hashtags": ["cats", "spacex"],"resultsPerPage": 50}
| Field | Default | What it is |
|---|---|---|
hashtags | none | Tags with or without #. The form opens with cats filled in as an example, which is a starting point rather than a default. |
startUrls | none | Or paste links like https://www.tiktok.com/tag/cats. Mix them with hashtags freely. |
resultsPerPage | 50 | Videos for the whole run, 1 to 2,000, despite what the field name suggests. This is also your spend cap. |
sessionCookies | none | Optional. Your own TikTok sessionid, used only for tags that came back empty. Use a throwaway account: the value sits in the run input, which anyone who can open the run can read. |
proxyConfiguration | off | Leave it off. It exists for people routing through their own servers at high volume. |
notionConnector, notionParentId | none | Optional. Write each video into a Notion database as well as the dataset. |
๐ค What you get back
A real row from a real run. The caption starts with emoji, so it is cut short here, and the media links are trimmed:
{"ok": true,"type": "video","id": "7417800442127633707","webVideoUrl": "https://www.tiktok.com/@lilpawdrama/video/7417800442127633707","text": "...#cat #cutecat #catsoftiktok #catlover #cats #funny #pets #usa_tiktok","createTime": "2024-09-23T11:34:25.000Z","hashtags": ["cat", "cutecat", "catsoftiktok", "catlover", "cats", "funny", "pets"],"region": "US","playCount": 136727,"diggCount": 22693,"commentCount": 127,"shareCount": 437,"collectCount": 1968,"downloadCount": 803,"isAd": true,"video": { "duration": 30, "cover": "https://p16-common-sign.tiktokcdn-us.com/...", "playAddr": "https://v45.tiktokcdn-us.com/...", "downloadAddr": "https://v45.tiktokcdn-us.com/..." },"music": { "id": "7136445672676411393", "title": "Cute", "authorName": "Aurel Surya Lie", "original": false, "duration": 179 },"author": { "id": "7412528791307715627", "uniqueId": "lilpawdrama", "nickname": "lilpawdrama", "avatar": "https://p19-common-sign.tiktokcdn-us.com/..." }}
| Field | What it is |
|---|---|
id, webVideoUrl | Unique per video, and the link a person can open. Use id as your dedupe key across runs. |
text, hashtags | The caption, and the tags parsed out of it without the #. |
createTime, region | When it was posted, as an ISO timestamp, and the region TikTok reports. |
playCount, diggCount, commentCount, shareCount, collectCount, downloadCount | The six counters, as TikTok reports them at read time. |
video | Duration in seconds, the still and animated covers, and both file links. |
music | The sound: id, title, artist, whether it is the creator's own, and its length. null when the video has none. |
author | The account that posted it: id, handle, display name and avatar. |
๐งพ Reading the output
Two kinds of row land in your dataset.
| Row | How to spot it | Billed |
|---|---|---|
| A video | ok: true and type: "video" | yes |
| A diagnostic | ok: false and an errorCode | no |
Filter on ok == true and you have your data. NOT_FOUND means TikTok had no such tag,
NO_RESULTS means the tag exists but returned nothing, and BLOCKED means that tag would not
answer this run, which re-running usually clears. None of the three is charged.
One quirk of the Overview table: it shows five columns, so a diagnostic row reads as a nearly blank line there. Open the row itself or download the JSON and everything is present.
โถ๏ธ How to run it
- Open TikTok Hashtag Scraper and click Try for free.
- Type tags into Hashtags, one per line, or paste links into Hashtag URLs.
- Set Max videos per hashtag. It is the total for the run, so start at 50 while you look at the output shape.
- Click Start.
- Download the dataset as JSON, CSV or Excel, or pull it from the Apify API.
๐ฐ How much does it cost?
$0.25 per 1,000 videos. Flat on every Apify plan, no volume tiers.
You pay for videos delivered. Diagnostic rows and a video that turned up under two of your tags in
the same run are not charged. resultsPerPage is the ceiling on both the rows and the spend.
๐ก What people use it for
- Watching a niche tag week by week and tracking which posts actually travelled.
- Pulling the creators behind a tag, since every row carries the author handle and id.
- Building a swipe file of hooks: caption, sound, duration and play count in one table.
- Separating branded posts from organic ones with
isAdbefore reporting on reach.
๐ง What it does not do
- No comments and no follower lists. Those are separate actors, linked below.
- The feed is not an archive. You get what TikTok serves a visitor under that tag now. Old videos that have dropped out of the feed will not come back.
- The limit is shared across your tags. One greedy tag can consume the whole run.
- Media links expire. They are signed and short lived. Fetch the file during the run if you want to keep it.
- A counter TikTok does not send reads as
0. On a fresh video that can mean "not published yet" rather than none. - Counts are a snapshot at read time, and TikTok's own figures lag on very new videos.
- An empty input fails the run instead of returning a sample. Give it at least one tag.
๐งญ Which TikTok scraper do you need?
| If you want | Use |
|---|---|
| Videos under a hashtag | This one |
| A profile plus its videos, or a keyword search | TikTok Scraper |
| Follower and likes counts for a list of handles | TikTok Profile Scraper |
| Comments under a video | TikTok Comments Scraper |
| Which hashtags are climbing right now | TikTok Trending Hashtags |
โ Questions people ask
Do I need a TikTok account? No. The cookie field is optional and only comes into play for tags that came back empty without it.
Is the limit per tag or per run? Per run. The field is called "Max videos per hashtag", but the number you set is the total the run will deliver.
Why did I get fewer videos than I asked for? Either TikTok stopped handing out more of that feed, or an earlier tag in your list had already used the run's allowance.
Can I download the videos? The row carries both file links, watermarked and not. They are signed links that expire, so fetch them promptly, or use the video downloader linked from our store page.
Is scraping TikTok legal? This reads public videos only, never private accounts or messages. Results can still contain personal data, which GDPR and similar laws cover, so have a reason for collecting it. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.
Can I run it on a schedule? Yes. Use Apify's scheduler, or start it from the API and read the dataset when it finishes.
๐ If something breaks
Open the Issues tab on the actor page. Include the hashtags you used and the run ID, and the log is usually enough for us to see what happened.