The tool compares normalized RSS feed URLs first. If a feed URL is missing or unusable, it falls back to a normalized podcast title so you can review likely duplicates manually.
Clean and dedupe an OPML podcast list
Paste or upload OPML, review duplicate subscriptions, flag missing or invalid feed links, and export a cleaner file. Everything runs locally in your browser.
OPML is a subscription list
OPML moves supported podcast subscription lists between apps. Playback history, progress, downloads, queue order, account data, private app state, and app-specific settings may not transfer.
Why OPML Files Accumulate Duplicates (and How to Prevent It)
Duplicate subscriptions in an OPML file almost always trace back to the same handful of causes. Re-exporting from an app you've used for years and merging that fresh file with an older backup you never fully deleted is the most common one by far. Another frequent cause is a feed URL change: when a podcast moves hosting providers, its RSS URL sometimes changes entirely while the show's title stays identical, so an app that dedupes strictly by feed URL will treat the old and new entries as two completely different shows even though they're really one podcast under a new address.
That's also exactly why title-based matching, while useful as a fallback, isn't foolproof on its own -- small formatting differences like trailing whitespace, stray punctuation, or a show renaming itself slightly between seasons will break an otherwise exact title match entirely. A cleanup pass that checks both the normalized feed URL and a normalized title catches meaningfully more real duplicates than either check would alone, which is why this tool runs both methods and clearly shows you which one flagged each specific match it found, so you can judge borderline cases yourself instead of trusting an automated merge blindly.
Before importing a cleaned file into a brand new app, it's worth spot-checking at least a few entries rather than trusting the automated pass blindly: confirm the duplicate you kept actually has a working xmlUrl attached to it, and don't simply assume the first entry listed in a group is automatically the right one to keep if that particular feed has since moved to a new host or address entirely without any redirect in place.
Entries missing a valid xmlUrl are excluded from the cleaned export entirely, since an outline without a working feed URL isn't a usable subscription in the destination app at all -- it's just dead weight carried forward from years of accumulated exports and re-imports. Once the list is genuinely clean, importing it into The Podcast App on either iOS or Android takes seconds, and the app's own duplicate handling on import adds one more layer of protection on top of whatever this tool already caught.
Sources and further reading
- Edison ResearchLeading US audio/podcast audience research firm
- PodnewsDaily global podcast-industry news of record
- The Podcast Academy (The Ambies)Membership body behind the Ambies awards
- Podcast IndexOpen, independent podcast index and API
- Media RSS Specificationmedia namespace supplementing RSS enclosures
- RSS 2.0 Specificationcanonical RSS 2.0 spec (RSS Advisory Board)
- Apple PodcastsApple's official podcasts app/platform homepage
- SpotifySpotify homepage (podcasts + music listening)
- Pocket CastsCross-platform podcast player (Automattic)
- Listen NotesPodcast search engine and API
OPML cleanup notes
No. Parsing, duplicate detection, preview, copy, and download all run in the browser. The tool does not upload your OPML to a server.
Removed subscriptions and entries without a valid http or https RSS feed URL are excluded. Entries with an invalid website URL are kept if the feed URL itself is valid, but the invalid website field is omitted from export.
Clean the portable subscription layer before switching apps.
The cleanup tool supports the same OPML boundary as The Podcast App: subscriptions can move, but progress, downloads, queue order, account data, and private app state usually do not. Cleaning duplicates before import keeps the first app session easier to review and prevents stale feeds from making a new podcast library feel broken on day one.
Download The Podcast App for free core listening, queue tools, speed controls, sleep timer, OPML, limited downloads, and optional Premium AI.
Check the file first
Use the viewer when you want to inspect names, feed URLs, missing websites, and duplicate-looking entries before exporting a cleaned OPML file.
Build a fresh list
Use the generator when you need to create an OPML subscription list from scratch before importing it into a podcast app or sharing it with another listener.
Import with clear expectations
After cleanup, import the subscriptions into The Podcast App and use search, follows, queue tools, speed controls, sleep timer, limited downloads, and OPML export for free core listening.