Video & audio · Coming soon

YouTube Playlist Export

Paste playlist links or IDs. Get one row per playlist position in the same order as on YouTube. Each row has title, channel, date, duration, views and likes. You use your own free API key.

Built and tested. Prices will be shown after release.

Coming soon to the Apify StoreFollow us on Apify

What you get, for example

playlistIdPLRqwX-V7Uu6ZiZxtDDRCi6uhfTH4FilpH
playlistTitleCoding Challenges
playlistChannelTitleThe Coding Train

How it will work: 3 steps

  1. Follow us on ApifyThe tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run.
  2. Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example: https://www.youtube.com/playlist?list=PLRqwX-V7Uu6ZiZxtDDRCi… in Playlist URLs or IDs. Each start is one run.
  3. Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.

What it does

YouTube Playlist Export turns public YouTube playlists into a table: one row per playlist position, with the video title, channel, publish date, duration, views, likes, comments and link. You paste playlist links or IDs and add your own free YouTube Data API v3 key, and you get the whole playlist in the same order as on YouTube.

  • position is the place in the playlist, starting at 1, exactly as in the YouTube player.
  • A private or deleted video keeps its position. Its row has status unavailable and unavailableReason (private or deleted), so there are no holes and no renumbering.
  • With Include duration and view/like/comment counts on (the default), each row also has durationSec, views, likes and comments.
  • null means "no value from YouTube" (for example, hidden likes). It is never written as 0.
  • Accepted inputs: youtube.com/playlist?list=…, a watch link with &list=…, youtu.be/…?list=…, music.youtube.com playlist links, m.youtube.com links, or bare playlist IDs (PL…, UU…, OL… and others). The same playlist given twice is exported once.
  • A channel's uploads playlist works too: take the channel ID UC… and change the first two letters to UU. If you paste a channel link, the row tells you this ID.

Good for

  • You need the full list of videos of a course, podcast, music or tutorial playlist in a sheet.
  • You audit or catalog many playlists and need exact positions and numbers.
  • You want an official, stable data source with a clear quota.

Not a good fit

  • You have no API key and do not want one. This Actor does not work without a key.
  • Watch later and Liked videos (WL, LL) and private playlists. Google gives them only to their owner after a sign-in, never with an API key.
  • Comments, transcripts or search results. See Related Actors.

Who uses it

Teachers

Save a course playlist as a list with lengths.

Music and video fans

Keep a backup list of a playlist, including removed videos.

Researchers

Collect video data from playlists into one table.

Price

Prices will be shown after release.

Questions

Do I need a YouTube API key?

Yes. You make a free key in a Google project. The Actor does not log in to YouTube.

Can I export Watch later or Liked videos?

No. Only the owner can read them after sign-in. Copy the videos to a public or unlisted playlist first.

How big can a playlist be?

Up to 20,000 entries per playlist and 100 playlists per run.

What happens to private videos?

They get a row with status unavailable and the reason, private or deleted.

Do I need a YouTube or Google account?

You need a Google account to make the free API key. The Actor does not log in to YouTube and does not use cookies.

Why are some positions not in a row 1, 2, 3?

They are. Every entry gets a row, also private and deleted ones, so position always matches the YouTube player. Filter by status = ok if you want only playable videos.

Does it cost Google money?

No. The YouTube Data API is free within the daily quota. You pay only the Apify price above.

Is personal data included?

Only public playlist and video data that YouTube shows: playlist and channel names and IDs. No viewer data.

Details

Step by step on Apify
  1. Get a key (see above).
  2. The Playlist URLs or IDs field already has one example playlist, and Max videos per playlist is set to 10.
  3. Paste your key into YouTube Data API key.
  4. Click Start. Ten videos take a few seconds.
  5. Open the Videos view of the dataset, or download it as CSV, Excel or JSON.
Use cases
TaskInputKey fieldsNext step
Course or tutorial outlinethe course playlistposition, title, durationSec, urlMake a syllabus or a watch plan with total hours
Audit a channel's playliststhe channel's playlist linksviews, likes, publishedAt, unavailableReasonFind weak, private or deleted videos
Archive or back up a playlistany public playlistvideoId, title, channelTitle, addedAtKeep a record of what was in it
Content researchcompetitor playliststitle, views, durationSec, publishedAtCompare topics, length and reach
Catalog for an app or modelmany playlistsall fieldsJoin on videoId or playlistId
Tips for better results
  • Filter by status ok to keep only playable videos.
  • Private and deleted videos keep their position, so the order stays right.
  • Refresh view and like counts with a new run. Old numbers go out of date.
Limits and good to know

