Engineering

YouTube API pricing and quota in 2026: free, but how many uploads?

Google charges nothing for the YouTube Data API v3. You pay in quota (100 uploads, 100 searches and 10,000 units a day per project), OAuth verification, a compliance audit and the resumable upload flow.

YouTube API pricing is easy to state and easy to get wrong. Google charges nothing for the YouTube Data API v3: no license, no per-call fee, no paid tier. What it meters instead is quota. Every Google Cloud project gets a fixed daily allocation, every request spends some of it, and when a bucket runs dry the API returns quotaExceeded until the next day. Since June 2026 that allocation is three separate budgets: 100 videos.insert calls, 100 search.list calls, and 10,000 units for everything else. This post works out what those budgets buy, what the quota extension audit involves, and where the real cost of building on the Data API sits.

Last verified: September 2026, against Google's YouTube Data API documentation. Every number below links to the page it came from.

Short answer: is the YouTube API free?

Yes. The Data API has no price list because it has no prices. Google's getting started page frames quota as a way to stop applications from degrading the service for others, not as a billing meter. If you searched for YouTube Data API pricing expecting a rate card, there is none. The YouTube API cost is zero in dollars and non-zero in three other currencies: quota units, verification work and engineering time. Older articles still describe a single 10,000-unit pool where an upload burned 1,600 units and a project got six uploads a day. That was true until December 2025 and is not true now.

How the YouTube Data API quota works in 2026

The current rule, from Google's quota calculator:

Projects that enable the YouTube Data API have a default quota allocation of 100 search.list calls, 100 videos.insert calls, and 10,000 units per day combined for all other endpoints.

Three things to hold onto.

Three buckets, not one. Uploads and searches no longer draw from the general pool. The videos.insert reference states the quota impact as "100 calls per day. A call to this method has a quota cost of 1 unit in the Video Uploads quota bucket." The search.list reference says the same for a Search Queries bucket. Everything else shares the 10,000-unit bucket.

How it got here. Google's revision history records two changes: on December 4, 2025 the cost of an upload dropped from approximately 1,600 units to approximately 100, and on June 1, 2026 videos.insert and search.list moved into their own buckets, which Google says makes quota increases easier to approve per method. Net effect: a default project went from six uploads a day to 100.

Everything costs something. Both pages state that all requests, including invalid ones, incur at least one unit, so a malformed call or a 401 from an expired token still counts. Each additional page of a paginated result costs the full method price again, and Live Streaming API calls draw from the general bucket. Usage is on the Quotas page of the Google Cloud console. Google does not publish a reset time on these pages, so plan around a daily window rather than a specific hour.

YouTube API quota costs for common operations

The per-method costs below are from the quota calculator as of September 2026. Quota is per project, not per channel or per user.

Method

What it does

Cost

videos.insert

Upload a video

1 call from the 100-a-day Video Uploads bucket

search.list

Search videos, channels, playlists

1 call from the 100-a-day Search Queries bucket

videos.list

Read video metadata, status, statistics

1 unit

videos.update

Change title, description, privacy, publish time

50 units

videos.delete

Delete a video

50 units

channels.list

Read channel details and statistics

1 unit

playlistItems.list

List a playlist, including the uploads playlist

1 unit

playlistItems.insert

Add a video to a playlist

50 units

commentThreads.list

Read comments on a video

1 unit

commentThreads.insert

Post a top-level comment

50 units

comments.insert

Reply to a comment

50 units

thumbnails.set

Set a custom thumbnail

50 units

captions.insert

Upload a caption track

400 units

What the defaults buy a publishing product: 100 uploads a day across every channel connected to your project. Setting a thumbnail costs 50 general units per upload, a playlist add another 50, a processing-status poll 1, and a comment reply 50, so 200 replies is the whole general bucket.

The bucket that empties first is usually uploads. However much of the 10,000 is left, the 101st videos.insert of the day fails, and a scheduler serving 40 channels that each post three times a day is already over.

YouTube API pricing breakdown: Google's fee, verification, audit and the engineering bill

