OPML import errors — how to fix broken feed lists
OPML is the standard way to move feed subscriptions between readers. When imports fail, it’s usually due to invalid XML or missing feed URLs on outline entries.
Quick checklist
- Confirm the file is actually OPML (XML), not HTML/JSON.
- Ensure the file is valid UTF‑8 and parses as XML.
- Verify each subscription has an
xmlUrl(the RSS/Atom URL). - Keep the structure simple:
<opml>→<head>→<body>→<outline>. - If the reader supports it, try “merge” vs “replace” to avoid duplicate conflicts.
Common import failures (and fixes)
| What you see | Likely cause | Fix |
|---|---|---|
| “Invalid OPML” / “XML parse error” | Malformed XML or invalid characters | Normalize to UTF‑8, remove control characters, and validate XML |
| Import succeeds but no feeds appear | Outlines missing xmlUrl | Ensure every feed outline has a real RSS/Atom URL in xmlUrl |
| Import hangs or takes forever | Very large OPML; importer verifies each feed | Import in batches; disable “verify feeds” if the reader offers it |
| Duplicates explode | The reader merges by title instead of URL (or vice versa) | Use “replace” instead of “merge”, or dedupe by xmlUrl before import |
1) Confirm it’s actually OPML
An OPML file should start with:
<?xml version="1.0" encoding="UTF-8"?>
<opml version="2.0">
<head>...</head>
<body>...</body>
</opml>
If it’s HTML, JSON, or a proprietary export, most readers won’t import it as OPML.
Minimal working OPML example
If you want to sanity-check your importer, try a tiny file like:
<?xml version="1.0" encoding="UTF-8"?>
<opml version="2.0">
<head>
<title>Subscriptions</title>
</head>
<body>
<outline text="Example Feed" type="rss" xmlUrl="https://example.com/feed.xml" htmlUrl="https://example.com/"/>
</body>
</opml>
2) Check outline entries include feed URLs
Many readers expect:
xmlUrl(the RSS/Atom feed URL)- optionally
htmlUrl(the website URL)
If xmlUrl is missing, the import may “succeed” but create empty folders, or fail outright.
Common outline mistakes
xmlUrlis present but emptyxmlUrlcontains a website URL (HTML) instead of the feed URL (XML)- URLs include spaces or unescaped characters
- duplicate entries with the same
xmlUrlbut different names (some importers choke)
3) Fix invalid characters/encoding
Stray control characters (often from copy/paste) can break XML parsing.
Normalize the file to UTF‑8 and remove invalid characters before importing.
4) Folder structure issues (nested outlines)
OPML supports folders by nesting <outline> elements. Some readers are strict about the shape:
- A “folder” outline might have only
textand children. - A “feed” outline should have
xmlUrl(and optionallytype="rss").
If your export mixes both styles on the same node (folder + feed URL), some importers fail.
5) Reader-specific quirks
Even when the OPML is valid, imports can fail due to product constraints:
- maximum file size or maximum number of outlines
- rate limits when verifying feed URLs during import
- duplicate-detection rules that reject “too similar” entries
If you have a large OPML (hundreds/thousands of feeds), try importing in batches.
Recommended workflow
- Validate the OPML file.
- Repair XML parsing errors first.
- Ensure outlines have valid
xmlUrlvalues. - Re-import into your target reader.
Related guides
- If your feeds are failing after import, see:
FAQ
Why won’t my OPML import?
Common causes are invalid XML, missing required OPML structure, invalid characters/encoding, or outline entries missing feed URLs.
What does OPML contain?
OPML typically contains <outline> entries, each representing a subscription and including an RSS/Atom URL (xmlUrl) and optional metadata.
How do I make OPML portable across readers?
Ensure valid XML, include xmlUrl for each outline item, avoid reader-specific attributes when possible, and normalize encoding to UTF‑8.
Fix RSS/Atom feeds and OPML lists
Paste a feed/OPML URL, upload a file, or paste XML — then validate and fix it.