TikTok Playlist Scraper avatar

TikTok Playlist Scraper

Pricing

from $2.70 / 1,000 playlist videos

Go to Apify Store
TikTok Playlist Scraper

TikTok Playlist Scraper

Collect public TikTok playlist details and videos from playlist or collection IDs, playlist URLs, public account handles, or public profile URLs. Get playlist names, counts, creator details, video order, engagement, and available media links with collection times in a structured dataset.

Pricing

from $2.70 / 1,000 playlist videos

Rating

0.0

(0)

Developer

Maxime Dupré

Maxime Dupré

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Share

🎵 Turn TikTok playlists into structured data

For content researchers, creator teams, and developers, this Actor collects public TikTok playlist details and video rows. Review playlist names, counts, creator details, video order, engagement, available media links, and collection times in one dataset.

Use cases

📚 See playlist details and videos

Each run writes playlist rows, video rows, or both to the default dataset. Use recordType to tell the two row shapes apart. TikTok may leave optional fields out when the public source does not provide them.

▶️ Run a TikTok playlist snapshot

Run steps

  1. Choose whether to return playlist metadata, playlist videos, or both.
  2. Choose Playlist IDs or URLs to read direct playlist targets, or choose Profile handles or URLs to find public playlists from accounts.
  3. Add one or more values to the matching target list. The list for the other search method is ignored.
  4. Set an optional limit for playlists found per account or videos returned per playlist. Leave maxPlaylistsPerAccount empty to return all available public playlists until the source is exhausted. Leave maxVideosPerPlaylist empty to return all available public videos until the source is exhausted.
  5. Start the run and open the dataset link in the Output panel.

Availability can differ from one run to another. Private, deleted, or otherwise unavailable TikTok content is outside the product. The Actor reads public source data and does not need a TikTok login, cookies, or source credentials.

⚙️ Input

Input fields

FieldTypeWhat it does
resultTypestringChooses playlist metadata rows, playlist video rows, or both.
discoveryMethodstringChooses direct playlist IDs or URLs, or public account handles or profile URLs whose playlists should be found.
playlistTargetsarray of stringsAdds one or more public playlist or collection IDs or playlist URLs. Use this list with discoveryMethod: "playlistTargets".
profileTargetsarray of stringsAdds one or more public TikTok account handles or profile URLs. Use this list with discoveryMethod: "profileTargets".
maxPlaylistsPerAccountintegerOptional cap for playlists found from each selected profile. Leave it empty to return all available public playlists until the source is exhausted.
maxVideosPerPlaylistintegerOptional cap for videos returned from each selected playlist. It applies to Playlist videos and Playlist metadata and videos. Leave it empty to return all available public videos until the source is exhausted.

Result choices

resultType accepts playlistMetadata, playlistVideos, or playlistMetadataAndVideos. discoveryMethod accepts playlistTargets or profileTargets. Use one discovery method per run.

Example input

This is the public input from a successful run with one playlist target:

{
"resultType": "playlistVideos",
"discoveryMethod": "playlistTargets",
"playlistTargets": [
"7516638364301265695"
],
"maxVideosPerPlaylist": 1
}

🧾 Output

The Output panel provides a link to the default dataset. A run can contain playlist rows, video rows, or both. The tables below list every field in each public row shape. Required playlist and video page links are included, while optional source data appears when TikTok provides it.

Run output field

FieldTypeWhat it does
datasetUrlstringLink to the default dataset that holds the rows returned by the run.

Playlist record fields

FieldTypeWhat it does
recordTypestringIdentifies this row as a playlist row.
playlistIdstringStable TikTok ID of the playlist or collection.
namestringName shown for the playlist on TikTok.
videoCountintegerNumber of videos in the playlist reported by TikTok.
coverImageUrlstringSource URL for the playlist cover image.
playlistUrlstringPublic TikTok URL for the playlist.
creatorobjectTikTok account that owns the playlist.
creator.idstringStable TikTok ID of the playlist creator.
creator.handlestringPublic TikTok handle of the playlist creator.
creator.displayNamestringDisplay name of the playlist creator.
creator.profileUrlstringPublic TikTok profile URL of the playlist creator.
creator.followersCountintegerCreator follower count reported by TikTok.
creator.followingCountintegerNumber of accounts followed by the creator.
creator.likesCountintegerCreator likes reported by TikTok.
creator.videoCountintegerCreator video count reported by TikTok.
collectedAtstringTime when the playlist row was collected.

