# RSS to JSON Converter: RSS, Atom & Feed Parser (`veenkes/veenkes-rss-feed-reader`) Actor

Convert any RSS, Atom, RDF or JSON Feed to clean JSON, or paste a website URL and the feed is auto-discovered. Titles, links, authors, dates, categories, images, full content, podcast enclosures and durations in one schema. Fast, no login.

- **URL**: https://apify.com/veenkes/veenkes-rss-feed-reader.md
- **Developed by:** [veenkes](https://apify.com/veenkes) (community)
- **Categories:** News, Automation, AI
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.60 / 1,000 feed item saveds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## RSS to JSON Converter: RSS, Atom & Feed Parser

An **RSS to JSON converter** and **feed parser** for RSS, Atom, RDF and JSON Feed. Paste a feed URL, or just a website URL and the Actor will **auto-discover** the feed. You get titles, links, authors, dates, categories, images, full content, and podcast enclosures with durations, in one clean schema.

Fast, cheap, no login. Built for news monitoring, podcast pipelines and AI agents that need structured items from the open web.

### Why use this RSS feed reader?

- 🔍 **Feed auto-discovery:** enter `techcrunch.com` or `simonwillison.net` and it finds `/feed/` or `/atom/everything/`, with a fallback to common feed paths.
- 📚 **Every format:** RSS 2.0, RSS 1.0/RDF, Atom (including YouTube channel feeds) and JSON Feed, normalized into **one schema**.
- 📝 **Full content** from `content:encoded`, Atom `content` and JSON Feed. Ideal for **AI / RAG pipelines** and newsletters.
- 🎙️ **Podcast-ready:** enclosure URLs (MP3), MIME types, file sizes and episode durations in seconds.
- 🗓️ **Posted since + keyword filters:** schedule it and pick up only new, relevant posts.
- 🧹 **De-duplication** across feeds, with items sorted newest first.
- 💸 **From $0.60 per 1,000 items** and no expensive start fee.

### Who is it for?

- **AI and automation builders:** feed news, blogs and podcasts into LLMs, vector databases, n8n, Make or Zapier.
- **Media monitoring and newsletters:** aggregate dozens of sources into one dataset.
- **Marketers and SEO teams:** watch competitors' blogs and changelogs.
- **Researchers and analysts:** build datasets of posts, articles and podcast episodes.
- **Developers:** a reliable feed-parsing API without maintaining parsers for every feed dialect.

### What data does it extract?

| Field | Example |
|---|---|
| `title`, `link`, `guid` | item title, URL and ID |
| `author` | `Amanda Silberling` |
| `publishedAt`, `updatedAt` | ISO dates |
| `categories` | `["AI", "Startups"]` |
| `summary` | short description (plain text) |
| `contentText`, `contentHtml` | full content when the feed includes it |
| `image` | item image (media:content, enclosure or first image) |
| `enclosures`, `durationSeconds` | podcast audio `{url, type, length}`, `1480` |
| `feedTitle`, `feedUrl`, `feedLink`, `feedFormat`, `feedLanguage`, `feedImage` | feed metadata |
| `inputUrl` | the URL you entered |

### How to use it

1. Click **Try for free**.
2. Add **feed URLs** or **website URLs** (one per line). Examples: `https://feeds.bbci.co.uk/news/technology/rss.xml`, `techcrunch.com`, `https://www.youtube.com/feeds/videos.xml?channel_id=…`, a podcast RSS URL.
3. Optionally set **Max items per feed**, **Posted since** and **Keywords**.
4. Click **Start** and export to JSON, CSV, Excel or Google Sheets, or schedule it hourly or daily.

### Run it from the API

You can start this Actor from any language with the official [Apify API client](https://docs.apify.com/api/client/python). Replace `YOUR_APIFY_TOKEN` with a token from [Apify Console > Integrations](https://console.apify.com/account/integrations). Never put the token in a public repo.

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("veenkes/veenkes-rss-feed-reader").call(run_input={
    "urls": [
        "https://feeds.bbci.co.uk/news/technology/rss.xml"
    ],
    "maxItemsPerFeed": 50,
    "includeContent": True
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

#### JavaScript

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('veenkes/veenkes-rss-feed-reader').call({
    "urls": [
        "https://feeds.bbci.co.uk/news/technology/rss.xml"
    ],
    "maxItemsPerFeed": 50,
    "includeContent": true
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

Schedule the Actor, send results to a webhook, or connect it in Zapier, Make or n8n. Store page: <https://apify.com/veenkes/veenkes-rss-feed-reader>.

### Use from AI agents (Apify MCP)

AI agents can run this Actor through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp). Connect Claude, Cursor or any MCP-compatible client to Apify, then ask the agent to call `veenkes/veenkes-rss-feed-reader` with an input like the example above. The agent discovers the tool from the Actor title and description.

### How much does it cost?

Pay per result. You pay only for items saved to the dataset, and full content is included.

| Apify plan tier | Price per 1,000 items |
|---|---|
| FREE | $1.00 |
| BRONZE | $0.80 |
| SILVER | $0.70 |
| GOLD and above | $0.60 |

There is also a $0.00005 start fee per run. Checking 50 blogs every day for new posts (about 100 new items) costs about **$0.08 per day** at the BRONZE tier.

### Input example

```json
{
    "urls": [
        "https://feeds.bbci.co.uk/news/technology/rss.xml",
        "techcrunch.com",
        "https://simonwillison.net",
        "https://feeds.simplecast.com/54nAGcIl"
    ],
    "maxItemsPerFeed": 50,
    "postedSince": "2026-11-01",
    "keywords": ["ai", "nvidia"],
    "includeContent": true,
    "discoverAllFeeds": false,
    "dedupe": true
}
```

### Output example

```json
{
    "title": "The rise and fall of Jensen Huang - how the tech superstar became mired in scandal",
    "link": "https://www.bbc.co.uk/news/articles/cmze750zg0jeo?at_medium=RSS&at_campaign=rss",
    "guid": "https://www.bbc.co.uk/news/articles/cmze750zg0jeo#0",
    "author": null,
    "publishedAt": "2026-11-12T17:11:48.000Z",
    "categories": [],
    "summary": "Within days, Huang's status as a seemingly untouchable figure leading the global tech race has crumbled.",
    "image": "https://ichef.bbci.co.uk/ace/standard/240/cpsprodpb/38db/live/e8339120-deb0-11f1-93e1-3b657b665bcf.jpg",
    "enclosures": [],
    "durationSeconds": null,
    "feedTitle": "BBC News",
    "feedUrl": "https://feeds.bbci.co.uk/news/technology/rss.xml",
    "feedLink": "https://www.bbc.co.uk/news/technology",
    "feedFormat": "rss",
    "feedLanguage": "en-gb",
    "inputUrl": "https://feeds.bbci.co.uk/news/technology/rss.xml",
    "contentText": "Within days, Huang's status as a seemingly untouchable figure…",
    "scrapedAt": "2026-11-12T21:38:26.614Z"
}
```

The key-value store record `SUMMARY` shows, for each input URL, the discovered feed(s), items found and saved, or `NO_FEED_FOUND`.

### Tips

- **Only new posts:** schedule daily with *Posted since* set to yesterday, or keep a list of seen `guid`s downstream.
- **YouTube channels:** use `https://www.youtube.com/feeds/videos.xml?channel_id=CHANNEL_ID`.
- **Substack, Medium, WordPress, Ghost, Blogger:** just paste the site URL. Their feeds are discovered automatically.
- **Full article text** is available when the publisher puts it in the feed. Many news sites only include a summary.

### Why this one?

It accepts a raw website URL, not only a feed link, and normalizes RSS, Atom, RDF and JSON Feed into the same fields, including podcast audio. That makes it a practical drop-in for automations and agents that should not care which feed format a site uses.

### FAQ

**Is this legal?**
RSS and Atom feeds are published so that readers and aggregators can consume them. The Actor reads only these public feeds. Respect publishers' copyright and terms when you republish content.

**What if a site has no feed?**
The URL is marked `NO_FEED_FOUND` in the summary, and you are not charged for it.

***

*Works with any standards-compliant feed. All trademarks belong to their owners.*

### Integrations

- **Apify API** — Python and JavaScript clients (examples above), plus a REST API.
- **AI agents** — run it via the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp).
- **Automation tools** — Zapier, Make, n8n, or an Apify webhook when a run finishes.
- **Export** — download the dataset as JSON, CSV, Excel or XML, or load it from a scheduled run.

[Open the Actor in Apify Store](https://apify.com/veenkes/veenkes-rss-feed-reader).

# Actor input Schema

## `urls` (type: `array`):

Feed URLs (RSS, Atom, RDF or JSON Feed) or website URLs. For a website URL, the Actor auto-discovers the feed from the page and common paths.

## `maxItemsPerFeed` (type: `integer`):

Maximum items to save from each feed (newest first).

## `postedSince` (type: `string`):

Only items published on or after this date (YYYY-MM-DD). Great for scheduled runs that only pick up new posts.

## `keywords` (type: `array`):

Keep only items whose title, categories or summary contain ANY of these words (case-insensitive).

## `includeContent` (type: `boolean`):

Save the item's full content (HTML and plain text) when the feed provides it (content:encoded, Atom content, JSON Feed content).

## `discoverAllFeeds` (type: `boolean`):

If a website advertises several feeds (e.g. per category), read all of them instead of only the main one.

## `dedupe` (type: `boolean`):

Save each item (by link / guid) only once across all feeds.

## Actor input object example

```json
{
  "urls": [
    "https://feeds.bbci.co.uk/news/technology/rss.xml",
    "https://simonwillison.net"
  ],
  "maxItemsPerFeed": 10,
  "includeContent": true,
  "discoverAllFeeds": false,
  "dedupe": true
}
```

# Actor output Schema

## `items` (type: `string`):

No description

## `summary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "urls": [
        "https://feeds.bbci.co.uk/news/technology/rss.xml",
        "https://simonwillison.net"
    ],
    "maxItemsPerFeed": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("veenkes/veenkes-rss-feed-reader").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "urls": [
        "https://feeds.bbci.co.uk/news/technology/rss.xml",
        "https://simonwillison.net",
    ],
    "maxItemsPerFeed": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("veenkes/veenkes-rss-feed-reader").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "urls": [
    "https://feeds.bbci.co.uk/news/technology/rss.xml",
    "https://simonwillison.net"
  ],
  "maxItemsPerFeed": 10
}' |
apify call veenkes/veenkes-rss-feed-reader --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,veenkes/veenkes-rss-feed-reader"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/BTEe0HeolJf9bI8OG/builds/TmXU1SBMEzI1rfmUg/openapi.json
