TikTok Scraper — Profiles, Posts & Video Details avatar

TikTok Scraper — Profiles, Posts & Video Details

Pricing

from $1.50 / 1,000 tiktok profiles

Go to Apify Store
TikTok Scraper — Profiles, Posts & Video Details

TikTok Scraper — Profiles, Posts & Video Details

Extract TikTok profiles, recent posts, video and photo details, photo search results, playlists, and LIVE status with low-traffic HTTP requests.

Pricing

from $1.50 / 1,000 tiktok profiles

Rating

0.0

(0)

Developer

ScrapingMonkey

ScrapingMonkey

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

TikTok Scraper — Profiles, Posts, Videos, Photos and LIVE Status

Extract structured public TikTok data with low-traffic HTTP requests. The Actor does not start Chrome, Playwright, or another browser and does not require a TikTok account, cookies, or an API key.

  • Collect complete public profile identity, biography, counts, avatars, and account flags
  • Return one profile row plus up to 22 recent media rows for each username
  • Enrich recent posts with complete public engagement, author, music, hashtag, video, and photo data
  • Extract individual video and photo/slideshow details from URLs or IDs
  • Paginate public TikTok Photo Search results
  • Resolve public creator playlist metadata and LIVE status
  • Process inputs concurrently with retry, proxy-session rotation, filtering, sorting, and deduplication
  • Export one stable 113-field contract through a single Results table

What can you do with this Actor?

ModeInputOutputBest for
autoSupported TikTok URLsAutomatically detected profile, media, playlist, or LIVE rowsMixed URL batches
profileUsernames or profile URLsPublic identity, biography, avatars, counts, and account flagsCreator research
profilePostsUsernames or profile URLsOne profile row plus up to 22 recent video/photo rowsCreator content monitoring
videoVideo URLs or numeric IDsComplete public video metadataPost and campaign analysis
photoPhoto URLs or numeric IDsSlideshow metadata and ordered image URLsVisual content research
searchPhotosKeywordsPaginated public Photo Search rowsVisual trend discovery
playlistComplete playlist URLsMatching public playlist metadataSeries and collection research
liveStatusUsernames, LIVE URLs, or room IDsPublic room availability/statusStream monitoring

Top Search, Video Search, User Search, hashtag/music feeds, Explore, For You, and LIVE discovery are intentionally not advertised: current public web routes require short-lived TikTok signatures or a live browser session. Removing those modes keeps the Actor fast and economically sustainable.

Quick start

  1. Select Profile and recent posts.
  2. Enter one or more usernames such as tiktok or nasa.
  3. Keep maxResults at 10 for the first run.
  4. Leave HTTP enrichment enabled when complete engagement and media fields are required.
  5. Start the Actor and open the single Results table.

Input examples

Profile details

{"mode":"profile","targets":["tiktok","nasa"],"maxResults":1,"country":"US","language":"en"}

Profile plus recent posts

{"mode":"profilePosts","targets":["tiktok"],"maxResults":20,"enrichPartialResults":true,"country":"US"}

Fast profile posts without per-item enrichment

{"mode":"profilePosts","targets":["tiktok"],"maxResults":20,"enrichPartialResults":false,"country":"US"}

Auto-detect a mixed URL batch

{"mode":"auto","startUrls":[{"url":"https://www.tiktok.com/@tiktok"},{"url":"https://www.tiktok.com/@axl17_/video/7627482636847435026"}],"maxResults":10}

Video details

{"mode":"video","startUrls":[{"url":"https://www.tiktok.com/@axl17_/video/7627482636847435026"}]}

Photo or slideshow details

{"mode":"photo","startUrls":[{"url":"https://www.tiktok.com/@creator/photo/7650904787013127438"}]}
{"mode":"searchPhotos","searchTerms":["home decor","street style"],"maxResults":50,"country":"US"}

Playlist metadata

{"mode":"playlist","startUrls":[{"url":"https://www.tiktok.com/@tiktok/playlist/Behind-The-Breakthrough-7659874208872221471"}]}

LIVE status

{"mode":"liveStatus","targets":["creator","7672717264355003156"],"maxResults":1}

maxResults applies to media rows for each profile or Photo Search keyword. profilePosts also returns one profile row. TikTok's unsigned public embed route currently exposes at most 22 recent profile posts. maxTotalResults caps the combined deduplicated run.

Complete output examples

The implementation always initializes the complete 113-field top-level contract. Optional public data is represented by null; list fields use []. No separate dataset error records or Errors view are created. Safe failure counts are written to RUN_SUMMARY and the run log. raw is null unless includeRaw is enabled; when enabled it contains a sanitized source-defined TikTok object whose session, cookie, token, signature and device identifiers are removed.

Complete profile output — 113 top-level fields

