Yougroup Field Notes
How YouTube RSS Feeds Track Uploads Without an API Key
YouTube exposes a public RSS feed for every channel that tracks uploads with no API key, no OAuth, and no quota. Here is how it works and when enrichment helps.
Most developers who want to monitor YouTube channel uploads assume the path runs through the YouTube Data API v3. That means creating a Google Cloud project, generating an API key, and managing daily quota limits. What many don't realize is that YouTube exposes a fully public, unauthenticated RSS feed for every channel. No credentials, no OAuth, no Cloud project, no quota.
Yougroup, an open-source Chrome extension built by Thoughtbubble, uses these feeds to deliver zero-configuration subscription tracking. Users get upload monitoring out of the box with no account, no backend, and no analytics. This post covers how the feed works at the URL and XML level, its practical limitations, and when optionally adding a YouTube Data API key enriches the experience.
The YouTube RSS Feed URL Pattern
YouTube serves every channel's recent uploads as Atom XML at a predictable URL:
https://www.youtube.com/feeds/videos.xml?channel_id=CHANNEL_ID
The CHANNEL_ID is a stable identifier that starts with UC followed by 22 characters (for example, UCxxxxxxxxxxxxxxxxxxxxxxxx). Once you have this ID, the feed URL works indefinitely. The endpoint is fully public and unauthenticated: no API key, no OAuth token, no Google Cloud project, and no quota.
People commonly call this an RSS feed, though YouTube technically serves Atom XML. As one explainer notes, "Feed readers generally support both formats, so the distinction rarely matters when subscribing." For developers parsing the feed with a standard XML parser like fast-xml-parser, the format details are transparent. One developer building a similar feed reader described the approach plainly: "Every channel publishes a public RSS feed at feeds/videos.xml with its recent uploads as Atom XML, and the Worker reads that directly, parsed with fast-xml-parser. No quota, no Google project, no token to rotate."
Inside the Atom XML: What Each Feed Entry Contains
Each <entry> in the feed includes a fixed set of fields:
- Video ID: The stable YouTube video identifier, usable as a primary key
- Title: The video's title at publication time
- Video URL: The full watch URL
- Channel name and channel URL
- Publication timestamp (
<published>) and update timestamp (<updated>) - Thumbnail URL
- Media description: The video's description text
What the feed does not include is just as important. There is no video duration, no view count, no like count, and no comment count. The feed is designed for notification and basic metadata, not analytics. Publication and update timestamps allow sorting by recency, but popularity signals are absent entirely.
The video ID is the most valuable field for developers building subscription tools. It serves as a stable primary key for deduplication, watched-status tracking, and building playback queues. If you store video IDs locally on each poll, you can detect new uploads on the next fetch and maintain a durable record of what you have already seen.
The 15-Video Rolling Window: RSS Limitations to Know
The most significant constraint of YouTube RSS feeds is volume. The feed typically returns only the most recent 15 uploads per channel, with no pagination and no way to request more. This makes it a rolling window rather than an archive.
If a channel uploads more than 15 videos between your polls, the older entries fall off silently. You will not know they existed unless you captured them on a previous fetch. For most channels this is rarely a problem, but high-volume creators can exceed the window in a single day.
The practical strategy is straightforward: poll the feed periodically, collect the recent entries, store their stable video IDs locally, and process only the unseen entries on each pass. Over time, this builds a durable upload history that extends well beyond the 15-video cap. Frequent polling reduces the risk of data loss but introduces its own tradeoffs around request frequency.
No watch-history or playlist data is available via RSS. The feed covers only recent public uploads. If you need a user's watch history or a channel's playlists, that requires the YouTube Data API.
Resolving Channel Handles to IDs
Users know YouTube channels by their @handle or custom URL, not their UC channel ID. The feed URL requires the UC ID, so developers need a resolution step.
The common approach is to fetch the channel page once and extract either the <link rel="alternate" type="application/rss+xml"> tag or the canonical channel ID embedded in the HTML. Once you have the UC ID, all subsequent feed fetches use it directly. This is a one-time resolution per channel.
When accepting user-pasted URLs, an SSRF (Server-Side Request Forgery) guard is strongly recommended to prevent abuse. Validate that the URL points to youtube.com or a known YouTube domain before fetching it server-side.
Yougroup handles this resolution transparently. Users add channels by handle, and the extension manages the ID mapping internally. The user never needs to think about UC identifiers.
No Key, No Quota, No Backend: Yougroup's Architecture
Yougroup processes Chrome extension RSS feeds entirely client-side. All feed fetching, XML parsing, list grouping, deduplication, and watched-status tracking happen in the extension itself. There is no server-side backend, no product analytics, and no Yougroup account. The project description summarizes the design principle: no Yougroup account, no hosted backend, no server-side sync, and no product analytics. All data lives in Chrome extension storage.
Users can group channels by theme (research, recipes, interviews) and mark uploads as watched locally. Playback queues can be sorted by newest, popular, or interleaved, then opened directly on YouTube. The local-first design eliminates credential management overhead entirely. No Google Cloud project, no API key rotation, no token refresh logic.
This architecture aligns with the privacy concerns that surround subscription tools. When no data leaves the browser, there is nothing to leak, nothing to breach, and nothing to sync.
Client-Side Deduplication: Building a Unified Cross-List Feed
One of the key advantages of client-side RSS processing is cross-list aggregation. Yougroup consolidates uploads from every channel across every user-created list into a single, deduplicated view. When a channel appears in multiple lists, its uploads appear only once.
The deduplication key is the stable video ID. Because every entry in every feed carries a unique video ID, the extension can identify and remove duplicates across lists and polling cycles without any server-side coordination or shared state.
This unified feed powers Yougroup's playback queue. You can sort by newest, popular, or interleaved across all lists at once, then open the queue directly on YouTube. The result is a richer experience than raw per-channel subscriptions provide. Instead of checking each channel individually, you get one clean, consolidated feed that respects your organizational structure.
Optional Enrichment: When a YouTube Data API Key Adds Real Value
The YouTube Data API v3's videos.list endpoint can return up to 50 videos per request and provides significantly richer metadata than RSS alone. The contentDetails part adds video duration. The statistics part adds view count, like count, and comment count. The snippet part adds full title, description, tags, and category.
Using the API requires creating a Google Cloud project, enabling the YouTube Data API v3, and obtaining an API key subject to daily quota limits. Each call to videos.list consumes quota units, and exceeding the daily allocation means tracking stops until the quota resets or is increased through Google's request process.
In Yougroup, API key enrichment is strictly opt-in. The project description captures the two-tier design: "Uses YouTube RSS feeds for public uploads with no YouTube Data API key required; API key is optional for richer details like duration and view counts." Privacy-first users get a complete key-free experience. Power users who want duration and view counts can optionally supply their own API key.
The API key never leaves the user's browser. Enrichment happens client-side, consistent with Yougroup's local-first philosophy. The key is stored in Chrome extension storage alongside the rest of the user's data.
Open-Source Transparency: Auditing the RSS Pipeline
Yougroup is fully open-source. The RSS parsing logic, feed aggregation, deduplication, and API-key enrichment code are all auditable. Developers can clone the repository, build the extension, and load it unpacked in Chrome 114+ to verify exactly what data is fetched and how it is processed locally.
This transparency matters for privacy-sensitive subscription tools. Users can confirm there is no analytics, no telemetry, and no data exfiltration by reading the source. For developers interested in building and loading Chrome extensions from source, the process is documented and accessible.
Key-free tracking via YouTube RSS feeds represents a deliberate design philosophy: start with the simplest public endpoint that meets the core need, and enrich only when the user explicitly opts in. This approach is extensible. Developers building their own subscription trackers can adopt the same RSS-first, API-optional pattern, whether they are building Chrome extension RSS feeds or server-side feed aggregators.
Yougroup is developed by Thoughtbubble, which also offers AI prototyping and consulting services for teams building privacy-conscious products. For a broader look at how Yougroup fits into the goal of curating your own subscription experience, see taking back control of your YouTube feed without the algorithm.