---
title: RSS Feed Read
description: Reads an RSS feed from a URL and returns the parsed data
---

Read an RSS or Atom feed, such as a blog, news site or podcast, and get its articles as data.

Optional: pick a saved connection in the **Authentication** field when the service needs one.

## What it does

RSS Feed Read downloads the feed at **URL** and turns it into one item: the feed's own details (`title`, `link`, and others the feed provides) plus an `items` list with one entry per article. Each entry typically has `title`, `link`, `pubDate`, `isoDate` (the date in a standard format), `content` and `contentSnippet` (the content as plain text), depending on what the feed includes.

**Authentication** adds an `Authorization` header from a saved credential, for private feeds. **Headers** sends any extra request headers.

## When to use it

* Watch a blog or news site and get notified of new articles.
* Send a daily list of headlines to Slack or by email.
* Feed new articles to an AI model to summarise or classify.

For a page without a feed, use [Get Links from Link](/nodes/builtin/core/getlinksfromlink/) or [Get HTML from Link](/nodes/builtin/core/gethtmlfromlink/).

## Inputs and settings

* **URL** is the address of the feed itself (often ending in `/feed`, `/rss` or `.xml`), not of the website's home page.
* Redirects are always followed. **Max redirects** and **Reject unauthorized** currently have no effect.

## Outputs

Each output item has these fields:

```json title="Shape of an output item"
{
  "title": "…",
  "link": "…",
  "items": []
}
```

The whole feed is a single item. To handle each article on its own, follow with [Split Out](/nodes/builtin/datatransformation/splitout/) on `items`.

## Dependencies and credentials

* **Authentication** (connection): optional. See [Create a connection](/app/connections/).

Most public feeds need no credential. For a private feed, create a credential of the type the feed expects, such as basic auth or a bearer token. See [Create a credential](/app/connections/create/).

## Example workflow

Get notified of new articles every hour:

1. [Schedule](/nodes/builtin/trigger/schedule/) trigger, every hour.
2. RSS Feed Read, **URL** `https://blog.example.com/feed`.
3. [Split Out](/nodes/builtin/datatransformation/splitout/), **Field To Split Out** `items`, **Output field name** `article`.
4. [Remove Duplicates](/nodes/builtin/datatransformation/removeduplicates/), **Compare** Selected fields, **Fields** `article.link`, **Also Compare Against Previous Runs** on, so only new articles go on.
5. [Browser Notification](/nodes/extension/browsernotification/), **Title** `{{ $input.article.title }}`.

## Common issues

* **"HTTP error! status: 404"** (or another number). The address is not a feed or no longer exists. Open it in your browser: a feed shows XML, not a web page.
* **"Failed to parse RSS/Atom feed from …".** The address returned something that is not a valid feed, often the website's HTML page. Look for the feed link on the site (an RSS icon or `/feed`).
* **"Empty response body when fetching RSS feed from …".** The server answered with nothing. Try again later or check the address.
* **"Request timeout while fetching RSS feed from …".** The server was too slow. Raise **Timeout (ms)** under **Options**.
* **It works in the extension but fails in the web app.** Many sites refuse feed requests sent from another website. Run the workflow from the extension.

## Related nodes

* [Split Out](/nodes/builtin/datatransformation/splitout/): one item per article.
* [Remove Duplicates](/nodes/builtin/datatransformation/removeduplicates/): keep only articles you have not seen.
* [Get All Text from Link](/nodes/builtin/core/getalltextfromlink/): read the full article behind each link.
* [Http Request](/nodes/builtin/core/http-request/): read a JSON feed or API instead.