The profile details row uses the same stable 113-field contract. Fields that do not apply to this record type are explicitly returned as null or [].

{
"recordType": "profile",
"resultType": "profile",
"id": "10001",
"url": "https://www.tiktok.com/@creator",
"sourceMode": "profile",
"sourceTarget": "creator",
"sourceUrl": "https://www.tiktok.com/@creator",
"finalUrl": "https://www.tiktok.com/@creator",
"sourceEndpoints": [
"/api/example/"
],
"transport": "httpHtml",
"position": 1,
"scrapedAt": "2026-08-11T12:00:00Z",
"country": "US",
"language": "en",
"availability": "public",
"isPartial": false,
"fallbackUsed": false,
"username": "creator",
"nickname": "Creator",
"authorId": "10001",
"secUid": "MS4wLjABAAAA_public",
"signature": "Public profile biography",
"avatarThumb": "https://p16-sign.tiktokcdn-us.com/avatar.jpeg",
"avatarMedium": "https://p16-sign.tiktokcdn-us.com/avatar-medium.jpeg",
"avatarLarge": "https://p16-sign.tiktokcdn-us.com/avatar-large.jpeg",
"isVerified": true,
"isPrivate": false,
"isBusinessAccount": false,
"bioLink": "https://example.com",
"followersCount": 1250000,
"followingCount": 120,
"friendsCount": 80,
"heartsCount": 24000000,
"likesGivenCount": 340,
"videosCount": 275,
"description": null,
"createTime": null,
"createTimeIso": null,
"mediaType": null,
"durationSeconds": null,
"width": null,
"height": null,
"ratio": null,
"format": null,
"codecType": null,
"definition": null,
"videoUrl": null,
"downloadUrl": null,
"coverUrl": null,
"dynamicCoverUrl": null,
"originCoverUrl": null,
"imageUrls": [],
"imageCount": null,
"isAd": null,
"isOriginal": null,
"isOfficial": null,
"isSecret": null,
"isCollected": null,
"isReviewing": null,
"commentsEnabled": null,
"downloadEnabled": null,
"duetEnabled": null,
"stitchEnabled": null,
"textLanguage": null,
"aigcDescription": null,
"likesCount": null,
"commentsCount": null,
"sharesCount": null,
"viewsCount": null,
"savesCount": null,
"hashtags": [],
"mentions": [],
"musicId": null,
"musicTitle": null,
"musicAuthor": null,
"musicAlbum": null,
"musicUrl": null,
"musicCoverUrl": null,
"musicDurationSeconds": null,
"musicOriginal": null,
"musicCopyrighted": null,
"musicCommercial": null,
"hashtagId": null,
"hashtagName": null,
"hashtagTitle": null,
"hashtagDescription": null,
"hashtagVideoCount": null,
"hashtagViewCount": null,
"playlistId": null,
"playlistName": null,
"playlistVideoCount": null,
"playlistCoverUrl": null,
"roomId": null,
"liveStatus": null,
"isLive": null,
"liveTitle": null,
"liveViewerCount": null,
"liveLikeCount": null,
"liveStartTime": null,
"liveCoverUrl": null,
"liveStreamUrls": [],
"liveHashtag": null,
"liveAgeRestricted": null,
"author": {
"id": "10001",
"uniqueId": "creator",
"nickname": "Creator",
"avatarThumb": "https://p16-sign.tiktokcdn-us.com/avatar.jpeg",
"avatarMedium": "https://p16-sign.tiktokcdn-us.com/avatar-medium.jpeg",
"avatarLarger": "https://p16-sign.tiktokcdn-us.com/avatar-large.jpeg",
"signature": "Public profile biography",
"verified": true,
"secUid": "MS4wLjABAAAA_public",
"secret": false,
"ftc": false,
"relation": 0,
"openFavorite": true,
"commentSetting": 0,
"duetSetting": 0,
"stitchSetting": 0,
"privateAccount": false,
"isADVirtual": false,
"downloadSetting": 0,
"isEmbedBanned": false
},
"authorStats": {
"followerCount": 1250000,
"followingCount": 120,
"friendCount": 80,
"heartCount": 24000000,
"diggCount": 340,
"videoCount": 275
},
"stats": null,
"video": null,
"images": null,
"music": null,
"hashtag": null,
"playlist": null,
"live": null,
"raw": null
}

Complete media-video output — 113 top-level fields

The video media row uses the same stable 113-field contract. Fields that do not apply to this record type are explicitly returned as null or [].

