# Open RSS

> Get the newest posts from any website, even one that publishes no feed of its own. Type the address the way you'd type it in a browser - a news site, a blog, a YouTube channel, a subreddit, a Bluesky account, a GitHub project's releases - and Open RSS finds the feed. Read one website or merge several into a single digest, keep only what's new since the last run, and get every post the same way: headline, link, author, date, a plain-text summary and a picture. Open RSS is a nonprofit and the service is free, with no account and no API key.

App · Feeds & Read-Later · 4 actions. Web page: https://docs.lodol.com/docs/integrations/open-rss

## Actions

### Find a website's feed

Check whether Open RSS has a feed for a website, and get its address to paste into a reader app - along with the website's name, icon, when it last published, and anything Open RSS wants you to know about it, such as that the website already publishes a feed of its own. This never stops a run: a website with no feed yet comes back as an answer, not an error, so a workflow can branch on it. And asking is not wasted - Open RSS adds a website it has no feed for to its backlog to build one.

**Inputs**

- Website (`website`, text, required): The website you want posts from, exactly as you'd type it in a browser - a whole site ('theverge.com'), or one page of it ('reddit.com/r/rss', 'youtube.com/@veritasium'). Open RSS finds the feed; you never need to hunt for a feed address.

**Outputs**

- `already_has_its_own_feed` (true/false): Whether the website publishes a feed of its own. Reading it through Open RSS still repairs and speeds it up.
- `description` (text): How the website describes itself.
- `feed_url` (text): The Open RSS address of this feed - what to paste into a reader app, or to subscribe a teammate to.
- `found` (true/false): Whether there is a feed to read right now. Branch on this.
- `icon_url` (text): The website's icon, when it has one.
- `language` (text): The language it publishes in, when it says.
- `newest_post` (object): The most recent post, for a quick look at what the feed carries. Nothing when it's empty.
- `notices` (list): What Open RSS wants you to know about this feed.
- `own_feed_url` (text): That feed's address, when the website has one.
- `post_count` (number): How many posts the feed holds right now.
- `recheck_after` (text): When it's worth asking again, as a UTC timestamp, when Open RSS said. Nothing when there's already a feed.
- `status` (text): 'available' - there's a feed, and 'feed url' is its address. 'no_feed_yet' - there isn't one yet, and asking has added the website to Open RSS's backlog. 'website_unavailable' - the website itself is having trouble right now, so try again shortly.
- `summary` (text): The result as a sentence, ready to put in a message.
- `title` (text): The website's name.
- `updated` (text): When the feed last changed, as a UTC timestamp.
- `website` (text): The website, as it was asked for.
- `website_url` (text): A link to the website itself.

**Example output**

```json
{
  "already_has_its_own_feed": true,
  "description": "",
  "feed_url": "https://openrss.org/feed/www.theverge.com",
  "found": true,
  "icon_url": "https://platform.theverge.com/wp-content/uploads/verge-rss.png",
  "language": "",
  "newest_post": {
    "published": "2026-09-13T19:41:48Z",
    "title": "Trump and Mike Johnson think the AI industry is overreacting",
    "url": "https://www.theverge.com/ai/994441/trump-mike-johnson-ai-overreacting"
  },
  "notices": [
    {
      "links": [
        "https://www.theverge.com/rss/index.xml"
      ],
      "message": "This feed already exists at https://www.theverge.com/rss/index.xml. But accessing it through openrss.org allows our systems to detect and resolve any possible issues, improve its performance, and increase its reliability over time.",
      "type": "info"
    }
  ],
  "own_feed_url": "https://www.theverge.com/rss/index.xml",
  "post_count": 10,
  "recheck_after": null,
  "status": "available",
  "summary": "Open RSS has a feed for The Verge: https://openrss.org/feed/www.theverge.com (10 posts). The Verge already publishes its own feed at https://www.theverge.com/rss/index.xml; reading it through Open RSS still repairs and speeds it up.",
  "title": "The Verge",
  "updated": "2026-09-13T20:54:00Z",
  "website": "theverge.com",
  "website_url": "https://www.theverge.com"
}
```

