TikTok Profile Videos API Scraper avatar

TikTok Profile Videos API Scraper

Pricing

from $0.25 / 1,000 profile videos

Go to Apify Store
TikTok Profile Videos API Scraper

TikTok Profile Videos API Scraper

Collect public TikTok profile videos from usernames, profile URLs, or numeric user IDs. Get one deduplicated row per upload with captions, engagement counts, creator details, sounds, hashtags, media links, and optional playlist or repost context when TikTok shows them.

Pricing

from $0.25 / 1,000 profile videos

Rating

0.0

(0)

Developer

Maxime Dupré

Maxime Dupré

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

🎬 TikTok profile videos in structured rows

For developers, data teams, social media analysts, and researchers, this Actor reads known public TikTok creator usernames, profile URLs, or numeric user IDs. It returns one deduplicated dataset row for each eligible public upload, with fields for the requested profile, video identity, captions, timing, engagement counts, creator and sound details, hashtags, media links, and optional playlist, repost, and related-creator context. Use these rows to compare creator posts, review public engagement, or feed a TikTok profile videos API workflow.

Use cases

📦 Public TikTok upload rows

Each row records the first eligible occurrence of one public upload found for a requested profile or supported profile surface. If the same source upload appears again through another submitted username, URL, user ID, or supported surface, the later match is ignored. The saved row keeps the first requested-profile attribution. Missing source values are null, and empty arrays stay empty. Video rows can include direct public media links. Photo carousels use media.photoUrls and do not get a made-up video link. TikTok-signed media links may expire.

▶️ Collect a creator's public profile videos

Use one known creator target or a large list. The same options apply to every target in the run.

Run steps

  1. Add public creator usernames, profile URLs, or numeric user IDs to Creator profiles.
  2. Turn on playlist, repost, or related-creator options when you need those public details.
  3. Choose Newest first or Oldest first, and set an optional upload limit.
  4. Start the run and open the default dataset link in the Output panel.

Use a smaller maxItems to shorten the run and reduce the number of rows you review. Leave maxItems empty to return all available results until the source is exhausted. Only public TikTok surfaces are in scope. Private, follower-only, deleted, or login-gated profiles and content can return no rows. The Actor does not need a TikTok login, OAuth, or source credentials. Public data is fetched at run time, so source availability can change.

⚙️ Input

Add at least one value to creatorTargets. Usernames, profile URLs, and numeric user IDs can be mixed in one run. Numeric IDs should be entered as strings.

Input fields

FieldTypeWhat it does
creatorTargetsarray of stringsRequired. Adds one or more known public TikTok creator usernames, profile URLs, or numeric user IDs.
includePlaylistsbooleanIncludes public uploads found in the target creator's playlists or mixes, with playlist details when available.
checkPlaylistMembershipbooleanChecks ordinary profile-feed videos for public playlist or mix membership. It does not collect playlist-only videos.
playlistNameFilterstringLimits collected playlists or mixes to names that match this text when includePlaylists is on. Leave it blank or omit it to include all public playlists and mixes.
includeRepostsbooleanIncludes public videos reposted by the target creator and adds the original video and creator when TikTok exposes them.
onlyAmplifiedbooleanKeeps only uploads that repost or mention another creator. This filter does not turn on repost collection.
enrichRelatedCreatorsbooleanRequests extra public profile details for creators found in reposts or caption mentions, including audience counts, content counts, bio information, links, and business-account status.
maxItemsintegerOptional positive limit for uploads from each requested profile. Leave it empty to return all available results until the source is exhausted.
sortOrderstringChooses the order of uploads within each profile: newest or oldest.

Example input

This is the public input from a successful beta default-input run:

{
"creatorTargets": [
"@tiktok"
],
"includePlaylists": false,
"checkPlaylistMembership": false,
"includeReposts": false,
"onlyAmplified": false,
"enrichRelatedCreators": false,
"maxItems": 10,
"sortOrder": "newest"
}

🧾 Output

The Output panel provides a link to the default dataset. One stable row shape covers video and photo-carousel uploads. Optional values can be null, and optional lists can be empty when TikTok does not expose matching public data.

Dataset link

FieldTypeWhat it does
datasetItemsstringOpens the collected rows in the default dataset.

Video and photo row fields

