TikTok Playlist Scraper
Pricing
from $2.70 / 1,000 playlist videos
TikTok Playlist Scraper
Collect public TikTok playlist details and videos from playlist or collection IDs, canonical URLs, collection share URLs, account handles, or profile URLs. Get playlist names, counts, creator details, video order, engagement, and available media links in a structured dataset.
Pricing
from $2.70 / 1,000 playlist videos
Rating
0.0
(0)
Developer
Maxime Dupré
Maintained by CommunityActor stats
0
Bookmarked
4
Total users
2
Monthly active users
3 days ago
Last modified
Categories
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
- Find public playlists from a TikTok account with TikTok playlists by username.
- Check playlist names, counts, creators, and source links with TikTok playlist metadata.
- Collect videos and their playlist positions with TikTok playlist videos.
- Build a structured playlist snapshot with TikTok playlist data.
- Extract public playlist details and videos with TikTok playlist scraper.
📚 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
- Choose whether to return playlist metadata, playlist videos, or both.
- Choose
Playlist IDs or URLsto read direct playlist targets, including collection share URLs, or chooseProfile handles or URLsto find public playlists from accounts. - Add one or more values to the matching target list. The list for the other search method is ignored.
- Set an optional limit for playlists found per account or videos returned per playlist. Leave
maxPlaylistsPerAccountempty to return all available public playlists until the source is exhausted. LeavemaxVideosPerPlaylistempty to return all available public videos until the source is exhausted. - 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 without a TikTok login or cookies.
⚙️ Input
Input fields
| Field | Type | What it does |
|---|---|---|
resultType | string | Chooses playlist metadata rows, playlist video rows, or both. |
discoveryMethod | string | Chooses direct playlist IDs or URLs, or public account handles or profile URLs whose playlists should be found. |
playlistTargets | array of strings | Adds one or more public playlist or collection IDs, canonical playlist URLs, or collection share URLs that resolve to a public collection. Use this list with discoveryMethod: "playlistTargets". |
profileTargets | array of strings | Adds one or more public TikTok account handles or profile URLs. Use this list with discoveryMethod: "profileTargets". |
maxPlaylistsPerAccount | integer | Optional cap for playlists found from each selected profile. Leave it empty to return all available public playlists until the source is exhausted. |
maxVideosPerPlaylist | integer | Optional 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
| Field | Type | What it does |
|---|---|---|
datasetUrl | string | Link to the default dataset that holds the rows returned by the run. |
Playlist record fields
| Field | Type | What it does |
|---|---|---|
recordType | string | Identifies this row as a playlist row. |
playlistId | string | Stable TikTok ID of the playlist or collection. |
name | string | Name shown for the playlist on TikTok. |
videoCount | integer | Number of videos in the playlist reported by TikTok. |
coverImageUrl | string | Source URL for the playlist cover image. |
playlistUrl | string | Public TikTok URL for the playlist. |
creator | object | TikTok account that owns the playlist. |
creator.id | string | Stable TikTok ID of the playlist creator. |
creator.handle | string | Public TikTok handle of the playlist creator. |
creator.displayName | string | Display name of the playlist creator. |
creator.profileUrl | string | Public TikTok profile URL of the playlist creator. |
creator.followersCount | integer | Creator follower count reported by TikTok. |
creator.followingCount | integer | Number of accounts followed by the creator. |
creator.likesCount | integer | Creator likes reported by TikTok. |
creator.videoCount | integer | Creator video count reported by TikTok. |
collectedAt | string | Time when the playlist row was collected. |
Example playlist row
This complete playlist row came from a successful current-beta 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=1790168400&x-signature=x9CWL3Qzj%2Fyl%2BxNJXJ1HdNDeEwE%3D&t=4d5b0474&ps=13740610&shp=81f88b70&shcp=43f4a2f9&idc=useast8","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": 95900000,"followingCount": 1,"likesCount": 464500000,"videoCount": 1504},"collectedAt": "2026-09-23T07:44:32.457Z"}
Playlist video record fields
| Field | Type | What it does |
|---|---|---|
recordType | string | Identifies this row as a video row. |
playlistId | string | Stable TikTok ID of the playlist that contains the video. |
playlistUrl | string | Public TikTok URL for the playlist that contains the video. |
playlistName | string | Name of the playlist that contains the video. |
position | integer | Position of the video in the playlist as provided by TikTok. |
videoId | string | Stable TikTok ID of the video. |
videoUrl | string | Public TikTok page URL for the video. |
caption | string | Caption published with the video. |
publishedAt | string | Time when the video was published on TikTok. |
engagement | object | Engagement counts reported by TikTok for the video. |
engagement.views | integer | Video views reported by TikTok. |
engagement.likes | integer | Video likes reported by TikTok. |
engagement.comments | integer | Video comments reported by TikTok. |
engagement.shares | integer | Video shares reported by TikTok. |
engagement.saves | integer | Video saves reported by TikTok. |
creator | object | TikTok account that published the video. |
creator.id | string | Stable TikTok ID of the video creator. |
creator.handle | string | Public TikTok handle of the video creator. |
creator.displayName | string | Display name of the video creator. |
creator.profileUrl | string | Public TikTok profile URL of the video creator. |
creator.followersCount | integer | Creator follower count reported by TikTok. |
creator.followingCount | integer | Number of accounts followed by the creator. |
creator.likesCount | integer | Creator likes reported by TikTok. |
creator.videoCount | integer | Creator video count reported by TikTok. |
music | object | Sound details when TikTok provides them. |
music.id | string | Stable TikTok ID of the sound. |
music.title | string | Sound title on TikTok. |
music.authorName | string | Sound author name on TikTok. |
music.url | string | Public TikTok URL for the sound. |
media | object | Video file details and source links when TikTok provides them. |
media.durationSeconds | number | Video duration in seconds. |
media.width | integer | Video width in pixels. |
media.height | integer | Video height in pixels. |
media.quality | string | Media quality label supplied by TikTok. |
media.coverImageUrl | string | Source URL for the video's cover image. |
media.downloadUrl | string | Direct source URL for the video file. It may expire. |
captionLanguage | string | Language code supplied for the video caption. |
hashtags | array of strings | Hashtags found in the video caption. |
mentions | array of strings | TikTok handles mentioned in the video caption. |
images | array of objects | Images in a video slideshow when TikTok provides them. |
images[].url | string | Source URL for a slideshow image. |
images[].width | integer | Slideshow image width in pixels. |
images[].height | integer | Slideshow image height in pixels. |
collectedAt | string | Time when the video row was collected. |
Example playlist video row
This complete video row came from a successful current-beta run. The signed media links are source links and may expire:
{"recordType": "video","playlistId": "7154034669288196891","playlistUrl": "https://www.tiktok.com/@aubreyisamess/collection/places%20to%20go-7154034669288196891","playlistName": "places to go","position": 1,"videoId": "7247660728914742574","videoUrl": "https://www.tiktok.com/@winstonbutterfield/video/7247660728914742574","collectedAt": "2026-09-23T07:44:32.926Z","caption": "🇵🇹 Tinned fish in Portugal. What began as a simple food, turned into an affordable delicacy. 🫒 This is one of the last remaining places where you can get handmade tinned fish, using the highest quality local ingredients like olive oil from the south of Portugal, piri piri pepper, fresh lemon and spices. 🐙 I learned that fish with a high oil/fat content, make the best tinned fish, and you’ll find many other kinds of tinned fish here like sea bass, salmon, tuna and mackerel. 🐟The method for making tinned fish was first invented in France. Sardines in Portugal used to be plentiful and easy to catch. So by the mid 20th century, 300 sardine canneries opened along the coast of Portugal. They were built close to the water so the fish could could be tinned the same day the fishermen brought them in. This was before refrigeration. But what makes tinned fish taste so good? Cooking Before canning, sardines are typically steamed or smoked. This step enhances the natural flavor of the sardines, which is retained during the canning process. Preservation Sardines are often preserved in flavorful liquids like oils, sauces, or brine. Over time, the sardines absorb these flavors, making them even more delicious. Aging Tinned fish improves with age. As they mature, the flavors meld together, and the fish becomes more tender. These sardines are from the Conserveira de Lisboa, in Lisbon Portugal #tinnedfish #tinfish #lisbon #authenticity #sardines #93years #portugal #frozenintime","publishedAt": "2023-06-22T23:45:27.000Z","engagement": {"views": 5800000,"likes": 630400,"comments": 3427,"shares": 56800,"saves": 99500},"creator": {"id": "6812284503333291014","handle": "winstonbutterfield","profileUrl": "https://www.tiktok.com/@winstonbutterfield","displayName": "Winston Butterfield","followersCount": 171000,"followingCount": 472,"likesCount": 6200000,"videoCount": 176},"music": {"id": "7247660774062066474","url": "https://www.tiktok.com/music/sound-7247660774062066474","title": "original sound","authorName": "Winston Butterfield"},"media": {"durationSeconds": 110,"width": 576,"height": 1024,"quality": "540p","coverImageUrl": "https://p19-common-sign.tiktokcdn-us.com/tos-useast5-p-0068-tx/12a0f6cb0fa1469288cc298761b7ac3d~tplv-tiktokx-origin.image?dr=9636&x-expires=1790319600&x-signature=UQEPElfg9WN4zHTddzDx%2BZQ36ek%3D&t=4d5b0474&ps=13740610&shp=81f88b70&shcp=43f4a2f9&idc=useast5","downloadUrl": "https://v16-webapp-prime.us.tiktok.com/video/tos/useast5/tos-useast5-ve-0068c004-tx/oo0ySQzXIBAhX2MzNCAwU3Tf6mUMhq74XDuIp3/?a=1988&bti=ODszNWYuMDE6&&bt=1735&ft=aEeq8qT0mIoPD12iHp2I3wUtwmAbMeF~O5&mime_type=video_mp4&rc=NWk4aTk5OGloNDg5NWk6ZkBpM3U8Z2Y6ZjlnbDMzZzczNEAuMDJhNmMtXl4xYzI2Ly01YSNpYzRrcjQwbF5gLS1kMS9zcw%3D%3D&expire=1790322381&l=202609230744327EC4A0628A46FD10DA44&ply_type=2&policy=2&signature=dd8c9c690d58db02768643132f725934&tk=tt_chain_token&btag=e00090000"},"captionLanguage": "en","hashtags": ["tinnedfish","tinfish","lisbon","authenticity","sardines","93years","portugal","frozenintime"]}
💳 Pricing
The Actor uses pay-per-event pricing. The Store page shows the price for each event and buyer tier.
| Event | When it is charged |
|---|---|
| Playlist Details | One public playlist's details are saved. |
| Playlist Video | One 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
Do signed media links expire?
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 or collection IDs, canonical playlist URLs, or collection share 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.
Can this Actor show me how to create a playlist on TikTok?
No. It reads existing public TikTok playlists. To collect one, submit its playlist or collection ID or URL.
Do I need a TikTok login or cookies?
No. The Actor reads public TikTok data without a TikTok login or cookies.
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
v0.1 (23-09-2026)
- Collect playlist videos from TikTok short and share URLs that resolve to public collections.
v0.0
- Initial release.
🆘 Support
For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡
🔗 Related Actors
- TikTok Search Scraper finds public TikTok videos or creators by keyword.
- TikTok Creator Analytics Scraper reviews public profile and audience metrics for creators found in a playlist.
- TikTok Video Downloader downloads media from the public video URLs in playlist rows.
- TikTok Transcript Scraper extracts public captions and transcripts from video URLs in playlist rows.
- TikTok Audio Downloader saves audio from playlist video URLs when TikTok exposes an audio track.
Made with ❤️ by Maxime Dupré