YouTube API Quota Exceeded: Causes and Fixes
Why YouTube Data API requests fail with quotaExceeded, what the daily 10,000-unit quota actually costs per call, how to check and raise it, and how to avoid hitting it - including using a transcript API that doesn't consume your quota.
00:09:00 · SEP 13, 2026
Quick answer
quotaExceeded because your Google Cloud project used its full 10,000-unit daily allocation for the YouTube Data API v3, which resets at midnight Pacific time. The fastest fixes: stop using search.list (100 units) where a direct ID lookup works, cache results instead of re-fetching, or switch to a transcript API that doesn't run through your own YouTube quota at all.Why this happens
Every Google Cloud project gets a default YouTube Data API v3 quota of 10,000 units per day, reset at midnight Pacific time - there's no rollover and no way to trigger an early reset. Quota is tracked per project, not per API key, so generating a second key from the same project doesn't give you a second pool.
Every API call costs units, not requests - and the costs are uneven. Here's the full picture across the endpoints developers actually use:
| Call | Quota cost |
|---|---|
search.list | 100 units |
videos.list | 1 unit |
channels.list | 1 unit |
playlistItems.list | 1 unit |
commentThreads.list | 1 unit per page |
captions.list | 50 units |
captions.download | 200 units, requires OAuth (not API-key auth) |
At 100 units per search, a project can exhaust its entire daily quota after just 100 search calls - before a single caption is downloaded. This is the single most common way small projects hit the limit: they didn't make 10,000 requests, they made a few hundred expensive ones. By contrast, videos.list, channels.list, and playlistItems.list are cheap at 1 unit each - if you already know a video, channel, or playlist ID, those calls barely dent the daily budget.
How to check your current quota usage
- Open the Google Cloud Console for the project tied to your API key.
- Go to APIs & Services → YouTube Data API v3 → Quotas & System Limits.
- This shows your current usage against Queries per day and the per-minute limits, updated with a short delay rather than in real time.
If you're already near the ceiling before you've made 10,000 requests, this view is how you confirm it's the expensive-call problem above, not a bug.
quotaExceeded vs. rateLimitExceeded
Both return a 403, and both get lumped together as "quota errors" in casual conversation, but they're different problems with different fixes:
- quotaExceeded (reason:
dailyLimitExceeded) - your project used its full daily unit allocation. Nothing fixes this except waiting for the midnight Pacific reset, reducing per-call cost, or getting a quota increase approved. - rateLimitExceeded - you're sending requests too fast in a short window, independent of your daily total. This is a pacing problem, not a budget problem - see our rate limit guide for how to handle it correctly with backoff.
Five ways to fix it
- Cache aggressively. Quota is charged per API call, not per user-facing request - if you re-fetch the same video's captions repeatedly, cache the result (even a simple in-memory TTL cache) instead of calling the API again for data that doesn't change minute to minute.
- Avoid
search.listwhere a direct ID lookup works. If you already have a video, channel, or playlist ID, the corresponding.listcall is 100x cheaper than a search. - Batch ID lookups.
videos.listaccepts up to 50 comma-separated IDs per call for the same 1-unit cost as a single ID - fetching 50 videos one at a time instead of batched is 50x more expensive for no reason. - Request a quota increase once you have real production usage to justify it, via the YouTube API Services Audit and Quota Extension form linked from the Cloud Console's quota page. Expect a manual review, not instant approval.
- Use a transcript API that doesn't run through your own YouTube quota. GetYouTubeTranscript's API fetches transcripts against its own infrastructure rather than proxying
captions.downloadwith your key, so there's no daily 10,000-unit ceiling to manage - only the plan's own request-rate limit.
Example: fetching a transcript without touching YouTube's quota
cURL:
curl "https://getyoutubetranscript.com/api/v1/transcript?v=dQw4w9WgXcQ" \
-H "Authorization: Bearer sk_live_..."Node.js:
const res = await fetch(
"https://getyoutubetranscript.com/api/v1/transcript?v=dQw4w9WgXcQ",
{ headers: { Authorization: `Bearer ${process.env.GETYOUTUBETRANSCRIPT_API_KEY}` } }
);
const { data } = await res.json();
console.log(data.transcript);Python:
import os, requests
res = requests.get(
"https://getyoutubetranscript.com/api/v1/transcript",
params={"v": "dQw4w9WgXcQ"},
headers={"Authorization": f"Bearer {os.environ['GETYOUTUBETRANSCRIPT_API_KEY']}"},
)
print(res.json()["data"]["transcript"])This costs 1 credit against your GetYouTubeTranscript plan, not units against your Google Cloud project's YouTube Data API quota. Get 100 free credits, no card required, from the dashboard, or see the full API docs.
A note on workarounds
YouTube API quota FAQs
What does "The request cannot be completed because you have exceeded your quota" mean?
It means your Google Cloud project has used up its allotted YouTube Data API v3 quota units for the current day. Google resets quota at midnight Pacific time, and the default free allocation is 10,000 units/day, tracked per project (not per API key).
How much quota does fetching a transcript actually cost?
The YouTube Data API itself has no direct "get transcript" endpoint - the captions.list call costs 50 units just to list available caption tracks, and captions.download requires OAuth (not just an API key) and costs 200 units. A search.list call, often used to find videos first, costs 100 units on its own - so a handful of searches plus caption lookups can burn through a 10,000-unit daily budget fast.
What is the difference between quotaExceeded and rateLimitExceeded?
quotaExceeded (surfaced as reason dailyLimitExceeded in the error body) means you've used your full daily unit allocation and must wait for the midnight Pacific reset. rateLimitExceeded means you're sending requests too fast within a short window, independent of your daily total - see our rate limit guide for the distinction in detail.
Can I use multiple API keys to get more quota?
No - quota is tracked per Google Cloud project, not per API key. Multiple keys generated from the same project all draw from the same 10,000-unit daily pool. Creating separate projects to multiply quota is technically possible but risks violating the YouTube API Services Terms of Service, which prohibit circumventing quota limits.
Can I just request a quota increase from Google?
Yes, via the YouTube API Services Audit and Quota Extension form linked from the Cloud Console's quota page, but approval isn't guaranteed or immediate - it requires justifying production use with real usage details, and Google reviews requests manually. There's no self-service way to simply pay for more quota.
Does the free 10,000-unit quota cost anything?
No - it's the default free allocation given to every Google Cloud project that enables the YouTube Data API v3. You don't need a billing account attached to use it, though Google may prompt you to enable billing when requesting an increase.
Does GetYouTubeTranscript's API use my own YouTube API quota?
No. It doesn't proxy YouTube's Data API with your key - transcript extraction runs against our own infrastructure, so there's no captions.list/download quota to manage on your end. You're only bound by our own published rate limits (60 req/min free, up to 300 req/min on the annual plan).
Related
- YouTube Transcript API Rate Limit: What It Is and How to Handle 429s
- YouTube Transcript MCP Server: Setup Guide for Claude and Other AI Tools
- YouTube Transcripts in n8n: HTTP Request Workflow Guide
- GetYouTubeTranscript vs TranscriptAPI
- GetYouTubeTranscript vs youtubetotranscript.com
- GetYouTubeTranscript vs youtube-transcript.io