London, Ontario
5 min read
How many videos can you upload a day with the YouTube API?
Since June 2026, uploads have their own quota: 100 a day. What each call costs now, why older answers say six, and how to work out your real limit.
By default, 100. Since June 2026, uploads (videos.insert) have a daily quota of their own: 100 calls, 1 unit each. Everything you do around an upload, like captions, thumbnails, playlists and comments, still comes out of the shared 10,000 units a day, and that’s often the limit you actually hit.
These are Google’s numbers as of September 2026. I run Spot the Checkmate, a YouTube channel that uploads on a schedule through the API, so I keep a close eye on them.
Why do older answers say six a day?
Until late 2025, an upload cost about 1,600 units out of the same 10,000 as everything else, so six uploads used up the day. On 4 December 2025 Google cut that to about 100 units, and on 1 June 2026 it moved uploads into a quota of their own. Both changes are in the API’s revision history.
A lot of what ranks for this question was written before then. If a page says 1,600 units, or six uploads a day, it’s out of date.
What does each call cost now?
From Google’s quota cost table, for the calls you’re likely to make around an upload:
| Call | Cost | Which quota |
|---|---|---|
videos.insert (the upload) | 1 unit | Uploads: 100 a day |
captions.insert | 400 units | Shared: 10,000 a day |
thumbnails.set | 50 units | Shared |
playlistItems.insert | 50 units | Shared |
commentThreads.insert | 50 units | Shared |
videos.update | 50 units | Shared |
videos.list | 1 unit | Shared |
search.list has its own quota of 100 calls a day, too. And every request costs at least one unit, including ones that fail, so retries count.
How many can you actually publish?
Whichever runs out first: the 100 uploads, or the shared units your other calls use. Captions are the expensive part. A video with captions, added to a playlist, with a comment under it, costs one upload plus 500 shared units, so the shared quota stops you at 20 a day. Without captions, you reach the 100-upload limit first.
Here’s that calculation as a function you can run before each upload:
// What each call costs, per Google's quota table (September 2026).
// Uploads have their own quota; everything else shares 10,000 units a day.
const COST = {
"captions.insert": 400,
"thumbnails.set": 50,
"playlistItems.insert": 50,
"commentThreads.insert": 50,
"videos.update": 50,
"videos.list": 1,
} as const;
type Call = keyof typeof COST;
const DAILY_UPLOADS = 100; // videos.insert calls a day, in their own quota
const DAILY_UNITS = 10_000; // everything else, shared
/** How many more videos you can publish today, and which limit stops you. */
function uploadsLeftToday(extras: Call[], used = { uploads: 0, units: 0 }) {
const perVideo = extras.reduce((sum, call) => sum + COST[call], 0);
const unitsLeft = DAILY_UNITS - used.units;
const byUploads = DAILY_UPLOADS - used.uploads;
const byUnits = perVideo ? Math.floor(unitsLeft / perVideo) : Infinity;
return {
left: Math.max(0, Math.min(byUploads, byUnits)),
limit: byUnits < byUploads ? "shared units" : "uploads",
};
}
// A video with captions, added to a playlist, with a comment under it.
const plan: Call[] = [
"captions.insert",
"playlistItems.insert",
"commentThreads.insert",
];
uploadsLeftToday([]);
// { left: 100, limit: "uploads" }
uploadsLeftToday(plan);
// { left: 20, limit: "shared units" }
// Later the same day: 3 videos out, 1,502 shared units spent.
uploadsLeftToday(plan, { uploads: 3, units: 1_502 });
// { left: 16, limit: "shared units" }
When does the quota reset?
At midnight Pacific Time, like every per-day quota on Google Cloud. That’s 07:00 or 08:00 UTC depending on daylight saving, which is easy to get wrong when your scheduler runs in UTC.
To count what you’ve used today, you need the moment today’s quota began. Here it is without a date library:
const LA = "America/Los_Angeles";
/** When today's quota day began: midnight in Los Angeles, as a Date. */
function quotaDayStart(now = new Date()): Date {
// Today's date in Los Angeles, as "2026-09-27"...
const date = new Intl.DateTimeFormat("en-CA", { timeZone: LA }).format(now);
const [y, m, d] = date.split("-").map(Number);
// ...then that midnight in UTC. 08:00 UTC always falls between midnight
// and 1 a.m. in Los Angeles, before any 2 a.m. clock change, so it has
// the same offset as midnight.
const utcDate = Date.UTC(y, m - 1, d);
const offset = offsetMinutes(new Date(utcDate + 8 * 3_600_000));
return new Date(utcDate - offset * 60_000);
}
/** Los Angeles' UTC offset in minutes: -420 in summer, -480 in winter. */
function offsetMinutes(at: Date): number {
const format = new Intl.DateTimeFormat("en-US", {
timeZone: LA,
timeZoneName: "longOffset",
});
const parts = format.formatToParts(at);
const name = parts.find((p) => p.type === "timeZoneName")!.value;
const [, sign, h, m] = name.match(/GMT([+-])(\d\d):(\d\d)/)!; // "GMT-07:00"
return (sign === "-" ? -1 : 1) * (Number(h) * 60 + Number(m));
}
quotaDayStart(new Date("2026-09-27T10:00:00Z")); // 2026-09-27T07:00:00.000Z
quotaDayStart(new Date("2026-12-01T10:00:00Z")); // 2026-12-01T08:00:00.000Z
I checked it against every 15 minutes of 2026, including both clock changes.
Spot the Checkmate uses the same idea before it does anything expensive. Rendering a video costs money, so each run counts that day’s uploads first and stops before rendering if there’s no quota left to publish it.
What else stops uploads?
Two things that aren’t the daily quota:
- Unverified projects upload privately. Videos uploaded through an API project created after 28 July 2020 are locked to private until the project passes Google’s audit. If your uploads keep coming out private, that’s why.
- More quota means an audit. To go past the defaults, your project has to pass a compliance audit, and you ask for the increase through the audit and quota extension form.
Does a Short cost less than a normal video?
No. A Short goes up through the same videos.insert call, so it costs the same: one upload from the 100.
These numbers were checked against Google’s documentation on 27 September 2026. Google changes them now and then, so check the quota table before you plan around them.
Waqar