Example playlist row

This complete row came from a successful metadata run:

{
"recordType": "playlist",
"playlistId": "7516638364301265695",
"name": "In The Mix",
"videoCount": 24,
"coverImageUrl": "https://p16-common-sign.tiktokcdn-us.com/tos-useast8-p-0068-tx2/oMr6rAA6QCIh5zBgE2FEAqDfIoAjTeAQIifXqO~tplv-tiktokx-origin.image?dr=9636&x-expires=1788062400&x-signature=oxdTe4Q1oeR9n48yb0dSLbeY06Q%3D&t=4d5b0474&ps=13740610&shp=81f88b70&shcp=43f4a2f9&idc=useast5",
"playlistUrl": "https://www.tiktok.com/@tiktok/playlist/In-The-Mix-7516638364301265695",
"creator": {
"id": "107955",
"handle": "tiktok",
"profileUrl": "https://www.tiktok.com/@tiktok",
"displayName": "TikTok",
"followersCount": 95400000,
"followingCount": 2,
"likesCount": 463000000,
"videoCount": 1497
},
"collectedAt": "2026-08-29T22:53:26.032Z"
}

Playlist video record fields

FieldTypeWhat it does
recordTypestringIdentifies this row as a video row.
playlistIdstringStable TikTok ID of the playlist that contains the video.
playlistUrlstringPublic TikTok URL for the playlist that contains the video.
playlistNamestringName of the playlist that contains the video.
positionintegerPosition of the video in the playlist as provided by TikTok.
videoIdstringStable TikTok ID of the video.
videoUrlstringPublic TikTok page URL for the video.
captionstringCaption published with the video.
publishedAtstringTime when the video was published on TikTok.
engagementobjectEngagement counts reported by TikTok for the video.
engagement.viewsintegerVideo views reported by TikTok.
engagement.likesintegerVideo likes reported by TikTok.
engagement.commentsintegerVideo comments reported by TikTok.
engagement.sharesintegerVideo shares reported by TikTok.
engagement.savesintegerVideo saves reported by TikTok.
creatorobjectTikTok account that published the video.
creator.idstringStable TikTok ID of the video creator.
creator.handlestringPublic TikTok handle of the video creator.
creator.displayNamestringDisplay name of the video creator.
creator.profileUrlstringPublic TikTok profile URL of the video creator.
creator.followersCountintegerCreator follower count reported by TikTok.
creator.followingCountintegerNumber of accounts followed by the creator.
creator.likesCountintegerCreator likes reported by TikTok.
creator.videoCountintegerCreator video count reported by TikTok.
musicobjectSound details when TikTok provides them.
music.idstringStable TikTok ID of the sound.
music.titlestringSound title on TikTok.
music.authorNamestringSound author name on TikTok.
music.urlstringPublic TikTok URL for the sound.
mediaobjectVideo file details and source links when TikTok provides them.
media.durationSecondsnumberVideo duration in seconds.
media.widthintegerVideo width in pixels.
media.heightintegerVideo height in pixels.
media.qualitystringMedia quality label supplied by TikTok.
media.coverImageUrlstringSource URL for the video's cover image.
media.downloadUrlstringDirect source URL for the video file. It may expire.
captionLanguagestringLanguage code supplied for the video caption.
hashtagsarray of stringsHashtags found in the video caption.
mentionsarray of stringsTikTok handles mentioned in the video caption.
imagesarray of objectsImages in a video slideshow when TikTok provides them.
images[].urlstringSource URL for a slideshow image.
images[].widthintegerSlideshow image width in pixels.
images[].heightintegerSlideshow image height in pixels.
collectedAtstringTime when the video row was collected.

Example playlist video row

This unshortened row came from a successful video run. The signed media links are source links and may expire:

