# YouTube Playlist Export

> Export a YouTube playlist to CSV, Excel or JSON: position, title, channel, date, duration, views and likes. Official Data API with your own free API key.

URL: https://cliqtomedia.com/actors/youtube-playlist-export/

Category: Video, audio & streaming · Status: coming soon · Apify profile: https://apify.com/cliqtomedia?fpr=cliqto

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.

## How to use it: 3 steps

1. **Follow us on Apify.** The 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 Start.** No 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 results.** When 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.

## 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.

## 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.

## Data fields

- `status` (string): Row 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.
- `playlistId` (string): Playlist ID (PL…, UU…, OL…).
- `playlistTitle` (string): Playlist title.
- `playlistChannelTitle` (string): Channel that owns the playlist.
- `playlistUrl` (string): Link to the playlist.
- `position` (integer): 1-based position in the playlist, as YouTube shows it.
- `videoId` (string): YouTube video ID.
- `url` (string): Watch link that opens the video inside the playlist.
- `title` (string): Video title.
- `description` (string): Video description as returned by YouTube.
- `channelTitle` (string): Channel that uploaded the video (may differ from the playlist owner).
- `channelId` (string): Uploader channel ID.
- `publishedAt` (string): When the video was published (ISO 8601, UTC).
- `addedAt` (string): When the video was added to the playlist (ISO 8601, UTC).
- `durationSec` (integer): Length in seconds; null for live/upcoming streams or when includeStats is off.
- `duration` (string): Length as ISO 8601 duration (PT1H2M3S).
- `views` (integer): View count; null if hidden or includeStats is off.
- `likes` (integer): Like count; null if hidden by the owner or includeStats is off.
- `comments` (integer): Comment count; null if comments are off or includeStats is off.
- `thumbnailUrl` (string): Largest available thumbnail URL.
- `privacyStatus` (string): public, unlisted, private or privacyStatusUnspecified (deleted).
- `unavailableReason` (string): For status = unavailable: private or deleted.
- `errorCode` (string): Machine code on status rows, e.g. PLAYLIST_NOT_FOUND, API_KEY_INVALID, QUOTA_EXCEEDED.
- `message` (string): Plain-English explanation on status rows.
- `input` (string): Your input entry this row comes from.
- `source` (string): Always youtube-data-api-v3.
- `fetchedAt` (string): When this run fetched the data (ISO 8601).

## Input settings

- `apiKey` (string): Your own YouTube Data API v3 key (required). Free: Google Cloud Console → APIs & Services → enable "YouTube Data API v3" → Credentials → Create API key. Each run spends quota of this key (about 2 units per 50 videos; 10,000 units/day by default). Stored encrypted, never written to the dataset or logs.
- `playlistUrls` (array, required): Public or unlisted playlist links (youtube.com/playlist?list=…, or a watch link with list=…) or bare playlist IDs (PL…, UU…, OL…). Up to 100 per run. Watch later and Liked videos are private to the account and cannot be read with an API key.
- `maxItems` (integer): Stop each playlist after this many entries (private and deleted entries count too). Set high to export whole playlists.
- `includeStats` (boolean): Adds one extra API call per 50 videos (1 quota unit) to fetch duration, views, likes and comments. Turn off to export only titles, positions and dates at half the quota.

## 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

| Task | Input | Key fields | Next step |
|---|---|---|---|
| Course or tutorial outline | the course playlist | `position`, `title`, `durationSec`, `url` | Make a syllabus or a watch plan with total hours |
| Audit a channel's playlists | the channel's playlist links | `views`, `likes`, `publishedAt`, `unavailableReason` | Find weak, private or deleted videos |
| Archive or back up a playlist | any public playlist | `videoId`, `title`, `channelTitle`, `addedAt` | Keep a record of what was in it |
| Content research | competitor playlists | `title`, `views`, `durationSec`, `publishedAt` | Compare topics, length and reach |
| Catalog for an app or model | many playlists | all fields | Join on `videoId` or `playlistId` |

## Tips

- 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

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.

## Sample 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"
}
```

## Similar tools

- [YouTube Search Results Scraper — No Login](https://cliqtomedia.com/actors/youtube-search-scraper/)
- [YouTube Comments Scraper](https://cliqtomedia.com/actors/youtube-comments-scraper/)
- [YouTube Subtitles & Transcript Scraper API](https://cliqtomedia.com/actors/youtube-transcript-scraper/)
- [Apple Podcast Directory & RSS Contacts Scraper](https://cliqtomedia.com/actors/podcast-directory-rss-contacts-scraper/)
- [Audio & Podcast Transcriber (Speech to Text)](https://cliqtomedia.com/actors/audio-video-transcriber/)
- [Social Video Downloader: TikTok, Instagram, X - No Login](https://cliqtomedia.com/actors/social-video-downloader/)
