To send RSS to a webhook, you need something that checks the feed on a schedule, spots new items and sends each one to your URL as an HTTP POST. Feeder's Post to Webhook rule does this for any number of feeds, with keyword filters and retries built in. Automation tools such as Zapier, Make, IFTTT and n8n can do it too, and so can a short script on your own server.
What are my options for sending RSS to a webhook?
| Option | Good for | What to know |
|---|---|---|
| Feeder's Post to Webhook rule | Many feeds, keyword filters and one JSON format for every feed | Part of Feeder Professional. The details are below. |
| Zapier, Make, IFTTT or n8n | Passing each item on to other apps without code | You map the fields yourself. Each tool has its own plans and limits. |
| A script | Developers who want full control | You host it, schedule it and keep track of what it already sent. |
How does Feeder's Post to Webhook rule work?
Post to Webhook is one of the actions in Feeder's Rules. You create a rule, choose Post to Webhook under What should happen?, paste your endpoint URL and pick the feeds, folders or All feeds to watch. Add keywords if you only want some posts. From then on, Feeder sends each new matching post to your URL.
Build your own integrations using Webhooks has every step with screenshots, and the launch post shows the rule in action. The facts on this page come from the code that sends the webhooks.
What does Feeder send to my webhook?
One HTTP POST for each post, with a JSON body and these headers:
POST /hooks/rss HTTP/1.1
Content-Type: application/json
User-Agent: Feeder-Webhooks/1.0
This is the body for a post from the Feeder blog, with content shortened. Feeder sends it on one line; it's spread out here so it's easier to read.
{
"version": "2023-06-26",
"message_id": "3f1c9a52-7e4b-4d0a-9b6e-2c8d51f0a7e4",
"post": {
"id": "aff2424a-abc9-11f1-afb3-1a21cf3a468a",
"title": "Feed your AI",
"url": "https://feeder.co/blog/1208-feed-your-ai",
"published": "2026-09-08T20:19:59Z",
"content": "\u003cp\u003eWith Feeder's MCP server, you can connect Feeder to your AI client of choice.\u003c/p\u003e",
"audio_url": null,
"image_url": "https://uploads.feedercdn.com/8XSXZN92WHeb2d17f3440d-feedyourai-1024x538.png"
},
"feed": {
"id": "21f058e947",
"source_url": "https://feeder.co/blog.rss",
"public_url": "https://feeder.co/blog",
"title": "Feeder.co",
"favicon": "https://icons.feedercdn.com/feeder.co"
}
}
| Field | What it holds |
|---|---|
version | The format version: 2023-06-26. |
message_id | A new ID for every message. A retry of the same message keeps it, so you can skip duplicates. |
post.id | Feeder's ID for the post. |
post.title | The post's title. |
post.url | The link to the post on the website. |
post.published | When the post was published, as an RFC 3339 timestamp, or null. |
post.content | The post as HTML, as the feed provides it: the full article or a summary. |
post.audio_url | The MP3 attached to the post, such as a podcast episode, or null. |
post.image_url | The image attached to the post, or else the first image in its content, or null. |
feed.id | Feeder's short ID for the feed. |
feed.source_url | The feed's address. |
feed.public_url | The website the feed belongs to. |
feed.title | The feed's title. |
feed.favicon | An address for the site's icon. |
In content, the characters <, > and & arrive as \u003c, \u003e and \u0026. That is valid JSON, and any JSON parser turns them back into HTML.
When does the webhook fire?
- For new posts only. The rule acts on posts Feeder finds after you save it. It doesn't send the posts you already have.
- Once for each post. Every matching post is its own request. Feeder doesn't bundle posts together.
- Right after the feed's next check. On Professional, Feeder checks feeds every 10 minutes by default, and you can set a feed to update as often as every minute. See How often Feeder checks your feeds.
- Only for posts that match. With keywords, only matching posts are sent. Without keywords, every new post is. A post that a Filter posts or Filter duplicates rule hides is not sent.
What happens if my endpoint is down?
Feeder waits up to 60 seconds for an answer. A 2xx status counts as delivered. If your endpoint answers with an error, such as 404 or 500, or doesn't answer at all, Feeder tries again, up to 8 more times:
| Attempt | Sent this long after the one before |
|---|---|
| 2 | 5 seconds |
| 3 | 5 seconds |
| 4 | 30 seconds |
| 5 | 1 minute |
| 6 | 5 minutes |
| 7 | 10 minutes |
| 8 | 30 minutes |
| 9 | 30 minutes |
After the ninth attempt, about 77 minutes after the first, Feeder gives up on that post. Each failed attempt shows up in the rule's error log: open the rule and select Open error log. If you change the rule's URL while retries are waiting, the next retries go to the new URL. Post test message sends a single test with no retries.
What should my endpoint do?
- Answer fast. Reply with a 2xx status first and do slow work afterward, so you stay well within the 60 seconds.
- Skip duplicates. If your server handled a message but answered too late, the retry brings it again. Keep the
message_idorpost.idvalues you've seen. - Use the final address. The URL needs a path, such as
https://example.com/hooks/rss, and must point to a server on the public internet. Feeder won't post to local or private network addresses. Avoid redirects too: after a 301, 302 or 303 redirect, the request arrives as a GET without the JSON body. - Keep the URL private. Anyone who knows it can post to it, so put a long random token in the path.
Can Feeder send a digest to a webhook?
No. Post to Webhook sends one request per post, as soon as Feeder finds it. For a digest, you have three routes:
- Batch on your side. Store each post your endpoint receives, and send your own summary on a schedule.
- Use e-mail summaries. Feeder can e-mail you a daily, weekly or monthly summary of the feeds you pick, on Plus and Professional. See Get notifications for new posts.
- Publish a feed. On Professional, publish a folder or collection as an RSS or JSON feed, and let your own tool read it on its schedule. See How to export your posts as RSS and JSON feeds.
How do I send RSS to a webhook with Zapier, Make, IFTTT or n8n?
Each tool pairs an RSS trigger with an HTTP action. We checked these names on each tool's own site on September 28, 2026:
| Tool | Trigger | Action | Good to know |
|---|---|---|---|
| Zapier | RSS by Zapier: New Item in Feed, or New Items in Multiple Feeds | Webhooks by Zapier: POST | Webhooks by Zapier is a premium app, which Zapier includes only on its paid plans. |
| Make | RSS: Watch RSS Feed Items | HTTP: Make a request | The RSS module reads RSS and Atom feeds. |
| IFTTT | RSS Feed: New feed item | Webhooks: Make a web request | IFTTT checks feeds every hour on its free plan, and every 5 minutes on Pro and Pro+. |
| n8n | RSS Feed Trigger node | HTTP Request node with the POST method | You choose how often it checks the feed under Poll Times. |
These tools are the quickest route if you already use one. You can also combine them with Feeder: point a Post to Webhook rule at a Zapier Catch Hook trigger or an n8n Webhook node. Feeder then watches the feeds and filters the posts, and your workflow takes it from there.
How do I send RSS to a webhook with a script?
This Python script sends each new item in one feed to your webhook. It remembers what it sent in seen.txt, so each item goes out once. The first run sends every item that is in the feed at that moment.
import json, pathlib, urllib.request
import feedparser # pip install feedparser
FEED_URL = "https://example.com/feed.xml"
WEBHOOK_URL = "https://example.com/hooks/rss"
seen_file = pathlib.Path("seen.txt")
seen = set(seen_file.read_text().split()) if seen_file.exists() else set()
for entry in reversed(feedparser.parse(FEED_URL).entries):
key = entry.get("id") or entry.get("link")
if not key or key in seen:
continue
payload = {"title": entry.get("title"), "url": entry.get("link"), "published": entry.get("published")}
request = urllib.request.Request(WEBHOOK_URL, data=json.dumps(payload).encode(),
headers={"Content-Type": "application/json"})
urllib.request.urlopen(request, timeout=30)
seen.add(key)
seen_file.write_text("\n".join(seen))
It needs Python 3 and the feedparser package (pip install feedparser). Run it on a schedule, for example every 15 minutes with cron: */15 * * * * cd /path/to/folder && python3 rss_to_webhook.py. If your endpoint answers with an error, the script stops, and the next run tries the same item again.
Common questions
Can I send RSS to a Slack, Teams or Discord webhook with Post to Webhook?
Not directly. Feeder sends its own JSON format, not the message format those apps expect. Use Feeder's Post to Slack, Post to Microsoft Teams or Post to Discord rules instead, or put Zapier, Make or n8n in between.
Which Feeder plan includes webhooks?
Post to Webhook is part of Professional. Rules that filter, star or collect posts also work on Plus.
Does the webhook include the full article?
It includes what the feed publishes. content holds the full article when the feed carries it, and the summary when the feed only has a summary.
Can I test my endpoint before I save the rule?
Yes. Post test message sends one real post from your feeds to your URL. You need at least one feed with posts in your account.
Try Feeder
Feeder is an RSS reader for the web, iOS and Android, with extensions for Chrome, Firefox and Edge. The free plan follows up to 200 feeds with no ads, and feeds update as often as every 30 minutes. Plus follows 2,500 feeds, updates them as often as every 5 minutes and adds e-mail summaries.
Get started with Feeder for free