TikTok Scraper
Pricing
from $0.80 / 1,000 video scrapeds
TikTok Scraper
Scrape TikTok videos, profiles, hashtags, search results, sounds and playlists. Get views, likes, shares, saves, captions, subtitles, music and full author stats, plus comments with replies and up to 10,000 followers per profile. Date filters, sorting and country are free. Fast runs.
Pricing
from $0.80 / 1,000 video scrapeds
Rating
0.0
(0)
Developer
Coder
Maintained by CommunityActor stats
0
Bookmarked
42
Total users
30
Monthly active users
4 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 in their own Comments & replies table (one row per comment or reply, or replies nested in their comment), with Most liked / Newest order and date, like and keyword filters
- Adds the full author profile (followers, likes, video count, bio) to every video, free and always included
- Optionally adds subtitles as plain text, in every language TikTok provides
- Optionally collects followers and following lists
- Date filters, view and like filters, sorting, author profiles, subtitles and country selection 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 per profile, hashtag, search, sound or playlist (default 10; 0 = profiles/followers only) |
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 |
excludePinnedPosts | Leave out videos a creator pinned to the top of their profile |
includeComments / maxCommentsPerVideo | Add comments to each video |
includeReplies / maxRepliesPerComment | Add replies under each comment |
commentLayout | rows (default: one row per comment or reply) or threads (one row per comment, replies nested) |
commentSort | default, mostLiked or newest |
commentsNewerThan / minCommentLikes / commentKeywords | Only comments from a date, above a like count, or containing a word |
includeSubtitles | Add subtitle text to each video |
includeFollowers / includeFollowing / maxFollowersPerProfile | Collect follower and following lists (up to 10,000 per list) |
country | Collect results as TikTok shows them in this country (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
The main results table always holds what you asked for:
- Videos — one row per video or photo post
- When a run collects no videos (only profiles, a creator search or follower lists), all its rows go into the main table instead, with a
typecolumn (profile,follower,following), so the run's result count is always right
When a run collects videos, profiles and follower lists get their own tables next to it, each on the run's Output tab and each with its own export:
- 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 - Comments & replies — when comments are on: one row per comment or reply (or one row per comment with its replies nested, with Comments layout = Replies nested)
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. Each comment row carries type (comment or reply), parentCommentId, mentions, the commenter's profile link and verified badge, and videoId, videoUrl, videoAuthor and videoCaption to match it to its video.
Every field is included when you export or use the API. The Export button on the run page exports the main table; export the other tables 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 |
originalCoverUrl, videoUrl, downloadUrl, definition, format | Media links and quality |
isPhotoPost, isPinned, isAd, isAiGenerated, isSponsored, hasShopProduct | Flags |
language, location | Caption language, and the tagged place (name, city, country) when there is one |
hashtags, hashtagDetails, mentions, mentionedUsers, effects | Hashtags (with IDs), mentioned users (with IDs) and effects used |
music | Sound ID, title, author, original-sound flag, duration, cover and link |
author | The author's full profile (free, always included) |
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 |
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:
{"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","name": "Sherein","verified": false,"followerCount": 1240000,"likeCount": 31200000,"videoCount": 412},"profileId": null,"hasSubtitles": false,"source": { "type": "hashtag", "value": "fitness" }}
A reply row (in the Comments & replies table):
{"type": "reply","id": "7230818143198921499","text": "the butteriest burger i ever seen","createdAt": "2023-05-08T14:27:43Z","likeCount": 539,"replyCount": 0,"isLikedByCreator": false,"mentions": [],"author": { "id": "6607828058173947909", "username": "meryy_690", "isVerified": false, "profileUrl": "https://www.tiktok.com/@meryy_690" },"parentCommentId": "7230126412157289259","isByVideoCreator": false,"videoId": "7229884545150061851","videoUrl": "https://www.tiktok.com/@gordonramsayofficial/video/7229884545150061851","videoAuthor": "gordonramsayofficial"}
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, 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 (author profiles inside videos are free)
- 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, author profiles, 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. If a country has nothing for a source, the Actor tries United States for it automatically.
- 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 subtitles and music. Comments are already one row each, ready for CSV or Excel.
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 seconds: ten profiles with 30 videos each typically take under 10 seconds, and 2,000 comments with their replies under a minute. Long follower lists add time.
How many followers can I collect?
Up to 10,000 followers (and, separately, 10,000 followed accounts) per profile. Follower lists load page by page, so large lists take a few minutes. Some accounts hide their lists; the log tells you when that happens and nothing is charged.
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.