How to Automate YouTube Uploads
YouTube gives uploads their own quota bucket — about 100 a day. What the real limits are, why unverified projects publish privately, and four ways to automate.
Since June 2026 YouTube gives uploads their own quota bucket: 100 videos.insert calls per day, separate from the 10,000 units shared by other endpoints. So quota is rarely the binding constraint — the compliance audit is. Apps that haven't passed it can only upload as private, so an unverified automation publishes videos nobody can see.
What actually limits automated YouTube uploads?
Not quota, in most cases — and this is where stale advice does real damage. A Google Cloud project gets three separate daily allowances:
| Allowance | Default per day |
|---|---|
videos.insert (upload) | 100 calls — its own bucket |
search.list | 100 calls — its own bucket |
| All other endpoints, combined | 10,000 units |
Uploads stopped drawing from the shared pool in June 2026, so publishing no longer competes with reads. Roughly 100 uploads a day by default, and quota resets at midnight Pacific Time, not in your timezone.
If you find a tutorial saying an upload costs 1,600 units and caps you at six a day, it predates December 2025. That model is retired, and planning capacity around it will size your system roughly 16x too small.
The allowances belong to the project making the calls, not the channel — a new channel and one with ten million subscribers get the same 100 uploads a day through the same project.
Operations still billed against the 10,000-unit pool: videos.update, videos.delete and thumbnails.set at 50 units each, videos.list at 1.
Why do automated uploads publish as private?
This is the second wall, and it catches people after the integration already “works”.
Apps requesting sensitive scopes must pass Google’s OAuth verification. Until then:
- Unverified apps are limited to 100 users in testing
- Apps created after 28 July 2020 that have not passed a compliance audit can only upload videos as private — they cannot publish public content
So the API call succeeds, returns a video ID, your logs look clean, and nobody can watch the video. Any automation intended to publish publicly needs the compliance audit finished before launch, not after.
What are the four ways to automate YouTube uploads?
1. A workflow tool. Zapier, Make, n8n or similar, triggered by a new file in Drive, a finished render, or a spreadsheet row. Fastest to stand up, no code. You inherit the tool’s YouTube connection and its quota, which is usually fine at low volume.
2. The Data API directly. Your own Google Cloud project, your own OAuth, your own quota — and your own compliance audit. Full control, and the 100-a-day ceiling is yours to request an increase against. The YouTube upload API guide covers scopes, the resumable upload protocol and metadata fields.
3. A publishing API. One integration covering YouTube alongside other platforms, with the Google Cloud project and OAuth verification already in place.
4. A repurposing pipeline. When the source is long-form video, the upload is the last step of a clipping workflow rather than the job itself — see repurposing YouTube to Shorts, Reels and TikTok.
Which approach fits the volume?
| If you publish… | Use |
|---|---|
| A few videos a week, triggered by a file appearing | A workflow tool |
| Under 100 a day, YouTube only, and you’ll do the audit | The Data API directly |
| More than 100 a day, or several platforms | A publishing API, or a quota increase |
| Clips cut from existing long-form video | A repurposing pipeline |
For most teams the decision is about effort and platform coverage, not quota — 100 uploads a day is more than almost anyone publishes. The genuine blocker is the compliance audit, because without it every upload lands private.
How do you get a YouTube quota increase?
Through the Google Cloud console, as an audit request against the project. It is a review, not a form: Google asks what the application does, how it uses the API, and how it complies with YouTube’s Terms of Service. Expect weeks, and expect rejection if the use case reads as bulk uploading or reposting content you do not own.
Plan on the default allowances until an increase is actually granted. Automations built on a pending approval fail the day they go live.
How do you schedule an automated upload?
YouTube supports native scheduling, unlike most platforms — but through a specific combination: set status.publishAt to an ISO 8601 timestamp and status.privacyStatus to "private". The video stays private until the scheduled moment, then goes public.
Setting publishAt without privacyStatus: "private" does not schedule anything.
What else breaks
Quota exhaustion mid-run. The 101st upload of the day fails. If the workflow doesn’t check for it, it fails quietly and the video simply never appears.
Resumable upload URIs expire. The upload session URI is valid for roughly 7 days and resets on each active upload — fine for normal use, a problem for a retry queue that stalls for a week.
Shorts classification is inferred, not declared. There is no Shorts flag in the API. YouTube decides from aspect ratio and duration — vertical, under 60 seconds. Auto-posting YouTube Shorts covers landing on the Shorts shelf reliably.
Automating uploads through Postproxy
Postproxy publishes to YouTube alongside ten other platforms, with the Google Cloud project, OAuth verification and resumable upload handled on our side:
curl -X POST "https://api.postproxy.dev/api/posts" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "post": { "body": "Weekly build recap", "scheduled_at": "2026-08-07T09:00:00-07:00" }, "profiles": ["youtube"], "media": ["https://your-cdn.com/recap.mp4"] }'The response carries per-platform status, so a quota rejection surfaces as an error against YouTube rather than as a video that silently never appears.
For endpoint-level mechanics — scopes, the resumable protocol, metadata fields — see the YouTube upload API guide.
Postproxy
One API for every social platform
Publish to Instagram, X, LinkedIn, TikTok, YouTube and more with a single request. Free plan, no credit card required.