FieldTypeWhat it does
requestedProfilestringUsername, profile URL, or numeric user ID that first led to this upload.
videoIdstringStable TikTok ID for the upload.
videoUrlstringCanonical public TikTok page for the upload.
captionstring or nullPublic caption text, or null when TikTok does not show one.
publishedAtstring or nullPublic publication time in ISO 8601 format, or null when unavailable.
durationSecondsnumber or nullUpload length in seconds, or null for photo carousels or unavailable data.
mediaTypestringvideo or photoCarousel.
playCountinteger or nullPublic play count, or null when TikTok does not show it.
likeCountinteger or nullPublic like count, or null when TikTok does not show it.
commentCountinteger or nullPublic comment count, or null when TikTok does not show it.
shareCountinteger or nullPublic share count, or null when TikTok does not show it.
saveCountinteger or nullPublic save count, or null when TikTok does not show it.
creatorobject or nullPublic profile details for the creator of the upload, or null when unavailable.
creator.usernamestringCreator username without the leading @.
creator.displayNamestring or nullCreator display name, or null when unavailable.
creator.followerCountinteger or nullPublic follower count, or null when TikTok does not show it.
creator.profileUrlstring or nullPublic TikTok profile URL, or null when unavailable.
creator.isVerifiedboolean or nullWhether TikTok marks the creator as verified, or null when unavailable.
soundobject or nullPublic sound details used by the upload, or null when no sound is shown.
sound.soundIdstring or nullStable TikTok sound ID, or null when unavailable.
sound.titlestring or nullPublic sound title, or null when unavailable.
sound.authorstring or nullPublic sound author name, or null when unavailable.
sound.isOriginalboolean or nullWhether TikTok marks the sound as original, or null when unavailable.
hashtagsarray of stringsHashtags attached to the caption. It is empty when none are shown.
captionMentionsarray of stringsCreator handles mentioned in the public caption. It is empty when none are shown.
mediaobjectDirect public media links and available media details.
media.downloadUrlstring or nullMain direct public video URL, or null for a photo carousel or when no usable link is exposed.
media.watermarkFreeVideoUrlstring or nullDirect public watermark-free video URL when TikTok exposes one, or null otherwise.
media.coverImageUrlstring or nullDirect public cover-image URL, or null when unavailable.
media.photoUrlsarray of stringsDirect public photo URLs in a photo carousel. It is empty for videos or when no photo URL is available.
playlistsarray of objectsPublic playlists or mixes that contain the upload. It is empty when none are found.
playlists[].playlistIdstring or nullStable TikTok playlist or mix ID, or null when unavailable.
playlists[].namestring or nullPublic playlist or mix name, or null when unavailable.
playlists[].urlstring or nullPublic playlist or mix URL, or null when unavailable.
playlists[].videoCountinteger or nullPublic number of videos in the playlist or mix, or null when unavailable.
playlists[].ownerUsernamestring or nullPlaylist or mix owner's username, or null when unavailable.
playlists[].positioninteger or nullOne-based position of this upload in the playlist or mix, or null when TikTok does not expose it.
repostobject or nullOriginal upload details when this row is a repost. It is null for the creator's own upload.
repost.originalVideoobjectOriginal upload shared by this repost.
repost.originalVideo.videoIdstringStable TikTok ID for the original upload.
repost.originalVideo.videoUrlstringCanonical public TikTok page for the original upload.
repost.originalCreatorobjectCreator of the original upload.
repost.originalCreator.usernamestringOriginal creator username without the leading @.
repost.originalCreator.displayNamestring or nullOriginal creator display name, or null when unavailable.
repost.originalCreator.profileUrlstring or nullOriginal creator public profile URL, or null when unavailable.
relatedCreatorsarray of objectsExtra public profile details for creators found in a repost or caption mention. It is empty when enrichment is off or no creators are found.
relatedCreators[].usernamestringRelated creator username without the leading @.
relatedCreators[].displayNamestring or nullRelated creator display name, or null when unavailable.
relatedCreators[].profileUrlstring or nullRelated creator public profile URL, or null when unavailable.
relatedCreators[].followerCountinteger or nullPublic follower count, or null when unavailable.
relatedCreators[].followingCountinteger or nullPublic following count, or null when unavailable.
relatedCreators[].videoCountinteger or nullPublic video count, or null when unavailable.
relatedCreators[].likesReceivedCountinteger or nullPublic likes received count, or null when unavailable.
relatedCreators[].biostring or nullPublic profile bio, or null when unavailable.
relatedCreators[].linksarray of stringsPublic links listed on the profile. It is empty when none are shown.
relatedCreators[].isBusinessAccountboolean or nullWhether TikTok marks the profile as a business account, or null when unavailable.

Example row

This complete row came from a successful current-beta run with reposts and related-creator enrichment enabled. The signed links are genuine source values and may expire.

