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.

EndpointReturnsCost
GET /v1/youtube/profileSubscribers, lifetime views, video count, verified, country$0.0005
GET /v1/youtube/videosTop videos ranked by views (up to 100)$0.0005
GET /v1/youtube/statsAggregate 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.

shell
curl "https://api.virev.ai/v1/youtube/profile?q=@MrBeast" \
  -H "Authorization: Bearer $VIREV_API_KEY"
python
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

YouTube channel GET
$ curl api.virev.ai/v1/youtube/profile ?q=
live · real API call · $0.0005

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.

MetricAvailable here?
Subscriber countYes — followers on the profile
Lifetime channel viewsYes — view_count on the profile
Per-video view countYes — views on each video
Video title, length, category, thumbnailYes
Video publish dateNo — not tracked
Video like / comment countsNo — not tracked
Chronological orderingNo — 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.

javascript
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.

python
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; @MrBeast and @mrbeast are different channels to the resolver.
  • UC... channel id — the stable identifier; survives handle and display-name changes.
  • Full URL — paste any youtube.com/@handle or youtube.com/channel/UC... URL directly as q.

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 →