YouTube Scraper
Pricing
Pay per event
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, description, view count, like count, channel, duration, publish date, and thumbnail URLs.
Pricing
Pay per event
Rating
0.0
(0)
Developer
BowTiedRaccoon
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
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, and no proxy needed. 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
- Proxy: none required
- 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.