{
"recordType": "media",
"resultType": "video",
"id": "7412345678901234567",
"url": "https://www.tiktok.com/@creator/video/7412345678901234567",
"sourceMode": "video",
"sourceTarget": "https://www.tiktok.com/@creator/video/7412345678901234567",
"sourceUrl": "https://www.tiktok.com/@creator/video/7412345678901234567",
"finalUrl": "https://www.tiktok.com/@creator/video/7412345678901234567",
"sourceEndpoints": [
"/api/example/"
],
"transport": "httpHtml",
"position": 1,
"scrapedAt": "2026-08-11T12:00:00Z",
"country": "US",
"language": "en",
"availability": "public",
"isPartial": false,
"fallbackUsed": false,
"username": "creator",
"nickname": "Creator",
"authorId": "10001",
"secUid": "MS4wLjABAAAA_public",
"signature": "Public profile biography",
"avatarThumb": "https://p16-sign.tiktokcdn-us.com/avatar.jpeg",
"avatarMedium": "https://p16-sign.tiktokcdn-us.com/avatar-medium.jpeg",
"avatarLarge": "https://p16-sign.tiktokcdn-us.com/avatar-large.jpeg",
"isVerified": true,
"isPrivate": false,
"isBusinessAccount": null,
"bioLink": null,
"followersCount": null,
"followingCount": null,
"friendsCount": null,
"heartsCount": null,
"likesGivenCount": null,
"videosCount": null,
"description": "A public TikTok video #travel @friend",
"createTime": 1786468800,
"createTimeIso": "2026-08-11T12:00:00Z",
"mediaType": "video",
"durationSeconds": 21,
"width": 1080,
"height": 1920,
"ratio": "720p",
"format": "mp4",
"codecType": "h264",
"definition": "720p",
"videoUrl": "https://v16-webapp.tiktok.com/video.mp4",
"downloadUrl": "https://v16-webapp.tiktok.com/download.mp4",
"coverUrl": "https://p16-sign.tiktokcdn-us.com/cover.jpeg",
"dynamicCoverUrl": "https://p16-sign.tiktokcdn-us.com/dynamic.webp",
"originCoverUrl": "https://p16-sign.tiktokcdn-us.com/origin.jpeg",
"imageUrls": [],
"imageCount": 0,
"isAd": false,
"isOriginal": true,
"isOfficial": false,
"isSecret": false,
"isCollected": false,
"isReviewing": false,
"commentsEnabled": true,
"downloadEnabled": true,
"duetEnabled": true,
"stitchEnabled": true,
"textLanguage": "en",
"aigcDescription": "",
"likesCount": 182400,
"commentsCount": 4200,
"sharesCount": 8100,
"viewsCount": 3200000,
"savesCount": 50700,
"hashtags": [
"travel"
],
"mentions": [
"friend"
],
"musicId": "7300000000000000001",
"musicTitle": "Original sound",
"musicAuthor": "Creator",
"musicAlbum": "",
"musicUrl": "https://sf16-ies-music.tiktokcdn.com/audio.mp3",
"musicCoverUrl": "https://p16-sign.tiktokcdn-us.com/music.jpeg",
"musicDurationSeconds": 21,
"musicOriginal": true,
"musicCopyrighted": false,
"musicCommercial": false,
"hashtagId": null,
"hashtagName": null,
"hashtagTitle": null,
"hashtagDescription": null,
"hashtagVideoCount": null,
"hashtagViewCount": null,
"playlistId": null,
"playlistName": null,
"playlistVideoCount": null,
"playlistCoverUrl": null,
"roomId": null,
"liveStatus": null,
"isLive": null,
"liveTitle": null,
"liveViewerCount": null,
"liveLikeCount": null,
"liveStartTime": null,
"liveCoverUrl": null,
"liveStreamUrls": [],
"liveHashtag": null,
"liveAgeRestricted": null,
"author": {
"id": "10001",
"uniqueId": "creator",
"nickname": "Creator",
"avatarThumb": "https://p16-sign.tiktokcdn-us.com/avatar.jpeg",
"avatarMedium": "https://p16-sign.tiktokcdn-us.com/avatar-medium.jpeg",
"avatarLarger": "https://p16-sign.tiktokcdn-us.com/avatar-large.jpeg",
"signature": "Public profile biography",
"verified": true,
"secUid": "MS4wLjABAAAA_public",
"secret": false,
"ftc": false,
"relation": 0,
"openFavorite": true,
"commentSetting": 0,
"duetSetting": 0,
"stitchSetting": 0,
"privateAccount": false,
"isADVirtual": false,
"downloadSetting": 0,
"isEmbedBanned": false
},
"authorStats": {
"followerCount": 1250000,
"followingCount": 120,
"heartCount": 24000000,
"videoCount": 275,
"diggCount": 340,
"friendCount": 80
},
"stats": {
"diggCount": 182400,
"shareCount": 8100,
"commentCount": 4200,
"playCount": 3200000,
"collectCount": 50700
},
"video": {
"id": "7412345678901234567",
"height": 1920,
"width": 1080,
"duration": 21,
"ratio": "720p",
"cover": "https://p16-sign.tiktokcdn-us.com/cover.jpeg",
"originCover": "https://p16-sign.tiktokcdn-us.com/origin.jpeg",
"dynamicCover": "https://p16-sign.tiktokcdn-us.com/dynamic.webp",
"playAddr": "https://v16-webapp.tiktok.com/video.mp4",
"downloadAddr": "https://v16-webapp.tiktok.com/download.mp4",
"format": "mp4",
"codecType": "h264",
"definition": "720p",
"size": 2345678,
"videoID": "v10044",
"zoomCover": {}
},
"images": {},
"music": {
"id": "7300000000000000001",
"title": "Original sound",
"authorName": "Creator",
"album": "",
"duration": 21,
"coverLarge": "https://p16-sign.tiktokcdn-us.com/music.jpeg",
"coverMedium": "https://p16-sign.tiktokcdn-us.com/music-medium.jpeg",
"coverThumb": "https://p16-sign.tiktokcdn-us.com/music-thumb.jpeg",
"playUrl": "https://sf16-ies-music.tiktokcdn.com/audio.mp3",
"original": true,
"private": false,
"isCopyrighted": false,
"is_commerce_music": false,
"is_unlimited_music": false,
"shoot_duration": 21,
"tt2dsp": {}
},
"hashtag": null,
"playlist": null,
"live": null,
"raw": null
}

