Podcast feed parser

Paste podcast RSS/XML and extract channel metadata plus a clean episode list with publish dates, durations, and audio URLs. Runs locally.

Parsed feed JSON

About this tool

Paste a podcast RSS/XML feed and this tool extracts the channel metadata plus a clean episode list. It recognises common RSS 2.0 podcast fields, iTunes namespace fields, Atom enclosure links, publish dates, durations, GUIDs, episode links, and audio enclosure URLs.

Use it to inspect a feed, debug missing enclosure metadata, copy episode JSON into scripts, or compare podcast feed output during migrations. The limit and order options let you focus on the newest or oldest entries, and descriptions are optional so the default output stays compact.

Everything runs locally in your browser. The feed XML is not uploaded.

FAQ

Can it fetch a feed from a URL, or do I have to paste the XML?

Paste the XML. The parser is fully local and does no network fetching — grab the feed with your browser, curl, or your podcast host's export, then paste it here. That is also why it works offline and why nothing is uploaded.

Which feed formats and fields does it understand?

RSS 2.0 (including the itunes: podcast namespace) and Atom 1.0. Per episode it extracts the title, GUID, page link, audio enclosure (URL, MIME type, byte size), season/episode numbers, the explicit flag, and — with the descriptions option on — a plain-text summary. Empty fields are simply omitted from the JSON rather than emitted as nulls.

Why do dates and durations look different from the raw feed?

They are normalised: RSS pubDate (RFC 2822) and Atom dates (RFC 3339) both become an RFC 3339 published value, with the original preserved in published_raw. Durations become HH:MM:SS in duration plus whole seconds in duration_seconds, whether the feed wrote 3723, 62:03, or 1:02:03.

How do the limit and order options interact?

order is applied first, then limit caps the list — so order = "newest" with limit = 10 gives the 10 most recent episodes by publish date, while the default order = "feed" keeps the feed's own ordering and limit = 0 returns everything.

Developer & Automation Access

Run it from the terminal

Same engine as this page, headless — via the gizza CLI:

gizza tool podcast-feed-parser '<rss version="2.0"><channel><title>Example Podcast</title><item><title>Episode 1</title><enclosure url="https://example.com/ep1.mp3" type="audio/mpeg" /></item></channel></rss>'

New to the CLI? Get gizza →

Open it by URL

Pre-fill and auto-run this tool with query parameters — the names match the API/CLI:

https://gizza.ai/tools/podcast-feed-parser/?feed=%3Crss%20version%3D%222.0%22%3E%3Cchannel%3E%3Ctitle%3EExample%20Podcast%3C%2Ftitle%3E%3Citem%3E%3Ctitle%3EEpisode%201%3C%2Ftitle%3E%3Cenclosure%20url%3D%22https%3A%2F%2Fexample.com%2Fep1.mp3%22%20type%3D%22audio%2Fmpeg%22%20%2F%3E%3C%2Fitem%3E%3C%2Fchannel%3E%3C%2Frss%3E&limit=0&order=feed&include_descriptions=true

Machine-readable descriptor: tool.json — title + parameters JSON Schema for agents.