The same question as a bill of materials: what Google charges, and what you actually pay.

Line item

Google's fee

What it really costs you

API calls

$0

Nothing per call, ever

Google Cloud project

$0

Setup, credentials, enabling the Data API

OAuth consent screen verification

$0

Privacy policy, homepage, domain ownership, demo video, scope justification, a review

API compliance audit

$0

Required to upload public videos and to get more quota; no published turnaround

Quota

$0

100 uploads a day per project until the audit passes and an extension is granted

Resumable upload flow

$0

Session init, chunked PUT, 308 handling, session expiry

Token lifecycle

$0

Refresh tokens stored and rotated for every connected channel

Channel-level limits

$0

Separate upload limits per channel that your code must surface

Rule changes

$0

Two quota model changes in seven months

Two rows do most of the damage.

OAuth consent screen verification for the upload scope

Uploading requires one of youtube.upload, youtube, youtube.force-ssl or youtubepartner, per the videos.insert reference. YouTube's OAuth guide is direct about the consequence: "If your public application uses scopes that permit access to certain user data, it must complete a verification process."

Google's unverified apps page defines an unverified app as one that requests a sensitive or restricted scope without completing verification, shows users a "Google hasn't verified this app" screen, and caps the app at 100 new users in total once that screen has been presented. For a product with customers, that cap is the real gate.

Google's sensitive scope verification page lists what you submit: a privacy policy on the same domain as your homepage and linked from the consent screen, a public homepage, domain ownership verified in Search Console, a justification for each scope, and a video of the grant flow and how the app uses the data. Google says the review "typically takes 3-5 business days", the only timing figure it publishes anywhere in this process.

The compliance audit and the quota extension form

This is the part most teams discover late. The videos.insert documentation carries this note:

All videos uploaded via the videos.insert endpoint from unverified API projects created after 28 July 2020 will be restricted to private viewing mode. To lift this restriction, each API project must undergo an audit to verify compliance with the Terms of Service.

So a fresh project can upload, but every video lands as private, and no privacyStatus: "public" in the request changes that. The audit is not optional for a publishing product even if 100 uploads a day is plenty.

The same audit is the route to more quota. Google's quota and compliance audits guide says that to request quota beyond the default you "must first complete an audit" showing compliance with the YouTube API Services Terms of Service, and both go through the YouTube API Services Audit and Quota Extension Form. A project audited within the last 12 months uses the same form for a further extension, and a failed audit can be appealed. Google publishes no turnaround for the audit, so do not put a date in your launch plan that depends on it.

What it costs to upload a video: the YouTube upload API step by step

videos.insert is a media upload to https://www.googleapis.com/upload/youtube/v3/videos, accepting video/* or application/octet-stream up to 256 GB, and Google's resumable upload protocol is how you get large files there reliably: three requests for a clean upload, more for an interrupted one.

bash
1# 1. Start a session: metadata in the body, file size and type in headers
2curl -i -X POST \
3  "https://www.googleapis.com/upload/youtube/v3/videos?uploadType=resumable&part=snippet,status" \
4  -H "Authorization: Bearer $GOOGLE_ACCESS_TOKEN" \
5  -H "Content-Type: application/json; charset=UTF-8" \
6  -H "X-Upload-Content-Length: $(stat -f%z walkthrough.mp4)" \
7  -H "X-Upload-Content-Type: video/mp4" \
8  -d '{
9    "snippet": { "title": "Building a social API in 20 minutes", "categoryId": "28" },
10    "status": { "privacyStatus": "private", "publishAt": "2026-09-20T14:00:00Z", "selfDeclaredMadeForKids": false }
11  }'
12# -> HTTP 200 with a Location header holding the session URI
13
14# 2. PUT the bytes to the session URI; HTTP 201 returns the video resource
15curl -X PUT "$SESSION_URI" \
16  -H "Authorization: Bearer $GOOGLE_ACCESS_TOKEN" \
17  -H "Content-Type: video/mp4" \
18  --data-binary @walkthrough.mp4
19
20# 3. After a 5xx or dropped connection, ask where it stopped, then resume with Content-Range
21curl -i -X PUT "$SESSION_URI" \
22  -H "Authorization: Bearer $GOOGLE_ACCESS_TOKEN" \
23  -H "Content-Range: bytes */$(stat -f%z walkthrough.mp4)"
24# -> HTTP 308 with Range: bytes=0-999999; send the rest from byte 1000000

