YouTube Video Scraper

A channel's back catalogue,
as a table.

Give it a channel, a playlist or a keyword and get the videos back as rows: the video id and title, a link, the channel and its id, the view count both as YouTube prints it and as a number you can sum, how long ago it went up, the running time, and a thumbnail. Twelve columns, one row per video.

500 free rows, one-timethen $0.002 per row12 columnsCSV · XLSX · JSON
How it works

A channel in,
its videos out.

The input box takes four different things, and you can mix them in one list - a channel, a playlist, or just a phrase to search for.

  1. STEP 1Sign in to the platform.
  2. STEP 2Open the YouTube Video Scraper.
  3. STEP 3Paste your queries, one per line - a channel URL, an @handle, a channel id, a playlist URL, or a plain keyword. Or upload a CSV, XLSX, TXT or Parquet file.
  4. STEP 4Choose the video type: Shorts Only or Regular Videos Only.
  5. STEP 5Set a limit per query, or leave it empty to take everything.
  6. STEP 6Click Get Data.

It reads YouTube's own JSON API rather than scraping the page HTML, which is why the fields come back structured rather than parsed out of a layout that changes.

Why teams use it

The catalogue,
not just the front page.

Four ways to say what you want

A channel URL, an @handle, a channel id, a playlist link or a bare keyword all go in the same box, and you can mix them in one list. Nothing has to be normalised before you start.

A view count you can actually add up

The display text and the underlying number arrive as separate columns, so nothing has to guess what 1.2M means before a total can be computed.

The API, not the page

It reads YouTube's own JSON interface rather than parsing rendered HTML. That is why the columns stay stable when the site's layout does not.

What you get

Twelve columns -
and two decisions to make first.

This export has real data behind it, so the formats below are measured rather than described. Two of its properties change how you plan a run, and both are worth knowing before the table.

Shorts and regular videos are a choice, not a filter. The video type control is an either/or: a run returns one or the other, never both, and no run we have ever mixed them. It follows that pulling a channel's whole output is two runs rather than one. It also matters for what you get back - every shorts row arrives with no publish date and no running time, because those are not shown on a short. If your analysis needs a date or a duration, you need the regular-videos pass.

The publish date is relative, and nothing in the file anchors it. Every value reads 9 days ago or 3 months ago, and there is no scraped-at column, no timestamp, nothing dated anywhere in the twelve. So the export cannot tell you when a video actually went up - only how old it was when you looked. Record the run date alongside the file, because a week later the same file quietly means something else.

Data dictionary

Twelve columns,
in export order.

Taken from the header row and the JSON keys of real runs and confirmed against the platform's published column list. The formats are measured from populated cells.

query
The query this row came from, repeated on every row it produced. Worth keeping: it is the only thing separating results when you submit more than one query at a time.
video_id
YouTube's id for the video, always eleven characters. The column to key on - and to de-duplicate on, because the same video can appear more than once in a run.
title
The video title. It can carry trailing whitespace, so trim before matching or grouping on it.
url
A link to the video. The shape follows video_type: /watch?v=<id> for a regular video and /shorts/<id> for a short. The id is always in there.
channel_title
The channel's display name. Also carries trailing whitespace, and it can be blank on results that came from a keyword search.
channel_id
The channel's id, always beginning UC. The stable way to group by channel - a channel can rename itself, and this will not change. It too can be blank on keyword results.
views
The view count as YouTube prints it - a rounded, abbreviated string like 5.6K views. It is not always a view count: a single view reads 1 view, and a live stream reads <n> watching, which is concurrent viewers rather than lifetime plays.
views_parsed
The number. Despite the name this is the exact count, not the display string parsed - a video showing 4.1M views came back as 4099999. This is the column to sum, sort and compare on; views is for showing a human.
published
How long before the run the video went up, as a relative phrase - 9 days ago, 2 weeks ago, 3 months ago. Never an absolute date, and never present on a short. See the note below about anchoring it.
length
The running time as m:ss or h:mm:ss. Not present on a short, and not present on a live stream.
video_type
Either short or video, matching the Video Type you chose for the run. A run returns one or the other, so this column is constant within a file - it is there to tell two files apart after the fact.
thumbnail
A link to the preview image. The filename varies - frame0.jpg on shorts, and hqdefault, hq720 and custom variants elsewhere - so read the column rather than building the URL yourself. The video id is always in it.

