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.
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
- OPML → JSON and JSON → OPML — a faithful round-trip of the entire
outline tree. Each
<outline>becomes a JSON object of its attributes plus a nested"outlines"array of its children, so folders and feed metadata survive the trip in both directions. - OPML → CSV and CSV → OPML — CSV is the flat feed list: one row per
feed, with the common columns (
text,type,xmlUrl,htmlUrl) plus acategorycolumn that records the folder path (joined with/). Because the path is preserved, converting the CSV back to OPML or JSON rebuilds the original nested folders. - JSON ⇄ CSV — go straight between the two data formats the same way.
Options
- From / To — pick the source and target format (OPML, JSON, or CSV).
- Pretty-print output — indent the OPML or JSON output for readability (on by default). Turn it off for compact, single-line output. This has no effect on CSV.
Notes
- Folders round-trip. Nested categories become a slash-joined
categorycolumn in CSV and a nested"outlines"array in JSON, then rebuild back into nested<outline>folders when you convert to OPML. - Attribute order is preserved, so re-exported OPML keeps feed attributes
(
text,type,xmlUrl, …) in the order they were authored. - Spreadsheet-friendly. Export your podcast or RSS subscriptions to CSV to edit them in a spreadsheet, then convert back to OPML to re-import into your app.
- Nothing is uploaded — the conversion happens entirely in your browser, so it works offline and keeps your subscription list private.
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=trueMachine-readable descriptor: tool.json — title + parameters JSON Schema for agents.
