YouTube's official Data API v3 is technically free and practically a maze. Every call spends from a daily quota, search.list alone burns 100 units against a 10,000-unit budget, and reading another creator's channel drags you through OAuth scopes you do not actually need. If all you want is a channel's subscriber count, lifetime views, and best-performing videos, that machinery is overkill.
This API collapses that to one authenticated GET. Pass a channel — as an @handle, a UC... channel id, or a full YouTube URL — and get back a clean { data, meta } envelope. Three endpoints cover the channel profile, its top videos, and aggregate view analytics. No quota units, no OAuth dance, no per-project approval. A request either returns 200 with data or costs you nothing.
The three endpoints
One input, one envelope
Every YouTube endpoint takes the same q input — an @handle, a UC... channel id, or a youtube.com URL — and returns { data, meta }. meta carries the exact cost, your new balance, and a request_id for support. You are only billed on a 200; a 404 or an upstream 502 is free.
| Endpoint | Returns | Cost |
|---|---|---|
GET /v1/youtube/profile | Subscribers, lifetime views, video count, verified, country | $0.0005 |
GET /v1/youtube/videos | Top videos ranked by views (up to 100) | $0.0005 |
GET /v1/youtube/stats | Aggregate view analytics + top 5 videos | $0.0010 |
Pull the channel profile
Start with the profile. It returns the durable channel-level numbers: followers (YouTube subscribers), view_count (lifetime channel views across every upload), and posts_count (total videos the channel has published), plus full_name, channel_id, is_verified, and country.
curl "https://api.virev.ai/v1/youtube/profile?q=@MrBeast" \
-H "Authorization: Bearer $VIREV_API_KEY"import requests
res = requests.get(
"https://api.virev.ai/v1/youtube/profile",
params={"q": "@MrBeast"},
headers={"Authorization": "Bearer kb_live_..."},
)
profile = res.json()["data"]
print(profile["followers"], profile["view_count"])Run it live — swap MrBeast for any channel to see the sign-up gate
Views-only: the one quirk to design around
Read this before you model your schema
The tracked YouTube corpus is views-only. Videos carry a view count, title, length, category, and thumbnail — but no publish date and no like or comment counts. Every list and every aggregate is ordered and computed by views. If your product needs upload recency or engagement rate, reach for the TikTok analytics API, which exposes likes, comments, shares, and per-video timestamps.
| Metric | Available here? |
|---|---|
| Subscriber count | Yes — followers on the profile |
| Lifetime channel views | Yes — view_count on the profile |
| Per-video view count | Yes — views on each video |
| Video title, length, category, thumbnail | Yes |
| Video publish date | No — not tracked |
| Video like / comment counts | No — not tracked |
| Chronological ordering | No — everything ranks by views |
Top videos, ranked by views
The videos endpoint returns the channel highest-viewed uploads — up to 100 in a single call for a flat $0.0005, controlled by limit. Each item has id, title, views, length_seconds, is_live_content, category, and thumbnail. Because there are no timestamps, treat this as an all-time leaderboard of what performed best, not a recent-uploads feed.
const res = await fetch(
"https://api.virev.ai/v1/youtube/videos?q=UCX6OQ3DkcsbYNE6H8uQQuVA&limit=10",
{ headers: { Authorization: "Bearer kb_live_..." } },
);
const { data, meta } = await res.json();
// ranked by view count, highest first — no publish dates exist
console.log(meta.cost, meta.balance);The limit is a ceiling, not a multiplier: 10 videos and 100 videos both cost the same flat $0.0005. Pull the full 100 in one call and cache it rather than paging.
View analytics for the whole channel
For a rollup, GET /v1/youtube/stats computes across the tracked corpus: tracked_videos, plus total, average, max, and median views, avg_length_seconds, and the top 5 videos by views. It is the fastest way to size a channel typical performance without paging the full video list yourself. One call, $0.0010.
Mind the two counts: tracked_videos is how many uploads we hold for the channel, while posts_count on the profile is the channel own all-time upload total — usually the larger number.
import requests
stats = requests.get(
"https://api.virev.ai/v1/youtube/stats",
params={"q": "@MrBeast"},
headers={"Authorization": "Bearer kb_live_..."},
).json()["data"]
print(stats["tracked_videos"], stats["avg_length_seconds"])Getting the identifier right
One footgun worth calling out: YouTube handles are case-sensitive. @MrBeast and @mrbeast are not the same string to the resolver, and the wrong casing returns a 404 — which, to be clear, costs you nothing. When you can, store and query the stable UC... channel id instead; it never changes even if a creator rebrands their handle.
@handle— case-sensitive;@MrBeastand@mrbeastare different channels to the resolver.UC...channel id — the stable identifier; survives handle and display-name changes.- Full URL — paste any
youtube.com/@handleoryoutube.com/channel/UC...URL directly asq.
Analyze your first channel for a fraction of a cent
Pay $1, get a $5 balance — that is 10,000 profile lookups. No subscription, no quota units.
Get your API key →