### Get latest posts

Get the newest posts from any website - a news site, a blog, a YouTube channel, a subreddit, a Bluesky account, a GitHub project's releases. Type the address the way you'd type it in a browser; Open RSS finds the feed, whether or not the website publishes one. Every post comes back the same way - headline, link, author, when it went up, a plain-text summary and a picture - so nothing downstream has to care what kind of website it came from. Ask for only what's new since a moment, or only posts mentioning a word.

**Inputs**

- Website (`website`, text, required): The website you want posts from, exactly as you'd type it in a browser - a whole site ('theverge.com'), or one page of it ('reddit.com/r/rss', 'youtube.com/@veritasium'). Open RSS finds the feed; you never need to hunt for a feed address.
- How many posts (`limit`, number): Optional. How many of the newest posts to return. A feed holds only the most recent posts - usually about ten - so this trims what's there rather than asking for more; 'total in feed' says how many there were. Defaults to 10. From 1 to 100. Default: `10`.
- Published after (`published_after`, date and time): Optional. Only posts published after this moment - which is how a workflow that runs on a schedule picks up just what's new. Pick a date and time, or pass the 'newest published' from an earlier run straight back in. A post whose feed gave it no date can't be shown to be newer, so it's left out and counted.
- Only posts mentioning (`contains`, text): Optional. Only posts whose title, author, summary or body mention this word or phrase. Capitals are ignored.
- Include the full post (`include_content`, true/false): Include each post's whole body, as plain text and as HTML, on top of the summary every post already carries. Turn this on to summarise or translate the posts in a later step; leave it off to keep the result small. Default: `false`.

**Outputs**

- `count` (number): How many posts came back.
- `feed` (object): The feed the posts came from.
- `newest_published` (text): When the newest of them went up, as a UTC timestamp. Pass it to 'Published after' next run to pick up only what's new.
- `oldest_published` (text): When the oldest of them went up.
- `posts` (list): The posts, newest first.
- `skipped_without_a_date` (number): How many posts were left out because their website published no date for them and so they couldn't be judged against 'Published after'. Zero unless that filter was used.
- `summary` (text): The result as a sentence, ready to put in a message.
- `total_in_feed` (number): How many posts the feed held, before the limit and any filters. A feed carries only the most recent posts, so this is the whole of what Open RSS can offer for this website right now.
- `website` (text): The website, as it was asked for.

**Example output**

```json
{
  "count": 1,
  "feed": {
    "description": "",
    "feed_url": "https://openrss.org/feed/www.theverge.com",
    "icon_url": "https://platform.theverge.com/wp-content/uploads/verge-rss.png",
    "language": "",
    "notices": [
      {
        "links": [
          "https://www.theverge.com/rss/index.xml"
        ],
        "message": "This feed already exists at https://www.theverge.com/rss/index.xml. But accessing it through openrss.org allows our systems to detect and resolve any possible issues, improve its performance, and increase its reliability over time.",
        "type": "info"
      }
    ],
    "title": "The Verge",
    "updated": "2026-09-13T20:54:00Z",
    "website_url": "https://www.theverge.com"
  },
  "newest_published": "2026-09-13T19:41:48Z",
  "oldest_published": "2026-09-13T19:41:48Z",
  "posts": [
    {
      "attachment": null,
      "author": "Terrence O'Brien",
      "categories": [
        "AI",
        "Policy",
        "Politics"
      ],
      "image_url": "https://platform.theverge.com/wp-content/uploads/stk466.jpg",
      "published": "2026-09-13T19:41:48Z",
      "published_display": "13 Sep 2026 at 19:41 UTC",
      "summary": "Yesterday, Anthropic CEO Dario Amodei published a lengthy open letter saying it was time to \u201cpace the frontier\u201d and slow down AI development.",
      "title": "Trump and Mike Johnson think the AI industry is overreacting",
      "url": "https://www.theverge.com/ai/994441/trump-mike-johnson-ai-overreacting"
    }
  ],
  "skipped_without_a_date": 0,
  "summary": "1 post from The Verge, the newest of the 10 in its feed; newest 13 Sep 2026 at 19:41 UTC.",
  "total_in_feed": 10,
  "website": "theverge.com"
}
```

