¿Qué es OPML?
OPML son las siglas de Outline Processor Markup Language — un dialecto XML inventado por Dave Winer en UserLand Software en el año 2000 para almacenar esquemas jerárquicos. Aunque fue diseñado como formato genérico de contornos (la "O" de OPML significa Outline, esquema), se hizo famoso casi exclusivamente por una aplicación concreta: las listas de suscripción a podcasts y fuentes RSS.
Cuando cambias de aplicación de podcasts —por ejemplo de Pocket Casts a Overcast— el archivo que exportas e importas es siempre OPML. Lo mismo ocurre con los lectores RSS (Feedly, NewsBlur, Inoreader): el "exportar suscripciones" de cualquier app genera un archivo OPML.
Estructura de un archivo OPML
OPML es XML válido con dos partes: una sección <head> con metadatos del documento y un <body> con elementos <outline> anidados.
<?xml version="1.0" encoding="UTF-8"?>
<opml version="2.0">
<head>
<title>Mis podcasts</title>
<dateCreated>Sat, 25 Apr 2026 10:00:00 GMT</dateCreated>
<ownerName>María García</ownerName>
</head>
<body>
<outline text="Tecnología" title="Tecnología">
<outline type="rss"
text="Sintaxis FM"
title="Sintaxis FM"
xmlUrl="https://feed.syntax.fm/rss"
htmlUrl="https://syntax.fm/" />
<outline type="rss"
text="Mixx.io"
title="Mixx.io"
xmlUrl="https://www.mixx.io/feed.xml"
htmlUrl="https://www.mixx.io/" />
</outline>
<outline text="Ciencia" title="Ciencia">
<outline type="rss"
text="Big Bang"
title="Big Bang"
xmlUrl="https://www.ivoox.com/podcast_p_1234567_1.xml"
htmlUrl="https://www.ivoox.com/big-bang_sq_f1234567_1.html" />
</outline>
</body>
</opml>
Los atributos clave para podcasts/RSS son:
| Atributo | Función |
|---|---|
type |
"rss" para feeds, omitido para carpetas |
text |
Nombre visible en la interfaz |
xmlUrl |
URL real del feed — el atributo más importante |
htmlUrl |
Enlace al sitio web del podcast |
description |
Descripción corta opcional |
La estructura anidada crea carpetas de organización — muy útil cuando te suscribes a más de 100 podcasts.
Versiones de OPML
OPML 1.0 (2000) — la especificación original, informal y laxa. Muchas apps generan todavía OPML 1.0 para máxima compatibilidad.
OPML 2.0 (2007) — añadió elementos de cabecera para guardar el estado de la interfaz, formalizó el atributo type y definió dateCreated / dateModified / ownerName. En la práctica la diferencia es mínima; todas las apps entienden ambas versiones.
Usos principales de OPML
Exportar e importar suscripciones a podcasts
Es el uso dominante. Todas las apps importantes lo soportan:
- Exportar: Configuración → Exportar suscripciones → Guardar archivo OPML
- Importar: Configuración → Importar OPML → seleccionar archivo
Compatible con: Apple Podcasts, Overcast, Pocket Casts, Castro, AntennaPod (Android), Podcast Addict, iVoox y decenas más. El archivo OPML funciona entre ecosistemas iOS/Android sin problemas.
Migrar lectores RSS
Feedly, NewsBlur, Inoreader, FreshRSS y Miniflux todos exportan e importan OPML. Un usuario con 500 fuentes RSS puede migrar a un lector autohospedado en minutos.
Esquemas y documentación
Aplicaciones como OmniOutliner, WorkFlowy o Logseq usan OPML como formato de intercambio para esquemas jerárquicos — capítulos, secciones y listas anidadas.
Nota técnica: OPML no es un directorio de podcasts
OPML no contiene audio de episodios, portadas ni metadatos de contenido — solo contiene las URLs de los feeds. La app de podcasts usa esas URLs para descargar el feed RSS real y descubrir los episodios. OPML es únicamente una libreta de contactos de feeds.
Trabajar con archivos OPML
Extracción por línea de comandos
Como OPML es XML, cualquier herramienta XML funciona:
# Extraer todas las URLs de feed de un archivo OPML
python3 -c "
import xml.etree.ElementTree as ET
tree = ET.parse('suscripciones.opml')
for outline in tree.iter('outline'):
url = outline.get('xmlUrl')
if url:
print(url)
" > lista_feeds.txt
# Contar cuántos feeds tiene el archivo
grep -c 'xmlUrl=' suscripciones.opml
Validar un archivo OPML
Los problemas más comunes que provocan fallos al importar son:
- XML inválido — caracteres especiales (
&,<,>) en nombres de podcasts que no están escapados como&,<,> xmlUrlausente — un outline contype="rss"sin URL de feed es ignorado silenciosamente- Codificación incorrecta — el archivo debe estar guardado en UTF-8
- Profundidad de anidamiento — algunas apps no soportan carpetas muy profundas
Combinar archivos OPML
Si tienes suscripciones repartidas en varias apps, puedes combinarlas con Python:
import xml.etree.ElementTree as ET
def combinar_opml(archivos, salida):
base = ET.parse(archivos[0])
body = base.find('body')
vistos = {o.get('xmlUrl') for o in body.iter('outline') if o.get('xmlUrl')}
for f in archivos[1:]:
tree = ET.parse(f)
for outline in tree.find('body'):
url = outline.get('xmlUrl')
if url and url not in vistos:
body.append(outline)
vistos.add(url)
base.write(salida, encoding='utf-8', xml_declaration=True)
combinar_opml(['feeds_a.opml', 'feeds_b.opml'], 'combinado.opml')
Convertir archivos OPML
OPML → lista de texto plano de feeds: extrae todos los atributos xmlUrl (ver fragmento Python anterior). Útil para pasar a un agregador de feeds o herramienta de newsletter.
OPML → Markdown: convierte el árbol de <outline> a encabezados # o listas con sangría. Un script Python corto lo hace en minutos.
CSV → OPML: si tienes una hoja de cálculo con podcasts y URLs de feed, generar un OPML es sencillo: envuelve cada fila en un elemento <outline>.
Por qué OPML lleva 25 años vigente
OPML funciona porque es extraordinariamente simple. Es XML en texto plano UTF-8. Cualquier editor de texto puede abrirlo. Cualquier lenguaje de programación puede analizarlo en cinco líneas de código. No tiene DRM, codificación binaria ni bloqueo propietario.
Su longevidad es un caso de estudio en "peor es mejor": OPML no es XML elegante, no tiene especificación formal estricta y tiene algunas rarezas — pero funciona en todas partes, para siempre, sin dependencias.
Buenas prácticas con archivos OPML
- Organiza con carpetas: Agrupa feeds por categoría usando elementos
<outline>anidados sintype="rss". La mayoría de apps los mostrarán como carpetas. - Incluye
description: Un atributo de descripción corta ayuda a recordar de qué trata cada feed meses después. - Actualiza
dateModified: Mantén el elemento de cabecera actualizado para saber cuál es la exportación más reciente. - Haz copias de seguridad: Exporta tu OPML cada trimestre. Las apps de podcasts desaparecen y las cuentas se eliminan; el OPML es la única forma de recuperar una biblioteca cuidadosamente curada.
Conversiones relacionadas
Conversiones frecuentes del catálogo: