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
8
Total users
6
Monthly active users
5 hours ago
Last modified
Categories
Security
Limited permissionsShare
TikTok Scraper runs TikTok video search by keyword and extracts other public TikTok data as clean, flat JSON. It also works as a TikTok hashtag scraper: 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. You can also read one video's details, a profile's details, a video's comments and replies, a profile's followers and following, search suggestions for a keyword, and a video's 14-day analytics with an optional fake-view check. 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 nineteen modes. The video-list modes (search, hashtag, userPosts, music, userReposts, userPlaylists, photoSearch, explore) share one flat output, so one pipeline handles them. Every other mode returns its own record type, set in the type field.
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 |
videoDetail | videos (IDs, full video links or short share links) | one record per video with the video fields plus isAiGenerated and repostCount |
profile | profiles; optional includeMilestones, includeCountry | one record per profile: counts, bio, link in bio, country and creation time when TikTok shows them |
comments | videos, optional includeReplies | the comments of each video, up to 1,000 per video, with the commenter's public profile fields; with includeReplies, the replies of comments that have 3 or more, right after their comment |
userSounds | profiles | the sounds each profile has made or published: ID, title, artist, length, videos made with it, original flag, link (same fields as soundSearch, with sourceProfile); an account with no sounds returns nothing and costs you nothing; at least 2 sounds per profile are returned when it has them, whatever maxResults says |
aiArticle | videos | the AI-written long text TikTok shows for a video: title, summary, article, keywords and question-and-answer texts; a video without one returns nothing and costs you nothing |
followers | profiles; optional searchKeyword | the followers of each profile, with their public profile fields, up to 1,000 per profile; with searchKeyword, the followers whose name matches it (up to 50 per profile) |
following | profiles; optional searchKeyword | the accounts each profile follows (empty when the account hides the list); with searchKeyword, the followed accounts whose name matches it (up to 50 per profile) |
keywordSuggest | keywords | the search phrases TikTok suggests for each keyword, ranked |
userReposts | profiles | the videos each public profile reposted, up to 1,000 per profile (sourceProfile set) |
userPlaylists | profiles | the videos in the first 30 public playlists of each profile, one limit per profile, with playlistId and playlistTitle |
similarUsers | profiles | profiles TikTok recommends as similar to each profile (type user, sourceProfile set) |
soundSearch | keywords, optional includeSoundDetail | the sounds TikTok finds for each keyword: ID, title, artist, length, videos made with it, original flag, link. Use the IDs in the music mode. With includeSoundDetail, a second record per sound with album, release date and theme tags |
photoSearch | keywords | the photo posts (slideshows) TikTok finds for each keyword, as video records with imageUrls |
placeSearch | keywords | the places TikTok finds for each keyword: name, address, country, coordinates, number of videos |
explore | exploreCategories | videos from TikTok's explore feed per category (food, tech, comedy ...), exploreCategory set; the feed is random, so each request brings a different selection |
videoAnalytics | videos, optional includeFakeViewScore | per video: views, likes, comments and saves for the last 14 days, totals, a one-line reading and frequent comment phrases; with includeFakeViewScore, a second record with a fake-view score |
TikTok video search results and videos (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.
TikTok creator profile search (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 |
AI article fields (mode aiArticle)
type is aiArticle: videoId, articleTitle, articleSummary, article (markdown), articleKeywords and articleFaq (question-and-answer texts, when the video has them).
Sound fields (modes soundSearch, userSounds)
type is sound: musicId, title, author, durationSeconds, videoCount (videos made with the sound), isOriginal, coverUrl (temporary), playUrl (audio link when public, temporary), url and keyword (soundSearch) or sourceProfile (userSounds). The existing music mode takes sound IDs, and soundSearch is how you find them.
With includeSoundDetail each sound is followed by a record of type soundDetail: musicId, title, author, album, createdAt (when the sound was added), durationSeconds, videoCount, isOriginal, isCommercial, themeTags and url. It is delivered only when the details were found; a sound without details gets no second record and no extra charge. A sound that appears under two keywords gets its detail record once.
Place fields (mode placeSearch)
type is place: placeId, name, placeType, address, parentPlace (the city or region TikTok files it under), country (two-letter code), latitude, longitude, videoCount and keyword. The search matches loosely, so a keyword always returns places, not always exact ones.
Reposts, playlists, photos and explore (modes userReposts, userPlaylists, photoSearch, explore)
Video records with the video fields above, plus sourceProfile (reposts, playlists), playlistId and playlistTitle (playlists), keyword and imageUrls (photo posts: the slide image links, temporary; isSlideshow is true) or exploreCategory (explore). A video found twice in one run is delivered once.
Similar profiles (mode similarUsers)
type is user, with the profile fields of userSearch (handle, name, userId, secUid, followerCount, followingCount, videoCount, verified, bio, region, avatarUrl) and sourceProfile. The same profile recommended for two inputs appears once for each.
Profile details (mode profile)
type is profile: userId, secUid, handle, name, bio (as published), bioLink, avatarUrl (temporary), verified, isPrivate, followerCount, followingCount, likeCount (total likes received), videoCount, region, createdAt and url. region, bioLink and createdAt are null when TikTok does not show them.
With includeMilestones each profile of 1,000 followers or more is followed by a record of type creatorMilestones: userId, handle, followerCount, likeCount and milestones (each: milestone, title such as "Reached 1M followers", year, date, summary, and topVideos with videoId, description, createdAt, views, likes, comments, shares, saves). With includeCountry each profile is followed by a record of type profileCountry: userId, handle and country (the two-letter country the account is registered in). Each is one extra detail record, charged $0.002 only when it is returned; an account with no data returns nothing and costs you nothing. Profiles are then read one at a time.
Video details (mode videoDetail)
type is videoDetail. It has all the video fields above and two more: isAiGenerated (true when labelled AI-generated) and repostCount. If the main data path is down the fields come from a second one: then authorRegion, downloadCount and isAiGenerated can be null.
Comment fields (mode comments)
| Field | What it is |
|---|---|
commentId | Comment ID |
parentCommentId | ID of the comment this replies to; null for a top-level comment |
videoId | The video |
text | Text of the comment |
likeCount, replyCount | Likes and number of replies |
createdAt | Time, ISO 8601 UTC |
textLanguage | Language code TikTok detected |
isPinned, isLikedByCreator | Pinned by the creator, liked by the creator |
authorId, authorHandle, authorName, authorSecUid | Public identity of the commenter |
authorAvatarUrl | Profile picture link (temporary) |
authorBio, authorRegion, authorVerified | Bio as published, country code and verified flag, as TikTok shows them |
type | comment |
Follower and following fields (modes followers, following)
type is follower or following. Fields: sourceProfile (the profile you gave), userId, secUid, handle, name, avatarUrl (temporary), verified, bio, followerCount, followingCount, videoCount, region. The same account in the lists of two profiles appears once for each.
Suggestion fields (mode keywordSuggest)
type is suggestion: keyword (yours), suggestion (the phrase) and rank (1 is first).
Analytics fields (mode videoAnalytics)
type is videoAnalytics: videoId, totals playCount, likeCount, commentCount, collectCount, daily (the last 14 days, oldest first: date, views, likes, comments, collects gained that day), summary (TikTok's one-line reading) and commentKeywords (frequent phrases in the comments with example comments; null if unavailable). With includeFakeViewScore a second record of type fakeViewScore follows: videoId, fakeScore (0 to 100), confidence, isSuspicious, estimatedFakeViews, fakeViewPercentage, mainReason, componentScores, suspiciousFeatures, estimatedOrganicViews, trafficPool, expectedTrafficPool, creatorTrustScore. A video with no analytics (unknown or too new) returns nothing and gets no fake-view check; after the first video that gets no score, no further scores are requested in the run.
How to use TikTok Scraper
- Open TikTok Scraper in Apify Console.
- Choose a Mode, for example search videos by keyword, comments of a video, followers of a profile or video analytics.
- Fill in the list that belongs to that mode:
keywords,hashtags,profiles,userKeywords,musicsorvideos. 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, music, videoDetail, profile, comments, followers, following, keywordSuggest, videoAnalytics, userReposts, userPlaylists, similarUsers, soundSearch, photoSearch, placeSearch, explore, userSounds or aiArticle | search |
keywords | array of strings | optional | Search keywords for search, keywordSuggest, soundSearch, photoSearch and placeSearch; 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 |
searchKeyword | string | optional | Modes followers and following: search the list for a name instead of listing it. Up to 50 matches per profile (at least 4 per profile are returned when there are that many, whatever maxResults says), charged as lite. A profile with no match costs you nothing, and the search stops after 3 profiles in a row with no match | none |
profiles | array of strings | optional | Public profiles for userPosts, profile, followers, following, userReposts, userPlaylists, similarUsers and userSounds, 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 |
exploreCategories | array of strings | optional | Categories for explore: all, animation-comics, performance, beauty-care, gaming, comedy, daily-life, family, relationships, drama, fashion, lip-sync, food, sports, animals, society, cars, education, fitness-health, tech, singing-dancing. Each is a separate input. | prefilled with food |
videos | array of strings | optional | Video IDs or full video links for videoDetail, comments and videoAnalytics; videoDetail also takes short vm.tiktok.com, vt.tiktok.com and tiktok.com/t/ links. Falls back to a sample video when empty. | prefilled with a sample video |
includeReplies | boolean | optional | comments only: also collect replies of comments with 3 or more replies | false |
includeMilestones | boolean | optional | profile only: add a creator milestones record per profile of 1,000 followers or more ($0.002 each, only when found) | false |
includeCountry | boolean | optional | profile only: add an account country record per profile ($0.002 each, only when found) | false |
includeFakeViewScore | boolean | optional | videoAnalytics only: add a fake-view check per video ($0.03 each) | false |
includeSoundDetail | boolean | optional | soundSearch only: add a detail record per sound ($0.002 each, only when found) | false |
sortType | string | optional | Order of the search results: relevance, most-liked or latest, which favours recent videos but is not strictly by date. If a keyword runs out before maxResults, the rest comes from TikTok's general video results, most liked first. With publishTime set there is no such top-up, so a run can return fewer videos; with a region other than US, results come from the general video results, most liked first (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, and it is not applied together with publishTime. | US |
maxResults | integer | optional | Maximum items for each keyword, hashtag, profile, sound, video or category, from 1 to 1,000 (replies count toward their video's limit) | 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.
TikTok video search by keyword
{"mode": "search","keywords": ["skincare", "glass skin"],"sortType": "most-liked","publishTime": "month","maxResults": 100}
TikTok hashtag videos
{"mode": "hashtag","hashtags": ["skincare", "https://www.tiktok.com/tag/glowup"],"maxResults": 100}
TikTok videos of a profile
{"mode": "userPosts","profiles": ["khaby.lame", "https://www.tiktok.com/@charlidamelio"],"maxResults": 50}
Search TikTok profiles by keyword
{"mode": "userSearch","userKeywords": ["skincare"],"maxResults": 50}
TikTok videos using a sound
{"mode": "music","musics": ["https://www.tiktok.com/music/Face-Off-7016547803243022337"],"maxResults": 50}
Comments of a video
{"mode": "comments","videos": ["https://www.tiktok.com/@khaby.lame/video/7694335322922044703"],"includeReplies": true,"maxResults": 200}
Followers, profile details, suggestions, analytics
{ "mode": "followers", "profiles": ["khaby.lame"], "maxResults": 500 }{ "mode": "profile", "profiles": ["khaby.lame", "charlidamelio"] }{ "mode": "keywordSuggest", "keywords": ["skincare"] }{ "mode": "userReposts", "profiles": ["khaby.lame"], "maxResults": 100 }{ "mode": "userPlaylists", "profiles": ["mrbeast"], "maxResults": 100 }{ "mode": "similarUsers", "profiles": ["khaby.lame"], "maxResults": 60 }{ "mode": "soundSearch", "keywords": ["love"], "maxResults": 40 }{ "mode": "soundSearch", "keywords": ["love"], "maxResults": 20, "includeSoundDetail": true }{ "mode": "photoSearch", "keywords": ["cats"], "maxResults": 40 }{ "mode": "placeSearch", "keywords": ["paris"], "maxResults": 40 }{ "mode": "explore", "exploreCategories": ["food", "tech"], "maxResults": 100 }{ "mode": "videoAnalytics", "videos": ["7694335322922044703"], "includeFakeViewScore": true }
Output example
TikTok 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.
TikTok 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 these events:
| Event | Price | When it is charged |
|---|---|---|
Start fee (run-start) | $0.00005 | For each keyword, hashtag, profile, sound or category you give it, and for each video (comments), profile (followers, following) or keyword (keywordSuggest) in those modes. In videoDetail, profile and videoAnalytics it is charged once per run, not per input. The first one is charged when the first request 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-search record returned (search, hashtag, userPosts, userSearch, music, userReposts, userPlaylists, similarUsers, soundSearch, photoSearch, userSounds) and each videoAnalytics record. |
Detail (detail) | $0.002 | For each videoDetail record, profile record and keywordSuggest suggestion, and for each aiArticle, creatorMilestones and profileCountry record, each sound detail record (includeSoundDetail, only when the details are delivered). |
Lite (lite) | $0.001 | For each comment or reply (comments), follower (followers) and followed account (following; also each match of a searchKeyword search), place (placeSearch) and explore video (explore). |
Audit (audit) | $0.03 | For each fake-view score (includeFakeViewScore); only charged when a score is delivered. |
The start fee is not charged when the run 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.00005 + 100 x $0.003 = $0.30005.
- 3 hashtags with 100 videos each cost 3 x $0.00005 + 300 x $0.003 = $0.90015.
- 20 videos from one profile cost $0.00005 + 20 x $0.003 = $0.06005.
- 500 comments of one video cost $0.00005 + 500 x $0.001 = $0.50005.
- 60 reposts of one profile cost $0.00005 + 60 x $0.003 = $0.18005.
- 100 explore videos of one category cost $0.00005 + 100 x $0.001 = $0.10005.
- Details of 10 videos cost $0.00005 + 10 x $0.002 = $0.02005 (one start fee for the whole run).
- Analytics with a fake-view check for one video cost $0.00005 + $0.003 + $0.03 = $0.03305.
On the free Apify plan you get 2 free trial runs of this Actor with your own input, up to 10 results each, and nothing is charged; after that, runs return a stored sample dataset (a real result of the prefilled input). Use any paid Apify plan for full runs.
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 a run fails from the start, nothing is charged; a start fee already paid is 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 platform 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. - Keyword search runs several keywords at once. 32 keywords with up to 500 videos each finish in about 2 minutes. Videos of different keywords are interleaved in the dataset; each video carries its
keyword, and within one keyword videos keep TikTok's order. 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 share links (vm.tiktok.com, vt.tiktok.com, tiktok.com/t/) work in
videoDetailmode. In every other mode use the full profile, video or tag link. Each short link costs what a video ID costs; one that no longer opens a video, points to a profile, or does not answer in time returns nothing for that link and the run goes on. If a short link brings nothing, open it in a browser and paste the full video link instead. - 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.
- Comments come about 50 per page, followers about 50 per page. Accounts that hide their following list return nothing; the start fee still applies.
- Replies are only collected for comments with 3 or more replies, and count toward the limit of their video.
- Video details, profile details and analytics: an unknown ID returns nothing and costs no per-item fee, and the next ID still runs.
- Suggestions are sometimes empty for a keyword; the Actor asks once more.
- 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 a run stops mid-way. If a run stops after results were delivered, it keeps them; you are never charged for items it did not deliver.
- Unreadable entries. If one entry of an ID or link list cannot be read (a typo, a stray cell, a link to the wrong kind of page), it is skipped and named in the log, and the status message says how many were skipped; the other entries still run and nothing is charged for a skipped one. Only a list with no readable entry stops the run with an input error.
- Free plan. On the free Apify plan you get 2 free trial runs of this Actor with your own input, up to 10 results each, and nothing is charged; after that, runs return a stored sample dataset (a real result of the prefilled input). Use any paid Apify plan for full runs.
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, followers and followed accounts come with the public profile fields TikTok shows next to them. 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.
Does it scrape TikTok comments?
Yes, with mode comments: comments, and optionally the replies of comments that have 3 or more, with the commenter's public profile fields.
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.00005 start fee, because the request was made. If a run fails from the start, nothing is charged; a start fee already paid is not refunded. Missing a field or a mode? Open an issue from the Actor page and it will be looked at.
Other tools by Silkline
Every tool below charges per result and needs no login or cookies.
Global platforms
- TikTok Live Scraper - Search, Status, Rankings & Gifters
- YouTube Shorts Scraper - Search, Channel Shorts & Videos
- Instagram Scraper - Posts, Reels, Profiles & Followers
- Reddit Scraper - Posts, Comments, Subreddits & Users
- Threads Scraper (Meta) - Posts, Replies, Profiles & Search
- Telegram Channel Scraper - Messages, Search & Subscribers
- IMDb Scraper - Top 250 Movies & TV Shows Chart, Ratings
More from Silkline
- Xiaohongshu 小红书 RedNote Scraper - Notes, Comments & Replies (Chinese social media and content)
- Taobao Tmall 淘宝 Product Scraper - Prices, Sales & Shops (E-commerce)
- Douyin Xingtu 巨量星图 KOL Scraper - Rates, CPM & Rankings (Marketing and creator data)