YouTube API Quota Calculator
Estimate your daily YouTube Data API v3 quota usage. Add your API calls, see the cost per method, and find out if you'll hit the 10,000 unit daily limit.
Add API methods below to calculate your quota.
Load a scenario
Read operations (list)
Search for videos, channels, or playlists by keyword
Get video details (stats, snippet, content). Batch up to 50 IDs per call
Get channel details (stats, snippet, branding)
Get videos in a playlist. Use this instead of search.list for channel uploads
Get top-level comments on a video
Get replies to a specific comment thread
Get a channel's subscriptions (requires OAuth)
Get playlist metadata for a channel
Get channel activity feed (uploads, likes, etc.)
List available caption tracks for a video
Write operations
Upload a video
Update video metadata (title, description, tags)
Post a new comment on a video
Upload a custom thumbnail for a video
Upload a caption track
Create a new playlist
Add a video to a playlist
YouTube Data API v3 Quota Costs: Full Reference
Every YouTube Data API method has a fixed unit cost. These costs are set by Google and don't change based on how much data you request. Pagination requests cost the same as the original request. Invalid requests still cost at least 1 unit.
| Resource | Method | Cost | Notes |
|---|---|---|---|
| activities | list | 1 | Channel activity feed |
| captions | list | 50 | List caption tracks |
| captions | insert | 400 | Upload captions |
| captions | update | 450 | Replace caption track |
| captions | delete | 50 | Delete caption track |
| channelBanners | insert | 50 | Upload channel banner |
| channels | list | 1 | Channel details and stats |
| channels | update | 50 | Update channel metadata |
| channelSections | list | 1 | Channel page layout sections |
| channelSections | insert / update / delete | 50 | Modify channel sections |
| comments | list | 1 | Comment replies |
| comments | insert / update / delete | 50 | Write/modify comments |
| commentThreads | list | 1 | Top-level comments |
| commentThreads | insert | 50 | Post a new comment |
| i18nLanguages | list | 1 | Supported languages |
| i18nRegions | list | 1 | Supported regions |
| members | list | 1 | Channel members (requires OAuth) |
| membershipsLevels | list | 1 | Membership tier details |
| playlistItems | list | 1 | Videos in a playlist |
| playlistItems | insert / update / delete | 50 | Add/remove playlist videos |
| playlists | list | 1 | Playlist metadata |
| playlists | insert / update / delete | 50 | Create/modify playlists |
| search | list | 100 | Keyword search. Most expensive read operation |
| subscriptions | list | 1 | Channel subscriptions |
| subscriptions | insert / delete | 50 | Subscribe/unsubscribe |
| thumbnails | set | 50 | Upload custom thumbnail |
| videoAbuseReportReasons | list | 1 | Abuse report reason list |
| videoCategories | list | 1 | Video category list |
| videos | list | 1 | Video details (batch up to 50 IDs) |
| videos | insert | 1,600 | Upload a video. Most expensive operation |
| videos | update | 50 | Update video metadata |
| videos | rate | 50 | Like/dislike a video |
| videos | getRating | 1 | Check your like/dislike on a video |
| videos | reportAbuse | 50 | Flag a video |
| videos | delete | 50 | Delete a video |
| watermarks | set / unset | 50 | Channel watermark |
YouTube API Quota Exceeded: How to Fix It
If you're seeing HTTP 403 with reason quotaExceeded, your project has used its full 10,000 units for the day. The error response looks like this:
{
"error": {
"code": 403,
"message": "The request cannot be completed because you have exceeded your quota.",
"errors": [{
"reason": "quotaExceeded",
"domain": "youtube.quota"
}]
}
}
When does quota reset?
Midnight Pacific Time (PT), every day. That's UTC-8 in winter, UTC-7 during daylight saving time. There's no way to manually reset it or pay to get more units on the same day.
How to check current usage
Open the Google Cloud Console:
- Go to APIs & Services > Enabled APIs & services
- Click YouTube Data API v3
- Check the Quotas tab for current usage and per-method breakdown
Quick fixes
- Wait until midnight PT. The quota resets automatically.
- Create a second Google Cloud project. Each project gets its own 10,000 units. Not a long-term fix, but works in an emergency.
- Audit your API calls using the calculator above. search.list at 100 units each is usually the culprit.
- Cache responses locally. If you're fetching the same video or channel data repeatedly, store the result and reuse it.
- Batch videos.list requests. You can pass up to 50 video IDs per call. 50 separate requests = 50 units. 1 batched request = 1 unit.
How to Reduce YouTube API Quota Usage
Most developers blow their quota because of search.list. That one method costs 100x more than videos.list. The fixes are almost always the same.
Replace search.list with playlistItems.list
If you're using search.list to get a channel's recent uploads, stop. Every channel has a hidden "uploads" playlist. The playlist ID is the channel ID with "UC" replaced by "UU".
Example: Channel ID UCxxxxxx → Uploads playlist UUxxxxxx. Call playlistItems.list with that ID: 1 unit instead of 100.
Batch your videos.list calls
The id parameter accepts up to 50 comma-separated video IDs in a single request. If you're calling videos.list once per video, you're spending 50x the necessary quota. Collect IDs first, then batch them.
Use the fields parameter
Adding fields=items(id,snippet/title) to your request doesn't reduce quota cost, but it reduces response size and parsing time. This matters if you're hitting per-second rate limits alongside your daily quota.
Cache aggressively
Video metadata doesn't change every minute. Channel stats update a few times a day. Cache your responses with a TTL of 15-60 minutes. If a user hits the same page twice, the second request should come from your cache, not from YouTube's API.
Use ETags for conditional requests
YouTube API responses include an ETag header. Send it back in an If-None-Match header on the next request. If the data hasn't changed, you get a 304 response that still costs quota but saves bandwidth and parsing.
How to Request a YouTube API Quota Increase
If 10,000 units/day isn't enough after optimization, you can request more from Google. It's free, but you need to pass a compliance audit.
Make sure you've optimized first
Google's compliance team will ask how your app uses the API. If they see you're making 500 search.list calls that could be playlistItems.list, they'll reject the request and tell you to optimize. Use the calculator above to confirm you genuinely need more quota.
Complete the compliance audit form
Google requires a compliance audit before increasing quota. You'll fill out a form explaining:
- What your app does and how it uses YouTube data
- How you handle API data (storage, display, deletion policies)
- That you comply with the YouTube API Terms of Service
- Your Google Cloud project number
Wait 3-4 business days
Google's compliance team manually reviews each request. If approved, your quota can go up to 1,000,000 units/day. There's no monetary cost for the increase itself. Google may re-audit your project periodically to verify ongoing compliance.
If you get rejected
Common reasons: your app scrapes or stores data beyond what's allowed by the Terms of Service, you don't have a privacy policy, or the use case isn't clear. Fix the issue, then submit an appeal using Google's appeals form. You can also submit a new audit if your app has changed.
Frequently Asked Questions
What is the YouTube API daily quota limit?
Why is search.list so expensive?
Google hasn't published an official explanation, but the cost reflects the computational expense on their end. A search query hits YouTube's search index across billions of videos and returns ranked results. A videos.list call just looks up known IDs from a database.
At 100 units per call, you can only make 100 search requests per day on the free quota. Most apps that need search either cache results aggressively or use playlistItems.list as a cheaper alternative for channel-specific queries.
Does quota cost change based on the parts I request?
part=snippet costs the same as part=snippet,statistics,contentDetails. The cost is per method call, not per data field. That said, requesting fewer parts reduces response size and parsing time, which helps with per-second rate limits.
Do failed requests count toward quota?
Is there a per-second rate limit on top of the daily quota?
HTTP 429 (rate limited) even if you have quota remaining. Space out your requests or use exponential backoff.
Can I pay for more quota instead of requesting an increase?
Skip the Quota Problem Entirely
BrightBean pre-computes channel stats, content gaps, title scores, and thumbnail analysis. You get structured JSON without touching the YouTube Data API. Zero quota management, zero compliance audits.