TikTok Scraper
Pricing
from $2.00 / 1,000 video scrapeds
TikTok Scraper
Scrape TikTok videos, profiles, hashtags, search results, sounds and playlists in one Actor. Get views, likes, shares, saves, captions, subtitles, music and author data, plus comments with replies and follower lists. Date and popularity filters included free. Fast runs, pay only per result.
Pricing
from $2.00 / 1,000 video scrapeds
Rating
0.0
(0)
Developer
Coder
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Collect TikTok videos, profiles, hashtags, search results, sounds, playlists, comments and follower lists in one Actor, as clean, structured data.
Add usernames, hashtags, keywords or any TikTok link, choose how many videos you need, and export the results as JSON, CSV or Excel, or pull them through the Apify API. Results appear in your dataset while the run is still going.
What This Actor Does
- Scrapes profiles — account details plus their videos, reposts, public liked videos, playlists and active stories
- Scrapes hashtags, sounds and playlists
- Searches TikTok for videos, photo posts, creators or the Top tab
- Accepts any TikTok link — videos, photo posts, profiles, hashtags, sounds, playlists and short
vm.tiktok.com/vt.tiktok.comlinks - Returns views, likes, comments, shares, saves, captions, hashtags, mentions, music, cover images and photo-post images
- Optionally adds comments with their replies, nested inside each video
- Optionally adds the full author profile to every video
- Optionally adds subtitles as plain text, in every language TikTok provides
- Optionally collects followers and following lists
- Date filters, view and like filters and sorting are included at no extra cost
Best For
- Influencer discovery and creator vetting
- Trend, hashtag and sound research
- Competitor and brand monitoring
- Comment and sentiment analysis
- Building datasets for dashboards, BI, NLP or AI workflows
Input
Fill in at least one of Profiles, Hashtags, Search terms or TikTok links. You can combine them freely in one run.
Main input fields
| Field | What it does |
|---|---|
profiles | Usernames or profile links, e.g. khaby.lame, @khaby.lame or https://www.tiktok.com/@khaby.lame |
hashtags | Hashtags with or without #, e.g. fitness |
searchQueries | Keywords, exactly as you would type them into TikTok search |
startUrls | Any TikTok links — the link type is detected automatically |
resultsPerPage | How many videos to collect from each profile, hashtag, search term, sound or playlist (default 10) |
searchSection | Which search tab to use: videos, photos, creators or top |
profileSections | Which parts of a profile to collect: videos, reposts, liked, playlists, stories |
newerThan / olderThan | Only videos from a date range. Accepts a date (2025-06-01) or a relative period (7 days, 3 months) |
minViews / minLikes | Only videos above a popularity threshold |
sortBy | default, newest, oldest, mostViewed, mostLiked or mostShared |
includeComments / maxCommentsPerVideo | Add comments to each video |
includeReplies / maxRepliesPerComment | Add replies under each comment |
includeAuthorProfiles | Add the author's full profile to each video |
includeSubtitles | Add subtitle text to each video |
includeFollowers / includeFollowing / maxFollowersPerProfile | Collect follower and following lists (up to 1,000 per list) |
country | The country TikTok sees your requests coming from (default United States) |
Example input
{"profiles": ["khaby.lame"],"hashtags": ["booktok"],"searchQueries": ["healthy breakfast"],"resultsPerPage": 20,"newerThan": "30 days","sortBy": "mostViewed","includeComments": true,"maxCommentsPerVideo": 20}
Output
Results are split into three tables, each shown on the run's Output tab and each with its own export:
- Videos — one row per video or photo post (the default dataset)
- Profiles — one row per account, from profiles and creator searches
- Followers & following — one row per account in a follower or following list, with
profileUsernameshowing whose list it is
Videos collected from a profile link back to that profile through profileId, so the profile's details are stored once instead of being repeated on every video. Comments and their replies are nested inside each video, so a video and its conversation stay together in one row.
Every field is included when you export or use the API. The Export button on the run page exports videos; export profiles and follower lists from the Output or Storage tab.
Video fields
| Field | Description |
|---|---|
id, url | Video ID and link |
text | Caption |
createdAt | Upload time (ISO 8601) |
viewCount, likeCount, commentCount, shareCount, saveCount, repostCount | Engagement |
durationSeconds, width, height | Video details |
coverUrl, images | Cover image, and all images of a photo post |
isPhotoPost, isPinned, isAd, isAiGenerated | Flags |
hashtags, mentions | Hashtags and mentioned usernames |
music | Sound ID, title, author, original-sound flag, duration, cover and link |
author | Author ID and username — or the full profile when includeAuthorProfiles is on |
profileId | The profile row this video belongs to (videos collected from a profile) |
hasSubtitles, subtitles | Whether the video has subtitles, and their text when includeSubtitles is on |
comments | Comments with nested replies, when includeComments is on |
source | Where the video came from, e.g. { "type": "hashtag", "value": "booktok" } |
Profile fields
| Field | Description |
|---|---|
id, username, name, url | Account identity |
bio, bioLink, avatarUrl | Profile details |
followerCount, followingCount, likeCount, videoCount, friendCount | Account statistics |
verified, isPrivate, isBusinessAccount, isSeller, hasActiveStory | Flags |
createdAt | When the account was created (when TikTok shows it) |
Example output
A profile row:
{"type": "profile","id": "68616495085350913","username": "zachking","name": "Zach King","url": "https://www.tiktok.com/@zachking","bio": "Bringing a little more wonder into the world, 15 seconds at a time","bioLink": "https://youtu.be/ulVscDewRPI","verified": true,"isPrivate": false,"followerCount": 86879109,"followingCount": 182,"likeCount": 1297944129,"videoCount": 617,"createdAt": "2016-02-29T07:29:22.000Z","source": { "type": "profile", "value": "zachking" }}
A video row from a hashtag, with comments and replies:
{"type": "video","id": "7064703044331523375","url": "https://www.tiktok.com/@shereinabdelhady/video/7064703044331523375","text": "there's alot of emotions in this video 😂 #fyp #gym #fitness","createdAt": "2022-02-14T22:55:57.000Z","isPhotoPost": false,"viewCount": 43800000,"likeCount": 8700000,"commentCount": 34200,"shareCount": 66600,"saveCount": 176619,"durationSeconds": 26,"coverUrl": "https://p16-common-sign.tiktokcdn-us.com/...","hashtags": ["fyp", "gym", "fitness"],"mentions": [],"music": {"id": "7022717423417854725","title": "without me","author": "favsoundds","isOriginal": true,"durationSeconds": 34},"author": { "id": "6733632838111921157", "username": "shereinabdelhady" },"profileId": null,"hasSubtitles": false,"source": { "type": "hashtag", "value": "fitness" },"comments": [{"id": "7066227699052135174","text": "el último chico sintió hasta mariposas aksjkaka","createdAt": "2022-02-19T01:32:29.000Z","likeCount": 3624,"replyCount": 4,"isPinned": false,"isLikedByCreator": false,"author": {"id": "6803194333148742661","username": "kmipito","name": "kmi"},"replies": [{"id": "7071337386764567302","text": "Siiiiiiiiiii 😂😂","createdAt": "2022-03-04T20:00:39.000Z","likeCount": 27,"author": {"id": "6764505400462263302","username": "a_n_t_i_t_e_s_i_s"}}]}]}
A follower row (in the Followers & following table):
{"type": "follower","profileId": "68616495085350913","profileUsername": "zachking","id": "7301234567890123456","username": "example.user","name": "Example User","followerCount": 72,"followingCount": 172,"videoCount": 6}
How To Use
- Add profiles, hashtags, search terms or TikTok links.
- Set Maximum videos per source.
- Optionally add date or popularity filters and a sort order.
- Turn on comments, author profiles, subtitles or follower lists only if you need them.
- Run the Actor and open the Output tab, or export the results as JSON, CSV or Excel, or read them through the Apify API.
Pricing
This Actor uses pay-per-event pricing, so you only pay for results you receive:
- Video — each video or photo post saved to your dataset
- Profile — each profile row, and each unique author when Add full author profiles is on (charged once per author per run, however many of their videos you collect)
- Comment — each comment and each reply, only when comments are on
- Follower — each follower or followed account, only when follower lists are on
- Actor start — a small fee each time a run starts
Date filters, view and like filters, sorting, subtitles and country selection are included at no extra cost. Videos that are private, deleted or unavailable, and lists an account keeps hidden, are never charged. Current prices for each Apify plan are shown on the Actor's Pricing tab.
If a run reaches the maximum cost you set for it, it stops cleanly and keeps everything collected so far.
Free plan
On the Apify free plan every feature is available to try, with smaller amounts per run: up to 3 profiles, hashtags, search terms or links, 10 videos per source (5 per section when you select several profile sections), 10 comments per video, 3 replies per comment and 20 accounts per follower list. Upgrade to a paid Apify plan to remove these limits.
Best Practices
- Start with a small Maximum videos per source to check the output quickly.
- Use Only videos newer than for recurring monitoring, so each run only collects new videos. For profiles, the Actor jumps straight to your date range, so filtered runs are fast.
- Keep Scrape as if from on United States unless you need local results — it gives the most complete search results.
- Turn on comments only for runs that need them; runs without comments are faster and cheaper.
- Use JSON export when you need nested data such as comments, replies, subtitles and music.
FAQ
Why did a source return fewer videos than I asked for?
The profile, hashtag or search may simply have fewer matching videos, especially with date or popularity filters. The run log tells you when a source returned fewer results and why.
Can I collect private accounts?
No. For a private account only its public profile details are saved. Liked videos and following lists are collected only when the account has made them public; otherwise the log says so and nothing is charged.
How does sorting work?
Sorting orders the videos collected from each source, up to your Maximum videos per source. For profiles, Newest first and Oldest first come straight from TikTok, so an oldest-first run really starts at the account's first video.
Are subtitles available for every video?
Only for videos that have subtitles on TikTok, including TikTok's auto-generated captions. hasSubtitles tells you which videos have them.
How long does a run take?
Most runs finish in under a minute. Several profiles with 10 videos each typically take 10–20 seconds. Comments, replies and long follower lists add time.
Why does a follower list stop at 1,000?
Follower lists are loaded page by page, so very long lists are slow to collect. The limit keeps runs fast and predictable.
Responsible Use
This Actor collects publicly available data only. Make sure your use complies with TikTok's terms, applicable laws and data-protection rules such as the GDPR, especially when you process personal data such as usernames, profiles and comments.
Troubleshooting
- No results for a search term — try the United States country setting and a simpler keyword.
- A link was skipped — check that it is a public TikTok video, profile, hashtag, sound or playlist link.
- A profile could not be loaded — the account may have been renamed, banned or deleted.
If something still does not work, open an issue on the Actor's Issues tab with your run link and we will take a look.