{
"recordType": "video",
"playlistId": "7585292371022088990",
"playlistUrl": "https://www.tiktok.com/@tiktok/playlist/TikTok-Awards-7585292371022088990",
"playlistName": "TikTok Awards",
"position": 1,
"videoId": "7584645463475932447",
"videoUrl": "https://www.tiktok.com/@tiktok/video/7584645463475932447",
"collectedAt": "2026-08-29T22:55:18.047Z",
"caption": "So excited to perform at the first-ever U.S. TikTok Awards in LA on Dec 18. Catch it live on TikTok + Tubi. 💃🏽🫶🏽",
"publishedAt": "2025-12-17T02:18:15.000Z",
"engagement": {
"views": 573300,
"likes": 12200,
"comments": 1443,
"shares": 923,
"saves": 1274
},
"creator": {
"id": "107955",
"handle": "tiktok",
"profileUrl": "https://www.tiktok.com/@tiktok",
"displayName": "TikTok",
"followersCount": 95400000,
"followingCount": 2,
"likesCount": 463000000,
"videoCount": 1497
},
"music": {
"id": "7584645384653589278",
"url": "https://www.tiktok.com/music/sound-7584645384653589278",
"title": "original sound",
"authorName": "TikTok"
},
"media": {
"durationSeconds": 31,
"width": 720,
"height": 1280,
"quality": "720p",
"coverImageUrl": "https://p16-common-sign.tiktokcdn-us.com/tos-useast8-p-0068-tx2/oUF6EpABfACCAYDlEu3CLWIADFRVhQZA2VEEEe~tplv-tiktokx-origin.image?dr=9636&x-expires=1788213600&x-signature=XaVN1kfv4B1TxS727rNpdBeyvMY%3D&t=4d5b0474&ps=13740610&shp=81f88b70&shcp=43f4a2f9&idc=useast8",
"downloadUrl": "https://v16-webapp-prime.us.tiktok.com/video/tos/useast8/tos-useast8-ve-0068c001-tx2/o44lLfGtR9YCxCGgYEurbIdvQeEdEAFhEfQUeA/?a=1988&bti=ODszNWYuMDE6&&bt=1149&ft=4KJMyMzm8Zmo0h77ca4jVN_OQpWrKsd.&mime_type=video_mp4&rc=NTo4PGgzMzc6Njk5NGgzOUBpM3lydnQ5cmc0ODMzaTczNEBfLS01LTQyXjIxYF4tNDIuYSNzc3EwMmRrMi5hLS1kMTJzcw%3D%3D&expire=1788216948&l=202608292255178AF1644E149453488856&ply_type=2&policy=2&signature=5ca323f11c18540a225913c55ee8e269&tk=tt_chain_token&btag=e00090000"
},
"captionLanguage": "en"
}

💳 Pricing

The Actor uses pay-per-event pricing. The Store page shows the price for each event and buyer tier.

EventWhen it is charged
Playlist DetailsOne public playlist's details are saved.
Playlist VideoOne public video from a selected playlist is saved.

🔌 Integrations

Dataset access

Open the dataset link in the Output panel to review the saved rows or use them in your workflow. Use playlistUrl and videoUrl to trace rows back to public TikTok pages. Signed media links may expire, so use them soon after the run.

Video guide

❓ FAQ

Yes. Source download and cover links can expire. Use playlistUrl and videoUrl as links to the public TikTok pages.

What does position mean?

It is the video's position in the playlist as provided by TikTok.

What if TikTok does not provide a field?

Optional fields can be absent when TikTok does not show that value. The Actor does not invent missing public-source data.

What happens when a playlist has no accessible public videos?

Only accessible public videos can produce video rows. Private, deleted, or unavailable videos are outside the product, and optional values stay absent when TikTok does not provide them.

Can I submit more than one playlist target?

Yes. Add multiple playlist IDs or URLs to playlistTargets, with one value for each playlist.

Can I submit more than one profile target?

Yes. Add multiple public account handles or profile URLs to profileTargets, with one value for each account.

Can I combine playlist targets and profile targets in one run?

No. Choose one discovery method per run. The fields for the other method are ignored. Use a separate run when you need the other target type.

Which result type should I choose?

Choose playlistMetadata for playlist names, counts, links, and creator details. Choose playlistVideos for video rows and their playlist positions. Choose playlistMetadataAndVideos for both shapes in one run.

Do I need a TikTok login or cookies?

No. The Actor reads public TikTok data without a TikTok login, cookies, or source credentials.

Do the limits have a fixed maximum?

The input schema does not set an upper bound for either limit. Leave maxPlaylistsPerAccount empty to return all available public playlists until the source is exhausted. Leave maxVideosPerPlaylist empty to return all available public videos until the source is exhausted.

📝 Changelog

0.0: 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é