Three things will bite if you do not plan for them. First, published is relative and there is no timestamp anywhere in the file - no scraped-at, no run date, nothing. The export tells you a video was 3 months ago as of the moment you ran it, and a file read later says the same words about a different date. Store the run date with the file. Second, views_parsed is the exact number and views is the rounded text, which is the reverse of what the name implies: sum and sort on views_parsed. Third, the same video_id can appear more than once in a run - we checked, and the only column that differs between the copies is query, because two inputs that resolve to the same channel each return the video. De-duplicate on video_id if you want unique videos, or keep the copies if you care which query found what. And one smaller thing: title and channel_title both carry trailing whitespace, so trim before you match on either.

Run controls

Set on the job,
not in the spreadsheet.

One input list, one limit and one either/or choice. The video type is the one that changes what comes back rather than how much of it - pick it deliberately.

Channel URL @handle Channel id Playlist URL Plain keyword Shorts Only Regular Videos Only Limit per query CSV · XLSX · TXT · Parquet upload
Common workflows

Three jobs this
runs more than any other.

A few examples of how teams use a channel's catalogue to answer a question they actually have.

Competitive

See what a rival channel is actually posting

A handle in, the catalogue out, with view counts you can sum. Two runs - one shorts, one regular - show how a channel splits its effort between formats, which a glance at the front page will not.

Competitive · Content
Ranking

Find the videos that carry a channel

Sorting on the parsed view count separates the handful of videos doing the work from the long tail. Because the number is exact rather than the rounded display text, the ordering holds even among videos that all read the same on screen.

Analytics
Sourcing

Build a shortlist from a keyword

A plain phrase in the query box searches YouTube, so a topic becomes a candidate list with channels and view counts attached - a starting point for creator outreach that is not someone's favourites.

Partnerships
Pricing

Pay only for the videos
you actually pull.

No subscription, no minimum, no recurring bill. Your first 500 rows are on us - after that you pay as you go, at the same flat rate as every other scraper here.

Free tier

500 free rows - $0

On every new account, one-time. No credit card. Per-query limits, file upload and every export format included.

$0 forever
Pay as you go

$0.002 per row after the free tier

About $2 per 1,000 videos. Worth remembering that a channel's shorts and its regular videos are two runs, so a full catalogue costs both. The estimator shows the row count and credit cost before a run starts.

Most popular
Volume

Custom · high volume

Volume pricing, dedicated workers and an SLA for ongoing monitoring or very large historical pulls. Tell us your numbers and we will put together a quote.

Talk to us
10% off your first paid run.Use code LIVESCRAPER10 at checkout.
Sign up
Pairs well with

One catalogue,
and the ones beside it.

The legal bit

Is scraping
YouTube videos legal?

Short answer: this reads public listing metadata through YouTube's own interface, and takes no video content - but YouTube's terms are stricter than most, and that is worth reading properly.

What comes back is the information a channel page shows anyone: titles, view counts, how long ago something went up, running times and thumbnails. No video file is downloaded, nothing behind a sign-in is touched, and no private or members-only content is involved. The scraper reads YouTube's own JSON interface rather than parsing the rendered page.

That said, YouTube's Terms of Service restrict automated access, and unlike a marketplace or a directory this is a platform that says so explicitly and enforces it. Google also publishes an official Data API for much of this. If you are operating at any scale, or building a product on top of the results, the honest position is that the official API is the sanctioned route and this is not - so the decision is yours to make with your own advice, not one this page can make for you.

On personal data: the rows describe videos and channels rather than individuals, and a channel name is a published identity rather than a private one. Even so, a small creator's channel can be a person by any other name, so if you are building anything that profiles individuals rather than measuring content, that is the point at which data-protection duties start applying to you. We run no third-party trackers on the data layer, and your exports self-delete after 30 days.

livescraper.app · principles
Public listing metadata only
No video files, no logins, no members-only content
YouTube's ToS restrict automated access - read them
An official Data API exists and is the sanctioned route
Exports self-delete (30 days)
Check YouTube's own terms before scaling.
Common questions

What people ask
before signing up.

