유튜브 API 2026: 할당량, 비용, 진짜 한계
유튜브 API 할당량은 하루 10,000 유닛, search.list 한 번이 100 유닛이라 검색 100번이면 소진돼요. 할당량 계산법, API 키 발급, 자막 한계, 대안까지 정리했어요.

유튜브 Data API v3는 무료예요. 진짜 비용은 할당량이죠. 프로젝트마다 하루 10,000 유닛을 받는데, search.list 한 번이 100 유닛을 태워요. 그러니까 키워드 검색 100번이면 하루치가 통째로 사라져요. 24시간에 고르게 펴 봐야 시간당 네 번 남짓이에요.
10,000 유닛으로 실제로 뭘 할 수 있는지는 어떤 메서드를 부르느냐에 완전히 달려 있어요. 검색 10번, 결과 메타데이터 조회, 그다음 댓글 스레드까지 도는 파이프라인은 한 사이클에 대략 1,700 유닛을 먹어요. 벽에 부딪히기 전까지 대여섯 사이클 정도 여유가 있는 셈이죠. 페이지네이션 검색을 돌리면 그보다 훨씬 빨리 바닥나요.
무료 API의 진짜 비용
네, 그래요. 유튜브 Data API v3를 호출하는 데 과금 계량기도, 요청당 요금도, 신용카드도 없어요. 개발자가 치르는 유튜브 API 비용은 달러로 매겨지지 않아요.
진짜 비용은 할당량 상한, 그리고 그 아래를 지키느라 드는 엔지니어링 품이에요. 구글 클라우드 프로젝트마다 하루 10,000 유닛을 받고, 이게 바닥나면 이후 모든 호출이 태평양 표준시 자정(UTC 08:00)에 리셋될 때까지 403으로 떨어져요.
다른 가이드가 분명히 말하지 않는 게 하나 있어요. 할당량을 더 사는 셀프서비스 옵션은 없어요. 유료 업그레이드가 딸린 무료 티어가 아니에요. 하루 10,000 유닛으로 부족하면 YouTube API Services Audit and Quota Extension Form을 제출하고 구글이 직접 심사할 때까지 기다려야 해요. 보장된 일정 같은 건 없어요. 크롤러, 대량 데이터 수집, 경쟁사 분석이 얽힌 용도는 자주 거절당하고요. 몇 주씩 기다렸다가 신청한 것보다 적게 승인되거나, 아예 못 받는 경우도 많다고들 해요.
출처: developers.google.com/youtube/v3/getting-started
빌드를 시작하기 전에 하나 더 짚을게요. YouTube Analytics API는 유튜브 Data API v3와는 별개 제품이에요. Analytics API는 채널 자기 영상의 시계열 성과 지표를 주지만, 채널 소유자의 OAuth 2.0이 있어야 해요. 임의의 제3자 채널 참여 지표를 Analytics API로 가져올 수는 없어요. 내가 소유하지 않은 채널의 과거 조회수 추이나 시청자 인구통계가 필요하다면, 구글 공식 제품 스택으로는 답이 안 나와요.
출처: developers.google.com/youtube/analytics
유튜브 API 할당량 구조
유튜브 Data API 할당량은 구글 클라우드 프로젝트마다 하루 10,000 유닛을 줘요. 메서드 호출마다 정해진 유닛이 빠져나가죠. search.list는 100 유닛, videos.list는 1 유닛, captions.download는 200 유닛이에요. 메서드마다 비용이 크게 달라서, 대부분의 개발자가 여기서 놀라요.
메서드별 유닛 비용
구글 할당량 문서의 공식 표예요:
| 메서드 | 호출당 유닛 | 돌려주는 것 |
|---|---|---|
search.list | 100 | 페이지당 영상·채널 ID 최대 50개 |
videos.list | 1 | 영상 메타데이터 객체 최대 50개 |
channels.list | 1 | 채널 객체 최대 50개 |
playlists.list | 1 | 재생목록 객체 최대 50개 |
playlistItems.list | 1 | 재생목록 항목 객체 최대 50개 |
commentThreads.list | 1 | 페이지당 댓글 스레드 최대 100개 |
comments.list | 1 | 댓글 객체 최대 100개 |
captions.list | 50 | 자막 트랙 메타데이터만 (자막 텍스트 아님) |
captions.download | 200 | 자막 내용 (OAuth + 영상 소유 필요) |
쓰기 작업 (videos.insert 등) | 1,600 | 삽입, 수정, 삭제 |
search.list(100 유닛)와 videos.list(1 유닛) 사이의 격차가 앱 아키텍처를 좌우하는 숫자예요. 영상 ID를 알고 메타데이터를 가져오는 건 1 유닛, 그 영상 ID를 키워드 검색으로 찾는 건 100 유닛이에요.
10,000 유닛으로 할 수 있는 것
다른 가이드엔 없는 표예요. 산수는 단순하지만, 실제 파이프라인을 짜기 시작하면 그 함의가 빠르게 불어나요.
| 용도 | 하루 호출 수 | 호출당 유닛 | 소모 유닛 | 일일 할당량 대비 | 할당량 소진 시점 |
|---|---|---|---|---|---|
| 키워드 검색 (결과 조회 없음) | 100회 | 100 | 10,000 | 100% | 검색 100번 |
| 페이지네이션 검색 (3페이지 × 결과 50개) | 99회 | 100 | 9,900 | 99% | 페이지네이션 쿼리 33번 |
| 알고 있는 영상 ID 1,000개 메타데이터 조회 | 20회 (페이지당 50개) | 1 | 20 | 0.2% | 하루 ID 500,000개 |
| 전형적 분석 파이프라인 (검색 10 + 영상 조회 500 + 댓글 스레드 200) | 여러 종류 | 혼합 | 1,700 | 17% | 하루 5~6 사이클 |
| 영상 5,000개 채널의 전체 업로드 히스토리 | 100회 | 1 | 100 | 1% | 이 규모 채널 100개 |
| 자막 다운로드 (소유 영상 한정) | 1회 | 200 | 200 | 2% | 하루 50건 (OAuth + 소유 필요) |
출처: developers.google.com/youtube/v3/determine_quota_usage
대부분의 가이드가 건너뛰는 계산은 이거예요. search.list가 병목이에요. 호출당 100 유닛이라 검색 딱 100번이면 하루 할당량이 바닥나요. 24시간에 고르게 펴도 시간당 네 번 정도죠. 첫날부터 이 상한을 염두에 두고 설계하세요. 안 그러면 프로덕션에서 부딪히고 나서 파이프라인을 급하게 뜯어고치게 돼요.
part 파라미터가 또 하나의 변수예요. 요청에 넣는 part마다 그 호출의 유닛 비용이 올라가요. videos.list를 part=snippet으로 부르면 1 유닛인데, statistics나 contentDetails를 더하면 더 올라가죠. 정말 필요한 part만 요청하세요.
출처: developers.google.com/youtube/v3/getting-started#partial
할당량을 넘기면 API는 HTTP 403과 함께 이런 본문을 돌려줘요:
{
"error": {
"code": 403,
"message": "The caller does not have permission",
"errors": [
{
"domain": "youtube.quota",
"reason": "quotaExceeded"
}
]
}
}
유예 할당량은 없어요. 0에 닿기 전 경고도 없고요. 카운터는 태평양 표준시 자정에 리셋되는데, 겨울엔 UTC 08:00, 여름엔 UTC 07:00이에요. 태평양 시간 밤 11시 58분에 할당량을 다 쓰면, 2분만 기다리면 돼요.
API 키 발급
유튜브 API 키를 받으려면: 구글 클라우드 프로젝트를 만들고, API 라이브러리에서 유튜브 Data API v3를 켠 다음, Credentials에서 API 키를 생성하면 돼요. 전 과정은 5분이 안 걸리고 결제 정보도 필요 없어요. 여섯 단계는 이래요:
- Google Cloud Console에 들어가 구글 계정으로 로그인하세요.
- 새 프로젝트를 만드세요(또는 기존 프로젝트를 고르세요). 할당량은 프로젝트 단위로 배정돼요.
- APIs & Services → Library로 이동하세요.
- "YouTube Data API v3"를 검색하고 Enable을 누르세요.
- APIs & Services → Credentials → Create Credentials → API Key로 이동하세요.
- 키를 복사하세요. 그다음 Edit을 눌러 유튜브 Data API v3로 제한하고, 원한다면 서버 IP나 도메인으로도 제한하세요.
출처: developers.google.com/youtube/v3/getting-started
프로덕션에선 키 제한이 중요해요. 제한 없는 API 키는 자바스크립트 소스나 네트워크 요청에서 그걸 발견한 누구나 쓸 수 있어요. 서버 IP로 제한해 두면 키가 새더라도 내 인프라에서만 호출되죠.
최소 동작 예제
특정 영상의 메타데이터를 가져오고, quotaExceeded와 keyInvalid 오류를 처리하고, 개발자가 가장 자주 쓰는 필드를 출력하는, 완전히 실행 가능한 파이썬 예제예요:
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
API_KEY = "YOUR_API_KEY_HERE"
VIDEO_ID = "dQw4w9WgXcQ"
def get_video_metadata(video_id: str) -> dict | None:
"""
영상의 제목, 조회수, 좋아요 수, 길이를 가져와요.
1 할당량 유닛을 소모해요 (part=snippet,statistics,contentDetails = part 3개).
영상이 비공개이거나 삭제됐거나 존재하지 않으면 None을 돌려줘요.
"""
youtube = build("youtube", "v3", developerKey=API_KEY)
try:
response = youtube.videos().list(
part="snippet,statistics,contentDetails",
id=video_id
).execute()
items = response.get("items", [])
if not items:
print(f"No video found for ID: {video_id}")
return None
video = items[0]
return {
"title": video["snippet"]["title"],
"channel": video["snippet"]["channelTitle"],
"published_at": video["snippet"]["publishedAt"],
"view_count": video["statistics"].get("viewCount"),
"like_count": video["statistics"].get("likeCount"),
"duration": video["contentDetails"]["duration"], # ISO 8601, 예: "PT3M42S"
}
except HttpError as e:
reason = e.error_details[0]["reason"] if e.error_details else "unknown"
if reason == "quotaExceeded":
print("Daily quota exhausted. Resets at midnight Pacific Time.")
elif reason == "keyInvalid":
print("API key is invalid or not enabled for YouTube Data API v3.")
else:
print(f"API error {e.resp.status}: {reason}")
return None
if __name__ == "__main__":
metadata = get_video_metadata(VIDEO_ID)
if metadata:
for key, value in metadata.items():
print(f"{key}: {value}")
클라이언트 라이브러리는 pip install google-api-python-client로 설치하세요.
API 키 vs OAuth 2.0 선택
모든 튜토리얼이 둘 다 있다고만 말해요. 명확한 판단 기준을 주는 곳은 없고요. 여기 있어요:
| 필요한 것 | 인증 방식 | 이유 |
|---|---|---|
| 공개 영상·채널·재생목록 메타데이터 | API 키 | 공개 데이터, 사용자 로그인 불필요 |
| 키워드 검색 결과 | API 키 | search.list는 공개 |
| 공개 영상의 댓글 | API 키 | commentThreads.list는 공개 |
| 사용자의 좋아요 영상이나 구독 목록 | OAuth 2.0 | 사용자 비공개 데이터, 동의 필요 |
| 사용자를 대신해 영상 업로드 | OAuth 2.0 | 쓰기 작업, 사용자 위임 필요 |
| 내가 소유한 영상의 자막 다운로드 | OAuth 2.0 | captions.download는 소유 필요 |
| 내 채널의 Analytics 데이터 | OAuth 2.0 (YouTube Analytics API) | 별개 제품, 소유자만 접근 |
가장 중요한 규칙 하나: 유튜브 사용자가 완전히 공개하지 않은 데이터는 API 키로 절대 접근할 수 없어요. 비공개나 일부공개 영상은 API 키 요청에 404를 돌려줘요. 영상이 아예 없는 것처럼 보이죠. 사용자를 대신해 뭔가 하려면(비공개 데이터 읽기, 쓰기 작업 등) 적절한 스코프를 갖춘 OAuth 2.0이 필요해요.
출처: developers.google.com/youtube/v3/guides/authentication
API로 자막 가져오기
아니요. 공식 API로는 임의의 공개 영상 자막을 가져올 수 없어요. 유튜브 개발자 생태계에서 가장 흔한 오해이고, 문서 깊숙이 묻힌 진실을 찾기 전까지 사람들이 디버깅에 몇 시간씩 날려요.
솔직하게 정리하면 이래요:
captions.list(50 유닛): 영상에 딸린 자막 트랙 목록을 줘요. 트랙 ID, 언어, 종류(표준 vs ASR 자동 생성), 닫힘 가능 여부 같은 트랙 메타데이터를 돌려주죠. 자막 텍스트는 안 줘요.
captions.download(200 유닛): 실제 자막 내용을 텍스트로 내려받아요. 여기 결정적 제약이 있어요. 이 엔드포인트는 OAuth 2.0 인증이 필요하고, 인증된 사용자가 그 영상을 소유하고 있어야 해요(또는 적절한 채널 매니저 권한이 있어야 하고요). 소유하지 않은 영상의 자막을 내려받으려 하면 403을 맞아요. 우회할 수 있는 버그가 아니라 의도된 접근 제어예요.
출처: developers.google.com/youtube/v3/docs/captions 출처: developers.google.com/youtube/v3/docs/captions/download
임의의 공개 영상에서 자동 생성 자막을 가져오는 공식 유튜브 Data API 엔드포인트는 없어요. 유튜브 플레이어에 보이는 자동 자막은 공식 API를 통해 제3자 개발자에게 열려 있지 않아요.
사실상의 우회법: youtube-transcript-api
가장 널리 쓰이는 우회법은 youtube-transcript-api 파이썬 라이브러리예요. 유튜브 플레이어가 쓰는 것과 같은 내부 /api/timedtext 엔드포인트를 리버스 엔지니어링해서, 자막이 존재하고 비활성화되지 않은 영상이라면 자동 자막을 가져와요.
pip install youtube-transcript-api로 설치해요. 최소한의 조회는 이렇게 생겼어요:
from youtube_transcript_api import YouTubeTranscriptApi
# 공개 영상의 자동 생성 영어 자막을 가져와요
transcript = YouTubeTranscriptApi.get_transcript("dQw4w9WgXcQ", languages=["en"])
for segment in transcript[:3]:
print(f"[{segment['start']:.1f}s] {segment['text']}")
프로덕션에 쓰기 전에 알아야 할 주의점이에요:
- 공식 API가 아니에요. 유튜브가 내부 엔드포인트를 바꾸거나 봇 탐지를 붙이면 예고 없이 깨질 수 있고, 실제로 과거에 그런 적이 있어요.
- 자막이 존재하고(자동 생성이든 수동 업로드든) 업로더가 비활성화하지 않은 영상에서만 돌아가요.
- 문서화된 레이트리밋은 없지만, 대규모로 공격적으로 쓰면 IP 차단을 당할 수 있어요.
- SLA도, 지원 채널도, 계속 동작한다는 보장도 없어요.
개인 프로젝트, 소량 리서치, 일회성 데이터 수집, 프로덕션 신뢰성이 필수가 아닌 프로토타입엔 youtube-transcript-api를 쓰세요. 대비책 없이 고객 대상 제품을 이 위에 올리지는 마세요.
라이브러리를 세팅하지 않고 영상 하나에서 텍스트만 필요하다면, 무료 유튜브 자막 생성기가 같은 프로덕션 API를 브라우저에서 돌려요. 링크를 붙이면 자막, AI 요약, 내려받을 수 있는 SRT나 VTT를 줘요.
다른 플랫폼에서 이미 비공식 크롤링 방식을 다뤄 봤다면, 공식 API 없이 틱톡 데이터 가져오기에 나오는 패턴이 여기에도 똑같이 적용돼요. 이런 것들이 프로덕션에서 얼마나 빨리 깨지는지 잘 아실 거예요.
API로 할 수 없는 것들
공식 문서가 쓰기 꺼리는 개발자용 스펙 시트예요. 버전 업으로 채워질 빠진 기능이 아니라, 넘을 수 없는 한계예요:
검색 결과는 쿼리당 500개가 상한이에요. search.list는 pageToken으로 페이지네이션을 지원하지만, 50개짜리 10페이지까지만이에요. 어떤 필터를 걸어도 501번째 결과는 없어요. 한 주제에 대한 과거 대량 수집(예: 지난 1년간 어떤 브랜드를 다룬 모든 영상)은 공식 API 제약 안에선 불가능해요.
출처: developers.google.com/youtube/v3/docs/search/list
키워드 검색에 '오래된 순' 정렬이 없어요. 검색 결과는 관련도, 날짜(최신순), 조회수, 평점으로 정렬할 수 있어요. 키워드에 대해 오래된 순 결과는 가져올 수 없어서, 시간순 코퍼스 수집이 비현실적이에요.
대량 히스토리 엔드포인트가 없어요. 채널이 올린 모든 영상을 가져오려면 그 채널의 업로드 재생목록에서 playlistItems.list를 페이지네이션해야 해요. 호출당 1 유닛 × 50개씩 몇 페이지가 걸리든 그만큼이죠. 영상 5,000개짜리 채널은 API 호출 100번이 필요해요. 그런 채널 50개 네트워크면 데이터로 뭘 해보기도 전에 5,000 유닛, 하루 할당량의 절반이 날아가요.
출처: developers.google.com/youtube/v3/docs/playlistItems/list
댓글이 꺼져 있는 경우가 잦아요. commentThreads.list는 소유자가 댓글을 끈 영상에 대해 commentsDisabled 오류를 돌려줘요. 특히 뉴스, 아동 콘텐츠, 논쟁적인 카테고리에서 상당한 비율의 영상이 여기 해당돼요. 앱은 이걸 예기치 못한 오류로 취급하지 말고 우아하게 처리해야 해요.
출처: developers.google.com/youtube/v3/docs/commentThreads/list
제3자 채널의 참여 시계열이 없어요. Data API v3는 videos.list를 부르면 특정 시점의 조회수와 좋아요 수를 줘요. 시간에 따른 과거 조회수 추이는 안 줘요. 그 데이터는 YouTube Analytics API에 있고, 다시 말하지만 채널 소유자의 OAuth 2.0이 필요해요. 경쟁사의 과거 조회수 궤적은 어떤 공식 API 엔드포인트로도 얻을 수 없어요.
part 파라미터 세금이 쌓여요. 요청하는 part마다 그 호출의 유닛 비용이 올라가요. 코드가 실제로 읽는 part 값만 요청하세요. 뻔한 얘기 같지만, 필드 하나 보여주려고 part 다섯 개를 가져오는 예제 코드를 복붙하면 놓치기 쉬워요.
할당량을 돈으로 사는 길이 없어요. 앞서 말했듯 할당량은 구매할 수 없어요. 감사 신청서가 유일한 경로이고, 데이터 중심 용도는 곧잘 거절당해요.
여러 소셜 미디어 API와 견줘 보면, 유튜브 공식 API는 사실 여러 다른 플랫폼의 API보다 덜 관대해요. 딱딱한 할당량 상한과 자막 접근 제약은 경쟁 플랫폼 API가 다르게 다루는, 진짜 아픈 지점이에요.
대규모 수집 대안: 공식 API vs 크롤링 vs 통합 API
10,000 유닛 벽에 막히면 현실적인 선택지가 셋이에요. 우열을 미리 정하지 않고 솔직하게 비교할게요. 정답은 용도에 따라 달라지니까요.
| 유튜브 Data API v3 | 비공식 라이브러리 (yt-dlp, youtube-transcript-api) | 통합 소셜 API (예: SocialCrawl) | |
|---|---|---|---|
| 하루 호출 한도 | 10,000 유닛 (검색 100번) | 문서화된 한도 없음, 대규모 시 IP 차단 위험 | 크레딧 기반, 유튜브 할당량 벽 없음 |
| 자막 접근 | 불가 (소유 영상만, OAuth 필요) | 가능 (비공식, 예고 없이 깨질 수 있음) | 가능 (일급 엔드포인트) |
| 멀티 플랫폼 | 유튜브만 | 유튜브만 | 42개 플랫폼 이상, 하나의 스키마 |
| 가격 | 무료 (할당량 구매 옵션 없음) | 무료 (SLA 없음) | 크레딧 팩, 만료되지 않아요 |
| 프로덕션 준비도 | 가능 (할당량 관리 필요) | 불가 (약관 리스크, SLA 없음) | 가능 |
| 인증 부담 | 프로젝트마다 API 키 또는 OAuth 2.0 | 없음 | API 키 하나 |
| 과거 대량 데이터 | 제한적 (쿼리당 결과 500개 상한) | 가능하지만 대규모에선 취약 | 가능 |
| 계산 필드 | 원본 데이터만 | 원본 데이터만 | engagement_rate, estimated_reach, content_category |
| 댓글 비활성 처리 | commentsDisabled 오류 반환 | 해당 없음 | 서버 측에서 처리 |
선택 로직:
다음일 때 공식 유튜브 Data API v3를 쓰세요: 할당량 상한 안에서 실시간 유튜브 데이터가 필요하고, 약관 준수가 필수 조건이고, 용도가 하루 검색 100회 안에 들어가고, 제3자 영상 자막 접근에 기대지 않을 때예요.
다음일 때 비공식 라이브러리를 쓰세요: 개인 스크립트, 소량 리서치, 일회성 데이터 수집처럼 프로덕션 신뢰성이 필요 없고 약관 리스크가 감당 가능한 맥락일 때예요.
다음일 때 **통합 소셜 데이터 API**를 쓰세요: 하루 100회가 넘는 유튜브 검색이 필요하거나, 임의의 공개 영상 자막을 가져와야 하거나, 여러 플랫폼에 걸친 제품을 만들거나, 언제든 깨질 수 있는 비공식 엔드포인트 대신 진짜 SLA가 있는 안정적인 프로덕션 엔드포인트가 필요할 때예요.
프로덕션용으로 나온 소셜 미디어 크롤링 API의 전체 지형을 더 넓게 보고 싶다면, 그 글이 판을 통째로 정리해 줘요.
할당량이 바닥났을 때: 재시도와 캐싱
quotaExceeded 403이 유일한 실패 모드는 아니지만, 가장 뼈아파요. 일시적 네트워크 오류와 달리 몇 초 지난다고 저절로 풀리지 않거든요. 태평양 표준시 자정에야 풀려요.
좋은 방어 코드는 이 403에서 뻗거나, 알 수 없는 오류만 남기거나, 남은 할당량을 재시도로 태우는 촘촘한 루프에 빠지는 대신, 제대로 처리해요.
지수 백오프와 지터를 갖춘 프로덕션급 재시도 래퍼예요:
import time
import random
from googleapiclient.errors import HttpError
def execute_with_backoff(request, max_retries: int = 5):
"""
일시적 오류에 지수 백오프를 적용해 유튜브 API 요청을 실행해요.
quotaExceeded면 즉시 raise해요 (재시도해도 소용없어요. 태평양 시간
자정까지 할당량이 없어요). 500/503 서버 오류엔 백오프해요.
그 밖의 오류는 모두 raise해요.
"""
for attempt in range(max_retries):
try:
return request.execute()
except HttpError as e:
status = e.resp.status
content = e.content.decode("utf-8") if e.content else ""
if status == 403 and "quotaExceeded" in content:
# 오늘 할당량은 끝났어요. 재시도해도 소용없어요.
raise RuntimeError(
"YouTube API daily quota exhausted. "
"Resets at midnight Pacific Time (08:00 UTC)."
) from e
elif status in (500, 503):
# 일시적 서버 오류. 백오프 후 재시도
if attempt == max_retries - 1:
raise # 마지막 시도 실패. 원본 오류를 그대로 올려요
wait = (2 ** attempt) + random.uniform(0, 1)
print(f"Server error {status}. Retrying in {wait:.1f}s (attempt {attempt + 1}/{max_retries})")
time.sleep(wait)
else:
# 그 밖의 모든 것(404, keyInvalid, forbidden)은 즉시 raise
raise
raise RuntimeError(f"Max retries ({max_retries}) exceeded")
지터가 왜 중요할까요: random.uniform(0, 1) 오프셋이 없으면, 서버 오류 뒤 앱의 모든 인스턴스가 똑같은 시간만큼 백오프했다가 대기가 끝나는 순간 API를 동시에 두드려요. 지터는 재시도 폭풍을 무작위 구간에 흩뿌려서 쏠림(thundering herd)을 줄여요.
quotaExceeded엔 즉시 raise하세요: 403 할당량 오류를 재시도해도 할당량은 돌아오지 않아요. 시간만 버리고 뒤에 줄 선 다른 호출에 영향을 줄 수 있죠. 빠르게 실패하고, 분명히 로깅하고, 백업 데이터 소스로 갈아타거나 태평양 시간 자정 이후로 작업을 큐에 넣으세요.
공격적으로 캐싱하세요. 영상 메타데이터(제목, 설명, 채널 이름, 좋아요 수, 조회수)는 분 단위로 바뀌지 않아요. videos.list 응답은 최소 한 시간 캐싱하세요. 드물게 올리는 채널이면 24시간도 합리적이에요. 캐싱은 가장 지렛대가 큰 할당량 최적화예요. 캐시 히트 하나가 실제 유닛 하나를 아껴 줘요.
ID를 이미 안다면 search.list 대신 videos.list를 쓰세요. 이전 수집에서 모아 둔 영상 ID 데이터베이스가 있다면, 새 메타데이터를 가져오는 데 호출당 1 유닛이면 돼요. 같은 영상을 찾으려고 새로 search.list를 돌리면 100 유닛이고요. 이 100배 차이는 실제 파이프라인에서 계속 불어나요.
유닛 예산은 직접 추적하세요. 구글은 API 응답에 남은 할당량을 돌려주지 않아요. 직접 호출 카운터를 심어야 해요. 호출 유형별 소모 유닛을 로깅하고, 하루 단위로 집계하고, 임계치(가령 하루 할당량의 80%)에 다가가면 알림을 띄우세요. 이게 없으면 할당량 소진이 프로덕션에서 알 수 없는 403으로 나타나요.
자주 묻는 질문
유튜브 API는 무료인가요?
네. 유튜브 Data API v3는 요청당 금전적 과금이 없어요. 과금 계량기도, 신용카드도 필요 없고요. 비용은 하루 10,000 유닛 할당량 상한과 그걸 관리하는 엔지니어링 품이에요. 할당량을 사는 옵션은 없어요. 한도를 올리는 유일한 길은 구글이 자기 속도로 심사하는 수동 감사 신청서뿐이고, 승인이 보장되지도 않아요.
출처: developers.google.com/youtube/v3/getting-started
유튜브 API 하루 할당량 한도는 얼마인가요?
유튜브 API 하루 할당량은 프로젝트당 10,000 유닛이고, 태평양 표준시 자정에 리셋돼요. 얼마나 멀리 가느냐는 어떤 메서드를 부르느냐에 달려 있어요. search.list(호출당 100 유닛)는 검색 최대 100번, videos.list(호출당 1 유닛)는 메타데이터 조회 최대 10,000번이에요. 검색, 메타데이터 조회, 댓글 조회를 섞은 전형적 분석 파이프라인은 한 사이클에 약 1,700 유닛을 써서, 하루 대여섯 사이클 정도 여유가 있어요.
출처: developers.google.com/youtube/v3/determine_quota_usage
유튜브 API 비용은 얼마인가요?
유튜브 API는 무료로 쓸 수 있어요. 호출당 요금도, 과금 계량기도, 신용카드도 없어요. 유일한 비용은 간접적이에요. 하루 10,000 유닛 할당량이 할 수 있는 일을 제한하죠. 추가 할당량을 사는 유료 티어는 없어요. 한도를 올리는 유일한 길은 YouTube API Services Audit and Quota Extension Form을 제출해 구글의 수동 심사를 받는 것이고, 결과나 일정이 보장되지 않아요.
출처: developers.google.com/youtube/v3/getting-started
유튜브 API 키는 어떻게 받나요?
Google Cloud Console에 들어가 프로젝트를 만들거나 고른 뒤, APIs & Services → Library로 이동해 "YouTube Data API v3"를 켜고, Credentials → Create Credentials → API Key로 가면 돼요. 어디에 배포하기 전에 키를 유튜브 Data API v3와 서버 IP나 도메인으로 제한하세요. 동작하는 파이썬 예제까지 담은 단계별 설명은 위의 API 키 발급 섹션에 있어요.
출처: developers.google.com/youtube/v3/getting-started
API로 유튜브 영상 자막을 받을 수 있나요?
임의의 공개 영상은 안 돼요. 공식 captions.download 엔드포인트(호출당 200 유닛)는 OAuth 2.0 인증이 필요하고 인증된 사용자가 그 영상을 소유해야 해요. 제3자 공개 영상엔 403을 돌려주죠. 내가 소유하지 않은 영상의 자동 생성 자막을 가져오는 공식 API 엔드포인트는 없어요. 사실상의 우회법은 youtube-transcript-api 파이썬 라이브러리인데, 유튜브 내부 엔드포인트를 리버스 엔지니어링한 것이라 SLA가 없고 예고 없이 깨질 수 있어요.
출처: developers.google.com/youtube/v3/docs/captions/download
유튜브 API 키와 OAuth 2.0은 뭐가 다른가요?
API 키는 프로젝트를 인증하고 공개 유튜브 데이터에 읽기 전용으로 접근하게 해줘요. OAuth 2.0은 개별 사용자를 인증하고 그 사용자가 소유하거나 접근 권한을 가진 데이터에 접근하게 해주고요. 판단 기준: 공개 영상, 채널, 검색 결과, 댓글엔 API 키를 쓰세요. 특정 사용자를 대신해 뭔가 해야 할 때(비공개 영상 읽기, 채널에 업로드, 소유 영상 자막 다운로드, 유튜브 Analytics 데이터 접근)는 OAuth 2.0을 쓰세요.
출처: developers.google.com/youtube/v3/guides/authentication
유튜브 API 할당량을 어떻게 늘리나요?
support.google.com/youtube/contact/yt_api_form에서 YouTube API Services Audit and Quota Extension Form을 제출하세요. 신청서엔 약관 준수를 입증하고 용도와 목표 할당량 수준을 설명해야 해요. 구글은 신청을 수동으로 심사하고 일정을 보장하지 않아요. 데이터 크롤링, 대량 수집, 경쟁사 분석이 얽힌 용도는 곧잘 거절당해요. 셀프서비스 옵션은 없어요. 할당량을 돈으로 살 수 없어요.
출처: support.google.com/youtube/contact/yt_api_form
대규모 수집에서 유튜브 Data API의 가장 좋은 대안은 뭔가요?
약관 리스크가 감당 가능한 소량 개인 용도라면 yt-dlp, youtube-transcript-api 같은 비공식 라이브러리가 API 할당량 없이 돌아가요. 대규모 프로덕션 용도라면(하루 검색 100회 초과, 임의의 공개 영상 자막 접근, 멀티 플랫폼 커버리지, 진짜 SLA가 있는 안정적 엔드포인트) 통합 소셜 API가 현실적인 답이에요. SocialCrawl은 유튜브 영상 메타데이터, 채널 통계, 댓글, 자막을 다른 42개 플랫폼과 함께 API 키 하나로, 유튜브의 유닛 할당량 상한 없이 다뤄요.
유튜브 데이터 파이프라인을 설계하기 전에, 예상 호출 패턴을 구글의 할당량 계산기에 넣어 보세요. 프로덕션에서 발견하기 전에 상한을 구체적인 숫자로 보여줘요.
코드를 한 줄 쓰기 전에 프로덕션 API로 유튜브 데이터를 눈으로 보고 싶다면, SocialCrawl Explorer에서 유튜브 영상, 채널, 댓글, 자막을 브라우저에서 바로 조회해 볼 수 있어요.
함께 읽으면 좋은 글

네이버 크롤링 2026: 블로그·카페·뉴스 API로 하는 법
2026년 네이버 데이터를 가져오는 길은 셋이에요. 네이버 검색 오픈 API 직접 연동, 직접 만든 HTML 크롤러, 아니면 SocialCrawl 같은 통합 API 한 번 호출. 블로그·카페·뉴스·쇼핑까지 코드와 함께 정리했어요.

파이썬 크롤링: requests부터 통합 API까지 2026
2026년 파이썬 크롤링, 소셜 데이터는 뭐가 달라질까요? requests와 BeautifulSoup로 직접 만드는 길과 통합 API를 httpx로 부르는 길, 되는 방법과 막히는 이유를 코드로 정리했어요.

스레드 API 2026: 만들 수 있는 것과 없는 것
스레드 API를 있는 그대로 정리했어요. OAuth 2.0에 60일 토큰, 모든 스코프는 앱 심사, 키워드 검색은 7일에 500회. 부족한 부분은 서드파티 API로 채우는 법까지 짚어요.
