Which Social API

TikTok and YouTube

YouTube Data API quotas, and how to live within them

The YouTube Data API is free and reads any public channel, but every call spends quota. Here’s how the quota works after the 2026 changes, what costs the most, how to stretch it, and when to stop and pay someone else.

Researched by Which Social API editorial teamUpdated 30 October 20267 min read

YouTube is the one big platform where the official API is worth starting with. The YouTube Data API v3 has no per-call fees, needs only an API key for public data, and reads any public channel, video, playlist, comment thread and search result. What it rations is quota.

Spend it carelessly and a small app runs out early in the day. Spend it well and the default allowance covers more than most projects need. The difference is mostly about which methods you call and how you batch them.

In short

  • Each project gets 10,000 units a day for most methods, plus 100 searches and 100 uploads in their own buckets. It resets at midnight Pacific Time.
  • Most reads cost 1 unit. Captions are the expensive part: 50 to list them and 200 to download, and downloads only work on videos you can edit.
  • Batch 50 IDs per call and use a channel’s uploads playlist instead of search, and 10,000 units refreshes stats for around 500,000 videos a day.
  • Look elsewhere when you need more than 100 searches a day, transcripts for other people’s videos, or data you can keep and build your own metrics from.

How the quota works

Every Google Cloud project that enables the API gets a default of 10,000 units a day, shared by almost every method. Since 1 June 2026, YouTube has been moving to what it calls granular quota buckets. So far, search.list and videos.insert each have their own bucket of 100 calls a day, and the videos.batchGetStats method added on 3 June 2026 has its own 10,000 units a day.

Four rules decide how fast you spend it:

  • Every request costs at least one unit, including invalid ones. A bug that sends malformed requests in a loop burns quota as fast as real work.
  • Every page is charged. Asking for the next page of results costs the same again.
  • Writes cost more. Most creates, updates and deletes cost 50 units.
  • Quota resets at midnight Pacific Time, not UTC. Once you’re out, the API returns HTTP 403 with quotaExceeded until then.

The June change matters if you read older guides. Before it, a search cost 100 units from the shared 10,000, so 100 searches emptied your whole day. Now a search costs one unit from its own bucket. You still get about 100 searches a day, but they no longer starve everything else.

What each call costs

The read methods most data projects use, and the expensive ones to watch, from Google’s quota table:

YouTube Data API quota cost by method
MethodWhat it doesUnits per call
search.listSearch for videos, channels or playlists1, from its own bucket of 100 calls a day
videos.listVideo details and statistics, by ID1
channels.listChannel details, statistics and uploads playlist1
playlistItems.listVideos in a playlist, up to 50 a page1
commentThreads.list, comments.listComments and replies1
videos.batchGetStatsVideo statistics (new in June 2026)1, from its own bucket of 10,000 a day
captions.listA video’s caption tracks50
videos.update, videos.rateEdit or rate a video50
captions.downloadCaption text, only for videos you can edit200
captions.insertUpload a caption track400

The pattern is simple: reading public data is cheap, and captions are not. A single captions.download costs as much as 200 video lookups, and it only works on videos your OAuth user has permission to edit, so it’s no use for transcripts of other people’s videos at any price.

What 10,000 units buys

videos.list and channels.list take a comma-separated list of IDs, up to 50 a call, and cost one unit whatever the batch size. So 10,000 units refreshes statistics for roughly 500,000 videos or channels a day. No other big platform’s official API comes close.

Search is the bottleneck. 100 calls a day, at up to 50 results a page, is at most 5,000 results, and each extra page is another call. That’s enough to power a search box for a handful of users, not a discovery product.

Making the quota go further

Use the uploads playlist, not search

The most common waste is calling search.list with a channelId to list a channel’s videos. Every channel has an uploads playlist, which channels.list returns in contentDetails. Page through it with playlistItems.list at one unit per 50 videos from the shared bucket, and keep your 100 searches for real discovery. A channel-filtered search also stops at 500 videos.

Batch IDs

Never look up videos or channels one at a time. Collect IDs and send them 50 to a call. Refreshing 1,000 videos costs 20 units batched, or 1,000 unbatched.

Ask for less with part and fields

Request only the part you need (statistics for a stats refresh, not snippet,contentDetails,statistics), and use fields to trim nested properties. Google’s docs say these cut latency and bandwidth. They don’t say they lower the unit cost, so don’t count on it: quota is charged per call, which is why batching matters more.

Cache, and use ETags

Store what you fetch and refresh on a schedule that matches how fast the data changes. Channel descriptions barely move; view counts on new videos change fast. For conditional requests, send the resource’s ETag and the API returns HTTP 304 if nothing has changed. Google presents ETags as a way to cut latency and bandwidth; it doesn’t promise a 304 costs no quota.

Don’t pay for mistakes

Invalid requests still cost a unit. Validate IDs before you send them, stop retrying on 4xx errors other than rate limits, and alert well before you hit the cap rather than after.

Put together, a full refresh of one channel’s videos looks like this:

