YouTube Scraper
SOCIAL MEDIAVIDEOS
YouTube Scraper
Scrape YouTube videos, channels, and metadata without an API key. Search by keyword or scrape a full channel's video catalogue. Returns structured records with video ID, title, view count, channel, duration, publish date, and thumbnail URLs.
What it does
The actor uses YouTube's InnerTube REST API — the same JSON API used by YouTube's own web client. No API key, no browser rendering. Requests run on standard datacenter infrastructure, keeping costs low.
Two scraping modes are available:
- Search mode (
mode: search) — submit one or more keyword queries and collect matching video results, paginated via InnerTube continuation tokens. - Channel mode (
mode: channel) — supply a channel URL, handle, or bare channel ID and collect all videos from that channel's Videos tab.
Input
| Field | Type | Description |
|---|---|---|
mode |
string | search (default) or channel |
queries |
array | Keywords to search for (search mode only) |
channelUrl |
string | Channel URL, @handle, or UC... ID (channel mode only) |
maxItems |
integer | Maximum videos to return per query / total for channel mode |
Channel URL formats accepted:
https://www.youtube.com/@MrBeasthttps://www.youtube.com/channel/UCX6OQ3DkcsbYNE6H8uQQuVA- Bare ID:
UCX6OQ3DkcsbYNE6H8uQQuVA
Output
Each record contains:
| Field | Type | Description |
|---|---|---|
videoId |
string | YouTube video ID |
videoUrl |
string | Full watch URL |
title |
string | Video title |
description |
string | Description snippet (if shown in search results) |
channelId |
string | YouTube channel ID (UC...) |
channelName |
string | Channel display name |
channelUrl |
string | Channel canonical URL |
viewCount |
integer | Total view count |
likeCount |
integer | Like count (null if hidden) |
commentCount |
integer | Comment count (null if unavailable) |
durationSeconds |
integer | Duration in seconds |
publishedAt |
string | Relative publish date (e.g. "1 year ago") |
thumbnailUrl |
string | Highest-resolution thumbnail URL |
tags |
string | Comma-separated tag list (if available) |
isLive |
boolean | Whether the video is a live stream |
categoryId |
string | Video category name |
query |
string | The search query or channel URL that produced this record |
scrapedAt |
string | ISO timestamp when the record was collected |
Example: search mode
{
"mode": "search",
"queries": ["python tutorial", "javascript crash course"],
"maxItems": 50
}
Example: channel mode
{
"mode": "channel",
"channelUrl": "https://www.youtube.com/@MrBeast",
"maxItems": 100
}
Performance and cost
- Memory: 256 MB
- Approximate throughput: 20 videos per InnerTube page, ~200 ms delay between pages
- Pricing: pay-per-result (DATA_RECORD events)
Notes
publishedAtreturns YouTube's relative format ("3 days ago", "1 year ago") rather than an absolute ISO date — the InnerTube browse/search API does not expose absolute timestamps in these endpoints.likeCountandcommentCountare not available from the InnerTube browse/search endpoints and will always benull.descriptionis populated only when YouTube includes a snippet in search results; it is typicallynullin channel mode.- The actor handles YouTube's EU consent mechanism automatically via a session cookie header.