Is the YouTube Data API Free? Yes — But You Get About 100 Searches a Day, Not Unlimited Anything
The YouTube Data API v3 is free: there is no per-call charge and no credit card. What there is instead is a hard 10,000-unit daily quota, and the catch is that one search.list call costs 100 units while a videos.list or playlistItems.list call costs 1. That single fact is why apps die at lunchtime. Here are the real 2026 unit costs, the uploads-playlist trick that turns a 100-unit search into a 2-unit read, when you need OAuth instead of an API key, and how to ask Google for more quota.
Context above, deep read below. Use the TOC to move section by section without losing the thread.
A developer I know shipped a side project that surfaced trending videos for a niche community. It worked perfectly in testing. It went live, a few hundred people used it that morning, and at roughly 12:30 PM it stopped returning anything — just a stream of 403 errors. He assumed he'd been rate-limited or banned. He hadn't. He'd spent his entire day's quota, and he'd done it with about a hundred requests, because every one of them was a search.
This is the thing nobody tells you when they say "the YouTube Data API is free." It is free. The trap isn't money. It's that "free" comes with a fixed daily budget measured in units, and one kind of call eats a hundred times more of that budget than another. If you don't know which calls are expensive, you'll write something that dies at lunchtime and have no idea why.
Yes, it's free. The limit is 10,000 units a day.
Let's be concrete about "free," because the search query that probably brought you here — "youtube data api v3 official free" — has a real answer. There is no per-call fee for the YouTube Data API v3. You don't attach a billing account, you don't enter a card, and your usage never generates an invoice. You make a project in the Google Cloud Console, turn on the API, create a key, and call it.
What you get instead of a bill is a default allocation of 10,000 quota units per day, per project. Every call spends some units. When the running total hits 10,000, the API returns 403 quotaExceeded and stays dark until the quota resets. So the question that actually matters isn't "is it free" — it's "how far does 10,000 units go," and that depends entirely on what you call.
The unit table, and the one row that ruins everyone's day
Here's what each common operation costs. These are the published 2026 numbers.
| Operation | Method | Cost (units) |
|---|---|---|
| List videos, channels, playlists, playlist items, comments | videos.list, channels.list, playlists.list, playlistItems.list, commentThreads.list |
1 |
| Search | search.list |
100 |
| Add/remove a subscription, set a thumbnail | subscriptions.insert, thumbnails.set |
50 |
| Upload a video | videos.insert |
100 (plus the reads around it — budget ~1,600 in practice) |
| Add captions | captions.insert |
400 |
Read that table once and the whole quota system makes sense. A plain list call costs 1 unit. Search costs 100. That's not a rounding difference — it's the difference between 10,000 reads a day and 100 searches a day out of the exact same budget. Every request, even an invalid one that returns an error, costs at least 1 unit, so a retry loop on a broken call quietly drains you too.
The reason search is so expensive is that it's doing real work: ranking across all of YouTube. Google prices that at 100x a direct lookup on purpose, to push you toward direct lookups. Which is exactly what you should do.
The uploads-playlist trick: turn a 100-unit search into a 2-unit read
The single most common way people waste quota is using search.list to get a channel's recent videos — calling search with a channelId filter. It works, and it costs 100 units every time.
You almost never need it. Every YouTube channel has a hidden "uploads" playlist that contains every video it has ever posted, newest first. Getting it is two cheap calls:
channels.listwithpart=contentDetails→ returns the channel's uploads playlist ID. 1 unit.playlistItems.liston that playlist ID,maxResults=50→ the 50 most recent uploads. 1 unit.
Two units, 50 videos, freshest first. The same result that search.list would have charged you 100 units for. If your app shows "latest videos from this channel" anywhere, this swap alone is the difference between dying at noon and never thinking about quota again. The general rule: search is for open-ended discovery the user typed; everything else should be a list call against an ID you already have.
API key vs OAuth: which one you actually need
Two ways to authenticate, and people reach for the wrong one constantly.
An API key is enough for anything that reads public data — searching, listing a channel's uploads, fetching public video stats, reading public comments. It's a single string you append to the request. No user sign-in, no consent screen. This covers the large majority of read-only apps.
You need OAuth 2.0 the moment a call is about a specific user or changes something: uploading a video, posting or moderating comments, reading someone's private playlists or subscriptions, rating a video. OAuth means the user signs in and grants your app permission, and you act on their behalf.
The rule of thumb that keeps you out of trouble: if a logged-out visitor could already see this data on youtube.com, an API key works. If it requires being signed in as a particular account, you need OAuth. Don't reach for OAuth's complexity until a call actually forces you to.
When the quota resets, and how to get more
Two practical things once you understand the budget.
The reset is on Pacific Time. Your daily quota refills at midnight PT, not at midnight in your own timezone and not 24 hours after you started. If your app runs out at 12:30 PM and you're in Europe, you're waiting until what might be the next morning your time. Plan batch jobs around that clock.
You can ask for more, and it's free. If you've optimized your calls and genuinely need more than 10,000 units — a real product with real users — you submit the YouTube API Services Audit and Quota Extension form, linked from the quotas page in the Cloud Console. Google reviews your compliance with the API terms and your use case; approval takes a few business days, and Google does not charge for the additional quota. But optimize first. An application begging for more quota while spending it all on avoidable search.list calls is the one most likely to get rejected, and usually the one that needs the extension least.
Getting started in four steps
- Open the Google Cloud Console, create a project (or pick one), and enable YouTube Data API v3 under APIs & Services.
- Under Credentials, create an API key. That key reads all public data immediately.
- Make your first call — list a channel's uploads, not a search — and watch the quota meter on the API's dashboard so you learn what your real call mix costs.
- Only when you need user-specific actions (uploads, comments, private data), set up an OAuth 2.0 client and add the consent flow.
Free, yes. But "free" here means "metered in units, not dollars," and the developer whose app died at lunch would have shipped something rock-solid if he'd known one row of that table. Now you do.
Jump to a section
Pass this article along
Send it to your preferred platform or copy the link.
Before you move on
Next step
Finished reading? Continue comparing tools in the directory.
Browse tools