What this flow makes you own:

  • Session state. The session URI has a finite lifetime and eventually returns 404, so an abandoned upload cannot be resumed later.
  • Resume logic. Google's upload guide sample retries 500, 502, 503 and 504 with exponential backoff, up to ten times, probing with Content-Range: bytes */LENGTH to learn where to continue.
  • Scheduling rules. status.publishAt can only be set when privacyStatus is private and the video has never been published, per the videos resource. Sending public with a future publishAt is an error, not a scheduled post.
  • Metadata limits. Titles are capped at 100 characters, descriptions at 5,000 bytes, and tags at 500 characters in total, with commas counting toward the tag limit.
  • The made-for-kids flag. status.selfDeclaredMadeForKids is how the channel owner declares the audience at upload time.
  • Shorts. There is no Shorts endpoint. YouTube's help center says videos uploaded on or after October 15, 2024 "with a square or vertical aspect ratio up to three minutes in length will be categorized as Shorts." Older advice about a 60-second limit and a #Shorts hashtag is out of date; format and length decide it.

The Outstand equivalent is one request. The media URL is the one the Media API returned after its confirm-upload step, and Outstand runs the resumable session, retries, scheduling and token refresh.

bash
1curl -X POST https://api.outstand.so/v1/posts \
2  -H "Authorization: Bearer $OUTSTAND_API_KEY" \
3  -H "Content-Type: application/json" \
4  -d '{
5    "accounts": ["youtube"],
6    "containers": [
7      {
8        "content": "Full build walkthrough, timestamps in the description.",
9        "media": [{ "url": "https://media.example.com/walkthrough.mp4", "filename": "walkthrough.mp4" }]
10      }
11    ],
12    "scheduledAt": "2026-09-20T14:00:00Z"
13  }'

The full request schema, including the YouTube options for title, privacy, tags, category and made-for-kids, is in the Outstand API docs. For agents driving this from Claude rather than code, the YouTube MCP server post covers that path.

Hidden costs developers hit after launch

The prerequisites are the visible cost. These arrive on the on-call rota.

"YouTube API quota exceeded" is a 403, and retries make it worse. The errors reference lists quotaExceeded as HTTP 403 with the message "The request cannot be completed because you have exceeded your quota." Every request costs at least a unit, so a retry loop against a drained bucket spends nothing useful and burns the next day's allocation before real traffic gets to it. Treat it as a stop signal until the reset, not a transient error.

One project, all your customers. Quota belongs to the Google Cloud project, so every channel that authorizes your app shares the same 100 uploads and 10,000 units. One customer bulk-importing a back catalog locks out everyone else for the day, so you need a queue that throttles across tenants, not just within one.

Channel limits are a second ceiling. videos.insert can also return uploadLimitExceeded, a 400 meaning the channel itself has hit its upload allowance, which Google describes as a platform restriction separate from your project's quota. YouTube's upload limits page adds a per-file cap of 256 GB or 12 hours, whichever is less, and 15 minutes per video until the channel is verified. Your error handling has to tell the user which of the three limits they hit.

Tokens and consent drift. Every connected channel has a refresh token to store and rotate, users can revoke it at any time, and if your consent screen falls out of step with the scopes your code requests, the unverified warning and the 100-user cap come back.

YouTube API pricing compared with a managed API

For a developer asking about YouTube API cost, the comparison is not Google's price versus a vendor's, since Google's fee is zero either way. It is who owns the project, the verification, the audit, the quota and the upload code.

Option

Publishing

Access model

Pricing

YouTube Data API v3 (direct)

Yes

Your Google Cloud project, OAuth verification, compliance audit, your quota