Complete media-photo output — 113 top-level fields

The photo or slideshow media row uses the same stable 113-field contract. Fields that do not apply to this record type are explicitly returned as null or [].

{
"recordType": "media",
"resultType": "photo",
"id": "7412345678901234567",
"url": "https://www.tiktok.com/@creator/photo/7412345678901234567",
"sourceMode": "searchPhotos",
"sourceTarget": "street food",
"sourceUrl": "https://www.tiktok.com/@creator/photo/7412345678901234567",
"finalUrl": "https://www.tiktok.com/@creator/photo/7412345678901234567",
"sourceEndpoints": [
"/api/example/"
],
"transport": "httpHtml",
"position": 1,
"scrapedAt": "2026-08-11T12:00:00Z",
"country": "US",
"language": "en",
"availability": "public",
"isPartial": false,
"fallbackUsed": false,
"username": "creator",
"nickname": "Creator",
"authorId": "10001",
"secUid": "MS4wLjABAAAA_public",
"signature": "Public profile biography",
"avatarThumb": "https://p16-sign.tiktokcdn-us.com/avatar.jpeg",
"avatarMedium": "https://p16-sign.tiktokcdn-us.com/avatar-medium.jpeg",
"avatarLarge": "https://p16-sign.tiktokcdn-us.com/avatar-large.jpeg",
"isVerified": true,
"isPrivate": false,
"isBusinessAccount": null,
"bioLink": null,
"followersCount": null,
"followingCount": null,
"friendsCount": null,
"heartsCount": null,
"likesGivenCount": null,
"videosCount": null,
"description": "A street food photo carousel #food",
"createTime": 1786468800,
"createTimeIso": "2026-08-11T12:00:00Z",
"mediaType": "photo",
"durationSeconds": 0,
"width": 1080,
"height": 1920,
"ratio": "720p",
"format": "mp4",
"codecType": "h264",
"definition": "720p",
"videoUrl": null,
"downloadUrl": null,
"coverUrl": "https://p16-sign.tiktokcdn-us.com/cover.jpeg",
"dynamicCoverUrl": null,
"originCoverUrl": "https://p16-sign.tiktokcdn-us.com/origin.jpeg",
"imageUrls": [
"https://p16-sign.tiktokcdn-us.com/photo-1.jpeg",
"https://p16-sign.tiktokcdn-us.com/photo-2.jpeg"
],
"imageCount": 2,
"isAd": false,
"isOriginal": true,
"isOfficial": false,
"isSecret": false,
"isCollected": false,
"isReviewing": false,
"commentsEnabled": true,
"downloadEnabled": true,
"duetEnabled": true,
"stitchEnabled": true,
"textLanguage": "en",
"aigcDescription": "",
"likesCount": 182400,
"commentsCount": 4200,
"sharesCount": 8100,
"viewsCount": 3200000,
"savesCount": 50700,
"hashtags": [
"food"
],
"mentions": [],
"musicId": "7300000000000000001",
"musicTitle": "Original sound",
"musicAuthor": "Creator",
"musicAlbum": "",
"musicUrl": "https://sf16-ies-music.tiktokcdn.com/audio.mp3",
"musicCoverUrl": "https://p16-sign.tiktokcdn-us.com/music.jpeg",
"musicDurationSeconds": 21,
"musicOriginal": true,
"musicCopyrighted": false,
"musicCommercial": false,
"hashtagId": null,
"hashtagName": null,
"hashtagTitle": null,
"hashtagDescription": null,
"hashtagVideoCount": null,
"hashtagViewCount": null,
"playlistId": null,
"playlistName": null,
"playlistVideoCount": null,
"playlistCoverUrl": null,
"roomId": null,
"liveStatus": null,
"isLive": null,
"liveTitle": null,
"liveViewerCount": null,
"liveLikeCount": null,
"liveStartTime": null,
"liveCoverUrl": null,
"liveStreamUrls": [],
"liveHashtag": null,
"liveAgeRestricted": null,
"author": {
"id": "10001",
"uniqueId": "creator",
"nickname": "Creator",
"avatarThumb": "https://p16-sign.tiktokcdn-us.com/avatar.jpeg",
"avatarMedium": "https://p16-sign.tiktokcdn-us.com/avatar-medium.jpeg",
"avatarLarger": "https://p16-sign.tiktokcdn-us.com/avatar-large.jpeg",
"signature": "Public profile biography",
"verified": true,
"secUid": "MS4wLjABAAAA_public",
"secret": false,
"ftc": false,
"relation": 0,
"openFavorite": true,
"commentSetting": 0,
"duetSetting": 0,
"stitchSetting": 0,
"privateAccount": false,
"isADVirtual": false,
"downloadSetting": 0,
"isEmbedBanned": false
},
"authorStats": {
"followerCount": 1250000,
"followingCount": 120,
"heartCount": 24000000,
"videoCount": 275,
"diggCount": 340,
"friendCount": 80
},
"stats": {
"diggCount": 182400,
"shareCount": 8100,
"commentCount": 4200,
"playCount": 3200000,
"collectCount": 50700
},
"video": {
"id": "7412345678901234567",
"height": 1920,
"width": 1080,
"duration": 0,
"ratio": "720p",
"cover": "https://p16-sign.tiktokcdn-us.com/cover.jpeg",
"originCover": "https://p16-sign.tiktokcdn-us.com/origin.jpeg",
"dynamicCover": null,
"playAddr": null,
"downloadAddr": null,
"format": "mp4",
"codecType": "h264",
"definition": "720p",
"size": 2345678,
"videoID": "v10044",
"zoomCover": {}
},
"images": {
"title": "Street food",
"images": [
{
"imageURL": {
"urlList": [
"https://p16-sign.tiktokcdn-us.com/photo-1.jpeg"
]
},
"displayImage": {
"urlList": [
"https://p16-sign.tiktokcdn-us.com/photo-display.jpeg"
]
}
}
],
"cover": {
"urlList": [
"https://p16-sign.tiktokcdn-us.com/cover.jpeg"
]
},
"shareCover": {
"urlList": [
"https://p16-sign.tiktokcdn-us.com/share.jpeg"
]
}
},
"music": {
"id": "7300000000000000001",
"title": "Original sound",
"authorName": "Creator",
"album": "",
"duration": 21,
"coverLarge": "https://p16-sign.tiktokcdn-us.com/music.jpeg",
"coverMedium": "https://p16-sign.tiktokcdn-us.com/music-medium.jpeg",
"coverThumb": "https://p16-sign.tiktokcdn-us.com/music-thumb.jpeg",
"playUrl": "https://sf16-ies-music.tiktokcdn.com/audio.mp3",
"original": true,
"private": false,
"isCopyrighted": false,
"is_commerce_music": false,
"is_unlimited_music": false,
"shoot_duration": 21,
"tt2dsp": {}
},
"hashtag": null,
"playlist": null,
"live": null,
"raw": null
}

