TikTok Playlist Scraper: Names, Video Counts, Covers
Pricing
from $2.00 / 1,000 playlists
TikTok Playlist Scraper: Names, Video Counts, Covers
List every public playlist on any TikTok account. Returns playlist name, ID, video count, cover image, playlist URL and creator details, for one account or hundreds at a time. Playlist metadata only, the videos inside are not included. No login, no cookies. JSON, CSV, Excel.
Pricing
from $2.00 / 1,000 playlists
Rating
5.0
(1)
Developer
Muhamed Didovic
Maintained by CommunityActor stats
0
Bookmarked
21
Total users
3
Monthly active users
3 days ago
Last modified
Categories
Share
TikTok Playlist Scraper

List every public playlist on any TikTok account, with names, video counts, covers and direct links. Switch on one option and get every video inside each playlist too.
Give it a handle. Get one row per playlist, and one row per video if you ask for them, ready for CSV or Excel.
What this returns
By default, one row per playlist: name, ID, video count, cover image, playlist URL and creator details.
With Include the videos in each playlist (includeVideos) switched on, every playlist row is followed by one row per video inside it: caption, hashtags, post date, duration, play, like, comment, share and save counts, cover, sound, and the video's TikTok URL. Each video row carries the playlist's ID, name and URL plus its position in the playlist, so you can group or filter by playlist straight away.
Rows are told apart by rowType: playlist or video.
Video rows start on 4 November 2026, when their per-video price takes effect. Until then the option is accepted, the run returns playlist rows only, and the log says so.
Why Use This Scraper
Playlists are how creators and brands organise a channel, so the list of them is a fast read on content strategy: which themes an account commits to, how many videos each theme carries, and which series are being built out.
With the videos included you can go one step further and see how each series performs: which playlist draws the views, which episodes carry it, and when the creator last added to it.
Useful when you want that across many accounts at once rather than clicking through profiles.
Supported Inputs
| Input | Example |
|---|---|
| Bare handle | gymshark |
| With the @ | @gymshark |
| Profile URL | https://www.tiktok.com/@gymshark |
Many accounts in one run.
Use Cases
Competitor content audits, where you compare how rival brands structure their channels.
Series performance, by summing plays and likes per playlist to see which themes earn the attention.
Creator vetting before a partnership, to see whether an account maintains organised series or posts ad hoc, and how those series perform.
Content planning, using video counts per playlist as a signal of what an account invests in.
Channel monitoring, by rerunning and diffing to catch new playlists and new videos as they launch.
How It Works

