# RSS Feed Finder: Discover RSS & Atom Feeds of Any Website (`redfoxscout/rss-feed-finder`) Actor

Find the RSS, Atom and JSON feeds of any list of websites, then read each feed: feed URL, type, title, latest posts with dates and links, and how many posts in the last 30 days. Works from bare domains; tries common feed paths when a site doesn't declare one.

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

## Pricing

from $1.13 / 1,000 websites

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

**Site in, articles out.** Give the Actor any website (a news site, blog, company newsroom, podcast, YouTube channel or Substack) and it finds the site's **RSS, Atom or JSON feed** and returns the latest posts as **one row per article**: title, link, date, author, summary, image and audio file. You don't need to know the feed URL; when a site doesn't declare one, the usual feed paths are tried. Filter posts by **keyword** and **date**, and name a run to get **only the posts it has not returned before**.

**Price: $1.50 per 1,000 websites checked (sites output) or per 1,000 articles returned (articles output).** Sites that fail to load are free. Apify's free plan ($5 monthly credit) covers about 3,300 websites or articles a month.

[![Latest articles from any website, even without an RSS URL: real output preview (Site in, articles out: one row per post, no feed URL needed)](https://raw.githubusercontent.com/TikTop-Data/apify-store-assets/main/images/rss-feed-finder-output.png)](https://apify.com/redfoxscout/rss-feed-finder)

### Questions it answers

- What are the latest articles from this website, even if I don't know its RSS URL?
- Which podcast episodes or YouTube videos does this site publish, with their audio or thumbnail links?
- Which posts did my competitors publish since my last run?
- Which of these sites publish a feed, is it RSS, Atom or JSON, and what language is it in?

### Who uses this

- 📰 **Media monitoring and newsletter teams:** pull the day's articles from a source list into one table.
- 📈 **Content marketers and SEO agencies:** track competitors' new posts and how often they publish.
- 🎙️ **Podcast and video curators:** episode audio links and channel videos as rows.
- 🤖 **Developers and AI agent builders:** clean article rows, with full text on request, for agents and RAG pipelines.

### Why this RSS Feed Finder

- 📰 **Site in, articles out:** no feed URL needed; one row per post.
- 🔎 **Feed discovery:** declared feeds first, then the usual feed paths; RSS, Atom, RSS 1.0 and JSON Feed.
- 🎯 **Keyword and date filters** on title and summary.
- 🔔 **Only new posts** on every scheduled run.
- 🎧 **Podcasts and YouTube channels:** audio files and video feeds come through too.
- 💰 **$1.50 per 1,000 websites or articles**, sites that fail to load are free.

### How to use the RSS Feed Finder

1. Click **Try for free** (a free Apify account is enough).
2. Paste the websites, one per line (e.g. `techcrunch.com`). A section such as `bbc.co.uk/news` or a YouTube channel address works too.
3. Pick the **Output**: **Sites** (one row per website) or **Articles** (one row per post).
4. Optional: add keyword or date filters, then click **Start**.
5. Download as JSON, CSV or Excel, or connect Google Sheets, Slack or a webhook through Apify integrations.

### Input

| Field | Default | What it does |
|---|---|---|
| `urls` | – | Websites or domains to check. The page you name is read for feed links. |
| `outputMode` | `sites` | `sites`: one row per website. `articles`: one row per post. |
| `includeContent` | `false` | Articles only: add each post's full text as plain text (up to 20,000 characters). |
| `includeKeywords` | – | Keep only posts whose title or summary contains one of these words (whole words, any case). Empty = keep all. |
| `excludeKeywords` | – | Drop posts whose title or summary contains one of these words. |
| `publishedAfter` | – | Only posts published on or after this date or time, e.g. `2026-10-01` or `2026-10-01T09:00:00Z`. A time without a timezone is UTC. |
| `monitorName` | – | Name the list to compare with its last run (see below). |
| `maxFeeds` | 3 | Feeds read per site (declared feeds first). Comment feeds are skipped. |
| `maxItemsPerFeed` | 5 | Newest matching posts per feed, 0 to 50. 0 = feed details only (sites output). |
| `maxConcurrency` | 20 | Sites checked in parallel. |
| `requestTimeoutSecs` | 30 | Give up on a site after this long. |

Example:

```json
{ "urls": ["techcrunch.com", "blog.cloudflare.com", "github.blog"], "maxItemsPerFeed": 5 }
```

Articles example:

```json
{ "urls": ["techcrunch.com", "theverge.com"], "outputMode": "articles", "includeKeywords": ["AI"], "maxItemsPerFeed": 5 }
```

### Output

#### Sites output: one row per website

A real row for github.blog (2026-10-08), with two of its ten posts shown:

```json
{
  "inputUrl": "github.blog",
  "url": "https://github.blog/",
  "domain": "github.blog",
  "httpStatus": 200,
  "hasFeed": true,
  "feedCount": 1,
  "feedUrls": ["https://github.blog/feed/"],
  "primaryFeedUrl": "https://github.blog/feed/",
  "primaryFeedType": "rss",
  "primaryFeedTitle": "The GitHub Blog",
  "primaryFeedDescription": "Updates, ideas, and inspiration from GitHub to help developers build and design software.",
  "primaryFeedLanguage": "en-US",
  "primaryFeedGenerator": "https://wordpress.org/?v=7.1.3",
  "primaryFeedImage": "https://github.blog/wp-content/uploads/2019/01/cropped-github-favicon-512.png?fit=32%2C32",
  "latestItemTitle": "Secret protection must scale with software",
  "latestItemLink": "https://github.blog/ai-and-ml/github-copilot/secret-protection-must-scale-with-software/",
  "latestItemAt": "2026-10-07T17:45:34.000Z",
  "itemsLast30Days": 10,
  "feeds": [
    {
      "url": "https://github.blog/feed/",
      "source": "link-tag",
      "type": "rss",
      "title": "The GitHub Blog",
      "homeUrl": "https://github.blog/",
      "description": "Updates, ideas, and inspiration from GitHub to help developers build and design software.",
      "language": "en-US",
      "generator": "https://wordpress.org/?v=7.1.3",
      "image": "https://github.blog/wp-content/uploads/2019/01/cropped-github-favicon-512.png?fit=32%2C32",
      "itemCount": 10,
      "itemsLast30Days": 10,
      "latestItemAt": "2026-10-07T17:45:34.000Z",
      "items": [
        {
          "title": "Secret protection must scale with software",
          "link": "https://github.blog/ai-and-ml/github-copilot/secret-protection-must-scale-with-software/",
          "publishedAt": "2026-10-07T17:45:34.000Z"
        },
        {
          "title": "Building Git infrastructure for agent-scale development",
          "link": "https://github.blog/engineering/architecture-optimization/building-git-infrastructure-for-agent-scale-development/",
          "publishedAt": "2026-10-06T20:57:56.000Z"
        }
      ]
    }
  ],
  "error": null,
  "checkedAt": "2026-10-08T13:03:35.899Z"
}
```

`source` says how the feed was found: `link-tag` (declared in the page head), `page-link` (linked on the page), `common-path` (found at a usual feed address) or `self` (the address you gave is itself the feed).

#### Articles output: one row per post

A real row for the newest GitHub Blog post (2026-10-08), from the same feed:

```json
{
  "title": "Secret protection must scale with software",
  "link": "https://github.blog/ai-and-ml/github-copilot/secret-protection-must-scale-with-software/",
  "publishedAt": "2026-10-07T17:45:34.000Z",
  "updatedAt": null,
  "author": "Erin Havens",
  "categories": ["AI & ML", "Generative AI", "GitHub Copilot", "AI", "Secret Protection", "Secret Scanning"],
  "summary": "Developers aren’t becoming more careless; they’re being outpaced. The tools that let developers create more software should also take on more of the work of protecting it. The post Secret protection must scale with software appeared first on The GitHub Blog.",
  "content": null,
  "imageUrl": null,
  "enclosure": null,
  "guid": "https://github.blog/?p=99310",
  "feedUrl": "https://github.blog/feed/",
  "feedTitle": "The GitHub Blog"
}
```

Each post has `title`, `link`, `publishedAt`, `updatedAt` (only when the feed says the post changed later), `author`, `categories`, `summary` (first 1,000 characters, plain text), `content` (with **Include full post text**), `imageUrl`, `enclosure` (the first attached file: `url`, `type`, `length` in bytes; podcast audio and video), `guid`, `feedUrl` and `feedTitle`. The last columns say which website the post came from (`inputUrl`, `domain`) and whether it loaded (`httpStatus`, `error`).

Export as JSON, CSV or Excel, or connect Google Sheets, Slack or a webhook through Apify integrations.

### Example tasks

Ready-made inputs you can open, change and run:

- [Latest articles from any website, even without an RSS URL](https://apify.com/redfoxscout/rss-feed-finder/examples/latest-articles-any-website)
- [RSS feeds of major news sites with latest headlines](https://apify.com/redfoxscout/rss-feed-finder/examples/news-site-rss-feeds)
- [Tech and developer blog RSS feed finder](https://apify.com/redfoxscout/rss-feed-finder/examples/tech-blog-rss-feeds)
- [New blog post monitor for competitor sites](https://apify.com/redfoxscout/rss-feed-finder/examples/new-blog-post-monitor)

### Feed details in sites output

Each feed row also carries what the feed declares about itself: `description`, `language` (e.g. `en-US`, `fr`), `generator` (e.g. WordPress or Hugo, when named) and `image` (the feed's logo). Not every feed declares all four; missing values are `null`.

### Articles: one row per post

Use **Articles** when you want posts rather than sites. Each post comes from the site's feeds, newest first, up to **Latest posts per feed** from each feed. A post listed in two feeds of the same site appears once. The fields are listed under Output above. Bylines are the names printed on the post; e-mail addresses are removed.

### Filter posts by keyword and date

- **Keep posts with these words** keeps a post when its title or summary contains at least one of the words. **Drop posts with these words** removes posts that contain any of them. Words match whole words only, in any case: `AI` finds "AI tools" but not "said".
- **Published on or after** keeps posts from that date or time onwards. Posts with no date are left out when this is set.
- Filters apply to both outputs. In sites output, the latest post, the date of the latest post and the 30-day count describe the posts that pass the filters; `itemCount` is always the feed's full count.

### Only new posts since the last run

Give the run a **Change alert name** (`monitorName`, e.g. `gov-press-watch`) and put it on an Apify schedule.

- **Articles output:** each run returns only the posts it has not returned before under that name. The Actor remembers up to 500 post IDs (GUID, or the link when there is no GUID) per feed. The first run returns the current posts.
- **Sites output:** each row gets `changeStatus` (`new`, `changed` or `unchanged`) and `changedFields`, compared with the previous run of the same name. A change in `latestItemTitle` or `latestItemLink` means a new post. Turn on **Only new and changed sites** to get just the sites that published something; unchanged sites are still checked and charged as usual.

### Check websites from another Actor (Google Maps leads, lead lists)

Have a list of sites from another Actor? Pick its dataset under **Websites from another Actor**. This Actor reads the `website` field (or the field you name, e.g. `url` or `domain`) and checks every site.

```json
{ "datasetId": "{{resource.defaultDatasetId}}", "datasetUrlField": "website" }
```

### Notes

- Reads the page you name and the feeds it points to. It doesn't crawl the whole site, so a feed linked only from a deeper blog page may need that page's URL.
- The article text is what the feed carries. The Actor does not open each article page; turn on **Include full post text** for the feed's own full text.
- Sites that block automated visits (for example with HTTP 403) return an error row, which is free.
- No JavaScript rendering: feeds added to the page only by scripts won't be found unless they sit at a usual feed address.

### What this Actor does not do

It does not log in, use cookies or member accounts, solve CAPTCHAs, or open each article page. It does not collect commenters' names or readers' contact details, and it skips comment feeds. Bylines are the public names on published posts, with e-mail addresses removed.

### How much does it cost?

- **Website checked (sites output):** $0.0015 per site that loads, with or without a feed ($1.50 per 1,000).
- **Article returned (articles output):** $0.0015 per article row ($1.50 per 1,000).
- **Actor start:** $0.00005 per GB of memory (default 1 GB = $0.00005 per run).
- Sites that fail to load and error rows: free.

| Rows (sites or articles) | Cost |
|---|---|
| 100 | about $0.15 |
| 1,000 | about $1.50 |
| 10,000 | about $15 |

Example: 10 podcasts with 5 latest episodes each is 50 articles, about $0.08. Apify's free plan includes $5 of credit every month, enough for about 3,300 rows. Paid Apify plans get Store discounts of up to 25%. You can set a maximum cost per run; the Actor stops cleanly when it's reached.

### FAQ

**Is this legal?** Feeds are published so that readers and apps can fetch them. The Actor loads each page you list once, like a browser, plus the feeds it finds. It collects no personal data: bylines are the names printed on published posts, with e-mail addresses removed, and commenters are never collected.

**A site says "no feed" but I know it has one.** It is probably linked only from a blog section. Enter that page (e.g. `example.com/blog`) instead of the home page.

**Does it return the full article text?** Only if the feed carries it: turn on **Include full post text** in Articles output. Otherwise you get the feed's summary and the link to the full post.

**How do I get only the new posts each day?** Give the run a **Change alert name** and schedule it. Articles output then returns only the posts that are new since the last run.

### Related Actors

- [SEO Meta Tag & Schema Checker](https://apify.com/redfoxscout/seo-meta-checker): titles, descriptions, H1s and structured data.
- [Website Tech Stack Detector](https://apify.com/redfoxscout/tech-stack-detector): what a site is built with.
- [Bulk URL Status & SSL Checker](https://apify.com/redfoxscout/url-status-ssl-checker): status codes, redirects and SSL expiry.

# Actor input Schema

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

Websites or domains, one per line (e.g. techcrunch.com). The home page is checked for feeds. Or use "Websites from another Actor" below.

## `startUrls` (type: `array`):

Same as the list above, in Apify's standard start-URL format (handy when another tool or Actor passes startUrls).

## `datasetId` (type: `string`):

Check the websites in another Actor run's results, e.g. Google Maps Scraper or any lead list. Pick the dataset here, or in an Actor-to-Actor integration set it to {{resource.defaultDatasetId}}. Its websites are added to the list above.

## `datasetUrlField` (type: `string`):

The dataset field that holds the website or URL, e.g. website (Google Maps Scraper), url or domain. Dot paths like contact.website work. If it is empty, website, url and domain are tried.

## `maxDatasetItems` (type: `integer`):

Read at most this many rows from that dataset.

## `monitorName` (type: `string`):

Name this list (e.g. "clients-weekly") to compare each run with the previous run of the same name. Every row then gets changeStatus (new, changed or unchanged) and changedFields. Best on an Apify schedule.

## `onlyChanges` (type: `boolean`):

Needs a change alert name. Unchanged sites are still checked and charged as usual, but left out of the results, so each run's dataset is your change report.

## `outputMode` (type: `string`):

Sites returns one row per website with its feed details and latest posts. Articles returns one row per post, ready for a feed reader, newsletter or AI agent; articles are charged per row.

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

Articles output only: add each post's full text as plain text (up to 20,000 characters). Off keeps rows small.

## `includeKeywords` (type: `array`):

Keep only posts whose title or summary contains at least one of these words (case-insensitive, whole words). Empty = keep all posts. Applies to both outputs.

## `excludeKeywords` (type: `array`):

Drop posts whose title or summary contains any of these words (case-insensitive, whole words). Empty = drop nothing. Applies to both outputs.

## `publishedAfter` (type: `string`):

Only posts published on or after this date or time, e.g. 2026-10-01 or 2026-10-01T09:00:00Z. A time without a timezone is UTC. Posts with no date are left out when this is set.

## `maxFeeds` (type: `integer`):

Read at most this many feeds per website (declared feeds first). Comment feeds are skipped.

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

How many of the newest posts that pass the filters to return for each feed (sites output: title, link, date; articles output: one row each). 0 = feed details only.

## `maxConcurrency` (type: `integer`):

How many sites to check at once.

## `requestTimeoutSecs` (type: `integer`):

Give up on a site after this long.

## `proxyConfiguration` (type: `object`):

Off by default. Turn on if some sites block or rate-limit the checks.

## Actor input object example

```json
{
  "urls": [
    "techcrunch.com",
    "blog.cloudflare.com",
    "github.blog"
  ],
  "datasetUrlField": "website",
  "maxDatasetItems": 10000,
  "onlyChanges": false,
  "outputMode": "sites",
  "includeContent": false,
  "maxFeeds": 3,
  "maxItemsPerFeed": 5,
  "maxConcurrency": 20,
  "requestTimeoutSecs": 30,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (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": [
        "techcrunch.com",
        "blog.cloudflare.com",
        "github.blog"
    ]
};

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

# Run the Actor and wait for it to finish
run = client.actor("redfoxscout/rss-feed-finder").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": [
    "techcrunch.com",
    "blog.cloudflare.com",
    "github.blog"
  ]
}' |
apify call redfoxscout/rss-feed-finder --silent --output-dataset

```

## MCP server setup

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

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/OPf75AmTAVynoiQb6/builds/Q4zMfQ6qFIygSGHV2/openapi.json