Data comes from the YouTube Data API v3 under your own key and Google project. Please follow the YouTube API Services Terms of Service: they say you should not keep statistics such as views and likes for more than 30 days without refreshing them. Refresh them with a new run, or delete old datasets. This Actor is not affiliated with or endorsed by YouTube or Google.

  • Up to 100 playlists per run and up to 20,000 entries per playlist. We tested one run with 20,000 videos: done in about 300 seconds, 801 quota units, 79 MB of memory
  • YouTube itself gives at most 20,000 entries for a channel's uploads (UU…) playlist, so very big channels are cut there
  • The default run timeout is 600 seconds. For more than about 30,000 videos in one run, set a higher timeout in the run options. The Actor stops reading at 30 minutes or 20 seconds before the timeout, whichever comes first, keeps the saved rows and ends as PARTIAL with reason TIME_LIMIT
  • If your daily quota runs out during a run, the Actor keeps the rows it saved, ends as PARTIAL with reason QUOTA_LIMIT, and the run SUCCEEDED. Run the rest after the quota resets
  • If Google keeps failing for two playlists in a row, the run keeps saved rows and ends with reason SOURCE_ERROR
  • Counts are live at fetchedAt and change all the time

For developers

Sample result

One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.

one result · JSON
{
  "status": "ok",
  "playlistId": "PLRqwX-V7Uu6ZiZxtDDRCi6uhfTH4FilpH",
  "playlistTitle": "Coding Challenges",
  "playlistChannelTitle": "The Coding Train",
  "playlistUrl": "https://www.youtube.com/playlist?list=PLRqwX-V7Uu6ZiZxtDDRCi6uhfTH4FilpH",
  "position": 1,
  "videoId": "17WoOqgXsRM",
  "url": "https://www.youtube.com/watch?v=17WoOqgXsRM&list=PLRqwX-V7Uu6ZiZxtDDRCi6uhfTH4FilpH",
  "title": "Coding Challenge 1: Starfield Simulation",
  "description": "This is the first in a new series of vid…",
  "channelTitle": "The Coding Train",
  "channelId": "UCvjgXvBlbQiydffZU7m1_aw",
  "publishedAt": "2016-04-13T03:17:50Z",
  "addedAt": "2016-04-13T03:17:51Z",
  "durationSec": 834,
  "duration": "PT13M54S",
  "views": 1389218,
  "likes": 29580,
  "comments": 1386,
  "thumbnailUrl": "https://i.ytimg.com/vi/17WoOqgXsRM/maxresdefault.jpg",
  "privacyStatus": "public",
  "unavailableReason": null,
  "errorCode": null,
  "message": null,
  "input": "https://youtu.be/17WoOqgXsRM?list=PLRqwX-V7Uu6ZiZxtDDRCi6uhfTH4FilpH",
  "source": "youtube-data-api-v3",
  "fetchedAt": "2026-10-22T05:14:19.638Z"
}
Data fields (27)
FieldTypeMeaning
statusstringRow result. ok = a public or unlisted video (charged as playlist-video). unavailable, not_found and invalid_input rows are charged as a small empty-result. api_key_required, api_key_error, quota_exceeded and error rows are not charged.
playlistIdstringPlaylist ID (PL…, UU…, OL…).
playlistTitlestringPlaylist title.
playlistChannelTitlestringChannel that owns the playlist.
playlistUrlstringLink to the playlist.
positioninteger1-based position in the playlist, as YouTube shows it.
videoIdstringYouTube video ID.
urlstringWatch link that opens the video inside the playlist.
titlestringVideo title.
descriptionstringVideo description as returned by YouTube.
channelTitlestringChannel that uploaded the video (may differ from the playlist owner).
channelIdstringUploader channel ID.
publishedAtstringWhen the video was published (ISO 8601, UTC).
addedAtstringWhen the video was added to the playlist (ISO 8601, UTC).
durationSecintegerLength in seconds; null for live/upcoming streams or when includeStats is off.
durationstringLength as ISO 8601 duration (PT1H2M3S).
viewsintegerView count; null if hidden or includeStats is off.
likesintegerLike count; null if hidden by the owner or includeStats is off.
commentsintegerComment count; null if comments are off or includeStats is off.
thumbnailUrlstringLargest available thumbnail URL.
privacyStatusstringpublic, unlisted, private or privacyStatusUnspecified (deleted).
unavailableReasonstringFor status = unavailable: private or deleted.
errorCodestringMachine code on status rows, e.g. PLAYLIST_NOT_FOUND, API_KEY_INVALID, QUOTA_EXCEEDED.
messagestringPlain-English explanation on status rows.
inputstringYour input entry this row comes from.
sourcestringAlways youtube-data-api-v3.
fetchedAtstringWhen this run fetched the data (ISO 8601).
Input settings (4)

The main fields of the input form. With the API you send them as JSON.

SettingName in the APITypeExample value
YouTube Data API keyapiKeystring
Playlist URLs or IDs requiredplaylistUrlsarray["https://www.youtube.com/playlist?list=PLRqwX-V7Uu6ZiZxtDDRCi6uhfTH4FilpH"]
Max videos per playlistmaxItemsinteger10
Include duration and view/like/comment countsincludeStatsbooleantrue

Start on Apify

Make a free Apify account: you get $5 of free usage every month. Missing a tool? Suggest it. We read every idea, but we do not promise to build it.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure