UPDATED AUGUST 2026 · VERIFIED DATA

YouTube Data API Guide: Setup, Quotas & Costs (2026)

Free in dollars, capped in quota units — and the unit costs changed more in the last year than most existing tutorials have caught up with. Here's the current setup process and the actual 2026 price of every call.

By Fawad Ullah Aug 2026 12 min read Google Developers docs + 2026 pricing data

The YouTube Data API v3 costs nothing in dollars — there's no invoice, no paid tier, no card on file. What it does have is a quota system that most tutorials describe as one flat number, when in practice it's split across separate buckets with costs that have shifted meaningfully over the past year, most notably for video uploads.

This covers getting a key, exactly how the quota system is structured in 2026, the current cost of every common operation, working code in Python and JavaScript, and the specific tricks that stretch a limited daily quota much further than a naive implementation.

Quick Answer

The YouTube Data API v3 is free with no per-call fee. The default quota is 10,000 units/day for most endpoints, plus separate buckets of 100 calls/day each for search.list and videos.insert. Reads cost 1 unit, search costs 100 units, and most writes cost around 50 units. As of a June 1, 2026 update, video uploads (videos.insert) now cost just 1 unit in their own dedicated bucket — down from roughly 1,600 units before December 2025, a change many older tutorials still haven't caught up with.

Getting an API Key

1

Create a Google Cloud project

Log into the Google Cloud Console, click the project dropdown, select New Project, name it, and create it.

2

Enable the YouTube Data API v3

With your project selected, go to APIs & Services → Library, search "YouTube Data API v3," and click Enable.

3

Generate and restrict your key

Go to Credentials → Create Credentials → API Key. Then edit the key and, under API restrictions, limit it to only the YouTube Data API v3 — this prevents the key from being misused against other Google APIs if it ever leaks.

The Quota System — More Nuanced Than "10,000 Units"

Almost every guide describes the quota as one flat pool. Google's own current documentation actually splits it into three separate buckets.

Three buckets, not one

Per Google's own developer documentation, a project gets 100 search.list calls per day, 100 videos.insert calls per day, and 10,000 units per day combined for every other endpoint — three independent allocations rather than one shared number. This matters because a heavy day of searches doesn't eat into your upload budget, and vice versa.

The 2025–2026 upload cost change most tutorials missed

videos.insert dropped from roughly 1,600 units to about 100 units on December 4, 2025, then — as of a June 1, 2026 update — moved to its own dedicated bucket entirely, billing at just 1 unit per call with a default 100 calls/day cap. Before December 2025, the same 10,000-unit daily quota only allowed about 6 uploads a day. It now allows 100, in a bucket that no longer competes with reads and searches at all.

Quota resets at midnight Pacific Time. Every request counts against it — including ones that return an error, which still cost a minimum of 1 unit.

Quota Cost Table

OperationTypical costExample
Read (list)1 unitvideos.list, channels.list, activities.list
Search100 unitssearch.list — capped at 100 calls/day separately
Captions list50 unitscaptions.list
Captions download200 unitscaptions.download
Insert / Update / Delete (most)50 unitsplaylists.insert, comments.delete
Video upload1 unitvideos.insert — own 100 calls/day bucket since June 2026
Note: Pagination adds up separately — each additional page of results from a single call, like fetching 10 pages of comments, costs one unit per page. Batching multiple video or channel IDs into a single call, on the other hand, is nearly free: requesting 5 videos in one call still costs 1 unit total, versus 5 units for five separate calls.

Core Endpoints and Working Code

Searching for content

search.list looks up videos, channels, or playlists by keyword — the most expensive common endpoint at 100 units per call.

from googleapiclient.discovery import build youtube = build('youtube', 'v3', developerKey='YOUR_API_KEY') request = youtube.search().list( part='snippet', q='Python programming tutorial', maxResults=5, type='video' ) response = request.execute() for item in response.get('items', []): print(item['snippet']['title'])

Fetching a channel's videos — the cheap way

Skip search.list entirely for this task. A two-step call sequence gets the same result for a fraction of the quota cost.

1

Call channels.list (1 unit)

Query with part=contentDetails using the channel ID to get contentDetails.relatedPlaylists.uploads — the ID of that channel's uploads playlist.

2

Call playlistItems.list (1 unit per page)

Query that uploads playlist ID to get the channel's full chronological video list — 1 unit per page instead of the 100-unit cost of a search.list call.

Retrieving video statistics

const API_KEY = 'YOUR_API_KEY'; const videoIds = 'VIDEO_ID_1,VIDEO_ID_2'; const url = `https://www.googleapis.com/youtube/v3/videos?part=snippet,statistics&id=${videoIds}&key=${API_KEY}`; fetch(url) .then(response => response.json()) .then(data => { data.items.forEach(item => { console.log(`${item.snippet.title}: ${item.statistics.viewCount} views`); }); }) .catch(error => console.error('Error fetching data:', error));

API Key vs. OAuth 2.0

API Key

Use forPublic read-only data
SetupGenerate once in Cloud Console
ExamplesSearch, view stats, list playlists

OAuth 2.0

Use forPrivate data & write actions
SetupUser authorizes specific scopes
ExamplesUpload video, edit playlist, like a video

