Tiktok Profile Scraper avatar

Tiktok Profile Scraper

Pricing

from $3.00 / 1,000 results

Go to Apify Store
Tiktok Profile Scraper

Tiktok Profile Scraper

Scrape TikTok profiles and their video or repost history.

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

Crawler Bros

Crawler Bros

Maintained by Community

Actor stats

0

Bookmarked

35

Total users

12

Monthly active users

4 days ago

Last modified

Share

Scrape TikTok profiles and their video or repost history. The actor emits a profile row (rowType=profile) with full account metadata and then individual post rows (rowType=video or rowType=repost) for each piece of content. Without a session cookie the actor returns profile info plus approximately 14 recent videos from search; with a sessionCookie it can retrieve the full video history up to 500 posts. Reposts are available without a cookie.

What this actor does

  • Accepts TikTok usernames (with or without @) and/or full profile URLs
  • Emits a dedicated profile row per account with follower/following/like/video counts and account settings
  • Emits separate post rows for each video or repost, selectable via contentTypes
  • Retrieves up to ~14 recent videos without authentication via search fallback
  • With a sessionCookie or full cookies export, retrieves the complete video history (up to 500 posts)
  • Reposts (videos the user has shared from other creators) are extracted without a cookie
  • Empty fields are omitted

Output per profile row

The bullets below highlight the most commonly used fields. The full, authoritative field reference (every field the actor can emit, with descriptions) is the Output tab / .actor/dataset_schema.json in the source — every field listed there is populated with real data when TikTok provides it and omitted otherwise (no nulls or empty placeholders).

  • rowType — always "profile" for profile rows
  • userId — TikTok user ID
  • secUid — TikTok secUid
  • username — @handle
  • displayName — display name / nickname
  • verified — verification badge status
  • privateAccount — whether the account is private
  • bio — profile bio text
  • bioLink — clickable link in bio (if set)
  • language — account's primary language setting
  • isOrganization — whether the account is registered as an organization
  • ttSeller — whether the account is a TikTok Shop seller
  • roomId — live room ID (non-empty when currently streaming)
  • followerCount — total followers
  • followingCount — total accounts followed
  • heartCount — total likes received across all videos
  • videoCount — number of public videos
  • diggCount — number of posts liked by this user
  • avatarLarger / avatarMedium / avatarThumb — avatar image URLs at different resolutions
  • createTime / createdAt — account creation timestamp (Unix / ISO 8601)
  • commentSetting / duetSetting / stitchSetting / downloadSetting — who can comment/duet/stitch/download the user's posts
  • followingVisibility — who can see the user's following list
  • openFavorite — whether the user's liked videos are publicly visible
  • profileEmbedPermission — whether the user allows profile embedding
  • profileTab — visibility of profile tabs (music, questions, playlists)
  • UserStoryStatus — TikTok Stories status flag
  • profileUrl — canonical TikTok profile URL
  • scrapedAt — ISO 8601 scrape timestamp

Output per video/repost row

The bullets below highlight the most commonly used fields. The full, authoritative field reference (every field the actor can emit, with descriptions) is the Output tab / .actor/dataset_schema.json in the source — every field listed there is populated with real data when TikTok provides it and omitted otherwise (no nulls or empty placeholders).

  • rowType"video" or "repost"
  • contentKind — same as rowType for filtering convenience
  • profileUsername — the queried username that produced this row
  • postId — unique post ID
  • postUrl — canonical post URL
  • postType"video" or "slideshow"
  • caption — post caption text
  • textLanguage — detected language code of the caption
  • locationCreated — ISO country code where the post was created
  • createTime / createdAt — publication timestamp (Unix / ISO 8601)
  • likeCount / commentCount / shareCount / playCount / collectCount / repostCount — engagement counters
  • stitchEnabled / shareEnabled / duetEnabled — post-level permission flags
  • isAd / isAigc / isECVideo / privateItem — content-type/visibility flags
  • author.* — author snapshot at scrape time: id, secUid, username, displayName, bio, verified, privateAccount, roomId, avatarUrl, followerCount, followingCount, heartCount, videoCount
  • music.* — sound used: id, title, authorName, original, duration, isCopyrighted, isCommerceMusic, isUnlimitedMusic, isPrivate, shootDuration, album, playUrl, coverUrl, musicUrl, dspLinks
  • video.* — technical metadata and signed URLs: width, height, duration, ratio, definition, bitrate, codecType, format, size, playUrl, downloadAddr, cover, originCover, dynamicCover, videoQuality, hasSubtitles, subtitleInfos, bitrateInfo, volumeInfo
  • images — image list for slideshow posts (postType="slideshow")
  • hashtags — array of {id, name, isCommerce} hashtag objects
  • mentions — array of {username, start, end, awemeId} @mention objects
  • mediaUrlExpiresAt — when signed media URLs (video/cover) expire
  • commentStatus / adLabelVersion / forFriend / originalItem / viewerRegion / AIGCDescription — additional TikTok-provided post metadata
  • stickersOnItem / effectStickers / diversificationLabels / channelTags / item_control / contents / poi / warnInfo — richer post metadata (interactive stickers, effects, category labels, structured caption segments, tagged location, content warnings) present when TikTok supplies them

