TikTok Scraper avatar

TikTok Scraper

Pricing

from $0.80 / 1,000 video scrapeds

Go to Apify Store
TikTok Scraper

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

Coder

Maintained by Community

Actor 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.com links
  • 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

FieldWhat it does
profilesUsernames or profile links, e.g. khaby.lame, @khaby.lame or https://www.tiktok.com/@khaby.lame
hashtagsHashtags with or without #, e.g. fitness
searchQueriesKeywords, exactly as you would type them into TikTok search
startUrlsAny TikTok links — the link type is detected automatically
resultsPerPageHow many videos per profile, hashtag, search, sound or playlist (default 10; 0 = profiles/followers only)
searchSectionWhich search tab to use: videos, photos, creators or top
profileSectionsWhich parts of a profile to collect: videos, reposts, liked, playlists, stories
newerThan / olderThanOnly videos from a date range. Accepts a date (2025-06-01) or a relative period (7 days, 3 months)
minViews / minLikesOnly videos above a popularity threshold
sortBydefault, newest, oldest, mostViewed, mostLiked or mostShared
excludePinnedPostsLeave out videos a creator pinned to the top of their profile
includeComments / maxCommentsPerVideoAdd comments to each video
includeReplies / maxRepliesPerCommentAdd replies under each comment
commentLayoutrows (default: one row per comment or reply) or threads (one row per comment, replies nested)
commentSortdefault, mostLiked or newest
commentsNewerThan / minCommentLikes / commentKeywordsOnly comments from a date, above a like count, or containing a word
includeSubtitlesAdd subtitle text to each video
includeFollowers / includeFollowing / maxFollowersPerProfileCollect follower and following lists (up to 10,000 per list)
countryCollect 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 type column (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 profileUsername showing 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

FieldDescription
id, urlVideo ID and link
textCaption
createdAtUpload time (ISO 8601)
viewCount, likeCount, commentCount, shareCount, saveCount, repostCountEngagement
durationSeconds, width, heightVideo details
coverUrl, imagesCover image, and all images of a photo post
originalCoverUrl, videoUrl, downloadUrl, definition, formatMedia links and quality
isPhotoPost, isPinned, isAd, isAiGenerated, isSponsored, hasShopProductFlags
language, locationCaption language, and the tagged place (name, city, country) when there is one
hashtags, hashtagDetails, mentions, mentionedUsers, effectsHashtags (with IDs), mentioned users (with IDs) and effects used
musicSound ID, title, author, original-sound flag, duration, cover and link
authorThe author's full profile (free, always included)
profileIdThe profile row this video belongs to (videos collected from a profile)
hasSubtitles, subtitlesWhether the video has subtitles, and their text when includeSubtitles is on
sourceWhere the video came from, e.g. { "type": "hashtag", "value": "booktok" }

Profile fields

FieldDescription
id, username, name, urlAccount identity
bio, bioLink, avatarUrlProfile details
followerCount, followingCount, likeCount, videoCount, friendCountAccount statistics
verified, isPrivate, isBusinessAccount, isSeller, hasActiveStoryFlags
createdAtWhen 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

  1. Add profiles, hashtags, search terms or TikTok links.
  2. Set Maximum videos per source.
  3. Optionally add date or popularity filters and a sort order.
  4. Turn on comments, subtitles or follower lists only if you need them.
  5. 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.