YouTube Scraper — Search, Channels, Videos & Playlists
Pricing
$0.40 / 1,000 youtube results
YouTube Scraper — Search, Channels, Videos & Playlists
All-in-one YouTube data Actor: keyword search, per-video detail (exact player fields when served, else exact-id list metadata), channel videos/shorts/live and whole playlists — one flat schema, no API key, no login, no proxy. Pay per result: 1 unit per row; failed or empty lookups never billed.
Pricing
$0.40 / 1,000 youtube results
Rating
0.0
(0)
Developer
Datamule
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
An all-in-one Actor for public YouTube data. No API key, no Google quota, no
login, no cookies, no proxy required. Four modes over one flat output schema, so
a search row, a channel row and a playlist item all land in the same dataset with
a type field telling you what each one is.
Modes
| Mode | Input field | What you get |
|---|---|---|
search | searchQueries | Keyword search results, paginated — one row per video |
videos | videoUrls | One row per resolvable exact video ID (an unavailable ID yields no row and is never charged): exact player detail (exact view/like counts, publish date, category, keywords) when YouTube serves the player, otherwise exact-ID list metadata |
channel | channelUrls | A channel's Videos, Shorts and Live tabs, plus a channel summary row |
playlist | playlistUrls | Every item of a playlist, in order, with its position |
Handles (@name), /channel/UC…, /c/…, /user/…, youtu.be/…, /shorts/…,
?v=… and bare 11-character IDs are all accepted and normalised for you.
Pricing — pay per result, nothing else
There is no actor-start fee. You are charged only for rows actually
delivered: every video, short, channel or playlistItem row costs
1 result unit.
A video that is unavailable, a channel that will not resolve, or a playlist that
returns nothing emits no row and costs you nothing. Use maxItems to put a
hard ceiling on any run.
Example input
{"mode": "search","searchQueries": ["python tutorial"],"maxItems": 25,"language": "en","region": "US"}
Every video of a channel's Shorts and Videos tabs:
{"mode": "channel","channelUrls": ["@YouTube"],"channelTabs": ["videos", "shorts"],"maxItems": 100}
Output
Every row carries type, id, url, title and provenance (_mode,
_source, _input, _language, _region). Depending on the type you also get
channelId / channelName / channelUrl, durationSeconds / durationText,
viewCount / viewCountText, likeCount, publishedAt / publishedText,
category, keywords, thumbnailUrl and playlistId / playlistPosition.
Counts that YouTube publishes only as human text ("1.2M views") are parsed to an integer and kept verbatim, so you never have to guess how a number was rounded.
Notes and honest limits
- Only public data is read. Private, members-only, age-gated-login and region-blocked videos are skipped, not faked.
- Search and channel-tab list rows carry YouTube's own approximate view counts and relative publish text ("8 months ago").
mode: "videos"returns one row for each resolvable ID you list, and every delivered row belongs to the exact ID you asked for. It returns YouTube's exact player fields (viewCount,likeCount,publishedAt,uploadedAt,category,keywords) when YouTube serves the player payload to the run's IP. When the player is refused — which is common from plain datacenter IPs — the row falls back to the same exact-ID list metadata as search (viewCountText,publishedText) and the exact-only fields are simply omitted rather than guessed. Either way the row is real data for the ID you asked for, never a substitute video.- If a run resolves zero rows it exits non-zero instead of reporting an empty success, so a broken input never looks like a clean run.
This is an independent implementation built against public YouTube client behaviour. It is not affiliated with, endorsed by, or derived from YouTube, Google, or any other Apify Actor.