YouTube API Quota Exceeded: Causes and Fixes
Why YouTube Data API requests fail with quotaExceeded, what the daily 10,000-unit quota actually costs per call, how to check and raise it, and how to avoid hitting it - including using a transcript API that doesn't consume your quota.
00:09:00 · SEP 13, 2026
簡単な回答
quotaExceededが表示されるのは、Google CloudプロジェクトがYouTube Data API v3の1日あたり10,000ユニットの割り当てを使い切ったためです。これは太平洋時間の深夜0時にリセットされます。最速の対処法は、直接IDルックアップで済む場面でsearch.list(100ユニット)の使用をやめること、再取得の代わりに結果をキャッシュすること、あるいは自分のYouTubeクォータをまったく経由しない文字起こしAPIに切り替えることです。なぜこれが起こるのか
すべてのGoogle Cloudプロジェクトには、YouTube Data API v3のデフォルトクォータとして1日あたり10,000ユニットが付与されており、太平洋時間の深夜0時にリセットされます - 繰り越しはなく、早期リセットをトリガーする方法もありません。クォータはプロジェクト単位で追跡され、APIキー単位ではありません。そのため、同じプロジェクトから2つ目のキーを生成しても、2つ目のプールが得られるわけではありません。
すべてのAPI呼び出しはリクエスト数ではなくユニット数を消費し、そのコストは均一ではありません。開発者が実際に使用するエンドポイント全体のコストは以下の通りです:
| 呼び出し | クォータコスト |
|---|---|
search.list | 100ユニット |
videos.list | 1ユニット |
channels.list | 1ユニット |
playlistItems.list | 1ユニット |
commentThreads.list | 1ページあたり1ユニット |
captions.list | 50ユニット |
captions.download | 200ユニット、OAuthが必要(APIキー認証不可) |
1回の検索につき100ユニットなので、キャプションを1つもダウンロードしないうちに、わずか100回の検索呼び出しだけでプロジェクトの1日のクォータをすべて使い切ってしまうことがあります。これは小規模プロジェクトが上限に達する最も一般的な原因です - 10,000回のリクエストをしたのではなく、数百回の高コストなリクエストをしただけなのです。対照的に、videos.list、channels.list、playlistItems.listはそれぞれ1ユニットと安価です - すでに動画、チャンネル、プレイリストのIDがわかっている場合、これらの呼び出しは日次予算をほとんど消費しません。
現在のクォータ使用状況を確認する方法
- APIキーが紐づくプロジェクトのGoogle Cloud Consoleを開きます。
- APIとサービス → YouTube Data API v3 → クォータとシステム上限に移動します。
- ここには、リアルタイムではなく多少の遅延を伴って更新される、1日あたりのクエリ数と1分あたりの制限に対する現在の使用状況が表示されます。
10,000リクエストに達していないのにすでに上限近くにいる場合、この画面で、これがバグではなく上記の高コスト呼び出しの問題であることを確認できます。
quotaExceeded vs. rateLimitExceeded
どちらも403を返し、日常会話では両方とも「クォータエラー」とひとくくりにされがちですが、これらは原因も対処法も異なる別の問題です:
- quotaExceeded(理由:
dailyLimitExceeded) - プロジェクトが1日の割り当てユニットをすべて使い切った状態です。太平洋時間の深夜0時のリセットを待つか、呼び出しごとのコストを削減するか、クォータ増加の承認を得る以外に解決策はありません。 - rateLimitExceeded - 1日の合計とは関係なく、短い時間枠でリクエストを送りすぎている状態です。これは予算の問題ではなくペースの問題です - 正しいバックオフでの対処法についてはレート制限ガイドをご覧ください。
対処法5つ
- 積極的にキャッシュする。クォータはユーザー向けリクエストごとではなくAPI呼び出しごとに課金されます。同じ動画のキャプションを繰り返し再取得している場合は、分単位で変化しないデータに対してAPIを再度呼び出す代わりに、結果をキャッシュしてください(単純なインメモリのTTLキャッシュでも構いません)。
- 直接IDルックアップで済む場面では
search.listを避ける。すでに動画、チャンネル、プレイリストのIDがある場合、対応する.list呼び出しは検索よりも100倍安価です。 - IDルックアップをバッチ化する。
videos.listは1回の呼び出しで最大50件のカンマ区切りIDを、単一IDと同じ1ユニットのコストで受け付けます - 50本の動画を1本ずつバッチ化せずに取得するのは、理由なく50倍のコストがかかります。 - 実際の本番利用実績があれば、クォータ増加をリクエストする。Cloud Consoleのクォータページからリンクされている、YouTube API Services Audit and Quota Extensionフォームを使用してください。手動レビューが行われ、即座に承認されるわけではありません。
- 自分のYouTubeクォータを経由しない文字起こしAPIを使う。GetYouTubeTranscriptのAPIは、お客様のキーで
captions.downloadをプロキシするのではなく、独自のインフラに対して文字起こしを取得するため、管理すべき1日10,000ユニットの上限はなく、プラン自体のリクエストレート制限のみが適用されます。
例: YouTubeのクォータに触れずに文字起こしを取得する
cURL:
curl "https://getyoutubetranscript.com/api/v1/transcript?v=dQw4w9WgXcQ" \
-H "Authorization: Bearer sk_live_..."Node.js:
const res = await fetch(
"https://getyoutubetranscript.com/api/v1/transcript?v=dQw4w9WgXcQ",
{ headers: { Authorization: `Bearer ${process.env.GETYOUTUBETRANSCRIPT_API_KEY}` } }
);
const { data } = await res.json();
console.log(data.transcript);Python:
import os, requests
res = requests.get(
"https://getyoutubetranscript.com/api/v1/transcript",
params={"v": "dQw4w9WgXcQ"},
headers={"Authorization": f"Bearer {os.environ['GETYOUTUBETRANSCRIPT_API_KEY']}"},
)
print(res.json()["data"]["transcript"])これはGoogle CloudプロジェクトのYouTube Data APIクォータに対するユニットではなく、GetYouTubeTranscriptプランに対して1クレジットを消費します。ダッシュボードからカード登録不要で100無料クレジットを取得するか、完全なAPIドキュメントをご覧ください。
回避策についての注意
YouTube APIクォータに関するよくある質問
「The request cannot be completed because you have exceeded your quota」とはどういう意味ですか?
Google Cloudプロジェクトが当日分のYouTube Data API v3クォータユニットを使い切ったことを意味します。Googleはクォータを太平洋時間の深夜0時にリセットし、デフォルトの無料割り当てはプロジェクト単位(APIキー単位ではない)で1日10,000ユニットです。
文字起こしの取得には実際どれくらいのクォータがかかりますか?
YouTube Data API自体には直接「文字起こしを取得する」エンドポイントはありません - captions.list呼び出しは利用可能なキャプショントラックを一覧表示するだけで50ユニットかかり、captions.downloadはAPIキーだけでなくOAuthが必要で200ユニットかかります。動画を最初に見つけるためによく使われるsearch.list呼び出しは、それ単体で100ユニットかかるため、数回の検索とキャプションのルックアップだけで10,000ユニットの日次予算をあっという間に使い切ることがあります。
quotaExceededとrateLimitExceededの違いは何ですか?
quotaExceeded(エラー本文ではreason dailyLimitExceededとして表示されます)は、1日の割り当てユニットをすべて使い切り、太平洋時間の深夜0時のリセットを待つ必要があることを意味します。rateLimitExceededは、1日の合計とは関係なく短い時間枠でリクエストを送りすぎていることを意味します - 詳細な違いについてはレート制限ガイドをご覧ください。
複数のAPIキーを使えばクォータを増やせますか?
いいえ - クォータはAPIキーごとではなくGoogle Cloudプロジェクトごとに追跡されます。同じプロジェクトから生成された複数のキーは、すべて同じ10,000ユニットの日次プールを消費します。クォータを増やすために別のプロジェクトを作成することは技術的には可能ですが、クォータ制限の回避を禁止するYouTube API Services利用規約に違反するリスクがあります。
Googleにクォータ増加をリクエストすることはできますか?
はい、Cloud ConsoleのクォータページからリンクされているYouTube API Services Audit and Quota Extensionフォームを通じて可能ですが、承認は保証されておらず即座でもありません。実際の利用状況の詳細をもって本番利用を正当化する必要があり、Googleは手動でリクエストを審査します。単純にお金を払ってクォータを増やすセルフサービスの方法はありません。
無料の10,000ユニットのクォータは何か費用がかかりますか?
いいえ - これは、YouTube Data API v3を有効にしたすべてのGoogle Cloudプロジェクトに付与されるデフォルトの無料割り当てです。これを利用するのに請求先アカウントを紐づける必要はありませんが、増加をリクエストする際にGoogleから請求を有効にするよう促される場合があります。
GetYouTubeTranscriptのAPIは自分のYouTube APIクォータを使用しますか?
いいえ。お客様のキーでYouTubeのData APIをプロキシすることはありません - 文字起こし抽出は独自のインフラに対して実行されるため、お客様側で管理すべきcaptions.list/downloadのクォータはありません。制限されるのは当社が公開しているレート制限のみです(無料プランで毎分60リクエスト、年額プランで最大毎分300リクエスト)。
関連記事
- YouTube Transcript API Rate Limit: What It Is and How to Handle 429s
- YouTube Transcript MCP Server: Setup Guide for Claude and Other AI Tools
- YouTube Transcripts in n8n: HTTP Request Workflow Guide
- GetYouTubeTranscript vs TranscriptAPI
- GetYouTubeTranscript vs youtubetotranscript.com
- GetYouTubeTranscript vs youtube-transcript.io