YouTube Scraper - $0.135 per 1,000, No API Key avatar

YouTube Scraper - $0.135 per 1,000, No API Key

Pricing

from $0.14 / 1,000 video returneds

Go to Apify Store
YouTube Scraper - $0.135 per 1,000, No API Key

YouTube Scraper - $0.135 per 1,000, No API Key

YouTube's search response never carries a date. It carries "4 years ago", and the view count as "56,651,173 views", the exact strings the page prints. Rows keep them, beside videoId, title, URL, channel and thumbnail. No API key, no OAuth, no quota. $0.135 per 1,000 videos.

Pricing

from $0.14 / 1,000 video returneds

Rating

5.0

(1)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

8

Total users

2

Monthly active users

2 days ago

Last modified

Share

YouTube Scraper

YouTube's search response never carries a date. It carries "4 years ago", and the view count as "56,651,173 views", the exact strings the results page is about to print. Both come through here as written, because turning them into numbers would mean guessing.

Keyword searches and channel pulls produce the same flat rows: videoId, title, watch url, channelName, channelId, view count, published time, length and the largest thumbnail. It reads YouTube's internal InnerTube JSON API and follows continuation tokens to reach whatever count you asked for. That's the API the site itself uses, so there's no Data API key to register, no OAuth consent screen, and none of the daily quota that comes with either.

$0.135 per 1,000 videos ($0.000135 each), plus $0.001 when a run starts. Flat on every plan.

What you get

{
"ok": true,
"videoId": "n61ULEU7CO0",
"title": "Best of lofi hip hop 2021 ✨ [beats to relax/study to]",
"url": "https://www.youtube.com/watch?v=n61ULEU7CO0",
"channelName": "Lofi Girl",
"channelId": "UCSJ4gkVC6NrvII8umztf0Ow",
"viewCountText": "56,648,381 views",
"publishedTimeText": "4 years ago",
"lengthText": "6:10:58",
"thumbnail": "https://i.ytimg.com/vi/n61ULEU7CO0/hq720.jpg",
"mode": "search"
}

Note that the counts are strings, as YouTube renders them"56,648,381 views",

"4 years ago"
, "6:10:58". They aren't parsed into numbers or timestamps, because YouTube doesn't give exact ones here. You'll want to parse them yourself if you're doing maths on them.

Live streams and premieres are the ragged edge: viewCountText comes back as something like "490 watching", and publishedTimeText and lengthText can both be empty strings, because a stream has no duration and no publish date yet. channelId can also be empty on some channel-grid rows, where YouTube's grid layout doesn't carry it. videoId, title and url are always there.

thumbnail falls back to i.ytimg.com/vi/<videoId>/hqdefault.jpg when no source URL is present, so it's rarely empty.

Input

FieldNotes
searchQueriesKeywords, one per line. Each returns up to maxItems.
channelUrlsFull channel URLs, @handles, or raw UC… ids. Each returns up to maxItems of its newest videos.
maxItemsPer query and per channel, 1–1000, default 50.
proxyConfigurationApify Proxy, datacenter, on by default. See below.
{
"searchQueries": ["lofi hip hop", "python tutorial"],
"channelUrls": ["https://www.youtube.com/@LofiGirl", "UCSJ4gkVC6NrvII8umztf0Ow"],
"maxItems": 50
}

Use either mode or both. Results are de-duplicated by videoId across every query and channel, so a video that shows up in two searches is charged once.

maxItems is per query and per channel, not per run. Two keywords plus one channel at maxItems: 50 is up to 150 videos, not 50.

About the proxy

Apify Proxy is on by default, on datacenter addresses. YouTube blocks datacenter and cloud addresses hard, so if you're seeing BLOCKED or empty results, switch the proxy to the RESIDENTIAL group. That clears up most of it. Residential is billed by the gigabyte on your own account, but these are small JSON responses rather than video, so the traffic is modest.

Pushing maxItems toward 1000 means a lot of paginated requests and raises your odds of a rate limit. If you're running big, keep the residential proxy on.

Billing

EventPrice
Actor start$0.001 per run
Video returned$0.000135, so $0.135 per 1,000

1,000 videos is $0.136 all in. A two-keyword, one-channel run at the default maxItems: 50 returns up to 150 videos for about $0.02.

Blocked, rate-limited, network-error and empty runs are never charged. When something goes wrong you get an ok: false row with an errorCode instead of a charge:

errorCodeMeaning
BAD_INPUTNeither searchQueries nor channelUrls was provided.
BLOCKEDYouTube blocked the request. Use a residential proxy.
RATE_LIMITEDA 429. It backed off and retried; lower the volume or add a proxy.
SERVER_ERRORA 5xx from YouTube. Usually transient.
NO_RESULTSThe request worked and matched nothing.
NETWORKCouldn't reach YouTube.

If a channel won't resolve

You'll get BAD_INPUT: could not resolve channel. Check the handle or URL, or skip the guesswork and pass the raw UC… channel id.