Views up 22% last week, led by one Short
48,200 views and 2,140 watch hours last week. Net subscribers +312. One Short brought 14,800 views, a third of the week.
Every Wednesday: last week's YouTube views, watch hours and subscribers against the week before, with the top three videos and new uploads.
Reads
You get
The card on the right is a sample. Yours shows your own numbers and updates in place every run.
What lands on your board
48,200 views and 2,140 watch hours last week. Net subscribers +312. One Short brought 14,800 views, a third of the week.
YouTube Studio defaults to the last 28 days and keeps changing its realtime numbers, so a clean week-on-week comparison means setting custom dates every time. Creators and marketing teams who report weekly end up with screenshots instead of numbers.
The agent asks the YouTube Analytics API for last Monday to Sunday and the week before, for views, watch time and subscribers, then finds the three videos that drew the most views and how this week's uploads did. It runs on Wednesday because YouTube needs a couple of days to settle the numbers.
YouTube Analytics API reports.query with ids=channel==MINE, startDate and endDate for last Monday to Sunday, metrics=views,estimatedMinutesWatched,averageViewDuration,subscribersGained,subscribersLost and dimensions=day. Repeat for the week before.
The same call with dimensions=video, metrics=views,estimatedMinutesWatched,subscribersGained, sort=-views and maxResults=10. Get titles with the Data API videos.list (part=snippet, up to 50 IDs per call).
channels.list?part=contentDetails&mine=true gives the uploads playlist; playlistItems.list on it returns recent uploads with publishedAt. Report each new video's views so far next to the channel's typical first-week views.
Views, watch hours (minutes divided by 60) and net subscribers with the weekly change, the top three videos with views and watch hours, and how the new uploads are doing.
With BRIEFKIN_TOKEN set, the agent sends the result as one card that updates in place every run. Without it, you get the report in the chat.
Pick your agent, where the data comes from and how to schedule it; the commands below follow.
One command. It puts the SKILL.md in ~/.claude/skills and in ~/.agents/skills, which Codex, Cursor, Gemini CLI, Copilot CLI and OpenCode read too.
shellcurl -fsSL https://briefkin.dev/skills/youtube-weekly-channel-report/install | shAsk Claude Code:
promptRun the youtube-weekly-channel-report skillOr paste the prompt instead of installing:
promptUsing the YouTube Analytics API (reports.query, ids=channel==MINE) and the YouTube Data API, read only, compare last week (Monday to Sunday) with the week before: views, estimatedMinutesWatched (show as watch hours), averageViewDuration, subscribersGained and subscribersLost, by day. Find the top three videos by views last week (dimensions=video, sort=-views) with views, watch hours and subscribers gained, and look up their titles with videos.list. List the videos uploaded last week from my uploads playlist with their views so far. Give totals with the change in percent, the best day, the top three videos and one sentence on what worked.Wednesdays at 9:00, from cron on any machine where Claude Code is signed in:
crontab0 9 * * 3 claude -p "Run the youtube-weekly-channel-report skill"Add it with crontab -e. A laptop asleep at that time runs it when it wakes if you use launchd or Task Scheduler instead; GitHub Actions works for the API route.
Connect Briefkin once with curl -fsSL https://briefkin.dev/install | sh and every run lands on your board as a report card. How setup works
SKILL.md---
name: youtube-weekly-channel-report
description: "Every Wednesday: last week's YouTube views, watch hours and subscribers against the week before, with the top three videos and new uploads. Use when the user asks for this, or when it runs on a schedule."
---
# YouTube Analytics weekly channel report
Every Wednesday: last week's YouTube views, watch hours and subscribers against the week before, with the top three videos and new uploads.
YouTube Studio defaults to the last 28 days and keeps changing its realtime numbers, so a clean week-on-week comparison means setting custom dates every time. Creators and marketing teams who report weekly end up with screenshots instead of numbers.
The agent asks the YouTube Analytics API for last Monday to Sunday and the week before, for views, watch time and subscribers, then finds the three videos that drew the most views and how this week's uploads did. It runs on Wednesday because YouTube needs a couple of days to settle the numbers.
## Two ways to get the data
Use the API or MCP route when you have an MCP server, a CLI or an API token for the app. Otherwise, if you can drive a browser the user is signed in to (Claude in Chrome, a Playwright or Chrome DevTools MCP server), use the browser route. Say which one you used.
## Route A: API or MCP server
### What you need
- A Google account that owns or manages the channel, authorized with the `yt-analytics.readonly` and `youtube.readonly` OAuth scopes.
- For a brand account, authorize as a user with access to that channel and choose the channel during sign-in.
If something is missing, say what and stop; do not invent numbers.
### Steps
1. **Pull channel totals by day** (YouTube): YouTube Analytics API `reports.query` with `ids=channel==MINE`, `startDate` and `endDate` for last Monday to Sunday, `metrics=views,estimatedMinutesWatched,averageViewDuration,subscribersGained,subscribersLost` and `dimensions=day`. Repeat for the week before.
2. **Find the top videos** (YouTube): The same call with `dimensions=video`, `metrics=views,estimatedMinutesWatched,subscribersGained`, `sort=-views` and `maxResults=10`. Get titles with the Data API `videos.list` (`part=snippet`, up to 50 IDs per call).
3. **List the week's uploads** (YouTube): `channels.list?part=contentDetails&mine=true` gives the uploads playlist; `playlistItems.list` on it returns recent uploads with `publishedAt`. Report each new video's views so far next to the channel's typical first-week views.
4. **Report**: Views, watch hours (minutes divided by 60) and net subscribers with the weekly change, the top three videos with views and watch hours, and how the new uploads are doing.
## Route B: the browser
### What you need
- Signed in to Google as the channel owner or a manager of the brand channel; Studio needs at least the Viewer role on the channel. The person picks the channel first.
If something is missing, say what and stop; do not invent numbers.
### Steps
Start at https://studio.youtube.com/. The user is signed in already; never type passwords or codes, and ask if a sign-in page appears.
1. **Open Analytics in Advanced mode**: Studio opens on the channel of the signed-in account; switch channels from the avatar menu if needed. Go to **Analytics** and click **Advanced mode** at the top right. Set the date picker to **Custom** with last Monday to Sunday.
2. **Compare with the week before**: Click **Compare to** > **Previous period**. On the **Channel** level read views, watch time (hours), average view duration and subscribers for both weeks; the table under the chart shows the day-by-day numbers, so note the best and worst day.
3. **Find the top videos**: Switch the breakdown to **Video** (or open the **Content** tab) with the same dates, add the **Subscribers** metric, and sort by **Views**. Take the top three with views, watch time and subscribers gained.
4. **Check the week's uploads**: Go to **Content** in the left menu, filter by **Date** for last week, and read each new video's views so far. Compare with what your videos usually reach in their first week, from the same list with an older date range.
Note: Advanced mode shows 50 rows at a time, enough for weekly top videos. Studio's realtime cards are estimates; the Advanced mode table for completed days is what matches the API. Numbers for the last two days can still move.
## The report
- **Views**, **watch hours** and **net subscribers** last week, with the change.
- **By day**: the best and worst day.
- **Top three videos**: views, watch hours, subscribers gained.
- **New uploads** and how they compare with your usual first week.
- One line on what worked.
## Post it to Briefkin
When `BRIEFKIN_TOKEN` is set, or `~/.config/briefkin/env` exists (the installer from https://briefkin.dev/docs writes it), also send the result to the user's Briefkin board as one card. Keep the `item_key` the same on every run so the card updates in place, use a new `event_id` per run, and put today's real numbers in place of the example ones. If the request fails, say so once and carry on.
```bash
[ -n "${BRIEFKIN_TOKEN:-}" ] || . ~/.config/briefkin/env
curl -sS -X POST "${BRIEFKIN_URL:-https://briefkin.dev}/v1/events" \
-H "authorization: Bearer $BRIEFKIN_TOKEN" \
-H "content-type: application/json" \
-d @- <<'JSON'
{
"v": 1,
"event_id": "youtube-weekly-channel-report/<date of this run, e.g. 2026-10-16>",
"item_key": "youtube-weekly-channel-report",
"project": "Acme Channel",
"source": "YouTube Analytics weekly channel report skill",
"kind": "update",
"title": "Views up 22% last week, led by one Short",
"summary": "**48,200** views and **2,140** watch hours last week. Net subscribers **+312**. One Short brought 14,800 views, a third of the week.",
"widget": [
{
"type": "Grid",
"props": {
"columns": 3
},
"children": [
{
"type": "Stat",
"props": {
"label": "Views",
"value": 48200,
"delta": 22
}
},
{
"type": "Stat",
"props": {
"label": "Watch hours",
"value": 2140,
"delta": 9
}
},
{
"type": "Stat",
"props": {
"label": "Net subscribers",
"value": 312,
"delta": 41
}
}
]
},
{
"type": "Table",
"props": {
"columns": [
"Video",
"Views",
"Watch hours",
"Subscribers"
],
"align": [
"left",
"right",
"right",
"right"
],
"rows": [
[
"The 30-second desk setup fix (Short)",
"14,800",
62,
118
],
[
"Building a standing desk from scratch",
"9,450",
712,
74
],
[
"5 cable management mistakes",
"6,130",
388,
39
]
]
}
},
{
"type": "Callout",
"props": {
"text": "Last Tuesday's upload reached 9,450 views by Sunday, about 40% above your usual first week.",
"tone": "ok"
}
}
]
}
JSON
```
Widgets come from the Briefkin catalog (https://briefkin.dev/v1/catalog). Without a token, just give the user the report.
## Run it on a schedule
Suggested: Wednesdays at 9:00 (`0 9 * * 3`). From cron, with the agent signed in on that machine:
```bash
0 9 * * 3 claude -p "Run the youtube-weekly-channel-report skill"
# Codex: codex exec, Gemini CLI: gemini -p, Copilot CLI: copilot -p, OpenCode: opencode run
```
Or use the agent's own scheduler (Claude Code routines, Codex automations, Claude or ChatGPT scheduled tasks): https://briefkin.dev/skills/youtube-weekly-channel-report#schedule
Source: https://briefkin.dev/skills/youtube-weekly-channel-report
A Google account that owns or manages the channel, authorized with the yt-analytics.readonly and youtube.readonly OAuth scopes.
For a brand account, authorize as a user with access to that channel and choose the channel during sign-in.
youtube access before you sign in.YOUTUBE_API_KEY.yt-analytics.readonly and youtube.readonly (Analytics API requests now need both), and store YOUTUBE_CLIENT_ID, YOUTUBE_CLIENT_SECRET and YOUTUBE_REFRESH_TOKEN. Publish the OAuth app: refresh tokens from an app left in Testing expire after seven days.Those read-only scopes can't upload, edit or delete anything; add yt-analytics-monetary.readonly only if the report shows revenue.
YouTube Analytics data usually takes a day or two to settle, and Sunday is often incomplete on Monday morning. Running on Wednesday means the Monday-to-Sunday week is final, so the numbers you report do not change after you post them.
They match Studio's Advanced mode for the same dates. Studio's overview cards can include realtime estimates that the API leaves out until they are processed, which is why fresh numbers in Studio sometimes drop slightly a day later.
No. The skill runs with your own agent and gives you the report in the chat. With a Briefkin token set, each run also posts it to your board as a report card, so you can glance at it instead of asking again.
Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot CLI, OpenCode, Windsurf and Amp all read SKILL.md files. The install command puts it in ~/.claude/skills and ~/.agents/skills, where they look. ChatGPT, the Claude app and Grok take the prompt instead. Pick your agent under "Install and run it" and the commands change to match.
Yes. Switch the data source to "Your browser" and the steps change to the YouTube pages themselves: the agent opens studio.youtube.com in a browser you are signed in to and reads the numbers off the page. Claude Code, Codex, Cursor, Claude app and ChatGPT can drive a browser out of the box; Gemini CLI, Copilot CLI and OpenCode need a Playwright or Chrome DevTools MCP server first. It is slower than the API and needs you signed in, so it suits a report you run by hand or from a scheduler on your own computer.
Skills are free to use with any agent. Briefkin is where their results land: one board for every report, number and question your agents send, with a ping when something needs you.
Free during the open beta. No card.