# RSS Feed Finder & Parser (`ninhothedev/rss-feed-finder`) Actor

$0.5/1K 🔥 RSS feed finder & parser! Discover a site's RSS/Atom feeds & pull recent items. No key. JSON, CSV, Excel or API in seconds. Aggregate content & monitor news ⚡

- **URL**: https://apify.com/ninhothedev/rss-feed-finder.md
- **Developed by:** [ninhothedev](https://apify.com/ninhothedev) (community)
- **Categories:** Developer tools, News
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## RSS Feed Finder & Parser 📡

**Discover any website's RSS/Atom feeds and pull recent items — clean JSON, no API key.**

Point it at a blog or news homepage and it finds the feeds automatically. Point it at a feed URL and it parses the entries straight away. Built for **content aggregation, news monitoring, competitive intelligence, and RAG pipelines** that need fresh, structured article data.

- ✅ **Auto feed discovery** — reads `<link rel="alternate">` tags *and* probes common feed paths (`/feed`, `/rss.xml`, `/atom.xml`, `/index.xml`, `/feeds/posts/default`, `/?feed=rss2`, …)
- ✅ **RSS + Atom** parsing via the battle-tested `feedparser`
- ✅ **Clean output** — HTML stripped, dates normalized to ISO 8601, categories as a list
- ✅ **No login, no key, no proxy required** — pure HTTP, datacenter-friendly (operates on the URLs you supply)
- ✅ **Cheap** — pay-per-result, roughly **$0.50 per 1,000 items**

---

### What you get

One dataset item per feed entry:

| Field | Description |
|-------|-------------|
| `site` | The site URL you supplied (discover mode) |
| `feed_url` | The feed the entry came from |
| `feed_title` | Title of the feed / channel |
| `title` | Entry title |
| `link` | Canonical link to the article |
| `published` | Publish date, normalized to ISO 8601 (`YYYY-MM-DDTHH:MM:SSZ`) |
| `author` | Entry author (best-effort) |
| `summary` | Description/content with HTML stripped, capped at 3,000 chars |
| `categories` | List of tags/categories |
| `guid` | Feed-provided unique id |
| `source` | Always `rss-feed-finder` |
| `scraped_at` | When the run fetched the item (ISO 8601) |

---

### Input

| Field | Type | Default | Notes |
|-------|------|---------|-------|
| `mode` | select | `discover` | `discover` (site URLs → find feeds → parse) or `parse` (feed URLs → parse) |
| `urls` | array | — | Website/blog URLs to scan (discover mode) |
| `feedUrls` | array | — | Direct feed URLs to parse (parse mode) |
| `maxItemsPerFeed` | integer | `50` | Cap per individual feed |
| `maxItems` | integer | `200` | Total cap per run (max 2,000) |

#### Example — discover mode

```json
{
  "mode": "discover",
  "urls": ["https://blog.cloudflare.com", "https://techcrunch.com"],
  "maxItemsPerFeed": 50,
  "maxItems": 200
}
````

#### Example — parse mode

```json
{
  "mode": "parse",
  "feedUrls": ["https://blog.cloudflare.com/rss/"],
  "maxItemsPerFeed": 100
}
```

#### Example output item

```json
{
  "site": "https://blog.cloudflare.com",
  "feed_url": "https://blog.cloudflare.com/rss/",
  "feed_title": "The Cloudflare Blog",
  "title": "Cloudflare Internal DNS is now generally available",
  "link": "https://blog.cloudflare.com/internal-dns/",
  "published": "2026-07-20T20:59:31Z",
  "author": "Hannes Gerhart",
  "summary": "Cloudflare Internal DNS brings authoritative and recursive DNS for private networks…",
  "categories": ["DNS", "Networking", "Product News", "Zero Trust"],
  "guid": "https://blog.cloudflare.com/internal-dns/",
  "source": "rss-feed-finder",
  "scraped_at": "2026-07-21T13:04:00Z"
}
```

***

### Use cases

- **Content aggregation** — build a multi-source reading feed or newsletter digest
- **News monitoring** — track a set of blogs/newsrooms and alert on new posts
- **RAG feeds** — keep a vector store fresh with the latest articles from your sources
- **Competitive intelligence** — watch competitors' blogs and changelogs for updates

### Tips

- In **discover** mode, if a site exposes no `<link rel="alternate">` tag, the actor still probes common feed paths, so most WordPress/Ghost/Substack/Blogger sites just work.
- Feed URLs are also accepted in the `urls` field in parse mode (they'll be parsed directly).
- Schedule the actor to run on an interval and connect the dataset to your database, Zapier/Make, or a webhook.

### Related actors by the same author

- [Newsletter Scraper](https://apify.com/ninhothedev/newsletter-scraper)
- [Google News Scraper](https://apify.com/ninhothedev/google-news-scraper)
- [Smart Article Extractor](https://apify.com/ninhothedev/smart-article-extractor)
- [Medium Scraper](https://apify.com/ninhothedev/medium-scraper)

### Keywords

rss, atom, rss feed finder, rss parser, feed discovery, news monitoring, content aggregation, rag, article feed, blog feed, rss to json, feed reader, syndication

# Actor input Schema

## `mode` (type: `string`):

How to run the actor. 'discover' takes website URLs, finds their RSS/Atom feeds, then parses recent entries. 'parse' takes direct feed URLs and parses them straight away.

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

Website / blog homepage URLs to scan for RSS/Atom feeds. Used when mode = 'discover'. The actor reads each page's <link rel=alternate> tags and probes common feed paths (/feed, /rss.xml, /atom.xml, ...).

## `feedUrls` (type: `array`):

Direct RSS/Atom feed URLs to parse. Used when mode = 'parse'. Each feed's recent entries are returned as dataset items.

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

Maximum number of entries to return from each individual feed.

## `maxItems` (type: `integer`):

Hard cap on the total number of entries pushed across all feeds in this run.

## Actor input object example

```json
{
  "mode": "discover",
  "urls": [
    "https://blog.cloudflare.com",
    "https://techcrunch.com"
  ],
  "feedUrls": [
    "https://blog.cloudflare.com/rss/"
  ],
  "maxItemsPerFeed": 50,
  "maxItems": 200
}
```

# 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://blog.cloudflare.com",
        "https://techcrunch.com"
    ],
    "feedUrls": [
        "https://blog.cloudflare.com/rss/"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("ninhothedev/rss-feed-finder").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://blog.cloudflare.com",
        "https://techcrunch.com",
    ],
    "feedUrls": ["https://blog.cloudflare.com/rss/"],
}

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

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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://blog.cloudflare.com",
    "https://techcrunch.com"
  ],
  "feedUrls": [
    "https://blog.cloudflare.com/rss/"
  ]
}' |
apify call ninhothedev/rss-feed-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=ninhothedev/rss-feed-finder",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "RSS Feed Finder & Parser",
        "description": "$0.5/1K 🔥 RSS feed finder & parser! Discover a site's RSS/Atom feeds & pull recent items. No key. JSON, CSV, Excel or API in seconds. Aggregate content & monitor news ⚡",
        "version": "1.0",
        "x-build-id": "f23lkdfO6I53BMYRE"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/ninhothedev~rss-feed-finder/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-ninhothedev-rss-feed-finder",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/ninhothedev~rss-feed-finder/runs": {
            "post": {
                "operationId": "runs-sync-ninhothedev-rss-feed-finder",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/ninhothedev~rss-feed-finder/run-sync": {
            "post": {
                "operationId": "run-sync-ninhothedev-rss-feed-finder",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "discover",
                            "parse"
                        ],
                        "type": "string",
                        "description": "How to run the actor. 'discover' takes website URLs, finds their RSS/Atom feeds, then parses recent entries. 'parse' takes direct feed URLs and parses them straight away.",
                        "default": "discover"
                    },
                    "urls": {
                        "title": "Site URLs (discover mode)",
                        "type": "array",
                        "description": "Website / blog homepage URLs to scan for RSS/Atom feeds. Used when mode = 'discover'. The actor reads each page's <link rel=alternate> tags and probes common feed paths (/feed, /rss.xml, /atom.xml, ...).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "feedUrls": {
                        "title": "Feed URLs (parse mode)",
                        "type": "array",
                        "description": "Direct RSS/Atom feed URLs to parse. Used when mode = 'parse'. Each feed's recent entries are returned as dataset items.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxItemsPerFeed": {
                        "title": "Max items per feed",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum number of entries to return from each individual feed.",
                        "default": 50
                    },
                    "maxItems": {
                        "title": "Max items (total)",
                        "minimum": 1,
                        "maximum": 2000,
                        "type": "integer",
                        "description": "Hard cap on the total number of entries pushed across all feeds in this run.",
                        "default": 200
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
