---
id: text--rss-atom
title: "RSS/Atom parser"
summary: "Parses an RSS 2.0 or Atom feed (XML text) and emits one record per feed item. Typically placed after an Http client that downloads the feed."
audience: user
keywords: "input, output, property, id, title, articlelink, summary, categories, publishdate, authors, enclosureurl"
---
# RSS/Atom parser

Parses an RSS 2.0 or Atom feed (XML text) and emits one record per feed item. Typically placed after an Http client that downloads the feed.

## Pins

| Pin | Kind | Types | Description |
|---|---|---|---|
| Input | input | `Viaducta.Plugins.Http.Types.WebSocketMessage`, `Viaducta.Plugins.TextPlugin.Types.TextRecord`, `Viaducta.Plugins.Http.Types.WebHttpResponse` | The feed XML: `WebSocketMessage.ContentString`, `TextRecord.Value`, or `WebHttpResponse.Body` (falls back to `ByteBody` decoded as UTF-8). |
| Output | output | `Viaducta.Plugins.TextPlugin.Types.RssRecord` | One record per feed item. |

`RssRecord` (`Viaducta.Plugins.TextPlugin.Types.RssRecord`):

| Property | Type | Content |
|---|---|---|
| `Id` | string | Item id (`<guid>` / Atom `<id>`). |
| `Title` | string | Item title. |
| `ArticleLink` | string | First link of the item. |
| `Summary` | string | `<description>` / Atom summary. |
| `Categories` | string | Category names, comma-separated. |
| `PublishDate` | DateTimeOffset | Publication date. |
| `Authors` | string | Author names, comma-separated. |
| `EnclosureUrl` | string | URL of the attached media (RSS `<enclosure>`, Atom `<link rel="enclosure">`); empty if there is none. |

## Configuration

None besides the common settings.

## Behaviour

- For every input the whole feed is parsed and each item is emitted on `Output` in feed order, with the input's metadata.
- Empty feeds emit nothing. Invalid XML or a document that is neither RSS nor Atom raises an error handled by the flow's error handling.
- The plugin has no memory of earlier runs: every item is emitted on every poll. Filter already processed items yourself (e.g. by `Id` in a database or script).

## Notes

- The plugin is marked "keep alive": a flow that contains it keeps running after its start components finish, as for a listener. Stop the flow explicitly if it is meant to run once.
- For Atom feeds authors are taken from `<name>`; RSS feeds usually only give an e-mail in `<author>`, which can end up empty.

## Example

No configuration. Placement:

Timer (`00:00:15:00`) → Http client (`GET https://example.com/feed.xml`) → **RSS/Atom parser** → C# script (filter new items) → Mail client
