OPML to JSON Converter

Turn an OPML subscription export or outline document into JSON, either as the full nested tree or as a flat list of feeds.

OPML
JSON
Runs locally in your browser

About the OPML to JSON Converter

OPML is the format every feed reader offers when you ask it to export your subscriptions, and it is also what outliners use to move documents between apps. The trouble starts when you want to do something programmatic with that file, because OPML stores everything in attributes on repeated outline elements rather than in text nodes. This converter reads those attributes and rebuilds them as JSON keys, keeping the nesting through a children array so folders survive the trip.

The Full outline tree mode returns three top level keys: the OPML version, a head object built from whatever metadata elements the file carries, and the outlines array. Flat feed list mode is the shortcut for reader migrations. It walks the whole tree, picks up every element that carries an xmlUrl, and returns one record per feed with the title, the feed URL, the site URL and the folder name it was filed under. Custom attributes such as _note or category come through untouched because nothing is filtered by a fixed schema.

If the file has no feeds at all the flat mode says so rather than handing back an empty array that looks like a bug. To read the same file with your eyes instead, open OPML Viewer, and to inspect the feeds it points at use RSS Viewer.

How to use

  1. Paste the OPML export from your feed reader or outliner, or upload the .opml file.
  2. Keep Full outline tree to mirror the file structure, or pick Flat feed list for one row per subscription.
  3. Tick Head metadata only when you just need the title, owner and dates.
  4. Copy the JSON or download it as outline.json.

Common questions

Does it keep folders from my feed reader?
Yes. Nested outline elements become a children array in tree mode, and in flat mode the parent title is reported as the folder for each feed.
What if my OPML uses attributes I have never seen?
Every attribute on an outline element is copied into the JSON object under its own name, so nothing is dropped.
Can it read OPML 1.0 files?
Yes. The version attribute is reported as given and both 1.0 and 2.0 documents parse the same way.
Why does it refuse my file?
The root element must be opml. Feed XML and plain outlines in other formats are rejected with a message naming the root it found.