If your app only needs to read public information — statistics, titles, thumbnails — an API key is all you need. The moment you need to act on behalf of a user's own account, OAuth 2.0 becomes mandatory.

Quota Optimization Tips

  • Skip search.list when you already have the ID: if a user pastes a YouTube URL, the video ID is right there in the string — extracting it costs 0 quota units versus 100 for a search call
  • Batch IDs into one call: videos.list accepts a comma-separated list of IDs for the same 1-unit cost as looking up a single one
  • Use the fields parameter: request only the specific nested properties you need to reduce response payload size, even though it doesn't reduce the quota cost itself
  • Cache aggressively: metadata for a given video ID doesn't change often — a simple per-ID cache means repeat lookups of the same content cost zero additional quota
  • Use the channels → playlistItems trick: for getting a channel's uploads, this two-step path is dramatically cheaper than search.list
Illustrative example
Note: The figures below are a composite, illustrative comparison based on the cost data above, not a verified single-project case study.

Naive vs. optimized quota usage for the same feature

351Units/session — naive search-based flow
~1Units/session — cached, ID-from-URL flow
28Max sessions/day at naive cost vs. thousands optimized

The API's daily quota doesn't change — how efficiently your app spends it does.

Common Errors and Fixes

  • 403 quotaExceeded: your project has used its full daily allocation for that bucket; it resets at midnight Pacific Time
  • 400 keyInvalid: the API key is malformed, restricted to the wrong API, or was typed incorrectly — double-check API restrictions in the Cloud Console
  • 401 insufficient permissions: you're attempting a write or private-data action using an API key alone — switch to OAuth 2.0 with the correct scope
  • 403 forbidden on videos.insert: often caused by exceeding the separate 100-call/day upload bucket rather than the general 10,000-unit pool

If quota keeps running out despite optimization, submit Google's Audit and Quota Extension Form from the API Console. Reviews are manual and typically take anywhere from a few weeks to several months, so request an increase well before a launch deadline, not the week of it.

Need a video ID without touching your quota?

Pull the ID straight from any YouTube URL — no API call, no quota cost.

Frequently Asked Questions

Is the YouTube Data API free?
Yes, in dollar terms. Google does not charge any per-call fee for the YouTube Data API v3, and there is no paid commercial tier. The real constraint is quota: every project gets a default daily allocation, and different operations consume different amounts of that quota rather than money.
How do I get a YouTube Data API key?
Create a project in the Google Cloud Console, go to APIs & Services > Library, search for and enable "YouTube Data API v3", then go to Credentials, click Create Credentials, and select API Key. Restricting the key to only the YouTube Data API under API restrictions is strongly recommended to prevent misuse.
How much quota do I get per day, and what does it actually mean?
Per Google's own current documentation, a project gets 100 search.list calls, 100 videos.insert calls, and 10,000 units per day combined for all other endpoints — three separate buckets rather than one flat pool. This is more nuanced than the flat "10,000 units total" figure many older guides still quote.
How much does each YouTube API operation cost in quota units?
Basic read operations like videos.list or channels.list cost 1 unit each. search.list costs 100 units per call. Most write operations (insert, update, delete) cost roughly 50 units. Every request, including ones that return an error, costs at least 1 unit minimum.
Did the cost of uploading a video through the API change recently?
Yes, significantly. videos.insert dropped from roughly 1,600 units to about 100 units on December 4, 2025, and since a June 1, 2026 update it now bills to its own dedicated bucket at just 1 unit per call, capped at a default 100 calls per day. Uploads no longer compete with reads and searches for the same quota pool.
What is the difference between using an API key and OAuth 2.0?
An API key is sufficient for reading public data, such as searching videos or fetching channel statistics. Any action that touches private user data or performs a write — uploading a video, modifying a playlist, liking a video on a user's behalf — requires OAuth 2.0 so the user can explicitly authorize those specific scopes.
How do I reduce how much quota my app uses?
Batch multiple video or channel IDs into a single call instead of separate requests, use the fields parameter to strip unneeded data from responses, cache results for content that rarely changes, and extract a video ID directly from a pasted URL instead of burning a 100-unit search.list call to find it.
What does a quotaExceeded error mean and how do I fix it?
A quotaExceeded error (HTTP 403) means your project has used its full daily quota allocation. It resets automatically at midnight Pacific Time. To avoid hitting it again, review which endpoints are consuming the most units, add caching, and consider requesting a quota increase if usage is consistently maxing out.
Can I request more than the default daily quota?
Yes. Submit Google's Audit and Quota Extension Form from the API Console once your application consistently hits its default limit. Google reviews these requests manually, and approval typically takes anywhere from a few weeks to several months.
What is the cheapest way to get a channel's full list of uploaded videos?
Call channels.list with part=contentDetails using the channel ID to get the channel's uploads playlist ID for 1 unit, then call playlistItems.list against that uploads playlist ID to retrieve the chronological video list. This two-step approach avoids the 100-unit cost of a search.list call entirely.

The API itself hasn't gotten harder to use — if anything, the 2026 changes to upload pricing made it noticeably more generous for developers who need to publish content programmatically. What's changed is that the old mental model of "one shared 10,000-unit pool" is outdated, and the guides still repeating it are quietly steering developers toward inefficient, quota-hungry implementations they don't need to build anymore.