RSS & Atom Feed to JSON
Pricing
from $3.00 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a month ago
Last modified
Categories
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 URLpublished,updated— normalized to UTC ISO 8601 (2026-08-17T09:30:00Z), any input formatauthor— parsed to a human name (RSSemail (Name)convention handled)summaryText,contentText— HTML stripped to clean plain text (scripts/styles removed)contentHtml— the original (sanitized) HTML content, when you want the markupcategories— tag/category terms as a string arrayenclosures— 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
| Field | Type | Default | Description |
|---|---|---|---|
feedUrls | array | — | Feed URLs (redirects followed) |
maxItemsPerFeed | integer | 0 (all) | Keep only the first N articles per feed |
includeContentHtml | boolean | true | Include contentHtml alongside contentText |
timeoutSecs | integer | 30 | Download timeout per feed |
maxFileSizeMb | integer | 10 | Larger 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-jsonuv 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.