YouTube Data API · Upload Limits

uploadLimitExceeded: Two Upload Ceilings, One Confusing Error

A scheduler that has been uploading happily for months starts refusing videos. The team checks the Cloud Console quota page, sees plenty of units left, and concludes something is broken. Nothing is broken. There are two completely separate upload ceilings on YouTube, they are enforced in different places, and only one of them can be raised by asking Google.

The two ceilings are not the same limit

Almost every “our YouTube uploads stopped” conversation begins with the wrong ceiling. One limit belongs to your API project. The other belongs to the channel you are uploading to. They produce similar-looking failures at similar-looking moments, and the response to each is completely different.

 Project ceilingChannel ceiling
Owned byYour Google Cloud API projectThe individual YouTube channel
What it countsvideos.insert API callsVideos uploaded in a rolling 24-hour period
Counts uploads made in the browser or app?No — API calls onlyYes — desktop, mobile and API all count together
Published number?YesNo — YouTube does not publish it
Can it be raised?Yes, through a review processNot by any form you can submit
ResetsMidnight Pacific TimeRolling, 24 hours after the uploads that hit it

A team that has diagnosed only the first ceiling will spend weeks preparing a quota extension request that cannot fix the problem they actually have.

Ceiling one: the videos.insert bucket

Since YouTube split the Data API into granular quota buckets, videos.insert no longer draws from the shared unit pool at all. Google’s quota table is explicit: a project that enables the YouTube Data API gets a default allocation of 100 search.list calls, 100 videos.insert calls, and 10,000 units per day combined for every other endpoint. Each videos.insert call costs 1 unit inside its own Video Uploads bucket. Daily quotas reset at midnight Pacific Time.

A trap worth knowing about. The auto-generated summary panel at the top of Google’s own quota page still describes videos.insert as the most expensive method at 1600 points — the legacy figure. The table further down the same page states the bucket model instead. If your capacity model, your client proposal or your internal runbook was built from the summary, or from any blog post that copied it, your numbers are describing an allocation that no longer works the way you think.

The practical consequence is that upload capacity is now almost entirely decoupled from the rest of your quota consumption. Trimming search.list calls or caching videos.list responses will not buy you a single extra upload. Nor will an unusually generous general quota grant. Uploads are their own ceiling, and raising it is a review with its own evidence requirements — not a slider in a console.

Ceiling two: the channel’s own 24-hour limit

This is the one that catches people, because it is deliberately undocumented. YouTube states that it limits how many videos a channel can upload in a 24-hour period across desktop, mobile and the YouTube API, and that the limits may vary by country or region and by channel history. Copyright strikes may affect channel history eligibility. Community Guidelines strikes affect how much a channel can upload. When the ceiling is hit in the browser, the creator sees “Daily upload limit reached.” When it is hit through the API, videos.insert returns badRequest (400) with the reason uploadLimitExceeded — described in Google’s reference simply as the user having exceeded the number of videos they may upload.

  • There is no published number, so you cannot size a batch against it in advance
  • It is per channel, not per project — a multi-tenant product can be blocked on one client while every other client uploads fine
  • Manual uploads by the client’s own team consume the same allowance your software is spending
  • A brand-new channel and a long-established one do not get the same room
  • A strike on the channel quietly shrinks it, with no signal to your integration
  • There is no extension request, no audit and no support path that raises it

That last point is the one worth sitting with. Every other YouTube constraint has a process attached. This one does not.

Where the two ceilings get mistaken for each other

  1. The error is read as a quota error

    A 400 carrying uploadLimitExceeded is an account-side refusal, not a quota refusal. Teams that map every upload failure onto “we need more quota” open the wrong ticket and wait weeks for an answer that would not have helped.

  2. The console says the quota is fine — and it is

    The Cloud Console reports your project’s consumption. It has no visibility into a channel’s 24-hour allowance. Both statements can be true at once: quota healthy, uploads refused.

  3. Retry logic makes it worse

    A backoff loop written for transient errors will keep re-attempting a refusal that is not going to clear for hours, burning the project bucket against a channel that cannot accept the video anyway. Two ceilings, one badly-behaved queue, and now both are exhausted.

  4. Multi-tenant queues hide which channel is blocked

    Agencies and SMM panels push through a shared worker pool. Without per-channel accounting, one blocked client looks like a platform-wide outage, and the support conversation starts in the wrong place entirely.

  5. The client’s own uploads are invisible to you

    Your software is not the only thing uploading to that channel. A marketing team publishing directly in Studio can consume the allowance before your scheduled batch runs, and nothing in your logs will show why.

Why this is a design problem, not a bug fix

Getting this right means deciding, in advance, how your product behaves when a channel simply will not take another video today. That is queue architecture, per-tenant state, operator-facing messaging and client expectation-setting — not a try/except block.

  • Distinguishing a project-bucket exhaustion from a channel refusal before deciding whether to retry, defer or surface the failure
  • Holding and rescheduling per channel rather than per worker, so one blocked tenant does not stall the queue
  • Telling the operator something truthful and specific, rather than a generic upload error that generates a support ticket
  • Setting expectations with the client about what daily publishing volume is actually achievable on a young channel or one with a strike on record
  • Knowing which of the two ceilings is worth preparing a review for — and being honest that the other one is not

What else is usually wrong at the same time

An upload pipeline that has just met uploadLimitExceeded is rarely clean elsewhere. Three adjacent constraints turn up in almost every review.

  • Uploads that succeed but cannot be seen. Videos uploaded from an unverified API project created after 28 July 2020 are restricted to private viewing until the project passes an audit. Covered in YouTube API uploads locked as private.
  • The route to more upload capacity. Raising the project ceiling means passing a compliance review rather than changing a setting — the process is set out in how the YouTube quota increase audit works.
  • What your upload interface has to show. The audit form asks for screenshots of the upload client, and several obligations must already be visible in them. Detailed in YouTube upload client requirements.

Sorting out which ceiling you are actually hitting, and preparing the review for the one that has a process, is the work most teams want a second pair of eyes on before they commit engineering time to it.

On accuracy and outcomes. Every figure above is taken from Google’s own published documentation as of August 2026 — the YouTube Data API quota cost table, the videos.insert reference and its error table, and YouTube Help on common uploading errors. No undocumented channel upload number is stated here, because YouTube does not publish one. Google and YouTube change these mechanics without notice; verify against the official pages before building around them. Quota decisions and audit results are made by YouTube alone. Our work is review preparation, policy-aligned guidance and technical implementation support — not an approval outcome. Not affiliated with Google LLC or YouTube.