In YouTube collection, search.list is the scarce resource: use it to find channels, then switch to 1-unit calls
Switching from type=video to type=channel took live cameras from 24 to 113
This is for anyone whose YouTube Data API quota (the daily call limit) runs out too fast. By the end you'll know what to spend search.list on, which calls to use for the rest, and why searching for "live right now" misses so much.
Sixteen keywords, zero new cameras
I was collecting Saitama live cameras for a map, and the area around Omiya stayed oddly empty. I expanded the search terms to 16, one per ward. New playable cameras: zero. Keyword search had hit its ceiling.
The channel name was the address
Looking at the cameras I did have, each local live camera ran as its own channel, and the channel name was the install address, like 埼玉県さいたま市大宮区桜木町ライブカメラ.
Until then I searched with type=video&eventType=live. That only catches videos broadcasting right now. A camera that dropped for a minute is invisible. A channel stays in results even when its stream is down. So I switched: find channels with type=channel, then pull videos from inside each channel.
search is the only expensive call
Apart from search.list, every call here costs 1 unit. Once you have a channel, channels.list gives the uploads playlist ID, playlistItems.list gives the latest 50 uploads, and videos.list asks, 50 at a time, whether each one is live and whether it can be embedded. playlistItems has no live flag, so videos.list is required (the playlistItem resource in the official docs has no such field).
That's roughly 2 to 3 units per channel. Compare that with calling search.list per channel to ask "which of your videos are live now". That approach spends one search per channel.
The rules had changed by the time I wrote this
When I wrote the collector, search.list cost 100 units per call out of a shared 10,000-unit daily pool. Re-reading the official docs for this post, that had changed. A June 1, 2026 revision gave search.list and videos.insert their own quota buckets, and the quota cost page now lists search.list as 100 calls per day at 1 each (page last updated 2026-10-15).
The conclusion holds. Under the old rule, one search per channel for 65 channels was 6,500 units, 65% of a day. Under the new rule it's 65 of your 100 daily calls. Either way, search runs out first. Limits can differ per project, so check your own numbers in the Google Cloud Console.
Numbers from 2026-08-24
With type=video alone we found 24 live streams across 65 channels. Adding type=channel gave 138 channels and 113 live streams. Cameras on the map went from 41 to 58, and within 10 km of Omiya from 16 to 21.
Covering those 138 channels and 5,710 videos took 12 search.list calls. Everything else came to about 275 units. Our script counted it under the old rule as 1,475, with 1,200 of that from search. If we save the channel IDs as a fixed seed list, later runs should need almost no searches, but we haven't measured that yet.
If you're building collection or monitoring on the YouTube API and keep hitting quota, feel free to show your setup to negabaro. We'll look at where the calls are leaking.
Results by search method (Saitama, 2026-08-24)
| Method | Channels | Live | On the map | Within 10 km of Omiya |
|---|---|---|---|---|
| type=video only | 65 | 24 | 41 | 16 |
| + type=channel | 138 | 113 | 58 | 21 |
Covering 65 channels
| Approach | Old rule (100 units per search) | Current rule (100 searches a day) |
|---|---|---|
| search.list per channel | 6,500 units (65% of a day) | 65 searches (65% of a day) |
| channel, uploads playlist, videos | 2 to 3 units per channel | 0 searches + 2 to 3 units per channel |
Current rule per the YouTube Data API quota cost page (updated 2026-10-15) and the 2026-06-01 revision history entry.
Call order
GET /youtube/v3/search?part=snippet&type=channel&q=さいたま市 ライブカメラ
GET /youtube/v3/channels?part=contentDetails&id=UC...,UC... # uploads ID
GET /youtube/v3/playlistItems?part=contentDetails&playlistId=UU...&maxResults=50
GET /youtube/v3/videos?part=snippet,liveStreamingDetails,status&id=v1,v2,... # up to 50
Step-by-Step
Use search.list?type=channel only to find channels, and save the IDs as a list
Get the uploads playlist ID with channels.list (1 unit)
Get the latest 50 uploads with playlistItems.list (1 unit, no live flag)
Pass 50 IDs at a time to videos.list for liveStreamingDetails and status.embeddable (1 unit)
Check your project's quota limits in the Google Cloud Console