HomeBlog

YouTube Channel Newsletter Automation with RSS and One API

RSS feed entries flowing through a script into an email newsletter digest

YouTube channel newsletter automation needs exactly three parts: the RSS feed YouTube quietly publishes for every channel, a transcript API, and a cron job. My Monday-morning digest — six channels in my niche, summarized with actual substance instead of thumbnail titles — has run unattended for four months on about 40 lines of Python. Here's the build.

The RSS feed YouTube doesn't advertise

Every channel has a feed at:

https://www.youtube.com/feeds/videos.xml?channel_id=CHANNEL_ID

To find a channel's ID, open the channel page, view source, and search for channelId. The feed returns the most recent uploads (roughly the latest 15) with publish dates — no API key, no OAuth, no YouTube Data API quota. That's the trigger for the whole pipeline.

The script

Poll the feeds, keep the last 7 days, transcribe, summarize:

import feedparser, requests
from datetime import datetime, timedelta, timezone

CHANNELS = ["UC_channel_id_1", "UC_channel_id_2"]
API_KEY = "yt_your_key"
cutoff = datetime.now(timezone.utc) - timedelta(days=7)

videos = []
for cid in CHANNELS:
    feed = feedparser.parse(
        f"https://www.youtube.com/feeds/videos.xml?channel_id={cid}")
    for e in feed.entries:
        published = datetime(*e.published_parsed[:6], tzinfo=timezone.utc)
        if published < cutoff:
            continue
        r = requests.get("https://youtube2text.org/api/transcribe",
            params={"url": e.link, "maxChars": 60000},
            headers={"x-api-key": API_KEY}, timeout=60).json()
        if "result" in r:
            videos.append(r["result"])

Each result carries title, pubDate, and up to 60k characters of content — about 45 minutes of talking, plenty for a digest summary. Send each one to your LLM of choice with a deliberately boring prompt:

Summarize this video transcript for a newsletter digest.
Three sentences, no hype, end with one concrete takeaway
a reader can act on. Video: {title}
{content}

Concatenate the summaries, add links, pipe to your email tool of choice (I use a plain SMTP call), and schedule it: 0 7 1 python3 /home/you/digest.py.

Quota math

Six channels averaging two uploads a week is roughly 48-50 transcripts a month — the $5.99 basic tier's 50 videos covers it with nothing to spare, which is either satisfying or nerve-wracking depending on your temperament. If your channels are prolific, pro at $9.99 for 500 removes the suspense. The free tier's 5 a month works for a single-channel digest, like sending your own subscribers a recap of your week's uploads.

The two failure modes

Both are timing problems, and both are worth handling honestly. First, a video published an hour before your cron job fires may not have processed captions yet, so the API returns TRANSCRIPT_UNAVAILABLE. I log those ids and retry them in the next run rather than dropping them — running the digest a day behind the week's cutoff also works. Second, the RSS feed only lists recent uploads, so a monthly cadence on a daily-upload channel will silently miss videos. Weekly polling is safe for any channel I've tested; if a source posts more than twice a day, poll twice a week.

If you'd rather not maintain a script

The same pipeline builds in no-code tools with an RSS trigger node: the n8n version and the Make version both walk through it step by step. And if you want richer per-video write-ups than a three-sentence digest, the show notes prompt drops straight into this loop.

A Google sign-in at youtube2text.org/app/keys gets you a key in under a minute — no card, no phone — and your Monday inbox starts earning its keep.