Complete playlist output — 113 top-level fields

The playlist details row uses the same stable 113-field contract. Fields that do not apply to this record type are explicitly returned as null or [].

{
"recordType": "playlist",
"resultType": "playlist",
"id": "7312345678901234567",
"url": "https://www.tiktok.com/@creator/playlist/Travel-7312345678901234567",
"sourceMode": "playlist",
"sourceTarget": "https://www.tiktok.com/@creator/playlist/Travel-7312345678901234567",
"sourceUrl": "https://www.tiktok.com/@creator/playlist/Travel-7312345678901234567",
"finalUrl": "https://www.tiktok.com/@creator/playlist/Travel-7312345678901234567",
"sourceEndpoints": [
"/api/example/"
],
"transport": "httpJson",
"position": 1,
"scrapedAt": "2026-08-11T12:00:00Z",
"country": "US",
"language": "en",
"availability": "public",
"isPartial": false,
"fallbackUsed": false,
"username": null,
"nickname": null,
"authorId": null,
"secUid": null,
"signature": null,
"avatarThumb": null,
"avatarMedium": null,
"avatarLarge": null,
"isVerified": null,
"isPrivate": null,
"isBusinessAccount": null,
"bioLink": null,
"followersCount": null,
"followingCount": null,
"friendsCount": null,
"heartsCount": null,
"likesGivenCount": null,
"videosCount": null,
"description": null,
"createTime": null,
"createTimeIso": null,
"mediaType": null,
"durationSeconds": null,
"width": null,
"height": null,
"ratio": null,
"format": null,
"codecType": null,
"definition": null,
"videoUrl": null,
"downloadUrl": null,
"coverUrl": null,
"dynamicCoverUrl": null,
"originCoverUrl": null,
"imageUrls": [],
"imageCount": null,
"isAd": null,
"isOriginal": null,
"isOfficial": null,
"isSecret": null,
"isCollected": null,
"isReviewing": null,
"commentsEnabled": null,
"downloadEnabled": null,
"duetEnabled": null,
"stitchEnabled": null,
"textLanguage": null,
"aigcDescription": null,
"likesCount": null,
"commentsCount": null,
"sharesCount": null,
"viewsCount": null,
"savesCount": null,
"hashtags": [],
"mentions": [],
"musicId": null,
"musicTitle": null,
"musicAuthor": null,
"musicAlbum": null,
"musicUrl": null,
"musicCoverUrl": null,
"musicDurationSeconds": null,
"musicOriginal": null,
"musicCopyrighted": null,
"musicCommercial": null,
"hashtagId": null,
"hashtagName": null,
"hashtagTitle": null,
"hashtagDescription": null,
"hashtagVideoCount": null,
"hashtagViewCount": null,
"playlistId": "7312345678901234567",
"playlistName": "Travel",
"playlistVideoCount": 24,
"playlistCoverUrl": "https://p16-sign.tiktokcdn-us.com/playlist.jpeg",
"roomId": null,
"liveStatus": null,
"isLive": null,
"liveTitle": null,
"liveViewerCount": null,
"liveLikeCount": null,
"liveStartTime": null,
"liveCoverUrl": null,
"liveStreamUrls": [],
"liveHashtag": null,
"liveAgeRestricted": null,
"author": null,
"authorStats": null,
"stats": null,
"video": null,
"images": null,
"music": null,
"hashtag": null,
"playlist": {
"id": "7312345678901234567",
"mixId": "7312345678901234567",
"mixName": "Travel",
"name": "Travel",
"videoCount": 24,
"cover": "https://p16-sign.tiktokcdn-us.com/playlist.jpeg",
"creator": {
"id": "10001",
"uniqueId": "creator",
"nickname": "Creator"
}
},
"live": null,
"raw": null
}

