TikTok Scraper - Video Search, Hashtags, Profiles & Sounds
Pricing
from $3.00 / 1,000 videos
TikTok Scraper - Video Search, Hashtags, Profiles & Sounds
Scrape TikTok videos by keyword, hashtag, profile or sound, and find creator profiles by keyword. Get views, likes, comments, shares, captions, hashtags, music, country code and author ID, bio and followers. No login or cookies needed. Export to JSON, CSV or Excel.
Pricing
from $3.00 / 1,000 videos
Rating
0.0
(0)
Developer
Silkline
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
3 hours ago
Last modified
Categories
Share
TikTok Scraper extracts public TikTok data as clean, flat JSON. You can search videos by keyword, collect the videos of a hashtag, read the latest videos of any public profile, find creator profiles by keyword, or list the videos that use a sound. Every video comes with views, likes, comments, shares, saves, caption, hashtags, music, duration, publish time, the country code TikTok attaches to the video, and the author's name, handle, ID, profile picture, bio, follower count and verified flag. It works as a TikTok API alternative for marketers, researchers and developers, and no TikTok account, API keys, proxies or cookies are needed.
What data can you get?
The Actor has five modes. The four video modes share one flat output, so one pipeline handles them. Profile search returns profile records.
Modes
| Mode | Give it | You get |
|---|---|---|
search | keywords, optional sortType, publishTime, region | the videos TikTok finds for each keyword, up to 1,000 per keyword |
hashtag | hashtags | the videos listed under each hashtag, up to 1,000 per hashtag |
userPosts | profiles | the latest videos of each public profile, pinned videos first (marked isPinned), then newest first, up to 1,000 per profile |
userSearch | keywords | the profiles TikTok finds for each keyword: handle, name, ID, follower, following, video and total like counts, verified flag, profile picture, up to 1,000 per keyword |
music | sound IDs or tiktok.com/music/... links | the videos that use each sound, up to 1,000 per sound |
Video fields (modes search, hashtag, userPosts, music)
| Field | What it is |
|---|---|
playCount | Views |
likeCount | Likes |
commentCount | Comments |
shareCount | Shares |
collectCount | Times saved to favorites |
downloadCount | Downloads, when shown |
description | Caption of the video |
hashtags | Hashtags of the video, without # |
createdAt | Publish time, ISO 8601 UTC |
url | Link to the video |
videoId | TikTok video ID |
authorHandle | Public @handle of the author, without @ |
authorName | Display name of the author |
authorId | Numeric TikTok ID of the author |
authorSecUid | Secure user ID (secUid) of the author, used in TikTok profile links |
authorFollowerCount | Followers of the author |
authorFollowingCount | Accounts the author follows |
authorVerified | True for a verified account |
authorBio | Author's profile bio as published; null when empty |
authorAvatarUrl | Link to the author's profile picture (temporary link; download soon after the run) |
authorRegion | Country code TikTok attaches to the video, e.g. US |
musicTitle | Title of the sound |
musicAuthor | Author of the sound |
musicId | ID of the sound |
musicOriginal | True when the sound is the author's original sound |
durationSeconds | Length of the video in seconds |
width, height | Video width and height in pixels |
textLanguage | Language code of the caption as detected by TikTok (en, es; un when unknown) |
mentions | Names mentioned with @ in the caption (display text, no user IDs) |
isPinned | True when the video is pinned to the top of the author's profile |
isSlideshow | True for a photo slideshow post |
isPaidContent | True for paid (subscriber-only) content |
isAd | True when the video is an ad, when shown |
coverUrl | Cover image link (temporary; download soon after the run) |
videoUrl | Video file link (temporary; may be empty) |
type | Record type: video |
keyword | The keyword that found the video (search mode) |
hashtag | The hashtag the video was read from (hashtag mode) |
sourceProfile | The profile the video was read from (userPosts mode) |
sourceMusicId | The sound the video was read from (music mode) |
mentions lists the names written after @ in the caption as TikTok displays them, which can be a display name rather than the @handle. isSlideshow is true for photo posts. Most fields TikTok does not send are null; lists such as hashtags and mentions are empty [], and isSlideshow and authorVerified are always true or false.
Search items carry keyword, hashtag items hashtag, profile items sourceProfile and sound items sourceMusicId. A video found by several keywords or hashtags in one run is delivered once.
Profile fields (mode userSearch)
| Field | What it is |
|---|---|
handle | Public @handle, without @ |
name | Display name |
userId | Numeric TikTok ID of the profile |
url | Link to the profile |
followerCount | Followers |
followingCount | Accounts the profile follows |
videoCount | Videos posted |
totalLikeCount | Likes all the profile's videos received |
verified | True for a verified account |
isPrivate | True for a private account |
secUid | Secure user ID (secUid) of the profile |
avatarUrl | Profile picture link (temporary) |
bio | Profile bio as published; often empty in profile search results |
keyword | The keyword that found the profile |
type | Record type: user |
How to use TikTok Scraper
- Open TikTok Scraper in Apify Console.
- Choose a Mode: search videos by keyword, videos of a hashtag, videos of a profile, search profiles by keyword, or videos using a sound.
- Fill in the list that belongs to that mode:
keywords,hashtags,profiles,userKeywordsormusics. For video search you can also setsortType,publishTimeandregion. - Set
maxResults, the limit for each keyword, hashtag, profile or sound. - Start the run and wait for it to finish.
- Open the dataset and export the results as JSON, CSV or Excel, or read them through the API.
Input
| Field | Type | Required | What it does | Default |
|---|---|---|---|---|
mode | string | required | search, hashtag, userPosts, userSearch or music | search |
keywords | array of strings | optional | Search keywords for search; each keyword is a separate search. Falls back to "skincare" when empty. | prefilled with skincare |
hashtags | array of strings | optional | Hashtags for hashtag, as skincare, #skincare or a link (https://www.tiktok.com/tag/skincare). Falls back to "skincare" when empty. | prefilled with skincare |
profiles | array of strings | optional | Public profiles for userPosts, as khaby.lame, @khaby.lame, or a link to the profile or to one of its videos. Falls back to "khaby.lame" when empty. | prefilled with khaby.lame |
userKeywords | array of strings | optional | Search keywords for userSearch; each keyword is a separate profile search. Falls back to "skincare" when empty. | prefilled with skincare |
musics | array of strings | optional | Sound IDs (7016547803243022337) or links such as https://www.tiktok.com/music/Face-Off-7016547803243022337. Falls back to a sample sound when empty. | prefilled with 7016547803243022337 |
sortType | string | optional | Order of the search results: relevance, most-liked or latest (search only) | relevance |
publishTime | string | optional | Only videos published in this period: all, day, week, month, 3months or 6months (search only) | all |
region | string | optional | Two-letter country code sent with the search, such as US, GB or DE (search only). TikTok treats it as a hint. | US |
maxResults | integer | optional | Maximum items for each keyword, hashtag, profile or sound, from 1 to 1,000 | 20 |
The Actor accepts any common way of writing an input: khaby.lame, @khaby.lame, a profile link or a link to one of the creator's videos; skincare, #skincare or a tiktok.com/tag/skincare link. An empty input {} searches "skincare" and returns 20 videos, so you can test it in seconds.
At most 50 keywords, hashtags, profiles or sounds are used per run; any extra ones are ignored without a warning. Split longer lists into several runs.
Search videos by keyword
{"mode": "search","keywords": ["skincare", "glass skin"],"sortType": "most-liked","publishTime": "month","maxResults": 100}
Videos of a hashtag
{"mode": "hashtag","hashtags": ["skincare", "https://www.tiktok.com/tag/glowup"],"maxResults": 100}
Videos of a profile
{"mode": "userPosts","profiles": ["khaby.lame", "https://www.tiktok.com/@charlidamelio"],"maxResults": 50}
Search profiles by keyword
{"mode": "userSearch","userKeywords": ["skincare"],"maxResults": 50}
Videos using a sound
{"mode": "music","musics": ["https://www.tiktok.com/music/Face-Off-7016547803243022337"],"maxResults": 50}
Output example
Video item (mode userPosts)
Values are illustrative.
{"type": "video","videoId": "7400000000000000001","url": "https://www.tiktok.com/@sample.creator/video/7400000000000000001","description": "My morning routine in 60 seconds #skincare #glassskin","hashtags": ["skincare", "glassskin"],"createdAt": "2026-10-08T16:31:16Z","durationSeconds": 58.4,"playCount": 182400,"likeCount": 15230,"commentCount": 412,"shareCount": 960,"collectCount": 2105,"downloadCount": 88,"authorHandle": "sample.creator","authorName": "Sample Creator","authorFollowerCount": 245000,"authorVerified": false,"authorId": "6800000000000000000","authorSecUid": "MS4wLjABAAAA...","authorAvatarUrl": "https://p16-sign.tiktokcdn-us.com/.../avatar.jpeg","authorBio": "Skincare tips every week","authorRegion": "US","musicTitle": "original sound - sample.creator","musicAuthor": "Sample Creator","coverUrl": "https://...","videoUrl": "https://...","textLanguage": "en","isPinned": false,"isSlideshow": false,"mentions": [],"width": 576,"height": 1024,"musicId": "7400000000000000999","musicOriginal": true,"authorFollowingCount": 180,"isPaidContent": false,"isAd": false,"sourceProfile": "sample.creator"}
In the other video modes the last field is keyword (search), hashtag (hashtag) or sourceMusicId (music) instead of sourceProfile.
Profile item (mode userSearch)
{"type": "user","userId": "6800000000000000000","handle": "sample.creator","url": "https://www.tiktok.com/@sample.creator","name": "Sample Creator","secUid": "MS4wLjABAAAA...","avatarUrl": "https://p16-sign.tiktokcdn-us.com/.../avatar.jpeg","bio": null,"followerCount": 245000,"followingCount": 180,"videoCount": 312,"totalLikeCount": 4870000,"verified": false,"isPrivate": false,"keyword": "skincare"}
How much does it cost?
The Actor uses pay-per-event pricing. You pay for two events:
| Event | Price | When it is charged |
|---|---|---|
Start fee (run-start) | $0.005 | For each keyword, hashtag, profile or sound you give it. The first one is charged when the first request to the data source succeeds, even if that request returns nothing. Each further one is charged before that input's first request and is kept even if that input then fails or returns nothing. |
Result (result) | $0.003 | For each video or profile returned. Profile-search results are $0.003 each too. |
The start fee is not charged when the data source fails from the start or rejects the inputs, or when your spending limit cannot cover it.
Worked examples:
- 100 videos for one keyword cost $0.005 + 100 x $0.003 = $0.305.
- 3 hashtags with 100 videos each cost 3 x $0.005 + 300 x $0.003 = $0.915.
- 20 videos from one profile cost $0.005 + 20 x $0.003 = $0.065.
On the free Apify plan, a run returns at most 20 results in total; any paid Apify plan removes the limit. On the free Apify plan each account can run this Actor up to 3 times per 24 hours and 10 times per 7 days, within a small lifetime free allowance shared across all our Actors, and all free accounts share a daily free budget. When any of these limits is reached, the run stops before fetching anything and nothing is charged.
The search filters (sort by relevance, most liked or latest, and limit to the last day, week, month, 3 or 6 months) cost nothing extra per video. You never pay for more than maxResults items per keyword, hashtag, profile or sound, and the run stops by itself if your spending limit is reached. The price of each event is also shown on the Actor page.
A keyword with no matches, a hashtag or sound that does not exist, or a profile with no public videos returns nothing but still costs its start fee, because the request was made. You are never charged for items the Actor did not deliver. If the data source is down for the whole run, nothing is charged; start fees already paid for inputs that were started are not refunded.
Use cases
- Trend and hashtag research: see which videos and sounds carry a hashtag right now, and how far they reach in views, likes and shares.
- Influencer and competitor tracking: pull a creator's recent posts with views, likes and comments to calculate engagement rates and posting frequency.
- Influencer discovery: search profiles by keyword and compare
followerCount,videoCount,totalLikeCountandverifiedbefore outreach. - Sound and music research: list the videos that use a sound and see who uses it and how those videos perform.
- Product and brand monitoring: find videos that mention a product, a brand or a campaign keyword, filtered by date and sorted by likes.
- AI and data projects: use TikTok captions, caption language and metrics as clean rows for classification, trend models and dashboards.
Integrations and API
You can start runs through the Apify API, schedule them in Apify Console (for example a daily hashtag check), and connect the results to Apify integrations and your own tools. Results are stored in an Apify dataset that you can download as JSON, CSV or Excel or read page by page.
Example with the Python apify-client package:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("clover_folktale/tiktok-scraper").call(run_input={"mode": "search","keywords": ["skincare", "glass skin"],"sortType": "most-liked","publishTime": "month","maxResults": 100})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
Tips and limits
- Profiles come 10 videos per page. A profile with
maxResults100 takes ten requests; this is how the data source delivers them. Videos come newest first, after any pinned videos. - Search can return fewer videos than you ask for. Search pages overlap, and each video is delivered once, so a keyword can run out of new videos before
maxResults. Very large limits on a narrow keyword often end early. regionis a hint. Search results can still include videos from other countries; checkauthorRegionon each video.- At most 50 inputs per run. Only the first 50 keywords, hashtags, profiles or sounds are used; extra ones are ignored without a warning.
- Empty inputs still pay their start fee. Check the spelling of hashtags and handles.
- Hashtag names must match exactly (any case). If TikTok has no hashtag with exactly that name, the hashtag returns nothing; it still uses its start fee because the lookup was made.
- Short links (vm.tiktok.com, tiktok.com/t/) are not supported. Use the full profile, video or tag link.
- Numbers are a snapshot. Views, likes and follower counts are what TikTok shows at the time of the run.
- Links are temporary. Cover, video file and profile picture links expire; download what you need soon after the run.
- Profile search order moves. TikTok ranks profile results itself and the order can differ between runs; pages overlap and each profile is delivered once, so a keyword can run out before
maxResults. - Sounds come about 12 videos per page.
- No comments. This Actor returns comment counts (
commentCount), not comment texts or commenters. - Often-empty fields: in search,
authorBiois empty because search results don't carry it; user-post results include it. InuserSearch,biois usually empty and there is no country code; useuserPostson a handle for the bio.videoUrlmay be empty, anddownloadCountandisAdare filled only when TikTok shows them. - If the data source goes down mid-run. If the data source becomes unavailable after results were delivered, the run stops cleanly and keeps them; you are never charged for items it did not deliver. Other data-source errors during a run end it with an error status.
- Free plan: a run returns at most 20 results in total; any paid Apify plan removes the limit.
FAQ
Do I need a TikTok account or login?
No. No TikTok account, API keys, proxies or cookies are needed.
Is it legal to scrape TikTok?
The Actor returns only public content: the video, its numbers and the author's public profile (@handle, display name, ID, profile picture, bio, country code of the video, follower count). It does not return private messages, commenters or IP locations. The bio is returned as published, including any business contact info the creator put there. You are responsible for how you use the data and for following the laws that apply to you.
How fresh is the data?
The data is read live during the run. Views, likes and follower counts are what TikTok shows at that moment.
Why are some fields empty?
Most fields TikTok does not send are null; lists such as hashtags and mentions are empty []. Search results don't carry the author's bio, and profile search results usually have no bio and no country code. Run userPosts on a handle to get the bio.
How many results can I get?
Up to 1,000 items per keyword, hashtag, profile or sound, set with maxResults, for up to 50 inputs per run. Search and profile search can end earlier when TikTok runs out of new results. On the free Apify plan a run returns at most 20 results in total.
Does it scrape TikTok comments?
No. You get the number of comments for each video (commentCount), but not the comments themselves.
Can I schedule runs and export the data?
Yes. You can schedule runs in Apify Console or start them through the Apify API, and export each dataset as JSON, CSV or Excel.
What if a hashtag, profile or sound does not exist?
It returns no items and still costs its $0.005 start fee, because the request was made. If the data source is down for the whole run, nothing is charged; start fees already paid for inputs that were started are not refunded. Missing a field or a mode? Open an issue from the Actor page and it will be looked at.
More tools from the same developer
- TikTok Shop Scraper - Products, SKUs, Reviews & Reviewer IDs
- Douyin 抖音 Scraper - Videos, Comments, User IDs & IP Location
- YouTube Scraper - Shorts, Channel Videos & Video Search
- Threads Scraper - Posts, Replies & User Profiles, No Login
- Reddit Scraper - Posts, Comments & User IDs, No Login
- Xiaohongshu 小红书 RedNote Scraper - Notes, Comments & User IP