### Get latest posts from several websites

Read several websites at once and get one list of posts, newest first, each tagged with where it came from - a daily digest, a competitor watch, a reading list, in one step instead of a loop. A website Open RSS has no feed for yet doesn't stop the run: it's reported beside the posts, so one dead source doesn't cost you the others. Only if every website fails does the step stop.

**Inputs**

- Websites (`websites`, list, required): The websites to read, one per entry, as you'd type them in a browser. Up to 10 at a time. A website Open RSS has no feed for doesn't stop the step - it's reported beside the posts.
- How many posts per website (`limit_per_website`, number): Optional. How many of each website's newest posts to include, so one busy site doesn't crowd out the rest. Defaults to 5. From 1 to 100. Default: `5`.
- Published after (`published_after`, date and time): Optional. Only posts published after this moment - which is how a workflow that runs on a schedule picks up just what's new. Pick a date and time, or pass the 'newest published' from an earlier run straight back in. A post whose feed gave it no date can't be shown to be newer, so it's left out and counted.
- Only posts mentioning (`contains`, text): Optional. Only posts whose title, author, summary or body mention this word or phrase. Capitals are ignored.
- Include the full post (`include_content`, true/false): Include each post's whole body, as plain text and as HTML, on top of the summary every post already carries. Turn this on to summarise or translate the posts in a later step; leave it off to keep the result small. Default: `false`.

**Outputs**

- `count` (number): How many posts came back.
- `newest_published` (text): When the newest of them went up, as a UTC timestamp. Pass it to 'Published after' next run to pick up only what's new.
- `oldest_published` (text): When the oldest of them went up.
- `posts` (list): The posts, newest first.
- `problems` (list): The websites that couldn't be read, and why. Empty when every one of them answered.
- `skipped_without_a_date` (number): How many posts were left out because their website published no date for them and so they couldn't be judged against 'Published after'. Zero unless that filter was used.
- `sources` (list): One row per website asked for, in the order they were given, whether or not it could be read.
- `summary` (text): The result as a sentence, ready to put in a message.
- `websites_asked_for` (number): How many were asked for.
- `websites_read` (number): How many websites answered.

**Example output**

```json
{
  "count": 2,
  "newest_published": "2026-09-13T19:41:48Z",
  "oldest_published": "2026-08-28T22:14:07Z",
  "posts": [
    {
      "attachment": null,
      "author": "Terrence O'Brien",
      "categories": [
        "AI",
        "Policy",
        "Politics"
      ],
      "feed_title": "The Verge",
      "image_url": "https://platform.theverge.com/wp-content/uploads/stk466.jpg",
      "published": "2026-09-13T19:41:48Z",
      "published_display": "13 Sep 2026 at 19:41 UTC",
      "summary": "Yesterday, Anthropic CEO Dario Amodei published a lengthy open letter saying it was time to \u201cpace the frontier\u201d and slow down AI development.",
      "title": "Trump and Mike Johnson think the AI industry is overreacting",
      "url": "https://www.theverge.com/ai/994441/trump-mike-johnson-ai-overreacting",
      "website": "theverge.com"
    },
    {
      "attachment": null,
      "author": "Jon Brodkin",
      "categories": [
        "Policy"
      ],
      "feed_title": "Ars Technica",
      "image_url": "https://cdn.arstechnica.net/kalshi.jpg",
      "published": "2026-08-28T22:14:07Z",
      "published_display": "28 Aug 2026 at 22:14 UTC",
      "summary": "A federal appeals court ruled against the prediction market.",
      "title": "Court rules Kalshi sports bets aren't \u201cswaps\u201d",
      "url": "https://arstechnica.com/tech-policy/2026/08/kalshi-ruling/",
      "website": "arstechnica.com"
    }
  ],
  "problems": [
    {
      "feed_url": "https://openrss.org/feed/example.com/blog",
      "has_no_feed_yet": true,
      "reason": "Open RSS has no feed for example.com/blog yet. Asking for it has added it to their backlog, so try again later.",
      "website": "example.com/blog"
    }
  ],
  "skipped_without_a_date": 0,
  "sources": [
    {
      "count": 1,
      "feed_url": "https://openrss.org/feed/www.theverge.com",
      "newest_published": "2026-09-13T19:41:48Z",
      "read": true,
      "title": "The Verge",
      "total_in_feed": 10,
      "website": "theverge.com"
    },
    {
      "count": 1,
      "feed_url": "https://openrss.org/feed/arstechnica.com",
      "newest_published": "2026-08-28T22:14:07Z",
      "read": true,
      "title": "Ars Technica",
      "total_in_feed": 10,
      "website": "arstechnica.com"
    },
    {
      "count": 0,
      "feed_url": "https://openrss.org/feed/example.com/blog",
      "has_no_feed_yet": true,
      "read": false,
      "reason": "Open RSS has no feed for example.com/blog yet. Asking for it has added it to their backlog, so try again later.",
      "title": "",
      "website": "example.com/blog"
    }
  ],
  "summary": "2 posts from 2 websites (1 could not be read); newest 13 Sep 2026 at 19:41 UTC.",
  "websites_asked_for": 3,
  "websites_read": 2
}
```

