YouTube API Quota: Limits, Costs, Reset Time, Increases
The YouTube Data API gives each Google Cloud project 10,000 units a day for most methods, plus separate buckets of 100 videos.insert and 100 search.list calls. Reads cost 1 unit, most writes 50. Quotas reset at midnight Pacific Time. To get more, pass the YouTube API Services audit. Adeli's YouTube app has passed it and is approved for higher quota tiers.
The YouTube API quota is a daily allowance per Google Cloud project: 10,000 units for most YouTube Data API v3 methods, plus separate buckets of 100 videos.insert calls and 100 search.list calls. Every request spends units, including failed ones, and everything resets at midnight Pacific Time. The usual pain is a quotaExceeded error mid-day with no clear idea which call used up the budget. This guide covers the buckets, the cost of each call, the errors, and how to get more.
What is the YouTube API quota?
The YouTube API quota is the number of units a Google Cloud project can spend on the YouTube Data API v3 each day. Google's quota cost page sets the defaults. Since June 2026 the quota sits in separate buckets, not one pool:
| Bucket | Default per project | Cost per call | Methods |
|---|---|---|---|
| Main pool | 10,000 units a day | 1 to 450 units | Every method not listed below |
| Video uploads | 100 calls a day | 1 | videos.insert |
| Search | 100 calls a day | 1 | search.list |
| Video stats | 10,000 units a day | 1 | videos.batchGetStats |
Google's revision history dates the split. On June 1, 2026, videos.insert and search.list moved to their own buckets, and on June 3, 2026 the new videos.batchGetStats method arrived with a bucket of its own. Before that, an upload cost about 1,600 units from the shared pool until December 4, 2025, then about 100. Guides written before mid-2026 quote those older numbers.
The quota belongs to the project, not the API key or the user. A project with one OAuth client and 500 connected channels has the same 10,000 units as a project with one channel.
What does each YouTube Data API call cost?
YouTube Data API reads cost 1 unit and most writes cost 50. Uploads and searches cost 1 unit each, but from their own 100-call buckets. Here are the costs from Google's quota cost table for the calls an app that publishes and manages videos makes most:
| Method | Units | What it does |
|---|---|---|
videos.list |
1 | Read video details, status, statistics |
channels.list |
1 | Read channel details |
playlistItems.list |
1 | List a channel's uploads |
commentThreads.list |
1 | Read top-level comments |
videos.insert |
1 (upload bucket) | Upload a video |
search.list |
1 (search bucket) | Search |
videos.update |
50 | Edit title, description, privacy |
thumbnails.set |
50 | Set a custom thumbnail |
playlistItems.insert |
50 | Add a video to a playlist |
comments.insert |
50 | Reply to a comment |
captions.list |
50 | List caption tracks |
captions.insert |
400 | Upload a caption track |
captions.update |
450 | Replace a caption track |
Pagination costs per page. Google's quota page says a method that returns several pages charges the full cost again for each extra page. Reading 5,000 comments at 100 per page is 50 calls, so 50 units.
When does the YouTube API quota reset?
The YouTube API quota resets at midnight Pacific Time every day, per Google's quota page. That's 07:00 UTC during daylight saving time and 08:00 UTC in winter, so don't hard-code a UTC hour.
A quota error at 3 p.m. in London means waiting until 8 a.m. the next morning there. Compute the reset in Pacific Time and hold work until then:
from datetime import datetime, timedelta
from zoneinfo import ZoneInfo
PACIFIC = ZoneInfo("America/Los_Angeles")
def next_quota_reset() -> datetime:
"""Midnight Pacific Time, when YouTube API quotas reset."""
today = datetime.now(PACIFIC).date()
return datetime.combine(today + timedelta(days=1), datetime.min.time(), tzinfo=PACIFIC)What does "YouTube API quota exceeded" mean?
"YouTube API quota exceeded" means your project has spent a bucket's daily allowance, and calls drawing from that bucket fail until midnight Pacific. The error you get depends on the bucket:
| Error | What happened | What to do |
|---|---|---|
403 quotaExceeded: "The request cannot be completed because you have exceeded your quota." |
The 10,000-unit pool is spent | Stop calls until the reset |
429 rateLimitExceeded with "Quota exceeded for quota metric 'Video Uploads' and limit 'Video Uploads per day'" |
The 100-upload bucket is spent | Queue uploads until the reset |
403 or 429 rateLimitExceeded with no daily-limit message |
Too many requests in a short span | Back off for seconds, then retry |
400 uploadLimitExceeded |
One channel hit YouTube's own upload cap | Pause that channel only |
The quotaExceeded text comes from Google's YouTube Data API errors page. The upload-bucket message is from a May 2026 bug report on Google's Python client. The bucket uses the same rateLimitExceeded reason as a short-term throttle, so read the message, not just the reason.
Watch your client library's retries. In google-api-python-client (2.201.0), num_retries retries every 429 response. That's right for a short throttle and wrong for a spent upload bucket, which won't clear for hours. Sort the error before you retry:
import json
from googleapiclient.errors import HttpError
def error_reason(err: HttpError) -> str:
try:
return json.loads(err.content)["error"]["errors"][0]["reason"]
except (ValueError, KeyError, IndexError, TypeError):
return ""
def classify_quota_error(err: HttpError) -> str:
status, reason = err.resp.status, error_reason(err)
if status == 403 and reason == "quotaExceeded":
return "daily_pool" # wait for next_quota_reset()
if status == 429 and "Video Uploads" in err.reason:
return "daily_uploads" # queue uploads until next_quota_reset()
if reason in ("rateLimitExceeded", "userRateLimitExceeded"):
return "short_term" # back off with jitter, then retry
return "other"What do developers get wrong about the YouTube API quota?
Most "quota exceeded" mysteries come from counting quota differently from Google: old cost numbers, retries against a daily limit, or the wrong console row. Developers keep posting the same few:
"The app still charged every upload 1600 units from the 10,000-unit pool… so after 6 uploads it logged
9600 of 10000 units used today, held every further upload until the next Pacific day"— pjmagee on GitHub (HeroesReplay), October 2026
"Uploads fail after roughly 7 uploads/day with: Quota exceeded for quota metric 'Video Uploads' and limit 'Video Uploads per day'"
— k3v on GitHub (google-api-python-client), May 2026
"Google now says we've exceeded our quota, but when I go into the Cloud Console to view quota usage, there are literally 20 requests in the past 30 days"
— LinuxGnut on Stack Overflow, December 2020
In that second report, the console showed the main pool well under 100% while uploads kept failing, because the upload bucket is a separate row. In each case, the quota the developer counted and the quota Google counted had drifted apart. To keep them in line:
- Stale cost tables. A local quota tracker still charging 1,600 units per upload stops your own app long before Google would. Re-read the cost page whenever Google posts a quota change.
- Retrying daily limits. A spent bucket fails every retry until midnight Pacific, and each failed call can still cost a unit. Retry short-term throttles only.
- Looking at the wrong number. The pool, the upload bucket, and the search bucket each have their own row in the console. A pool at 1% tells you nothing about uploads.
- The wrong project. An API key from one project and an OAuth client from another split your usage across two quotas, and the console shows only the one you opened.
How do I check my YouTube API quota usage?
Check YouTube API quota usage on the Quotas page of the Google Cloud console, under the YouTube Data API v3 for your project. Google's getting started guide points there. Each bucket shows as its own row. One developer's console snapshot from October 2026 listed these:
| Quota row | Default |
|---|---|
| Queries per day | 10,000 (the main pool) |
| Video Uploads per day | 100 |
| Search Queries per day | 100 |
| Video Batch Get Stats Queries per day | 10,000 |
| Queries per minute | 1,800,000 |
Log your own spend per call as well, using the current cost table, so you can see which feature used the budget before the console tells you it's gone.
How do I increase my YouTube API quota?
To increase your YouTube API quota, pass a YouTube API Services compliance audit by submitting the Audit and Quota Extension Form. Google's quota and compliance audits page says you "must first complete an audit to show that your project is in compliance with the YouTube API Services Terms of Service" before you get more than the default.
- Get compliant first. Read the YouTube API Services Developer Policies, including the rules on how long you store API data and when you delete it. The audit checks your app against the YouTube API Services Terms of Service.
- Submit the form. File the YouTube API Services Audit and Quota Extension Form. The developer policies say you "must specify the use case for which you need the extension," so describe what your app does and which calls it makes.
- Wait for contact. Google says "A member of YouTube's API Services team will contact you as soon as possible."
- Ask again later with the same form. If you passed an audit in the last 12 months and need more, you file the same form for an extra extension.
- Appeal if you fail. A failed audit has its own Appeals Form.
Granted quota is tied to your use case. The developer policies say "you must use the additional quota granted only for the approved use case," and a new use case means a new audit. Asking for more upload quota for one product and spending it on another breaks that rule.
Ask per method. Google's June 1, 2026 entry says the split "simplifies the path to quota increases by allowing YouTube to more easily verify and approve requests based on specific method usage." Say how many videos.insert calls you need, not just a total unit count. For how long the audit takes compared with other platforms' reviews, see our social media API review times.
Is there a faster way to work within the YouTube API quota?
Yes: publish through an API whose YouTube app has already passed the audit. Adeli's YouTube app has passed the YouTube API Services audit and is approved for higher quota tiers, so your product doesn't start on Google's default buckets or wait on its own audit.
With Adeli's YouTube API, your customers connect their own channels through Adeli's hosted sign-in, and you send one request to publish a video. Adeli keeps the two limits apart in its errors:
429 quota_exhaustedwhen YouTube's daily quota is spent, with the reset time in the message.422 upload_limit_exceededwhen one channel hits YouTube's own upload cap, so the rest keep publishing.
The same posting API covers Instagram, TikTok, X, LinkedIn, and Bluesky. It's free to start, and pricing grows with the customers you serve, not with the calls you make.