TikTok Scraper - Video Search, Hashtags, Profiles & Sounds avatar

TikTok Scraper - Video Search, Hashtags, Profiles & Sounds

Pricing

from $3.00 / 1,000 videos

Go to Apify Store
TikTok Scraper - Video Search, Hashtags, Profiles & Sounds

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

Silkline

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

3 hours ago

Last modified

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

ModeGive itYou get
searchkeywords, optional sortType, publishTime, regionthe videos TikTok finds for each keyword, up to 1,000 per keyword
hashtaghashtagsthe videos listed under each hashtag, up to 1,000 per hashtag
userPostsprofilesthe latest videos of each public profile, pinned videos first (marked isPinned), then newest first, up to 1,000 per profile
userSearchkeywordsthe 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
musicsound IDs or tiktok.com/music/... linksthe videos that use each sound, up to 1,000 per sound

Video fields (modes search, hashtag, userPosts, music)

FieldWhat it is
playCountViews
likeCountLikes
commentCountComments
shareCountShares
collectCountTimes saved to favorites
downloadCountDownloads, when shown
descriptionCaption of the video
hashtagsHashtags of the video, without #
createdAtPublish time, ISO 8601 UTC
urlLink to the video
videoIdTikTok video ID
authorHandlePublic @handle of the author, without @
authorNameDisplay name of the author
authorIdNumeric TikTok ID of the author
authorSecUidSecure user ID (secUid) of the author, used in TikTok profile links
authorFollowerCountFollowers of the author
authorFollowingCountAccounts the author follows
authorVerifiedTrue for a verified account
authorBioAuthor's profile bio as published; null when empty
authorAvatarUrlLink to the author's profile picture (temporary link; download soon after the run)
authorRegionCountry code TikTok attaches to the video, e.g. US
musicTitleTitle of the sound
musicAuthorAuthor of the sound
musicIdID of the sound
musicOriginalTrue when the sound is the author's original sound
durationSecondsLength of the video in seconds
width, heightVideo width and height in pixels
textLanguageLanguage code of the caption as detected by TikTok (en, es; un when unknown)
mentionsNames mentioned with @ in the caption (display text, no user IDs)
isPinnedTrue when the video is pinned to the top of the author's profile
isSlideshowTrue for a photo slideshow post
isPaidContentTrue for paid (subscriber-only) content
isAdTrue when the video is an ad, when shown
coverUrlCover image link (temporary; download soon after the run)
videoUrlVideo file link (temporary; may be empty)
typeRecord type: video
keywordThe keyword that found the video (search mode)
hashtagThe hashtag the video was read from (hashtag mode)
sourceProfileThe profile the video was read from (userPosts mode)
sourceMusicIdThe 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)

FieldWhat it is
handlePublic @handle, without @
nameDisplay name
userIdNumeric TikTok ID of the profile
urlLink to the profile
followerCountFollowers
followingCountAccounts the profile follows
videoCountVideos posted
totalLikeCountLikes all the profile's videos received
verifiedTrue for a verified account
isPrivateTrue for a private account
secUidSecure user ID (secUid) of the profile
avatarUrlProfile picture link (temporary)
bioProfile bio as published; often empty in profile search results
keywordThe keyword that found the profile
typeRecord type: user

How to use TikTok Scraper

  1. Open TikTok Scraper in Apify Console.
  2. Choose a Mode: search videos by keyword, videos of a hashtag, videos of a profile, search profiles by keyword, or videos using a sound.
  3. Fill in the list that belongs to that mode: keywords, hashtags, profiles, userKeywords or musics. For video search you can also set sortType, publishTime and region.
  4. Set maxResults, the limit for each keyword, hashtag, profile or sound.
  5. Start the run and wait for it to finish.
  6. Open the dataset and export the results as JSON, CSV or Excel, or read them through the API.

Input

FieldTypeRequiredWhat it doesDefault
modestringrequiredsearch, hashtag, userPosts, userSearch or musicsearch
keywordsarray of stringsoptionalSearch keywords for search; each keyword is a separate search. Falls back to "skincare" when empty.prefilled with skincare
hashtagsarray of stringsoptionalHashtags for hashtag, as skincare, #skincare or a link (https://www.tiktok.com/tag/skincare). Falls back to "skincare" when empty.prefilled with skincare
profilesarray of stringsoptionalPublic 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
userKeywordsarray of stringsoptionalSearch keywords for userSearch; each keyword is a separate profile search. Falls back to "skincare" when empty.prefilled with skincare
musicsarray of stringsoptionalSound 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
sortTypestringoptionalOrder of the search results: relevance, most-liked or latest (search only)relevance
publishTimestringoptionalOnly videos published in this period: all, day, week, month, 3months or 6months (search only)all
regionstringoptionalTwo-letter country code sent with the search, such as US, GB or DE (search only). TikTok treats it as a hint.US
maxResultsintegeroptionalMaximum items for each keyword, hashtag, profile or sound, from 1 to 1,00020

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:

EventPriceWhen it is charged
Start fee (run-start)$0.005For 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.003For 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, totalLikeCount and verified before 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 ApifyClient
client = 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 maxResults 100 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.
  • region is a hint. Search results can still include videos from other countries; check authorRegion on 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, authorBio is empty because search results don't carry it; user-post results include it. In userSearch, bio is usually empty and there is no country code; use userPosts on a handle for the bio. videoUrl may be empty, and downloadCount and isAd are 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.

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