OPML ⇄ JSON ⇄ CSV Converter

Convert OPML subscription files (podcast/RSS feed exports) to and from JSON and CSV in any direction. Runs in your browser; nothing is uploaded.

Converted output

About this tool

This OPML converter transforms OPML subscription files to and from JSON and CSV in any direction, right in your browser. The conversion runs locally in WebAssembly — your file is never uploaded to a server, so a private subscription export stays on your machine.

OPML (Outline Processor Markup Language) is the XML format that podcast apps and RSS readers use to export and import your subscriptions. An OPML file is a tree of <outline> elements: each feed carries attributes like text, type, xmlUrl, and htmlUrl, and feeds can be nested inside folder outlines (categories). This tool models that whole tree so it can round-trip cleanly.

Conversions

Options

Notes

FAQ

Why does my CSV have fewer rows than my OPML has outlines?

CSV rows are the feeds — outlines with a non-empty xmlUrl attribute. Folder outlines (categories) don't get their own rows; they show up as the slash-joined path in each feed's category column instead, and are rebuilt as nested <outline> folders when you convert back.

Do nested folders survive an OPML → CSV → OPML round-trip?

Yes — the category column stores the full folder path joined with  / , and the CSV parser splits on that separator to rebuild the tree. The one caveat: a folder whose name itself contains  /  will be split into two levels on the way back.

Which OPML version does the tool read and write?

It reads any OPML-ish XML that contains <outline> elements — attribute names are matched case-insensitively (xmlUrl vs xmlurl) and namespace prefixes are ignored, so exports from different apps parse fine. Output is always written as OPML 2.0 with an UTF-8 XML declaration and your <head><title> preserved.

What happens if I paste something that isn't valid OPML?

You get a specific error rather than empty output: malformed XML reports the parser's message, and well-formed XML with no <opml>/<outline> elements is rejected as "not an OPML document". JSON input must be an object with an "outlines" array.

Developer & Automation Access

Run it from the terminal

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

gizza tool opml-converter '<opml version="2.0"><body><outline type="rss" text="Example" xmlUrl="https://example.com/rss"/></body></opml>' 'from=opml' 'to=json'

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/opml-converter/?input=%3Copml%20version%3D%222.0%22%3E%3Cbody%3E%3Coutline%20type%3D%22rss%22%20text%3D%22Example%22%20xmlUrl%3D%22https%3A%2F%2Fexample.com%2Frss%22%2F%3E%3C%2Fbody%3E%3C%2Fopml%3E&from=opml&to=json&pretty=true

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