How to use the OPML viewer and validator
- Drop an OPML file onto the upload zone, click it to browse, or paste the XML directly into the textarea.
- The validator parses the file in your browser. If anything is wrong (invalid XML, missing
<opml>root, or no feeds) it tells you which step failed and how to fix it. - When the file is valid you get a grouped list of every feed, a folder count, a duplicate count, and the detected OPML version. Copy the URLs, copy the titles, or download a normalized copy of the file.
What is OPML?
OPML (Outline Processor Markup Language) is an XML format for exchanging hierarchical outlines. On the web it became the standard way to move a list of RSS feed or podcast subscriptions from one app to another. A single OPML file can describe hundreds of feeds, group them into nested folders, and carry the title and site URL for each feed.
The important parts of an OPML file are the <opml> root, the <body> inside it, and the <outline> elements that describe each feed or folder. Feeds carry an xmlUrl attribute (the actual feed URL) and usually an htmlUrl attribute (the site URL). Folders are outline elements that contain other outlines instead of pointing at a feed.
OPML 1.0 vs OPML 2.0
Two versions of the spec exist. OPML 2.0 (2007) added optional head fields like dateCreated, ownerId, and expansionState. The part you care about for feed subscriptions (outline elements with xmlUrl) is the same in both versions. Every modern feed reader and podcast app writes OPML 2.0 by default, and almost all of them read 1.0 files without complaining. If a reader rejects a 1.0 file, converting it is rarely the problem: it is usually something else in the document.
How to export OPML from your RSS reader
Every major hosted and self-hosted RSS reader can export your subscriptions as OPML. The exact menu moves around between releases, so the step-by-step below points at the canonical help doc for each one.
Feedly
Go to feedly.com/i/opml while signed in on the web. The page has an export button that downloads feedly.opml. AI feeds and Reddit feeds are skipped. See Feedly's export article and their import article. Mobile apps do not expose OPML.
Inoreader
On the web, open Preferences and go to the Import, Export, Backup section. The Export tab produces an OPML download; the Import tab accepts one. Automatic OPML backups are a Professional-tier feature, but one-off export and import are on every plan.
NewsBlur
Open the Manage menu and choose Import or Export of Sites. The export button produces a standard OPML file. The free plan caps you at 64 sites; a 30-day Premium trial comes with every new account. Docs: newsblur.com/faq.
Feedbin
In the web app, open Settings and go to the Import/Export section (feedbin.com/settings/import_export). Both import and export live on the same page. Feedbin is paid-only after the trial, but OPML is available on every plan. See Feedbin's help page.
The Old Reader
Settings page, scroll to the bottom, click the export your feeds link (theoldreader.com/reader/subscriptions/export). The free tier caps subscriptions at 100; Premium raises the cap. Imports over the cap on free will be rejected.
BazQux Reader
Open the settings icon, go to Subscriptions, and click Export OPML (bazqux.com/opml). BazQux is paid-only after a trial. Docs: how to import my feeds.
NetNewsWire (macOS and iOS)
On macOS, use File then Export Subscriptions and pick which account to export from. On iOS, open the Feeds screen, tap the Settings icon, tap the account name, and choose Export Subscriptions. Pick a save location. Import follows the same path. Docs: macOS export and iOS export.
Reeder (new) and Reeder Classic
In the new Reeder (subscription), open Settings and go to Your Data. The Export feeds as OPML option produces a standard OPML file (home timeline feeds are not included). Reeder Classic, a separate one-time purchase, exports OPML from Settings after picking an account. Help: reederapp.com/help.
Readwise Reader
On the web, open your account profile and look for Export account data. The Export Feeds as OPML action produces a standard file. You can also run Generate OPML export from the command palette. For import, drag an OPML file onto the reader window or press U to open the upload dialog. Docs: Readwise Reader export FAQ.
Self-hosted feed readers
FreshRSS
Open Subscription management, go to the Import / export tab, pick which feeds to include, and click export. Import uses the same tab. Per-user export only: on a shared install, the export covers the current user's feeds. Docs: FreshRSS user guide.
Tiny Tiny RSS
Preferences, Feeds tab, OPML section. You can export the plain OPML or include settings (a TT-RSS-specific extension). The same section handles imports. Docs: tt-rss.org.
Miniflux
Open Feeds, then use the Export and Import buttons in the side menu. Miniflux also exposes the export via its API at /v1/export, which is handy for automation. Docs: miniflux.app/docs/api.
CommaFeed
Profile menu, Settings, Profile tab, OPML export section, Download button. Import lives on the Add screen under an OPML tab. Docs: CommaFeed README.
RSS Guard
Right-click your account in the feed list and pick Export feeds. Pick the OPML 2.0 filter and save. Import follows the same right-click menu. Only the local "standard" account syncs via OPML; remote accounts pull from the underlying service.
How to export OPML from your podcast app
Most podcast apps treat their subscription list as a normal OPML feed list, which is why moving between Overcast, Pocket Casts, AntennaPod, and Castro is usually painless. A few big names do not play along; see the section after this one.
Overcast
Sign in at overcast.fm/account in a browser. The page has an Export OPML link that downloads overcast.opml. The iOS app does not expose the export directly. There is no OPML import on Overcast; you add shows by search.
Pocket Casts
On iOS, open the Profile tab, go to Settings, and pick Import & Export OPML. On Android, Profile, settings cog, same Import & Export OPML item. On the web, Profile icon, Settings, Import & Export. Docs: export and import.
Castro
Open the settings cog, pick User Data, then Export Subscriptions. Pick a destination from the share sheet. Import uses the same User Data section. Castro is iOS only. Docs: export, import.
AntennaPod (Android)
Settings, Import/Export, OPML export. Save the file to a location outside the AntennaPod folder (for example Downloads) so it survives an uninstall. To import, open the OPML file on the device and AntennaPod picks it up. Docs: AntennaPod backup docs.
Podcast Addict (Android)
Settings, Backup & Restore. The Backup option writes an OPML-compatible subscriptions file. To import, tap Restore on the opening screen and pick the OPML file.
Castbox
Castbox has OPML import (Personal tab, Settings, OPML Import on Android; share sheet on iOS) but the help center does not document an OPML export. Treat Castbox as import-only for OPML. Docs: Castbox help center.
Mind-map and outliner apps
OPML is also an outline interchange format, so it is supported by most hierarchical note apps.
XMind
File, Export, pick OPML. To import, use File, Import, and pick the OPML file. XMind-specific styles and attachments do not survive the round trip; the outline itself does. Docs: XMind import and XMind export.
Workflowy
Hover a bullet, open its menu, pick Export, then choose OPML. For the whole account, open Settings and use Export all. Docs: Workflowy exporting.
Dynalist
Open the bullet menu (or right-click a document), pick Export, and switch to the OPML tab. Import lives under the main menu's Import option. Docs: export and import.
OmniOutliner
File, Export, choose OPML from the format menu (Pro tier). Import uses the normal File, Open on a .opml file. Styles and attachments are lost on export. Docs: OmniOutliner user manual.
Apps that do not support OPML
A few popular apps deliberately do not speak OPML. If you have subscriptions trapped in one of these, OPML will not help; you have to rebuild the list manually.
- Apple Podcasts. The macOS and iOS apps have no OPML import or export. The macOS app can follow a single RSS feed URL via File, Follow a Show by URL, but not a batch list. Apple's guide does not mention OPML.
- Spotify. No OPML import or export for podcasts. The support site has no OPML article and the only way to subscribe is per-show inside the app. This is a long-standing limitation.
- YouTube Music. Replaced Google Podcasts but only accepts one RSS feed URL at a time via Library, Podcasts, Add podcast, Add a podcast by RSS feed. See YouTube Music's doc.
- Google Podcasts. Shut down in 2024. The in-app transfer tool closed on July 30, 2024. If you still have the OPML export from before the cutoff, you can import it into any app above.
- Raindrop.io. It is a bookmark manager, not a feed reader. Supported formats are HTML, CSV, TXT, JSON, and ENEX (import only). See Raindrop export docs.
Why your OPML file will not validate
The validator on this page surfaces exactly where parsing failed. These are the common reasons for each error code.
- Invalid XML. The file has a syntax error. Usually this means the file was edited in a word processor that replaced straight quotes with curly quotes or dropped a closing tag. Open the file in a plain text editor and re-save as UTF-8.
- Not OPML. The file parsed as XML but there is no
<opml>or<body>element. You probably grabbed an RSS feed or a generic XML file instead of the actual subscription export. - No feeds. The OPML is technically valid but no outline entries carry an
xmlUrlattribute. Some exporters only writehtmlUrl, which is the site URL, not the feed. Re-export from the source app. - Encoding issues. OPML must be UTF-8. Files saved as UTF-16 or Windows-1252 break on non-ASCII folder names and feed titles.
- Wrong extension. Some readers insist on
.opmland reject.xmleven though the content is identical. If a reader refuses your file, try renaming it.
How to import your OPML into Keep
Once the file is valid, import it into Keep so every feed turns into a bookmarked source and every new item is saved as clean Markdown you can search, tag, and hand to an AI agent. Folder paths from the OPML file become tags on the items pulled from each feed, so your existing organization survives the move.
Frequently asked questions
What is an OPML file?
OPML stands for Outline Processor Markup Language. It is a plain XML file that holds a hierarchical list of outlines. For most people on the web it is the standard way to carry a list of RSS feed or podcast subscriptions between apps. One OPML file can describe hundreds of feeds grouped into folders.
How do I view the feeds inside an OPML file?
Drop the file into the viewer above. The tool parses it in your browser and shows every feed with its title, URL, and folder tag. You can copy the list of feed URLs, copy the list of titles, or download a cleaned-up copy of the file.
Is my OPML file uploaded anywhere?
No. The viewer and validator run entirely in your browser. The XML you paste or the file you drop never touches a server. You can take the page offline after it loads and it still works.
What does the validator check for?
It confirms the file is valid XML, that it has an <opml> root element with a <body>, and that at least one <outline> entry has an xmlUrl attribute (the actual feed URL). If any of those fail, the tool explains which step broke so you can fix the file.
Why does the validator say no feeds were found?
The most common cause is that the file uses <outline> entries without an xmlUrl attribute. Some exporters only write htmlUrl (the site URL) instead of xmlUrl (the feed URL), which means feed readers cannot subscribe to the entries. Re-export the file from the original app and check that xmlUrl is present.
What is the difference between OPML 1.0 and OPML 2.0?
OPML 2.0 adds a few optional head fields like dateCreated and ownerId, but for feed subscriptions the important part (outline elements with xmlUrl and htmlUrl) is identical. Almost every modern reader and podcast app writes OPML 2.0. Most will read 1.0 files without complaint.
Does the viewer work for podcast OPML files too?
Yes. Podcast OPML files use the same outline/xmlUrl structure as RSS reader exports. Drop an export from Overcast, Pocket Casts, AntennaPod, or any other podcast app and the viewer treats it the same way.
Can I merge two OPML files?
Paste both files into the textarea one after the other inside a single <opml> document and the viewer will deduplicate by feed URL. If you need a real merge workflow, import both files into Keep and the importer skips duplicates automatically.
What does download normalized OPML do?
It rebuilds the file from the parsed feeds. Duplicates are merged, folder paths are flattened into a single tag per feed, xmlUrl attributes are normalized through URL parsing, and the output is a clean OPML 2.0 document. Useful if the original file was messy or if you want a canonical copy before importing into another reader.
Why would a feed reader reject my OPML file?
The most common causes are malformed XML (often from editing in Word or Google Docs, which adds smart quotes), files saved as UTF-16 instead of UTF-8, or the wrong extension. The second most common cause is a plan gate on the destination app (for example a free tier feed cap) that silently truncates the import. The validator will catch the XML problems; the cap problems are on the target app.
Save your feeds in Keep
Keep imports your OPML, follows every feed, and saves each new item as clean Markdown in a library you can search from the web, the API, or your own AI agent. One upload now, the full collection later.