About

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).

Use search.list only to find channelssearch.list bucket - scarcesearch.list?type=channel&q=...Find channels whose name is the camera address. A few calls, not one per channel.channel IDs (save as a seed list)Default bucket - 10,000 units/day, 1 unit per callchannels.listuploads playlist IDplaylistItems.listlatest 50 uploads, no live flagvideos.list (50 IDs)live now? embeddable?2026-08-24 run: 138 channels, 5,710 videos, 12 search calls, about 275 units for the rest.

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)

MethodChannelsLiveOn the mapWithin 10 km of Omiya
type=video only65244116
+ type=channel1381135821

Covering 65 channels

ApproachOld rule (100 units per search)Current rule (100 searches a day)
search.list per channel6,500 units (65% of a day)65 searches (65% of a day)
channel, uploads playlist, videos2 to 3 units per channel0 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

1

Use search.list?type=channel only to find channels, and save the IDs as a list

2

Get the uploads playlist ID with channels.list (1 unit)

3

Get the latest 50 uploads with playlistItems.list (1 unit, no live flag)

4

Pass 50 IDs at a time to videos.list for liveStreamingDetails and status.embeddable (1 unit)

5

Check your project's quota limits in the Google Cloud Console

Use Cases

Collecting live cameras or local channels for a map or list Daily monitoring of new uploads or live starts across many channels
← Synctoon — AI Pipeline That Turns a Script into 2D Animated Video YouTube clips are data with no list: collecting means picking up URLs, and one HTML page has the rest →