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 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:
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?
| Column | Source in the OPML | Content |
|---|---|---|
| title | text, or title when text is missing | The name the reader shows |
| xml_url | xmlUrl | The feed address a reader or podcast app subscribes to |
| html_url | htmlUrl, or url for a plain link | The website the feed belongs to |
| folder_path | The folders above the outline | Outermost folder first, joined with a slash and spaces |
| description | description | The feed description, when the export includes one |
| type | type | Usually 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 &, 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.
Feeds, Links and Folders
| Outline | How it is read |
|---|---|
Has xmlUrl | A feed row |
Has url but no xmlUrl | A link row, with the address in html_url and its type, usually link |
| Has neither, and contains outlines | A folder: its name becomes part of folder_path |
| Has neither, and contains nothing | An 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 &. 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
| Tool | Use |
|---|---|
| OPML to CSV | Flatten an OPML subscription export into rows |
| XML Formatter | Read or repair the raw OPML before converting |
| Bookmarks HTML to CSV | Do 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.