import requests

API = "https://www.googleapis.com/youtube/v3"
KEY = {"key": API_KEY}

# 1 unit: find the channel's uploads playlist
ch = requests.get(f"{API}/channels", params={**KEY, "part": "contentDetails", "id": CHANNEL_ID}).json()
uploads = ch["items"][0]["contentDetails"]["relatedPlaylists"]["uploads"]

# 1 unit per page of 50 videos, instead of search.list with channelId
ids, token = [], None
while True:
    params = {**KEY, "part": "contentDetails", "playlistId": uploads, "maxResults": 50,
              "fields": "nextPageToken,items/contentDetails/videoId"}
    if token:
        params["pageToken"] = token
    page = requests.get(f"{API}/playlistItems", params=params).json()
    ids += [i["contentDetails"]["videoId"] for i in page["items"]]
    token = page.get("nextPageToken")
    if not token:
        break

# 1 unit per 50 videos: stats only, nested fields trimmed
for i in range(0, len(ids), 50):
    stats = requests.get(f"{API}/videos", params={
        **KEY, "part": "statistics", "id": ",".join(ids[i:i + 50]),
        "fields": "items(id,statistics(viewCount,likeCount,commentCount))",
    }).json()

Getting more quota

Beyond the defaults, there’s one route: a compliance audit. You apply through the YouTube API Services Audit and Quota Extension Form, and YouTube reviews whether your project follows the API Services Terms and Developer Policies. Google says a team member will contact you “as soon as possible”, gives no timeline, and doesn’t promise approval. Extra quota is granted for the use case you describe, not as a general allowance.

An audit isn’t one-off. Projects audited in the last 12 months use the same form to ask for more, failed audits have an appeals form, and YouTube runs periodic audits of approved projects. So before you apply, make sure your app already follows the rules below.

The rules that bite first

For analytics and influencer products, the developer policies usually matter more than quota:

  • 30-day storage. Data about channels that haven’t authorised you can be stored for no more than 30 calendar days before you refresh or delete it. That explicitly includes subscriber counts.
  • No derived metrics. You mustn’t use API data to create new metrics, such as a percentage or score calculated from like counts. From 1 June 2026, audited analytics developers can apply for extra allowances on storage and derived metrics.
  • Rounded subscribers. Counts above 1,000 are rounded down to three significant figures.
  • Shifting views. Shorts views changed definition at the end of March 2025. In August 2026 YouTube said all formats would count a public view the moment a video begins to play. View trends across those changes don’t compare.

When to look elsewhere

Stay on the official API while it fits. Pay a third party when you hit one of these:

  • More than 100 searches a day. Discovery tools need far more, and the audit is slow and discretionary.
  • Transcripts for videos you don’t own. The API can’t do it. Every provider in our ranking sells them.
  • Data you need to keep or score. Growth history and engagement scores run into the 30-day and derived-metrics rules.
  • Data the API doesn’t expose, such as search pages as viewers see them, or sponsorship signals beyond the new brandPartner part.

Third parties don’t need an audit, but they bring their own trade-off: YouTube’s terms bar automated access without permission, and in 2026 US courts split on scrapers that get past bot protection. Public channel and video stats are the low-risk end; comments are personal data under GDPR. This isn’t legal advice; our YouTube ranking covers the law in more detail.

On price, ScrapeCreators has the most YouTube endpoints at $1.88 per 1,000 calls, $0.99 at volume. Influship is the pick for search and transcripts at volume: up to 50 search results a page for $0.0018, up to 20 of a channel’s transcripts in one call, billed after use with failed calls free. Apify suits scheduled no-code jobs, Bright Data bulk video records, and SerpApi search pages exactly as YouTube shows them, from $25 a month for 1,000 searches.

Questions

How much quota does the YouTube Data API give you?

By default, 10,000 units a day per project for most methods, plus separate buckets of 100 search.list calls and 100 video uploads a day. videos.batchGetStats has its own 10,000 units a day. Everything resets at midnight Pacific Time.

Does search.list still cost 100 units?

No. Since 1 June 2026 a search costs 1 unit from its own bucket of 100 calls a day. You get about the same number of searches as before, but they no longer drain the 10,000 units the rest of your calls share.

Do failed requests use quota?

Yes. Google’s docs say every request, including invalid ones, costs at least one unit, and each extra page of results is charged again.

Can I use several Google Cloud projects to get more quota?

No. YouTube’s developer policies require exactly one API project per API client. The legitimate route to more quota is the compliance audit.

Is the YouTube Data API free?

Yes. There are no per-call fees. The limits are the daily quota and the developer policies, not price.

Why does the API return rounded subscriber counts?

Since September 2019 YouTube has rounded subscriber counts above 1,000 down to three significant figures, even for a channel’s owner. No API or provider can get you exact public counts.

Researched byWhich Social API editorial teamResearches and writes every ranking, review, comparison and guide on Which Social API, working from each provider’s documentation, published pricing and public user reviews.

Keep reading