Each handle is normalized and its playlists are read in one request, deduplicated by playlist ID. With videos switched on, each playlist's videos are then read page by page, in the order the playlist lists them, until the playlist ends or the per-playlist limit is reached. An account with no public playlists returns a single explanatory row rather than nothing at all.
Input Configuration
| Field | Type | Default | Description |
|---|---|---|---|
handles | array | required | Usernames or profile URLs. |
maxPlaylistsPerHandle | integer | 200 | Stop after this many playlists per account. |
includeCreator | boolean | true | Add creator ID, nickname, avatar and private flag to playlist rows. |
includeVideos | boolean | false | Add one row per video inside each playlist. Paid Apify plans only. |
maxVideosPerPlaylist | integer | 200 | Stop after this many videos per playlist. Used only with includeVideos. |
Minimal input
{"handles": ["@gymshark"]}
Playlists and their videos
{"handles": ["@gymshark"],"includeVideos": true,"maxVideosPerPlaylist": 100}
Output Sample
Playlist row
{"rowType": "playlist","handle": "gymshark","playlistId": "7506522272257280790","playlistName": "Motivation","videoCount": 38,"playlistUrl": "https://www.tiktok.com/@gymshark/playlist/Motivation-7506522272257280790","coverUrl": "https://p16-common-sign.tiktokcdn.com/...","creatorId": "6536068161471517696","creatorNickname": "Gymshark","creatorAvatarUrl": "https://p19-common-sign.tiktokcdn.com/...","creatorPrivate": false,"scrapedAt": "2026-08-18T20:43:11.402Z"}
Video row (with includeVideos)
{"rowType": "video","handle": "brie_matthews","playlistId": "7664648671196465934","playlistName": "PLACES I BREASTFED","playlistUrl": "https://www.tiktok.com/@brie_matthews/playlist/PLACES-I-BREASTFED-7664648671196465934","positionInPlaylist": 1,"videoId": "7664626549655702798","videoUrl": "https://www.tiktok.com/@brie_matthews/video/7664626549655702798","description": "The last video to this series...","hashtags": ["breastfeeding", "breastfedbaby", "motherhood", "breastfeedingjourney"],"createdAt": "2026-07-20T15:06:25.000Z","isPhotoPost": false,"durationSeconds": 24,"playCount": 26200,"likeCount": 1498,"commentCount": 9,"shareCount": 10,"saveCount": 26,"coverUrl": "https://p19-common-sign.tiktokcdn.com/...","musicTitle": "original sound","musicAuthor": "Brie Matthews","authorUsername": "brie_matthews","scrapedAt": "2026-10-21T13:10:02.511Z"}
Account with no playlists
{"handle": "@someaccount","error": "no_playlists_found","message": "@someaccount has no public playlists."}
Key Output Fields
| Field | Description |
|---|---|
rowType | playlist or video. |
playlistName | The playlist title as shown on TikTok. |
videoCount | How many videos it holds, as a number rather than a string. |
playlistUrl | Direct link, built in TikTok's own name-slug format. |
playlistId | Stable ID, for diffing runs over time. Also on every video row, to join videos to their playlist. |
coverUrl | Playlist cover image on playlist rows, video cover on video rows. |
creatorNickname | Display name of the account. |
positionInPlaylist | Video rows: 1 for the first video the playlist lists, then 2, 3 and on. |
videoUrl | Video rows: the video's TikTok link (a /photo/ link for photo posts). |
playCount / likeCount / commentCount / shareCount / saveCount | Video rows: engagement counts at the time of the run. |
createdAt | Video rows: when the video was posted. |
error / message | Present only on rows for handles that returned nothing. |
Free Apify plan
On the free Apify plan, the first 3 playlists of each run come back in full, so you can check the data. After that, rows keep the handle, playlist ID, name and URL and the creator's ID and nickname, while the video count is rounded to its order of magnitude and the cover and creator avatar links are hidden. A freePlanNote field marks masked rows. The videos inside playlists (includeVideos) are available on paid plans only. Any paid Apify plan returns every field in full.
FAQ
Can I get the videos in a playlist?
Yes, from 4 November 2026. Switch on includeVideos and every playlist row is followed by its videos, one row each. maxVideosPerPlaylist caps how many per playlist.
Do I need a login or cookies? No.
What if an account has no playlists? You get one row saying so. Most accounts do not use playlists at all.
Why is videoCount sometimes higher than the number of video rows I get?
It counts everything the creator added, including videos since made private or deleted. Video rows cover the videos that are still public.
What does it cost? One charge per row returned, plus a small per-run start fee. Video rows also carry a small per-video charge on top of the row price. The exact prices are on the Pricing tab. No subscription.
Support
Found a bug or need a field added? Open an issue on the Actor's Issues tab in Apify Console, or email muhamed.didovic@gmail.com.
Additional Services
Need a custom TikTok or social-media scraper, or a private version of this Actor? Reach out at muhamed.didovic@gmail.com.
Explore More Scrapers
- TikTok Video Downloader — watermark-free MP4, cover and audio on stable links
- TikTok Mention Scraper — videos tagging an account, confirmed by account ID
- TikTok Post Scraper — full metadata and engagement for any post
- TikTok Profile Scraper — profile details and stats for any account
- TikTok Search Scraper — TikTok's ranked search results for any keyword
Browse the full portfolio: muhamed-didovic.github.io
🤖 For AI Agents & LLM Apps
Purpose: Return the public playlists of TikTok accounts and, optionally, the videos inside each playlist.
Minimal tested input:
{ "handles": ["@gymshark"] }
Output: array of flat objects in one dataset, told apart by rowType.
rowType: "playlist":handle,playlistId,playlistName,videoCount,playlistUrl,coverUrl,scrapedAt. WithincludeCreator:creatorId,creatorNickname,creatorAvatarUrl,creatorPrivate.rowType: "video"(only withincludeVideos: true):handle,playlistId,playlistName,playlistUrl,positionInPlaylist,videoId,videoUrl,description,hashtags,createdAt,isPhotoPost,durationSeconds,playCount,likeCount,commentCount,shareCount,saveCount,coverUrl,musicTitle,musicAuthor,authorUsername,scrapedAt.
Critical for agents: videos are separate rows, not an array on the playlist row; join them on playlistId. videoCount is TikTok's count and can exceed the number of video rows (private and deleted videos are counted but not returned). Handles with no public playlists return one row carrying error and message instead.
Behavior & billing: Pay-per-event. One charge per row returned; video rows add a per-video event. Unknown handles and accounts without playlists yield one error item each rather than failing the run. No login or cookies required.
⚠️ Disclaimer
This Actor accesses publicly available data on TikTok for legitimate research, market-intelligence, and business-analysis purposes. It does not log in, bypass authentication, or access private content. Use of this Actor must comply with TikTok's Terms of Service and all applicable laws, including data-protection regulations (GDPR, CCPA, etc.). The authors are not responsible for any misuse. Users must:
- Respect rate limits and avoid overloading TikTok's infrastructure
- Not use scraped data to violate user privacy or platform terms
- Process any personal data only with a lawful basis and in compliance with their jurisdiction
- Not republish scraped content in violation of copyright
We do not store scraped data; the Actor returns it directly to your Apify dataset for your authorized use. TikTok is a trademark of ByteDance Ltd.; this Actor is not affiliated with or endorsed by TikTok or ByteDance.
SEO Keywords
tiktok playlist scraper, tiktok playlists, scrape tiktok playlists, tiktok playlist api, tiktok playlist videos, scrape tiktok playlist videos, tiktok mix scraper, tiktok playlist list, tiktok series videos, tiktok content series, tiktok channel structure, tiktok creator playlists, tiktok brand playlists, export tiktok playlists, export tiktok playlist videos, tiktok playlist names, tiktok playlist video count, tiktok series performance, tiktok competitor audit, tiktok content strategy, apify tiktok playlist scraper