MyBotBoxMyBotBox

RSS

Poll up to 100 RSS / Atom feeds per trigger with conditional GET, dedup, and OPML import.

The RSS trigger polls one or more RSS / Atom feeds at a configurable cadence and fires the workflow once per new item. Up to 100 feeds per trigger; conditional GET (If-None-Match + If-Modified-Since) keeps the bandwidth and downstream-fire bill low.

How to configure

  1. Paste up to 100 Feed URLs, one per line — RSS 2.0, Atom 1.0, and most well-formed legacy variants are supported. The trigger validates each URL on save by fetching it once; an invalid feed surfaces a save-time error rather than silently failing later. For private feeds (members-only blogs, internal Confluence exports), enable Basic Auth and supply credentials — they apply to every feed in the trigger.
  2. On the first poll the trigger baselines (no historical fires) unless you set Initial backfill to last_10 / last_50. New items dedupe on your chosen Deduplication key: guid (recommended) survives URL changes; link works for feeds without GUIDs; title_pubdate is the fallback for broken feeds that recycle GUIDs.
  3. Each tick uses conditional GET (If-None-Match + If-Modified-Since) — feeds returning 304 Not Modified consume zero downstream-fire budget. If Respect feed TTL is on and the feed declares e.g. <ttl>60</ttl>, the platform slows the cadence to honor it. Cadence default is 15m.
  4. Read item fields via <rss1.title>, <rss1.link>, <rss1.content>, <rss1.isoDate>, <rss1.feedUrl>. Verify by adding a known-active feed (e.g. a fast news feed) and waiting one cadence — or force an immediate poll per the triggers runbook:
curl -X POST -H "x-scheduler-key: $POLL_DISPATCH_SECRET" \
  'https://mybotbox.com/api/webhooks/poll/dispatch?tier=15m'

Authentication

Public feeds require no auth. For private feeds, the trigger supports HTTP Basic Auth (username + password) — the same credentials are sent to every feed listed in the trigger. Use separate triggers if different feeds need different credentials.

Settings reference

FieldDefaultNotes
Feed URLs(required)Up to 100, newline-separated. OPML import button supported.
Private feeds need Basic AuthoffToggles the username/password fields.
Item filter(empty)Case-insensitive substring or /regex/. Matches title + content.
Initial backfillskipskip, last_10, or last_50 items on first poll.
Deduplication keyguidguid, link, or title_pubdate (broken-feed fallback).
Poll frequency15m5m / 15m / 30m / 60m.
Respect feed TTLonHonor <ttl> element if present.
PausedoffStop polling without deleting the trigger.

Sample payload

{
  "title": "Anthropic announces Claude 5 Sonnet",
  "link": "https://www.anthropic.com/news/claude-5-sonnet",
  "guid": "https://www.anthropic.com/news/claude-5-sonnet",
  "pubDate": "Sat, 26 Apr 2026 20:00:00 +0000",
  "isoDate": "2026-04-26T20:00:00.000Z",
  "contentSnippet": "Today we are releasing Claude 5 Sonnet, our fastest and most capable model in the Sonnet line.",
  "content": "<p>Today we are releasing <strong>Claude 5 Sonnet</strong>, our fastest and most capable model in the Sonnet line.</p>",
  "author": "Anthropic",
  "creator": "Anthropic Editorial",
  "feedUrl": "https://www.anthropic.com/news/rss.xml",
  "feedTitle": "Anthropic News"
}

Verifying a poller

RSS triggers are poller-only — there is no webhook to POST against. Force-run the dispatcher and watch the workflow log. See apps/sat/tests/staging/triggers/pollers/README.md. For a 15m-tier RSS trigger:

POLL_DISPATCH_SECRET=$(gcloud secrets versions access latest \
  --secret=poll-dispatch-secret --project=ystudio-core)

curl -X POST -H "x-scheduler-key: $POLL_DISPATCH_SECRET" \
  'https://mybotbox.com/api/webhooks/poll/dispatch?tier=15m'

Troubleshooting

  • Save-time error on a feed URL — the validator could not parse the response as RSS / Atom. Confirm the URL renders feed XML in your browser; some sites serve HTML at the root and need /feed/ or /rss.xml.
  • Trigger fires too often — the source feed is recycling GUIDs (republishing the same item). Switch the Deduplication key to title_pubdate to compensate.
  • Trigger never fires after first save — initial backfill defaults to skip. Wait for a fresh item, or set backfill to last_10.
  • consecutive_failures rising in feed_poller_state — usually 401 from a private feed (rotated password) or 410 from a removed feed. Inspect last_error.