Complete live-status output — 113 top-level fields

The LIVE status row uses the same complete contract. An offline creator has isLive: false; when TikTok exposes a room ID, the Actor also calls the public status endpoint.

{
"recordType": "live",
"resultType": "liveStatus",
"id": "creator",
"url": "https://www.tiktok.com/@creator",
"sourceMode": "liveStatus",
"sourceTarget": "creator",
"sourceUrl": "https://www.tiktok.com/@creator/live",
"finalUrl": "https://www.tiktok.com/@creator",
"sourceEndpoints": [],
"transport": "httpHtml",
"position": 1,
"scrapedAt": "2026-08-11T23:16:54.774915Z",
"country": "US",
"language": "en",
"availability": "notLive",
"isPartial": true,
"fallbackUsed": true,
"username": "creator",
"nickname": null,
"authorId": null,
"secUid": null,
"signature": null,
"avatarThumb": null,
"avatarMedium": null,
"avatarLarge": null,
"isVerified": null,
"isPrivate": null,
"isBusinessAccount": null,
"bioLink": null,
"followersCount": null,
"followingCount": null,
"friendsCount": null,
"heartsCount": null,
"likesGivenCount": null,
"videosCount": null,
"description": null,
"createTime": null,
"createTimeIso": null,
"mediaType": null,
"durationSeconds": null,
"width": null,
"height": null,
"ratio": null,
"format": null,
"codecType": null,
"definition": null,
"videoUrl": null,
"downloadUrl": null,
"coverUrl": null,
"dynamicCoverUrl": null,
"originCoverUrl": null,
"imageUrls": [],
"imageCount": null,
"isAd": null,
"isOriginal": null,
"isOfficial": null,
"isSecret": null,
"isCollected": null,
"isReviewing": null,
"commentsEnabled": null,
"downloadEnabled": null,
"duetEnabled": null,
"stitchEnabled": null,
"textLanguage": null,
"aigcDescription": null,
"likesCount": null,
"commentsCount": null,
"sharesCount": null,
"viewsCount": null,
"savesCount": null,
"hashtags": [],
"mentions": [],
"musicId": null,
"musicTitle": null,
"musicAuthor": null,
"musicAlbum": null,
"musicUrl": null,
"musicCoverUrl": null,
"musicDurationSeconds": null,
"musicOriginal": null,
"musicCopyrighted": null,
"musicCommercial": null,
"hashtagId": null,
"hashtagName": null,
"hashtagTitle": null,
"hashtagDescription": null,
"hashtagVideoCount": null,
"hashtagViewCount": null,
"playlistId": null,
"playlistName": null,
"playlistVideoCount": null,
"playlistCoverUrl": null,
"roomId": null,
"liveStatus": "offline",
"isLive": false,
"liveTitle": null,
"liveViewerCount": null,
"liveLikeCount": null,
"liveStartTime": null,
"liveCoverUrl": null,
"liveStreamUrls": [],
"liveHashtag": null,
"liveAgeRestricted": null,
"author": null,
"authorStats": null,
"stats": null,
"video": null,
"images": null,
"music": null,
"hashtag": null,
"playlist": null,
"live": null,
"raw": null
}