### Get Open RSS news

Read Open RSS's own writing: the blog, for news about RSS and the open web, or the changelog, for what the service itself changed. Handy for posting their updates to a channel - and for watching the changelog after asking for a feed that didn't exist yet, since that's where new feeds are announced.

**Inputs**

- Which feed (`source`, text): Which of Open RSS's own two feeds to read. One of: `blog` (Blog - news and writing about RSS), `changelog` (Changelog - what Open RSS changed). Default: `blog`.
- How many posts (`limit`, number): Optional. How many of the newest posts to return. Defaults to 10. From 1 to 100. Default: `10`.
- Only posts mentioning (`contains`, text): Optional. Only posts whose title, author, summary or body mention this word or phrase. Capitals are ignored.
- Include the full post (`include_content`, true/false): Include each post's whole body, as plain text and as HTML, on top of the summary every post already carries. Turn this on to summarise or translate the posts in a later step; leave it off to keep the result small. Default: `false`.

**Outputs**

- `count` (number): How many posts came back.
- `feed` (object): The feed the posts came from.
- `newest_published` (text): When the newest of them went up, as a UTC timestamp. Pass it to 'Published after' next run to pick up only what's new.
- `oldest_published` (text): When the oldest of them went up.
- `posts` (list): The posts, newest first.
- `source` (text): Which feed was read: 'blog' or 'changelog'.
- `summary` (text): The result as a sentence, ready to put in a message.
- `total_in_feed` (number): How many posts the feed held, before the limit and any filter.

**Example output**

```json
{
  "count": 1,
  "feed": {
    "description": "A log of all changes made on Open RSS",
    "feed_url": "https://openrss.org/changelog.rss",
    "icon_url": "https://openrss.org/media/open-rss-logo-poster.png",
    "language": "en-us",
    "notices": [],
    "title": "Open RSS",
    "updated": "2026-08-24T14:54:00Z",
    "website_url": "https://openrss.org/changelog"
  },
  "newest_published": "2026-08-24T14:54:00Z",
  "oldest_published": "2026-08-24T14:54:00Z",
  "posts": [
    {
      "attachment": null,
      "author": "",
      "categories": [],
      "image_url": "",
      "published": "2026-08-24T14:54:00Z",
      "published_display": "24 Aug 2026 at 14:54 UTC",
      "summary": "Improved feed detection for sites behind Cloudflare.",
      "title": "08-24-2026",
      "url": "https://openrss.org/changelog#08-24-2026"
    }
  ],
  "source": "changelog",
  "summary": "1 post from Open RSS changelog, the newest of the 6 in its feed; newest 24 Aug 2026 at 14:54 UTC.",
  "total_in_feed": 6
}
```