{
"requestedProfile": "@tiktok",
"videoId": "7677743868229455135",
"videoUrl": "https://www.tiktok.com/@thedodo/video/7677743868229455135",
"caption": "For International Dog Day 2026, join @TikTok and The Dodo at @Wags & Walks Rescue’s LA headquarters to meet some adoptable rescue dogs and break down common myths around rescuing. 🐶 #internationaldogday",
"publishedAt": "2026-08-24T23:27:37.000Z",
"durationSeconds": 20,
"mediaType": "video",
"playCount": 19800,
"likeCount": 561,
"commentCount": 27,
"shareCount": 18,
"saveCount": 26,
"creator": {
"username": "thedodo",
"displayName": "The Dodo",
"followerCount": 6300000,
"profileUrl": "https://www.tiktok.com/@thedodo",
"isVerified": true
},
"sound": {
"soundId": "7677743825783196446",
"title": "original sound",
"author": "The Dodo",
"isOriginal": true
},
"hashtags": [
"internationaldogday"
],
"captionMentions": [
"@tiktok",
"@wagsandwalksla"
],
"media": {
"downloadUrl": "https://v16-webapp-prime.us.tiktok.com/video/tos/useast8/tos-useast8-ve-0068c001-tx2/oApBEAbGliXs0NMV5zazv03SKoEQBiZIpqRBA/?a=1988&bti=ODszNWYuMDE6&&bt=493&ft=aEeq8qT0mIoPD128soxI3wU4ooAbMeF~O5&mime_type=video_mp4&rc=MzQzZTtnaWloZjVmM2dkM0BpamZkb245cnVnZDMzaTczNEBfXjE0YzFjNS8xMTQ0Y18vYSNoZ3FgMmRrMTNhLS1kMTJzcw%3D%3D&expire=1788460648&l=2026090118370713824891AC2B352A0590&ply_type=2&policy=2&signature=7752a99b65230ad97b5fd9ae88071b9d&tk=tt_chain_token&btag=e000b8000",
"watermarkFreeVideoUrl": null,
"coverImageUrl": "https://p19-common-sign.tiktokcdn-us.com/tos-useast8-p-0068-tx2/oAyvXIbRZIAU1BVm0YlSpASiBoqzaB02ispEM~tplv-tiktokx-origin.image?dr=9636&x-expires=1788458400&x-signature=G683Md6j11MYCMVePE0fiQiVPa8%3D&t=4d5b0474&ps=13740610&shp=81f88b70&shcp=43f4a2f9&idc=useast5",
"photoUrls": []
},
"playlists": [],
"repost": {
"originalVideo": {
"videoId": "7677743868229455135",
"videoUrl": "https://www.tiktok.com/@thedodo/video/7677743868229455135"
},
"originalCreator": {
"username": "thedodo",
"displayName": "The Dodo",
"profileUrl": "https://www.tiktok.com/@thedodo"
}
},
"relatedCreators": [
{
"username": "wagsandwalksla",
"displayName": "Wags & Walks Rescue",
"profileUrl": "https://www.tiktok.com/@wagsandwalksla",
"followerCount": 9208,
"followingCount": 76,
"videoCount": 469,
"likesReceivedCount": 194900,
"bio": "LA based dog rescue 🐾",
"links": [
"https://linkin.bio/wagsandwalks"
],
"isBusinessAccount": true
},
{
"username": "thedodo",
"displayName": "The Dodo",
"profileUrl": "https://www.tiktok.com/@thedodo",
"followerCount": 6300000,
"followingCount": 2056,
"videoCount": 4463,
"likesReceivedCount": 259200000,
"bio": "For animal people.",
"links": [
"https://likeshop.me/t/thedodo"
],
"isBusinessAccount": true
}
]
}

💳 Pricing

Pricing is pay per event. You pay for each Profile Video event, which represents one deduplicated public video saved to the default dataset. The exact tier price is shown on the Store page.

EventWhat it covers
Profile VideoOne deduplicated public video saved to the default dataset.

🔌 Integrations

Read the default dataset from the Output panel or through the Apify API. Use the public TikTok page URLs in each row to trace the source upload. Direct media links are source links and may expire.

Watch the Apify workflow guide:

❓ FAQ

What happens if the same upload appears more than once?

The first eligible occurrence is saved. Later matches from another submitted username, URL, user ID, or supported profile surface are ignored, and the row keeps the first requested-profile attribution.

What is the difference between Include playlists and Check playlist membership?

Include playlists can add public uploads found in the target creator's playlists or mixes. Check playlist membership checks ordinary profile-feed videos for public membership and does not collect playlist-only videos.

Can I collect public reposts and filter to amplified uploads?

Yes. Turn on Include reposted videos to add public reposts. Turn on Only reposts or mentions to keep uploads that repost or mention another creator. That filter does not turn on repost collection.

What does an empty Maximum uploads per profile value do?

It returns all available results until the source is exhausted. Set maxItems when you want a shorter run or fewer rows to review.

What happens when a profile is private or unavailable?

The Actor does not make placeholder rows for private, deleted, or unreadable targets. Other submitted targets can continue when possible, but a target can return no rows when public data is not available.

How are photo carousels represented?

The row uses mediaType: "photoCarousel". Its media.photoUrls can hold the public photo links, while video-only media links and duration can be null.

No. TikTok can return signed links that expire. Use the public videoUrl for the source page and rerun when you need fresh media links.

Do I need a TikTok login or API key?

No. The Actor reads public TikTok surfaces without a TikTok login, OAuth, or source credential. Private and login-gated content is outside the product.

Can I search by hashtag or keyword?

No. The Actor starts from known creator usernames, profile URLs, or numeric user IDs. Hashtag, keyword, and general creator-discovery search are outside its scope.

Can I submit an exact video URL?

No. creatorTargets accepts creator usernames, profile URLs, or numeric user IDs. The run collects the selected public surfaces for those creator targets.

📝 Changelog

v0.0 (01-09-2026)

  • Initial release.

🆘 Support

For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡

Made with ❤️ by Maxime Dupré