The questions we hear most. Something else? Talk to us - humans write the answers, not bots.

How do I scrape YouTube videos?+
Using the YouTube Video Scraper:
  1. Sign in to the platform.
  2. Open the YouTube Video Scraper.
  3. Paste your queries, one per line - a channel URL, an @handle, a channel id, a playlist URL, or a plain keyword. Or upload a CSV, XLSX, TXT or Parquet file.
  4. Choose the video type: Shorts Only or Regular Videos Only.
  5. Set a limit per query, or leave it empty to take everything.
  6. Click Get Data.
Can I get shorts and regular videos in one run?+
No. The video type control is an either/or rather than a filter, and it applies to every query in the run, so a channel's full output is two runs. It is also why some columns look bare on a shorts run: a short has no publish date and no running time to show, so there is simply nothing for those columns to carry - it is not a gap in the data.
Why is there no publish date, only '3 months ago'?+
Because that is what the listing gives, and the export passes it through rather than inventing a date. The important consequence is that the value is relative to the moment you ran the job, and there is no timestamp column anywhere in the twelve to anchor it against. Record the run date alongside the file - the same file read a month later says the same words about a different date.
What is the difference between views and views_parsed?+
The views column is what YouTube prints - a rounded, abbreviated string like 5.6K views. The views_parsed column is the number, and despite the name it is the exact count rather than that string parsed: a video showing 4.1M views came back as 4099999. Sum, sort and compare on views_parsed, and use views only when you are showing something to a person.
Why does the same video appear twice?+
Because two of your queries resolved to the same channel. We checked the copies field by field and the only column that differs is query - for example an @handle and the full channel URL each return the same video. De-duplicate on video_id if you want unique videos, or keep both rows if you care which query found what.
What does 'watching' mean in the views column?+
It is a live stream. The views column carries whatever the listing shows, so for a stream in progress it reads as a number of people watching rather than a lifetime view count. Those rows also arrive without a publish date and without a running time, even though they are typed as regular videos, so exclude them before averaging anything.
What can I put in the query box?+
Four things, and you can mix them in one list: a channel URL, an @handle, a channel id, or a playlist URL. Anything that is not one of those is treated as a keyword and searched on YouTube. You can also upload the list as a CSV, XLSX, TXT or Parquet file instead of typing it.
How much does it cost?+
The first 500 rows are free and one-time, with no credit card. After that it is $0.002 per row - about $2 per 1,000 videos - which is the same flat rate as every other scraper on the platform. Remember that shorts and regular videos are separate runs, so a full catalogue is billed as both. The estimator shows the cost of a run before it starts.

Your first 500 videos,
on the house.

500 one-time free rows on every new account - no expiry date. After that $0.002 per row, pay as you go - no card on file until you say so.

Live instantly · no card required

Scraping YouTube video data at scale

Livescraper's YouTube Video Scraper turns a channel, a playlist or a search phrase into a table of videos. You paste your queries one per line - a channel URL, an @handle, a channel id, a playlist link, or a plain keyword - or upload them as a CSV, XLSX, TXT or Parquet file, choose whether you want shorts or regular videos, cap the rows per query, and download the results as a clean CSV, Excel or JSON file. It reads YouTube's own JSON interface rather than parsing rendered HTML.

Each row carries twelve columns: the query it came from, the video id and title, a link, the channel name and its id, the view count both as YouTube prints it and as an exact number, how long ago the video went up, its running time, whether it is a short or a regular video, and a thumbnail link.

Content teams run a rival's handle to see what is actually being published rather than what the front page features. Analysts sort on the exact view count to separate the videos carrying a channel from its long tail. Partnerships teams put a topic in as a keyword and get a candidate list of creators with channels and view counts attached.

Three properties are worth knowing before you build on it. Shorts and regular videos are an either/or choice rather than a filter, so a channel's full output is two runs - and shorts arrive with no publish date and no running time, because a short does not show them. The publish date that regular videos do carry is relative, reading as 9 days ago or 3 months ago, and there is no timestamp column anywhere in the export to anchor it, so record the run date alongside the file. And views_parsed is the exact count while views is the rounded display text, which is the reverse of what the name suggests - sum and sort on the former. Start free: your first 500 rows cost nothing and need no credit card, and after that it is a flat $0.002 per row.