Input

FieldTypeDefaultDescription
usernamesarrayTikTok usernames to scrape (with or without @)
profileUrlsarrayFull TikTok profile URLs as alternative or additional input
contentTypesarray["profile","videos"]Which rows to emit: any combination of "profile", "videos", "reposts"
maxPostsPerProfileinteger30Maximum combined post rows per profile, across videos and reposts together (0 = skip posts)
includeProfileInfobooleantrueInclude profile metadata in the profile row
sessionCookiestringTikTok sessionid cookie value — required for full video history
cookiesarrayFull browser cookie export as JSON array (Cookie-Editor format)
ttwidstringTikTok ttwid device cookie — enables immediate video listing
{
"usernames": ["natgeo"],
"contentTypes": ["profile", "videos"],
"maxPostsPerProfile": 10
}

Example: Reposts only

{
"usernames": ["khaby.lame", "charlidamelio"],
"contentTypes": ["reposts"],
"maxPostsPerProfile": 50
}
{
"usernames": ["natgeo"],
"contentTypes": ["profile", "videos"],
"maxPostsPerProfile": 200,
"sessionCookie": "your_sessionid_value_here"
}

Example: Multiple profiles — profile metadata only

{
"usernames": ["natgeo", "bbcnews", "cnn"],
"contentTypes": ["profile"],
"maxPostsPerProfile": 0
}

Use cases

  • Influencer research — pull profile stats and recent video performance for creator discovery and vetting
  • Competitive benchmarking — track a competitor brand account's posting frequency and engagement trends over time
  • Audience and content auditing — export a creator's complete video history for content strategy or brand safety review
  • Repost tracking — identify what external content a creator is amplifying through reposts
  • Social media archival — build structured archives of public TikTok accounts for research or compliance purposes
  • Agency reporting — collect cross-account profile snapshots for client portfolio dashboards

FAQ

Do I need a TikTok account or cookies? Not for profile metadata or reposts. For the complete video list you need a sessionCookie or full cookies export, because TikTok's video listing API blocks unauthenticated datacenter requests.

How many videos can I get without a cookie? Roughly 10-40 recent videos per profile, even when maxPostsPerProfile is set much higher. The actor runs a multi-strategy fallback cascade (search API, in-page fetch, mobile API, scroll, related-item expansion) that paginates as far as TikTok allows, but on large/high-follower accounts TikTok's anti-bot defenses eventually block pagination continuation for anonymous/residential-proxy sessions, capping the anonymous yield at that range. Reposts are not subject to this ceiling and paginate fully up to maxPostsPerProfile. For a profile's complete video history, provide a sessionCookie or full cookies browser export.

How do I get my sessionCookie? Install the Cookie-Editor browser extension, log into TikTok, click the icon, find the cookie named sessionid, and copy its value. Paste that value into the sessionCookie field.

What is the difference between sessionCookie and cookies? sessionCookie accepts only the sessionid value and is enough on its own to enable the video-list API and full video history retrieval. cookies accepts the full browser cookie export (Cookie-Editor JSON format) and provides the complete session context including msToken and ttwid — this gives the most reliable video list retrieval.

