YouTube Widget
Subscriber count, total views and video count for one or more YouTube channels, optionally with each channel's most recent uploads and their view, like and comment counts.
Requirements
A YouTube Data API v3 key.
Getting an API key
- Go to console.cloud.google.com
- Create a project (or select an existing one)
- Enable the YouTube Data API v3
- Go to Credentials → Create Credentials → API Key
- Copy the key (optionally restrict it to the YouTube Data API)
The key is stored encrypted and is never sent back to the browser — see Security. Once saved, the field shows as saved rather than displaying the key.
Configuration
| Key | Type | Default | Description |
|---|---|---|---|
apiKey | string | — | YouTube Data API v3 key |
channels | { id: string }[] | [] | Channels to show, up to 3 |
showRecentVideos | boolean | false | Show each channel's latest uploads |
recentVideoCount | number | 3 | How many uploads per channel (1–10) |
videoRefreshMinutes | number | 60 | How often video stats are refetched (minimum 10) |
refreshInterval | number | 300000 | Widget poll interval in ms, for channel totals |
Latest videos
With Show latest videos enabled, each channel lists its most recent uploads with:
- Thumbnail, title and how long ago it was published
- Duration, or a LIVE badge for an in-progress stream
- View count, like count, comment count
Likes and comments are omitted for videos where the creator has hidden likes or turned comments off. That is deliberate — the API returns no figure at all in those cases, and showing 0 would be inventing one.
Quota
The free allowance is 10,000 units a day. Every list call costs 1 unit no matter how many channels or fields it asks for, so what matters is the number of calls:
| What | Calls | When |
|---|---|---|
| Channel totals | 1 (all channels batched) | Every refreshInterval |
| Latest videos | 1 per channel, plus 1 shared | Every videoRefreshMinutes |
Video stats are cached on the server, so videoRefreshMinutes — not the widget's own refresh rate, and not how many browser tabs you have open — is what governs API usage.
A typical setup of three channels, five-minute widget refresh and hourly video refresh costs about 384 units a day, under 4% of the allowance:
channel totals 288 refreshes × 1 unit = 288
latest videos 24 refreshes × 4 units = 96Why not search.list?
Finding a channel's recent uploads via search.list is the obvious approach and costs 100 units per call — hourly that is 2,400 units a day, and at the widget's normal refresh rate it would exhaust the quota before lunch. This widget reads the channel's uploads playlist instead, which gives the same answer for 1 unit.
Finding a channel ID
A channel ID looks like UCxxxxxxxxxxxxxxxxxxxxxxxx. To find it:
- Go to the channel page on YouTube
- The ID is in the URL:
youtube.com/channel/UC... - For custom URLs (
youtube.com/@handle), view the page source and search forchannelId, or use a lookup tool
Notes
Subscriber counts are rounded. Above 1,000 subscribers YouTube reports only three significant figures, so a channel on 123,456 shows as 123,000 and will not appear to change until it crosses 124,000. Below 1,000 the figure is exact. This is an API limitation, not a display choice.
Hidden subscriber counts read as 0; the widget knows the difference and does not treat it as a real figure.
Example config
{
"apiKey": "YOUR_KEY_HERE",
"channels": [
{ "id": "UCVls1GmFKf6WlTraIb_IaJg" },
{ "id": "UC9-y-6csu5WGm29I7JiwpnA" }
],
"showRecentVideos": true,
"recentVideoCount": 3,
"videoRefreshMinutes": 60
}