# Google Alerts RSS feed stopped updating

## TL;DR
Google Alerts RSS feeds stop updating when Google deprecates the feed format, the alert query breaks, or the feed URL's authentication expires. The feed is a convenience with no SLA. Check whether the alert still exists in the Alerts dashboard, regenerate the feed URL if needed, and keep a proper news API as the primary source so a dead alert feed never stalls a briefing.

## The error
```text
(stale feed, no HTTP error)
Google Alerts RSS feed stopped updating; last entry days old, parser sees no new items
```

## When this helps
- Google Alerts RSS feeds go stale
- a news pipeline loses alert coverage
- deciding primary versus backup news sources
- migrating off Google Alerts feeds

## When it doesn't
- the topic genuinely has no news; quiet is not broken
- you need reliable delivery; alerts never had an SLA
- the feed 404s; regenerate the URL from the dashboard

## Works with
Google Alerts RSS as of 2026; feedparser for python. Feed behavior is Google-side and changes without notice.

## Steps
### 1. Confirm the feed is stale, not just quiet
```bash
curl -s "https://www.google.com/alerts/feeds/[feed-id]/[query-hash]" -o alerts.xml -w "HTTP %{http_code}\n"
python3 -c "import feedparser; d=feedparser.parse("alerts.xml"); print("entries:", len(d.entries)); print("newest:", d.entries[0].get("published") if d.entries else "none")"
```
Expected: The newest entry date. Days-old newest entries on an active topic mean the feed stalled, not that the news stopped.

### 2. Check the alert in the Google Alerts dashboard
```python
import webbrowser
print("open google.com/alerts and verify the alert query still exists and is set to deliver")
print("deleted or paused alerts silently kill their feeds")
```
Expected: Dashboard confirmation. Alerts get paused or deleted by account changes; the feed gives no error when that happens.

### 3. Regenerate the feed URL from the alert
```bash
printf 'In the Alerts dashboard, open the alert, choose the RSS delivery option\nagain, and copy the fresh feed URL. Feed URLs carry per-alert tokens;\nan old URL from a recreated alert will not update.' | tee alerts_fix.txt
cat alerts_fix.txt
```
Expected: A fresh feed URL. Regenerating re-links the feed to the live alert query.

### 4. Promote a news API to primary and keep alerts as backup
```python
import json
routing = {"primary": "news api", "backup": "google alerts rss"}
open("news_routing.json", "w").write(json.dumps(routing, indent=2))
print("alerts demoted to backup source")
```
Expected: Updated routing. Alert feeds are best-effort; the briefing's primary intake should have an SLA.

## Other ways people phrase this
### google alerts rss not updating
Stale feeds are common. Verify the alert, regenerate the URL, demote to backup.

### google alerts feed broken
The feed is best-effort. A news API is the reliable replacement.

### alerts rss no new entries
Check the newest entry date first; quiet topics look broken when they are not.

## Why it happens
Google Alerts RSS is a free convenience feed with no update guarantee. Alerts get paused, queries break on special characters, and Google changes feed handling without notice. The feed fails silently by just stopping, which is why pipelines discover the staleness late.

## Edge cases
- Feed URLs are per-alert; copying one to a new alert does not work.
- Special characters in alert queries break feed generation; keep queries simple.
- Alerts cap at a fixed number per account; a full account silently drops the oldest.
- Monitor feed freshness with a staleness alert so stalls surface in hours, not days.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_YIDNfp9ccsFOuO95wlBt1A