What data can you extract?

Every output key is listed below.

CategoryFields
Record and sourcerecordType, resultType, id, url, sourceMode, sourceTarget, sourceUrl, finalUrl, sourceEndpoints, transport, position, scrapedAt, country, language, availability, isPartial, fallbackUsed
Creator identityusername, nickname, authorId, secUid, signature, avatarThumb, avatarMedium, avatarLarge, isVerified, isPrivate, isBusinessAccount, bioLink
Creator metricsfollowersCount, followingCount, friendsCount, heartsCount, likesGivenCount, videosCount
Contentdescription, createTime, createTimeIso, mediaType, durationSeconds, width, height, ratio, format, codecType, definition
Media URLsvideoUrl, downloadUrl, coverUrl, dynamicCoverUrl, originCoverUrl, imageUrls, imageCount
Content flagsisAd, isOriginal, isOfficial, isSecret, isCollected, isReviewing, commentsEnabled, downloadEnabled, duetEnabled, stitchEnabled, textLanguage, aigcDescription
EngagementlikesCount, commentsCount, sharesCount, viewsCount, savesCount
Tagshashtags, mentions
MusicmusicId, musicTitle, musicAuthor, musicAlbum, musicUrl, musicCoverUrl, musicDurationSeconds, musicOriginal, musicCopyrighted, musicCommercial
HashtaghashtagId, hashtagName, hashtagTitle, hashtagDescription, hashtagVideoCount, hashtagViewCount
PlaylistplaylistId, playlistName, playlistVideoCount, playlistCoverUrl
LIVEroomId, liveStatus, isLive, liveTitle, liveViewerCount, liveLikeCount, liveStartTime, liveCoverUrl, liveStreamUrls, liveHashtag, liveAgeRestricted
Complete nested dataauthor, authorStats, stats, video, images, music, hashtag, playlist, live, raw

Input parameters

ParameterTypeRequiredDefaultDescription
modestringYesprofilePostsauto, profile, profilePosts, video, photo, searchPhotos, playlist, or liveStatus
startUrlsrequest[]By mode[]Supported public TikTok URLs
targetsstring[]By mode["tiktok"]Usernames, URLs, media IDs, or LIVE room IDs
searchTermsstring[]Photo Search[]Photo Search keywords
maxResultsintegerNo20Media rows per profile or keyword, 0 for every HTTP-accessible result
maxTotalResultsintegerNo0Combined run cap; 0 disables the additional cap
countrystringNoUSResidential proxy country and regional request hint
languagestringNoenHTML/API language and Accept-Language locale
sortstringNorelevancerelevance, latest, popular, or oldest
publishedAfterISO stringNoRemove older media after extraction
publishedBeforeISO stringNoRemove newer media after extraction
minLikesintegerNo0Minimum public likes; use enrichment for reliable post filtering
minCommentsintegerNo0Minimum public comment count; use enrichment for reliable post filtering
minViewsintegerNo0Minimum public views/play count
includeRawbooleanNofalseInclude sanitized public source objects; increases Dataset size
enrichPartialResultsbooleanNotrueFetch complete public media HTML for lightweight recent-post rows
maxConcurrencyintegerNo5Parallel HTTP targets/enrichments, 1–25
maxSessionRotationsintegerNo3Fresh residential proxy/session attempts, 1–6
navigationTimeoutSecsintegerNo45Per-request timeout, 15–120 seconds

Use cases

Creator and influencer research

Collect creator identity, biography, verification, privacy flags, follower/following counts, total hearts, and video totals without opening profiles manually.

Recent creator content

Return the profile and up to 22 recent video/photo records together. Enable HTTP enrichment for complete likes, comments, shares, saves, music, hashtags, mentions, and media fields.

Individual post analysis

Extract complete public video or slideshow metadata from specific URLs, including engagement, author, sound attribution, ordered image URLs, and available playback/cover URLs.