$0 from Google

Outstand

Yes, plus 11 more networks

Managed Google app, or bring your own

$19/mo incl. 3,000 posts, then $0.007/post to 10,000 and $0.005 after; $249/mo unlimited add-on

Outstand pricing is per post, not per seat or per connected channel, and the same request that uploads to YouTube publishes to Instagram, TikTok, LinkedIn and the rest. Outstand runs the Google project, queues and throttles requests against quota, refreshes tokens and sends the resumable upload. If you already have a verified, audited project, bring your own Google app so the consent screen shows your brand; details are on the Outstand YouTube integration page. Instagram's access hurdles rhyme with these; see the companion post on Instagram API pricing.

When to build on the Data API directly, and when not to

Building directly is the right call more often than a vendor would like to admit. The API is free and well documented.

Build directly when:

  • YouTube is your core product and owning the upload path, quota accounting and audit relationship is worth it.
  • You already have a verified consent screen and an audited project, so the gates are behind you.
  • You need parts Outstand does not expose, such as live streams.
  • You upload for a handful of channels you own and 100 uploads a day will never be tight.

Use a managed API when:

  • YouTube is one of several networks and you do not want a separate upload flow, token store and quota model for each.
  • Your first customer needs to publish public videos before your audit comes back.
  • Your quota needs will grow with customers and you would rather not be the one filing the extension form each time.
  • You are shipping an AI agent and the tool needs to be one HTTP call with a stable schema.

YouTube API pricing from Google is zero, and in 2026 the default quota is more generous for uploads than it has ever been. The cost is the verification and audit before your first public video, the quota arithmetic once you have customers, and the upload code somebody has to keep working. Whether that is your product or a distraction from it is the decision.


FAQ

Is the YouTube API free?

Yes. Google charges no fee for the YouTube Data API v3 and publishes no price list. Access is metered by quota: 100 videos.insert calls, 100 search.list calls and 10,000 units per day per project. OAuth consent screen verification and the API compliance audit are also free, but they take work and time.

What is the YouTube API cost for uploading videos?

Zero dollars. Since June 2026 each upload costs one call from a 100-per-day Video Uploads bucket that belongs to your Google Cloud project. Before December 2025 an upload cost about 1,600 of a shared 10,000 units, which is where the old "six uploads a day" figure came from.

What is the YouTube Data API quota by default?

Per Google's quota calculator: 100 search.list calls, 100 videos.insert calls and 10,000 units per day for all other methods. Reads such as videos.list cost 1 unit, writes such as comments.insert cost 50, captions.insert costs 400, and every request, valid or not, costs at least 1.

What does "YouTube API quota exceeded" mean?

The API returned HTTP 403 with reason quotaExceeded: the relevant bucket for your project is empty for the day. Stop sending requests until the reset, check the Quotas page in the Google Cloud console, and request an extension if the ceiling is structurally too low. uploadLimitExceeded is different: a per-channel YouTube limit unrelated to project quota.

How do I get a YouTube API quota increase?

Submit the YouTube API Services Audit and Quota Extension Form. Google requires a compliance audit before granting quota beyond the default; the same form covers a further request within 12 months of an audit, and Google publishes no processing time. The audit also lifts the private-only restriction on uploads from projects created after July 28, 2020.

How does the YouTube API upload video flow work?

Get an OAuth token with the youtube.upload scope, POST the metadata to https://www.googleapis.com/upload/youtube/v3/videos?uploadType=resumable with X-Upload-Content-Length and X-Upload-Content-Type headers, then PUT the bytes to the session URI in the Location header. A 201 returns the video resource; after an interruption, probe with Content-Range: bytes */LENGTH and resume from the byte the 308 reports. Through Outstand it is one POST /v1/posts with a media URL.

Can I post Shorts with the YouTube upload API?

Yes, with the same videos.insert call. There is no Shorts endpoint. YouTube categorizes any video uploaded on or after October 15, 2024 with a square or vertical aspect ratio and a length of up to three minutes as a Short. No hashtag or special flag is needed.