YouTube Data API Quota: 10,000 Units and 100 Searches a Day
On this page, 10 sections
The YouTube Data API gives every Google Cloud project that enables it three daily allowances: 100 search.list calls, 100 videos.insert calls, and 10,000 units for everything else combined. Most read calls, including videos.list, playlistItems.list and commentThreads.list, cost 1 unit. Writes usually cost 50.
So if a Google Sheets script hits the quota, check two things first: does it use search.list to find videos, and does it loop over thousands of items one request at a time? I read Google’s quota calculator and getting started page on 11 October 2026, and the rest of this post turns those two pages into numbers you can plan with.
One correction to a common assumption. The quota table I read no longer prices search in units. It gives search.list its own bucket of 100 calls a day, each call costing 1.
The three buckets, as Google writes them
The quota calculator page states the default allocation in one sentence, and the getting started page repeats it. Here it is as a table.
search.list: 100 calls per day, each call costs 1 against that bucket.videos.insert: 100 calls per day, each call costs 1 against that bucket.- Everything else: 10,000 units per day, combined across all other methods.
Google adds that daily quotas reset at midnight Pacific Time, that default quota is subject to change, and that you can see your usage on the Quotas page in the Google Cloud console. Every request costs at least 1 point, including invalid requests. A script with a typo in a loop spends quota on every failure.
Also from the page: if a method returns multiple pages, each additional page is a separate request and costs the stated amount. Paging is where Sheets scripts burn quota without anyone noticing.
What each call costs
These are the costs for the methods a Sheets script is likely to use, from the calculator table.
videos.list,channels.list,playlists.list,playlistItems.list,commentThreads.list,comments.list,subscriptions.list: 1 unit eachplaylistItems.insert,playlistItems.update,playlists.insert,commentThreads.insert,comments.insert,videos.update: 50 units eachcaptions.list: 50 units.captions.insert: 400 units.captions.update: 450 units.search.list: 1 unit, against its own cap of 100 per day
One inconsistency on the page. The version I read on 11 October 2026 is stamped “Last updated 2026-10-08 UTC”. Its summary bullets still say videos.insert has the highest cost at 1,600 points.
Its table row for videos.insert says 100 quota per day with each call costing 1, and the paragraph above the table says the same. Two places agree on 100 calls, so I use that and treat the summary bullet as stale. The Quotas page in your Cloud console shows your project’s actual limits, and that is the final word.
Turning that into rows in a sheet
Here is the arithmetic. These are derived numbers, not Google’s, and they assume your script does nothing else that day.
- A channel with 2,000 uploads, read through its uploads playlist at 50 items per request: 40
playlistItems.listcalls, so 40 units. - Fetching details for those 2,000 videos through
videos.list: the reference describesidas a comma-separated list of video IDs and states no maximum on that page, so I cannot give you a verified batch size. The quota table prices the call at 1 unit, so the cost depends on how many IDs you fit in each call. If a batch of 50 works in your test, that is 40 more units. - Finding those videos with
search.listinstead draws on a bucket of only 100 calls a day, shared with every other search your project makes. The uploads playlist does not touch that bucket.
The playlist route is why the guide to extracting every video link from a channel works for free at scale.
A channel’s uploads playlist is listed on the channel resource as contentDetails.relatedPlaylists.uploads, which Google describes as the ID of the playlist that contains the channel’s uploaded videos. Reading that playlist costs 1 unit a page. Searching costs from a bucket with a hard cap of 100.
The 10,000 unit ceiling, in practical terms
If one script did nothing but read playlist pages, the 10,000 units would buy 10,000 requests. At the playlistItems.list maximum of 50 items per page (the documented range is 0 to 50, default 5), that is up to 500,000 playlist items in a day. That is a ceiling for planning, not a promise.
The default of 5 is the trap. A script that forgets maxResults gets 5 items per page and spends ten times the quota for the same data.
function listUploads(playlistId) {
const rows = [];
let pageToken = '';
do {
const res = YouTube.PlaylistItems.list('snippet', {
playlistId: playlistId,
maxResults: 50, // default is 5
pageToken: pageToken
});
res.items.forEach(i => rows.push([i.snippet.resourceId.videoId, i.snippet.title]));
pageToken = res.nextPageToken;
} while (pageToken);
return rows;
}
This is a sketch for the shape of the loop. I have not run it against a live channel for this post. The maxResults range and default come from the playlistItems.list reference; the quota cost of 1 per call is from the calculator.
Where the Apps Script limits bite first
YouTube’s quota is not the only wall. Apps Script has its own. From Google’s quotas page, read on 11 October 2026 and last updated 3 September 2026: a single execution is limited to 6 minutes, and total trigger runtime is 90 minutes a day on a consumer account and 6 hours on Workspace.
A 40-page loop is 40 requests, so the 6 minute wall only matters for jobs that make thousands of them. For those, write the page token to a cell and resume from it on the next trigger instead of starting over.
One more place quota hides: comments. Reading comment threads costs 1 unit a call like any other read, but replying or posting costs 50. A sheet that auto-replies from a script can spend a day of quota in 200 calls.
Reports go through a different API, covered in the YouTube Analytics guide. I did not find where that API’s usage is counted, so check the Cloud console rather than assuming it is separate.
How to see what you are spending
- Open the Google Cloud console and go to IAM and Admin, then Quotas, for the project your script uses.
- Filter for the YouTube Data API v3 service.
- Look at the usage graph for the day. It resets at midnight Pacific Time, which is 12:30 pm in India while US daylight saving applies and 1:30 pm after the clocks go back. A script that exhausts the quota in the evening in Delhi gets it back the next afternoon.
If you run out, Google points to a quota extension request form for YouTube API Services. I did not read the approval criteria, so I cannot tell you how often it is granted.
Habits that keep a script cheap
These habits follow from the cost table and the paging rule.
- Cache what does not change. A video’s title and publish date do not move often. Store them in the sheet and fetch only IDs you have not seen.
- Page at the maximum. Every list method with a
maxResultscap should be called at the cap. - Batch IDs.
videos.listtakes a comma-separatedidlist, and the quota table prices the call, not the ID. The reference states no cap, so find your working batch size with a small test and halve it if a request errors. - Stop on the first quota error. A loop that keeps calling after the limit is hit spends nothing useful, and the invalid requests still count.
- Avoid
search.listfor inventory. Use the uploads playlist, which is a plain list at 1 unit a page, and keep your 100 searches for real queries.
The common thread is that reading is nearly free and writing is not. A sheet that pulls data is safe at scale. A sheet that posts comments, edits titles or adds playlist items is spending 50 units a call, and 200 of those use the whole day.
Questions people ask
What is the YouTube Data API quota limit per day?
Per Google, 10,000 units for most methods, plus separate caps of 100 search.list calls and 100 videos.insert calls. It resets at midnight Pacific Time.
Does a failed request use quota?
Yes. Google states that all requests, including invalid ones, cost at least one point.
Do I need an API key for Sheets?
Not with the Apps Script advanced service, which authorises as the signed-in user, so there is no key in the script. Which Cloud project the calls count against, I did not verify. Check the Quotas page after a test run.
Do this today
Open the Quotas page for your project, note today’s usage, then add maxResults: 50 to every playlistItems.list call in your script. If your script leaves it out, that one line cuts the requests for the same data by a factor of ten.
Resources
- YouTube Data API quota calculator, read 11 October 2026 (page stamped last updated 8 October 2026 UTC)
- YouTube Data API, getting started: quota usage, read 11 October 2026
- PlaylistItems: list, read 11 October 2026
- Videos: list (id parameter), read 11 October 2026
- Channels resource, read 11 October 2026
- Apps Script quotas, read 11 October 2026