YouTube Scraper - $0.135 per 1,000, No API Key
Pricing
from $0.14 / 1,000 video returneds
YouTube Scraper - $0.135 per 1,000, No API Key
$0.135 per 1,000 videos, under the $0.20 to $1.00 charged by the highest-traffic YouTube search and channel scrapers on Apify. Search YouTube or pull a whole channel: title, channel, duration, view count, publish date and direct URL. No Google API key, no OAuth, no quota.
Pricing
from $0.14 / 1,000 video returneds
Rating
5.0
(1)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
5
Total users
1
Monthly active users
3 hours ago
Last modified
Categories
Share
YouTube Scraper
Scrape YouTube videos by search keyword or by channel (URL, @handle, or UC… id) using YouTube's internal InnerTube (youtubei/v1) JSON API. No API key, no cookies, no login. Auto-paginates via continuation tokens to reach your requested item count.
For every video it returns: videoId, title, watch url, channelName, channelId, viewCountText, publishedTimeText, lengthText, and the largest thumbnail.
$0.135 per 1,000 videos ($0.000135 each), plus $0.001 each time a run starts. Flat rate — no volume tiers, no plan gates — and you are charged only for videos actually returned. That is under the $0.20 to $0.40 per 1,000 charged by the highest-traffic YouTube search and channel scrapers on the Store, though a few metadata-only listings price lower.
What it does
- Search mode — give one or more keywords; each query returns up to
maxItemsmatching videos. - Channel mode — give one or more channels; each returns up to
maxItemsof its newest videos.
You can use either mode or both in a single run. Results are de-duplicated by videoId across all queries and channels, so you never pay for the same video twice in one run.
Input
| Field | Type | Description |
|---|---|---|
searchQueries | string[] | Keywords to search, one per line. Optional if you supply channelUrls. |
channelUrls | string[] | Channel URLs, @handles, or raw UC… ids. Optional if you supply searchQueries. |
maxItems | integer | Max videos per query and per channel (1–1000, default 50). |
proxyConfiguration | object | Proxy for all requests. Residential Apify Proxy is strongly recommended — YouTube blocks datacenter/cloud IPs aggressively. |
You must provide at least one of searchQueries or channelUrls. If both are empty the actor pushes an uncharged BAD_INPUT diagnostic row (it does not crash).
Example input
{"searchQueries": ["lofi hip hop", "python tutorial"],"channelUrls": ["https://www.youtube.com/@LofiGirl", "UCSJ4gkVC6NrvII8umztf0Ow"],"maxItems": 50,"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }}
Output
Each successful video is one dataset row with ok: true:
{"ok": true,"videoId": "n61ULEU7CO0","title": "lofi hip hop radio - beats to relax/study to","url": "https://www.youtube.com/watch?v=n61ULEU7CO0","channelName": "Lofi Girl","channelId": "UCSJ4gkVC6NrvII8umztf0Ow","viewCountText": "123,456 views","publishedTimeText": "2 years ago","lengthText": "1:02:33","thumbnail": "https://i.ytimg.com/vi/n61ULEU7CO0/hqdefault.jpg","mode": "search"}
Nullable / empty fields
YouTube's modern channel grid uses a different layout than search results, so a few fields can come back as an empty string "" depending on which layout a video uses:
channelId— may be empty for some channel-grid videos (the grid layout does not always carry the id).viewCountText,publishedTimeText,lengthText— may be empty for live streams, premieres, or radio-style "videos" that have no view count or fixed duration.thumbnail— falls back tohttps://i.ytimg.com/vi/<videoId>/hqdefault.jpgif no source URL is present, so it is rarely empty.
videoId, title, and url are always present on ok: true rows.
Pricing
| Event | When | Price |
|---|---|---|
| Actor start | Once per run, per GB of run memory | $0.001 |
| Video returned | Each genuine ok: true video row | $0.000135 ($0.135 / 1,000) |
- Blocked, rate-limited, network-error, and empty (
NO_RESULTS) runs are never charged. When something goes wrong the actor pushes anok: falsediagnostic row with anerrorCodeinstead of charging you. - Videos are de-duplicated by
videoIdacross every query and channel in the run, so you never pay twice for the same video in one run. - 1,000 videos costs $0.136 all in. A two-keyword, one-channel run at the default
maxItems: 50returns up to 150 videos for about $0.02.
Diagnostics
On any failure the actor pushes a diagnostic row (ok: false) carrying a clear errorCode rather than silently returning nothing:
errorCode | Meaning |
|---|---|
BAD_INPUT | No searchQueries or channelUrls were provided. |
BLOCKED | YouTube blocked the request (anti-bot / 403). Use a residential proxy. |
RATE_LIMITED | Hit a 429. The actor backed off and retried; lower volume or add a proxy. |
SERVER_ERROR | YouTube returned a 5xx. Usually transient — retry later. |
NO_RESULTS | The request succeeded but matched no videos for your input. |
NETWORK | A network error reaching YouTube. |
Troubleshooting
- Got
NO_RESULTSorBLOCKEDfor a channel you know has videos? YouTube blocks cloud/datacenter IPs aggressively. Enable Apify Proxy with theRESIDENTIALgroup and re-run — this resolves the large majority of empty/blocked results. RATE_LIMITEDon large runs? A highmaxItems(toward 1000) requires many paginated requests. LowermaxItems, run fewer queries per run, or keep the residential proxy on.- Channel won't resolve (
BAD_INPUT: could not resolve channel)? Double-check the handle/URL, or pass the rawUC…channel id directly.
Billing
Two charges apply: a $0.001 run-start fee each time a run begins, and the per-result fee for results actually delivered. Samples, diagnostics, duplicates, blocked look-ups and no-result runs never incur the per-result fee — a run that returns nothing costs only the $0.001 start fee.