What is ttwid? A non-personal device tracking cookie from TikTok. Providing your browser's ttwid value lets the actor bypass the typical 7-day device-aging period that TikTok applies to new (unknown) devices. Find it in browser DevTools under Application → Cookies → tiktok.com.

What is a repost? A video from another creator that the profile owner has re-shared to their own followers using TikTok's repost feature. The original author and post ID are preserved in the output.

What does includeProfileInfo: false do? The profile row is still emitted but without the detailed metadata fields (follower counts, bio, settings). Useful when you only want the post rows.

Can I scrape private accounts? Profile metadata for private accounts is visible, but their video grid is not accessible without being an approved follower.

Why did I get 0 videos for some profiles even without any errors? Without a sessionCookie/cookies/ttwid, video listing relies on TikTok's public search-fallback endpoint, which requires TikTok's anti-bot signature (X-Bogus/X-Gnarly/msToken) to be freshly and validly generated for that specific request. This succeeds most of the time on a RESIDENTIAL proxy, but TikTok can still reject the request for some accounts/sessions with an empty response, independent of proxy quality. The profile row and reposts are unaffected by this — only the videos content type can occasionally under-deliver. Providing a sessionCookie makes video retrieval far more reliable.

Why does video.playUrl / video.downloadAddr / music.playUrl give me a 403 error when I open it in my browser? These are signed CDN URLs that TikTok's Akamai infrastructure ties to the IP/session that originally requested them during scraping. Opening the same URL later from a different network (e.g. your own computer) commonly returns a 403 Access Denied error even though the URL itself is valid and unmodified. This applies to video.playUrl, video.downloadAddr, and music.playUrl alike. This is expected TikTok CDN behavior, not a data quality issue — the URL still reflects the real signed address returned by TikTok at scrape time.

Why does music.coverUrl occasionally 404? This field is passed through verbatim from TikTok's own API response (music.cover_large_url/cover_medium_url). For a small fraction of tracks (well under 10%) TikTok's own metadata points to a stale/moved unsigned CDN asset that no longer resolves — this reflects upstream data quality, not a scraping defect. All other media URLs (video.cover/originCover/dynamicCover, author.avatarUrl, music.musicUrl, postUrl) are unaffected.

Build a complete TikTok data pipeline with our full suite:

ScraperURL
TikTok Post Scraperhttps://apify.com/crawlerbros/tiktok-post-scraper
TikTok Comments Scraperhttps://apify.com/crawlerbros/tiktok-comments-scraper
TikTok Search Scraperhttps://apify.com/crawlerbros/tiktok-search-scraper
TikTok Hashtag Scraperhttps://apify.com/crawlerbros/tiktok-hashtag-scraper
TikTok Music Scraperhttps://apify.com/crawlerbros/tiktok-music-scraper
TikTok Transcript Scraperhttps://apify.com/crawlerbros/tiktok-transcript-scraper
TikTok Followers Scraperhttps://apify.com/crawlerbros/tiktok-followers-scraper
TikTok Mention Scraperhttps://apify.com/crawlerbros/tiktok-mention-scraper
TikTok Profile Mention Scraperhttps://apify.com/crawlerbros/tiktok-profile-mention-scraper
TikTok Playlist Scraperhttps://apify.com/crawlerbros/tiktok-playlist-scraper
TikTok Explore Scraperhttps://apify.com/crawlerbros/tiktok-explore-scraper
TikTok For You Scraperhttps://apify.com/crawlerbros/tiktok-for-you-scraper
TikTok Downloaderhttps://apify.com/crawlerbros/tiktok-downloader-api
TikTok Ads Library Scraperhttps://apify.com/crawlerbros/tiktok-ads-library-scraper-pro
TikTok Top Ads Scraperhttps://apify.com/crawlerbros/tiktok-top-ads-scraper
TikTok Hashtag Trends Scraperhttps://apify.com/crawlerbros/tiktok-hashtag-trends-scraper
TikTok LIVE Scraperhttps://apify.com/crawlerbros/tiktok-live-scraper