Convert an OPML file to CSV when you want to read, audit or share a list of feed or podcast subscriptions as rows. FindUtils OPML to CSV reads the OPML export in your browser and writes one row per feed with its title, feed URL, site URL and folder path. The tool does not upload or store the file, and it never fetches a feed.

This guide explains what an OPML file holds, how the outline tree becomes rows, what each column means, and the mistakes that make a conversion fail.

What Is an OPML File?

An OPML file is an XML outline that feed readers and podcast apps use to export and import subscription lists. OPML stands for Outline Processor Markup Language. In a subscription export, every feed is an outline element with an xmlUrl attribute pointing at its RSS or Atom feed, and every folder is an outline that contains other outlines. The file usually ends in .opml, though some apps save it as .xml.

Feed readers such as Feedly, Inoreader and NetNewsWire, and podcast apps that support it, offer an OPML export in their settings, account or subscriptions menu.

What Does an OPML Export Look Like?

A small export with a nested folder looks like this:

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="UTF-8"?>
<class="text-rose-400">opml version="2.0">
  <class="text-rose-400">head><class="text-rose-400">title>My Feeds</class="text-rose-400">title></class="text-rose-400">head>
  <class="text-rose-400">body>
    <class="text-rose-400">outline text="Tech" title="Tech">
      <class="text-rose-400">outline text="Example Blog" type="rss" xmlUrl="https://example.com/feed.xml" htmlUrl="https://example.com/"/>
      <class="text-rose-400">outline text="Web">
        <class="text-rose-400">outline text="CSS Weekly" type="rss" xmlUrl="https://css.example/feed"/>
      </class="text-rose-400">outline>
    </class="text-rose-400">outline>
    <class="text-rose-400">outline text="Top Podcast" type="rss" xmlUrl="https://pod.example/feed.xml"/>
  </class="text-rose-400">body>
</class="text-rose-400">opml>

The folders are Tech and Web. The feeds are Example Blog, CSS Weekly and Top Podcast.

How to Convert the File

Open FindUtils OPML to CSV, upload the .opml file or paste the XML, and check the preview table. Turn on Include folder rows if you also want a row for each folder. Download the CSV; keep Excel BOM on when the file will open in Excel, and turn it off if a script reads it.

The example above converts to:

1
2
3
4
title,xml_url,html_url,folder_path,description,type
Example Blog,https://example.com/feed.xml,https://example.com/,Tech,,rss
CSS Weekly,https://css.example/feed,,Tech / Web,,rss
Top Podcast,https://pod.example/feed.xml,,,,rss

What Do the Columns Mean?

ColumnSource in the OPMLContent
titletext, or title when text is missingThe name the reader shows
xml_urlxmlUrlThe feed address a reader or podcast app subscribes to
html_urlhtmlUrl, or url for a plain linkThe website the feed belongs to
folder_pathThe folders above the outlineOutermost folder first, joined with a slash and spaces
descriptiondescriptionThe feed description, when the export includes one
typetypeUsually rss; folder for folder rows

Attribute names are matched without regard to letter case, because exports write xmlUrl, xmlurl and XMLURL. XML entities in titles, such as &amp;, are decoded.

How Do Folders Become Rows?

Folders are carried down to every feed inside them. A feed filed under Web inside Tech gets the folder_path Tech / Web, and a feed outside any folder gets an empty folder_path. The tree is flattened into rows without losing where each feed lived.

With Include folder rows on, each folder also gets its own row, in document order, with the folder name in title, the parent path in folder_path and folder in type. The example above then has five rows: Tech, Example Blog, Web, CSS Weekly and Top Podcast.

OutlineHow it is read
Has xmlUrlA feed row
Has url but no xmlUrlA link row, with the address in html_url and its type, usually link
Has neither, and contains outlinesA folder: its name becomes part of folder_path
Has neither, and contains nothingAn empty folder, written only when Include folder rows is on

Why Is No Feed Fetched?

No feed is fetched, because the job is to copy what the export says, not to test it. Fetching would send a request to every feed host on the list, which tells each of them what you follow and makes a large conversion slow. A feed that no longer works stays in the CSV, which is exactly what an audit needs to see.

Practical Examples

Auditing a feed reader. Convert the export, sort by folder_path, and delete the feeds you no longer read before importing the trimmed list elsewhere.

Sharing a podcast list. A podcast app's OPML becomes a sheet with each show's title and feed URL that anyone can open.

Checking for repeats. Sort by html_url to spot two feeds from the same site filed under different folders.

Common Mistakes

Dropping a single RSS feed file. An RSS or Atom feed is not an OPML export. It has no outline elements, so the result is No feeds found.

Editing the XML by hand and leaving a bare &. XML requires &amp;. The converter reports the problem with its line number instead of guessing.

Expecting the CSV to import back into a reader. Most feed readers import OPML, not CSV. Keep the original .opml for importing and use the CSV for review.

Tools Used in This Guide

ToolUse
OPML to CSVFlatten an OPML subscription export into rows
XML FormatterRead or repair the raw OPML before converting
Bookmarks HTML to CSVDo the same for browser bookmarks

FAQ

What is the difference between xml_url and html_url?

xml_url is the feed itself, the address a reader polls for new items. html_url is the website the feed belongs to. Many exports include both and some only the feed, so the CSV keeps each in its own column.

Does OPML to CSV work with podcast exports?

Yes. A podcast app's OPML lists each show as an outline whose xmlUrl is the podcast's RSS feed, the same structure a feed reader writes, so every show becomes a row.

Why does the converter say No feeds found?

The file has no outline with an xmlUrl or url attribute. That happens when the file is a single RSS or Atom feed, or when an export holds only empty folders.

Is the subscription list uploaded?

No. The OPML is parsed and the CSV is written inside the browser tab, and no request carries the file or contacts a feed.

Next Steps

Convert an export with OPML to CSV. For browser bookmarks, use Bookmarks HTML to CSV, and remove repeats first with Dedupe Bookmarks.