RSS & Atom Feed to JSON avatar

RSS & Atom Feed to JSON

Pricing

from $3.00 / 1,000 results

Go to Apify Store
RSS & Atom Feed to JSON

RSS & Atom Feed to JSON

Turn any RSS, Atom or RDF feed into clean, normalized JSON articles: ISO 8601 dates, plain-text and HTML content, authors, categories and podcast enclosures. Multiple feeds per run, broken feeds reported instead of crashing.

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

kuon

kuon

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a month ago

Last modified

Share

Turn any RSS, Atom or RDF feed into clean, normalized JSON: one dataset item per article with ISO 8601 dates, plain-text and HTML content, parsed author names, categories and podcast enclosures — the same field names no matter which feed format the source uses. Multiple feeds per run; broken feeds are reported as failed items instead of crashing the batch. No credentials needed.

What it does

Give it a list of feed URLs. For each article you get one dataset item with:

  • title, url, id — GUID (RSS) / id (Atom), falling back to the article URL
  • published, updated — normalized to UTC ISO 8601 (2026-08-17T09:30:00Z), any input format
  • author — parsed to a human name (RSS email (Name) convention handled)
  • summaryText, contentText — HTML stripped to clean plain text (scripts/styles removed)
  • contentHtml — the original (sanitized) HTML content, when you want the markup
  • categories — tag/category terms as a string array
  • enclosures — podcast audio / media attachments as {url, type, lengthBytes}
  • feedUrl, feedTitle, feedType (rss20/atom10/…), language — the source feed

Feeds that fail to download or parse produce a single item with status: "failed" and a clear error message, so batch jobs always finish.

Input

FieldTypeDefaultDescription
feedUrlsarrayFeed URLs (redirects followed)
maxItemsPerFeedinteger0 (all)Keep only the first N articles per feed
includeContentHtmlbooleantrueInclude contentHtml alongside contentText
timeoutSecsinteger30Download timeout per feed
maxFileSizeMbinteger10Larger feeds are skipped with a failed item

Example output (abridged)

{
"feedUrl": "https://fruit.example.com/feed.xml",
"feedTitle": "Fruit Weekly",
"feedType": "rss20",
"status": "success",
"id": "fruit-weekly-001",
"url": "https://fruit.example.com/posts/apples",
"title": "Apple shipments & prices rise",
"author": "Ann Orchard",
"published": "2026-08-10T08:30:00Z",
"summaryText": "Apple volumes grew 12% this week.",
"contentText": "Apple report\nApple volumes grew 12% this week.\nFuji up\nGala flat",
"contentHtml": "<h2>Apple report</h2><p>Apple volumes grew <b>12%</b> this week.</p>",
"categories": ["apples", "markets"],
"enclosures": [],
"language": "en-us"
}

Typical uses

  • News monitoring and research pipelines (feeds → LLM/RAG-ready text)
  • Aggregating many blogs/podcasts into one normalized dataset
  • Feeding no-code tools (Zapier/Make via Apify integrations) with clean article JSON

Limitations

  • Content comes from the feed itself — articles are not fetched from their web pages (feeds that only carry teasers yield teaser-length contentText)
  • Password-protected or non-public feeds are not supported

Development (local)

cd actors/rss-atom-to-json
uv venv --python 3.13 .venv && uv pip install -p .venv/bin/python -r requirements.txt
.venv/bin/python tests/run_local_test.py # end-to-end test (apify run equivalent), exit 0 = ALL PASS
../../node_modules/.bin/apify run # real apify CLI local run (input: storage/key_value_stores/default/INPUT.json)

Test fixtures are tests/fixtures/sample_rss.xml / sample_atom.xml / not_a_feed.html; expected results live in tests/expected_output.json. Publishing → ../../docs/publishing.md.