quotaExceeded: the YouTube Data API 403 and its daily quota
The YouTube Data API returns 403 quotaExceeded when a project uses up its daily quota.
403 quotaExceeded: The request cannot be completed because you have exceeded your quota. Short answer
The YouTube Data API returns 403 quotaExceeded when a project uses up its daily quota. The default allocation, what each call costs, when it resets and how to ask for more.
Diagnosis checked 2026-11-11; sources below.Why it happens
The Google Cloud project has used its daily YouTube Data API quota: 10,000 units a day for most methods, plus separate buckets of 100 search.list and 100 videos.insert calls. Every request costs at least 1 unit, and the quota resets at midnight Pacific Time. Source: YouTube Data API quota calculator.
Do this now
- If the data is yours or your use fits the official terms, switch to the official route: YouTube Data API v3 (Public API). No per-call fee is published; the constraint is the daily quota. Extra quota is not self-serve.
- For video metadata, search results and comments at volume, run a hosted route instead of patching your own requests: YouTube Video Metadata & Chapter Extractor. The request below runs it with its published example input through the Apify API (your token, billed at the Store price).
- Compare every route, with fields and prices, on the YouTube page.
Python
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run_input = {
"videoUrls": [
"jNQXAC9IVRw",
"dQw4w9WgXcQ",
"M7lc1UVf-VE"
],
"maxComments": 0,
"includeChapters": True,
"includeHeatmap": False,
"includeEndscreen": False,
"includeCards": False,
"includeTranscriptMetadata": True,
"includeTranscript": False,
"includeRelatedVideos": 0
}
run = client.actor("vexaloom-labs/youtube-video-metadata-and-chapter-extractor").call(run_input=run_input)
if run is None:
raise RuntimeError("The Actor run was not found.")
for item in client.dataset(run.default_dataset_id).iterate_items():
print(item) pip install apify-client
JavaScript
import { ApifyClient } from "apify-client";
const client = new ApifyClient({ token: "<YOUR_APIFY_TOKEN>" });
const input = {
"videoUrls": [
"jNQXAC9IVRw",
"dQw4w9WgXcQ",
"M7lc1UVf-VE"
],
"maxComments": 0,
"includeChapters": true,
"includeHeatmap": false,
"includeEndscreen": false,
"includeCards": false,
"includeTranscriptMetadata": true,
"includeTranscript": false,
"includeRelatedVideos": 0
};
const run = await client.actor("vexaloom-labs/youtube-video-metadata-and-chapter-extractor").call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items); npm install apify-client
cURL
curl -X POST "https://api.apify.com/v2/actors/vexaloom-labs~youtube-video-metadata-and-chapter-extractor/run-sync-get-dataset-items" -H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" -d '{"videoUrls":["jNQXAC9IVRw","dQw4w9WgXcQ","M7lc1UVf-VE"],"maxComments":0,"includeChapters":true,"includeHeatmap":false,"includeEndscreen":false,"includeCards":false,"includeTranscriptMetadata":true,"includeTranscript":false,"includeRelatedVideos":0}' Waits for the run and returns the dataset items (runs over 300 seconds return HTTP 408; start an async run instead).
MCP (AI agents)
{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=vexaloom-labs/youtube-video-metadata-and-chapter-extractor",
"headers": {
"Authorization": "Bearer <YOUR_APIFY_TOKEN>"
}
}
}
} Adds this Actor as a tool in an MCP client that takes a remote server URL (Cursor, VS Code, Claude Code) through Apify's hosted MCP server. OAuth sign-in also works without the header. Clients that only start local servers can wrap the URL with npx mcp-remote.
Open YouTube Video Metadata & Chapter Extractor in Apify Store
Routes that work for YouTube data
The official route first, then the catalogue Actors that fit this problem (video metadata, search results and comments), by their published fields. Store figures are the publisher's public numbers.
| Route | Core fields | Price / 1K | Success, 30 days | Link |
|---|---|---|---|---|
| Public APIYouTube Data API v3 | not compared | below | Official docs | |
| YouTube Video Metadata & Chapter Extractor | 7/8 | $0.99 | 16 runs, too few to rate | Open in Apify Store |
| YouTube Search Results & Entity Type Scraper | 7/8 | $0.99 | 100% of 21 runs | Open in Apify Store |
| YouTube Video Comment & Reply Thread Scraper | 2/8 | $0.99 | 100% of 24 runs | Open in Apify Store |
Official price: No per-call fee is published; the constraint is the daily quota. Extra quota is not self-serve. Compare all 25 YouTube routes.
The facts behind the error
| Fact | Value |
|---|---|
| What it means | HTTP 403 with reason quotaExceeded: the project has used up its quota |
| Default allocation | 100 search.list calls, 100 videos.insert calls and 10,000 units a day for all other methods |
| Separate buckets | search.list and videos.insert have had their own quota buckets since June 1, 2026 |
| Typical costs | List calls such as videos.list and commentThreads.list cost 1 unit; most writes cost 50 units |
| Invalid requests | Every request, including invalid ones, costs at least 1 unit |
| Reset | Daily quotas reset at midnight Pacific Time |
| Documented recovery | Wait for the reset or file the quota extension request form for YouTube API Services |
Website pages
Sources
Every dated claim on this page comes from the public sources below. Check the source before you make a business decision on it.
- YouTube Data API errors — checked 2026-11-11
- YouTube Data API quota calculator — checked 2026-11-11
- YouTube Data API getting started — checked 2026-11-11
- YouTube Data API revision history — checked 2026-11-11
Get YouTube data with a catalogue Actor
YouTube Search Results & Entity Type Scraper returns 7 of 8 core YouTube fields at $0.99 per 1,000 results. Compare all 25 YouTube routes.