Visual trend discovery

Paginate Photo Search by keyword and apply local date, engagement, popularity, and total-result controls.

Playlist and LIVE monitoring

Resolve public creator playlist metadata and schedule repeated LIVE-status checks through Apify schedules, webhooks, or API integrations.

Performance and cost

The Actor uses HTTP/2-capable browser-TLS impersonation but never starts a browser. It downloads only the required HTML documents and JSON responses; it does not load JavaScript bundles, fonts, videos, or background browser resources.

Measured local smoke examples through residential test proxies:

WorkflowRequestsDecoded response bytesRows
Profile1about 368 KB1
Profile plus five lightweight posts2about 379 KB6
Video detail1about 392 KB1
Photo Search, five results2about 410 KB5
Playlist metadata2about 374 KB1

These are decoded application bytes from representative runs, not guaranteed proxy-billing bytes. Response size varies by profile, locale, TikTok experiments, and optional enrichment. Enriching five recent posts adds up to five media-detail HTTP requests.

Only successfully saved Dataset rows trigger result events. Empty pages, retries, blocks, duplicates, filters, and failed inputs do not create a custom error event.

Saved rowPPE event
Public profileprofile-result
Video or photovideo-photo-result
Playlist metadataplaylist-result
LIVE statuslive-result

The Store Pricing tab is the source of truth for current prices.

API usage

After a run, retrieve the single Results view through the Dataset API:

https://api.apify.com/v2/datasets/<DATASET_ID>/items?view=overview&clean=true&format=json

Run the Actor through the Apify API, schedule recurring checks, or connect successful runs to webhooks and downstream automations. The same complete field contract is available in JSON, CSV, Excel, XML, and RSS exports.

Best for / not for

Best for: public creator intelligence, recent creator posts, individual video/photo details, photo trend datasets, playlist inventories, and public LIVE-status monitoring.

Not for: Top/Video/User Search, hashtag or music feeds, Explore, For You, LIVE discovery, private profiles, follower/following lists, comment threads, TikTok Shop, authenticated feeds, media-file downloads, stream recording, or CAPTCHA-protected content.

Limits and good to know

  • profilePosts exposes at most 22 recent items through TikTok's unsigned embed route. Cursor pagination is not available on that route.
  • Lightweight recent-post rows contain description, author identifiers, play count, covers, and playback URL. They are marked isPartial: true until successfully enriched.
  • Enrichment remains HTTP-only but performs one additional public media request per partial row.
  • Individual photo pages are resolved through the same public SSR data path TikTok uses for the media ID, allowing ordered slideshow image URLs to be extracted without a browser.
  • Photo Search requires one lightweight HTML warm-up request per keyword before JSON pagination.
  • Country selects the mandatory residential proxy region, but TikTok ultimately controls regional availability and ranking.
  • Signed CDN media URLs can expire. Store or process them promptly when your workflow permits.
  • The 113-field contract is stable, but fields that do not apply to a record type use null or [].
  • includeRaw can substantially increase Dataset transfer and storage.

Frequently asked questions

What input should I provide?

Use usernames for profile workflows, complete TikTok URLs for media/playlist workflows, keywords for Photo Search, and usernames or numeric room IDs for LIVE status. Auto mode accepts only the URL types listed above.

Why does Profile posts return one extra row?

The first row is the requested public profile. maxResults limits the following media rows, matching the common creator-research workflow of receiving profile context and recent posts together.

How many recent profile posts can I extract?

Up to 22 per username with the current unsigned public embed endpoint. Higher values do not create browser pagination or hidden additional charges.

Why are some recent-post fields empty?

The low-traffic embed response intentionally contains fewer fields. Keep enrichPartialResults enabled to request complete public details for each post. Failed enrichment keeps the lightweight row with isPartial: true instead of discarding useful data.

Can I process multiple inputs?

Yes. Add multiple usernames, URLs, room IDs, or Photo Search keywords. maxResults applies independently and maxTotalResults caps the combined run.

Do I need a TikTok account, API key, cookies, or proxy settings?

No account, API key, saved cookies, or user-facing proxy configuration is required. Published runs automatically use Apify Residential Proxy, and first-party cookies live only inside an isolated HTTP session.

Does the Actor extract comments or follower lists?

No. Media rows include public comment counts, while complete comment threads and follower/following lists are outside this public HTTP-only product boundary.

Responsible use

Use the Actor only for lawful collection of publicly available data. Respect privacy, intellectual-property rights, platform terms, applicable laws, and reasonable request volumes. Do not use it to bypass access controls or collect private information.

Support

If a public target repeatedly returns no rows, include the mode, sanitized input, run ID, country, and approximate time in an Apify issue. Never post proxy credentials, cookies, signed media URLs, or authentication data in a public issue.