Spanish public data, ready to build products on: where each dataset lives, how to call it, what it returns and the traps that change the numbers, verified with real calls; plus code that fetches it already solved. Start at llms-min.txt or the MCP server.
Datos públicos de España listos para construir productos. Para cada fuente: dónde está, cómo pedirla, qué devuelve y qué falla, comprobado con llamadas reales, y código que ya trae el dato resuelto. Pensado para startups, desarrolladores y agentes de IA.
- Con un agente (MCP):
uvx --from git+https://github.com/BquantFinance/Administracion-fuentes-publicas mcp-catalogo,, o en Claude Code
/plugin marketplace add BquantFinance/Administracion-fuentes-publicasy/plugin install fuentes-publicas@fuentes-publicas.buscarencuentra la fuente,fichada endpoints y trampas, yperfil_municipio,coyuntura,empresa_nify el resto traen el dato (herramientas). - Con código:
pip install "fuentes-publicas-mcp @ git+https://github.com/BquantFinance/Administracion-fuentes-publicas". Clientes que ya resuelven certificados, codificaciones y paginación (scripts/clientes), un almacén local en Parquet para lo que las APIs no dejan consultar (guía) y ejemplos que funcionan. - Leyendo:
llms-min.txtpara orientarse y la ficha de cada fuente ensources/.
Cada producto con piezas que ya funcionan; frescura, volumen medido, licencia y la trampa que más cuesta en indices/productos.yaml. Antes de vender: licencias, cita y datos personales.
| producto | para quién | fichas | piezas |
|---|---|---|---|
| radar-licitaciones · Avisos de licitaciones nuevas por CPV, provincia u órgano de contratación | pymes y consultoras que licitan con la Administración | placsp-datos-abiertos, dir3-directorio | ejemplos/licitaciones.py (solo lo nuevo por CPV y palabra); almacen.py sync --fuentes placsp para histórico y búsquedas |
| inteligencia-competidores · Quién gana los contratos de un sector u órgano, a qué importe y contra cuántas ofertas | empresas que licitan, analistas de contratación pública, periodistas | placsp-datos-abiertos | almacen.py (tabla placsp_adjudicaciones y vista adjudicaciones_ultimo); ejemplos/adjudicaciones.py; herramienta almacen_sql |
| radar-ayudas · Convocatorias de subvenciones nuevas que encajan con el perfil de una empresa (sector, región, tipo de beneficiario) | pymes, gestorías y consultoras de financiación pública | bdns-api, boe-api-sumario | scripts/clientes/bdns.py (convocatorias y concesiones paginadas, altas por fecha de alta); ejemplos/boe_hoy.py subvención |
| kyb-proveedores · Ficha de riesgo de un proveedor o cliente por NIF (ayudas, contratos, actos mercantiles, prohibiciones de contratar) | departamentos de compras, fintech de crédito, compliance | bdns-api, placsp-datos-abiertos, borme-api-sumario, hacienda-registro-licitadores | herramienta empresa_nif y ejemplos/empresa_nif.py; con almacén local añade contratos adjudicados y actos del BORME |
| leads-sociedades-nuevas · Sociedades recién constituidas por provincia y objeto social, con capital y domicilio | proveedores B2B (asesorías, bancos, software de gestión, seguros) | borme-api-sumario | almacen.py sync --fuentes borme (actos Constitución con objeto, domicilio y capital en detalle) |
| informe-ubicacion · Informe de una localización (población, renta, paro, alquiler, criminalidad) para inmobiliarias, retail y franquicias | inmobiliarias, cadenas de retail y franquicias, proptech | ine-api-tempus, sepe-estadisticas, interior-criminalidad, mivau-precios-vivienda-alquiler, catastro-ovc | herramienta perfil_municipio y ejemplos/mi_municipio.py; datos/municipios.csv para pasar entre códigos |
| comparador-carburantes · Gasolineras más baratas cerca y evolución de precios por estación para conductores y flotas | apps de movilidad, gestores de flotas, comparadores | minetur-precios-carburantes | ejemplos/carburante_cerca.py; almacen.py sync --fuentes carburantes para la serie diaria por estación |
| monitor-regulatorio · Avisos de normas nuevas o modificadas por materia y del texto vigente de un artículo | despachos, compliance, legaltech | boe-api-sumario, boe-api-legislacion-consolidada, boe-eli | ejemplos/boe_hoy.py; scripts/clientes/boe.py (normas actualizadas ayer y versión vigente de un bloque) |
| panel-macro · Panel de coyuntura (IPC, paro, PIB, Euríbor, prima de riesgo) para fintech, medios y asesores | fintech, medios, asesores financieros | ine-api-tempus, bde-estadisticas | herramienta coyuntura (consulta.coyuntura); los 90 ZIP del Banco de España con descarga condicional para series completas |
| precio-electricidad · Precio de la electricidad por cuarto de hora para apps de ahorro, domótica y recarga de vehículos | apps de consumo, domótica, puntos de recarga | omie-mercado | ficha omie-mercado (ficheros marginalpdbc por día y ZIP anual) |
| buscador-medicamentos · Buscador de medicamentos con presentaciones, prospecto y problemas de suministro | farmacias, healthtech, apps de pacientes | aemps-cima-api | ficha aemps-cima-api (API REST JSON sin clave) |
| agritech-parcelas · Información de una parcela agrícola por coordenadas (uso, superficie, Red Natura, zonas vulnerables a nitratos) | agritech, cooperativas, aseguradoras agrarias | mapa-sigpac, catastro-ovc | scripts/clientes/ogc.py (recintos por bbox siguiendo next); consultas SIGPAC por punto de la ficha |
Algunos ejemplos, comprobados con llamadas reales:
- La exportación de la BDNS devuelve 50 filas aunque haya miles si no pasas
pageSize, y no avisa. Y para sincronizarla no sirve la fecha de concesión: las del 15/01/2025 se siguieron dando de alta hasta agosto de 2026 (el filtro bueno,fechaRegInicio, no está documentado). - Para filtrar un municipio, el INE no quiere su código (
02001) sino un Id interno (6124). En SIGPAC y Catastro, Madrid es28:900, no28079, y otros 4.448 municipios cambian de número (tabla de equivalencias). - El IPC del último mes es un avance que se revisa, y el PIB que se publica es el corregido: 0,68 % trimestral en 2026T2 frente al 4,79 % de la serie sin corregir.
- En el CSV del paro registrado del SEPE, Oza-Cesuras sale con 0 parados y Cerdedo-Cotobade no aparece: sus datos van con los códigos de antes de la fusión.
- Muchos servidores
.gob.esenvían el certificado FNMT sin la intermedia: el navegador entra,curlyrequestsfallan (arreglo). - Los CSV de los portales PC-Axis llegan en UTF-8 aunque la cabecera diga ISO-8859-15, y el del SEPE en Windows-1252 aunque diga UTF-8.
- En GBIF la encina ibérica es sobre todo Quercus rotundifolia (1,3 millones de registros en España); preguntar por Quercus ilex, que es lo que devuelve el buscador de nombres, da 21.322 sin ningún aviso. Y 41,6 de sus 95,8 millones de registros en España son CC BY-NC.
Fuentes catalogadas: 95. Alcance actual: Administración General del Estado y, desde octubre de 2026, las cuatro comunidades más pobladas (Madrid, Cataluña, Andalucía y Comunitat Valenciana) y los ayuntamientos de Madrid y Barcelona. Después: resto de comunidades y entidades locales, Cortes y Poder Judicial, Unión Europea.
- Una ficha por fuente, en YAML, con campos fijos validados contra un esquema. Sin prosa de relleno: cada línea ahorra una búsqueda.
- Fuente única de verdad. Solo se editan
sources/**/*.yaml. Índices,catalog.jsonyllms*.txtse generan. - Lo que no dice la documentación oficial. El campo
gotchasrecoge los detalles que hacen perder horas: cabeceras obligatorias, codificaciones raras, límites no documentados, URLs que cambian. Las trampas silenciosas, las que dan una cifra incompleta o distinta sin ningún error, van aparte enalerts, y el servidor MCP las devuelve lo primero. - Verificación explícita.
verifiedlleva la fecha de la última prueba real del endpoint, onull. Un job semanal comprueba que las URLs siguen respondiendo. - Top-down. Se cubren primero las fuentes de mayor uso e impacto, sector a sector, hasta cubrirlo todo.
| sector | descripción | fuentes |
|---|---|---|
| legislacion-boletines | Legislación y boletines oficiales | 5 |
| economia-finanzas | Economía, finanzas y mercados | 5 |
| hacienda-presupuestos | Hacienda, tributos y presupuestos | 6 |
| estadistica | Estadística oficial | 7 |
| contratacion-subvenciones | Contratación pública y subvenciones | 3 |
| empleo-seguridad-social | Empleo y Seguridad Social | 3 |
| gobierno-abierto-administracion | Gobierno abierto, transparencia y organización administrativa | 11 |
| territorio-cartografia | Territorio, catastro y cartografía | 4 |
| meteorologia-clima | Meteorología y clima | 2 |
| medio-ambiente-agua-biodiversidad | Medio ambiente, agua y biodiversidad | 5 |
| energia | Energía | 5 |
| sanidad-medicamentos | Sanidad y medicamentos | 5 |
| ciencia-investigacion | Ciencia e investigación (biología, química, geología, oceanografía) | 7 |
| agricultura-pesca-alimentacion | Agricultura, pesca y alimentación | 4 |
| transporte-movilidad | Transporte y movilidad | 7 |
| comercio-industria-propiedad | Comercio exterior, industria y propiedad industrial | 4 |
| educacion-universidades | Educación y universidades | 2 |
| justicia-interior-seguridad | Justicia, interior y seguridad | 1 |
| cultura-patrimonio | Cultura y patrimonio | 2 |
| demografia-migraciones-sociedad | Demografía, migraciones y sociedad | 4 |
| vivienda-urbanismo | Vivienda y urbanismo | 1 |
| telecomunicaciones-digital | Telecomunicaciones y sociedad digital | 1 |
exterior-cooperacion |
Acción exterior y cooperación | 0 |
| consumo-seguridad-alimentaria | Consumo y seguridad alimentaria | 1 |
defensa |
Defensa | 0 |
sources/<sector>/<id>.yaml fichas (fuente de verdad)
sources/<sector>/README.md índice del sector (generado)
schema/source.schema.json esquema de ficha
schema/vocab.yaml vocabulario controlado: sectores, acceso, auth, formatos
catalog.json todo el catálogo (generado)
llms-min.txt, llms.txt, llms-full.txt entrada para agentes, de menos a más (generado)
indices/*.yaml productos, recetas por intención, necesidades, identificadores, códigos que son parámetros, rutas muertas (fuente de verdad)
indices/README.md los seis índices en texto (generado)
ejemplos/ proyectos pequeños que funcionan (carburante, BOE, licitaciones, municipio, subvenciones)
plugins/, .claude-plugin/ plugin de Claude Code con la skill y el servidor MCP
datos/municipios.csv los 8.132 municipios con su código INE, Id del INE Tempus, SIGPAC y Catastro, DIR3, NIF, NUTS3 y coordenadas (scripts/municipios.py)
scripts/ validate.py, build.py, check_links.py, check_recetas.py, check_ejemplos.py, fnmt_bundle.py, mcp_catalogo.py (servidor MCP local)
scripts/clientes/ sesión HTTP, clientes CKAN, Socrata, PC-Axis, ArcGIS y OGC, cargadores (BOE y BORME, BDNS, AEMET, INE, PLACSP, DataComex, Saiku) y almacén local en Parquet
scripts/clientes/muestras/ respuestas reales recortadas para probar los parsers sin red (python scripts/test_clientes.py)
evals/ 24 tareas con respuesta esperada para medir lo que aporta el repo a un agente
templates/source.yaml plantilla de ficha
guides/ guías transversales (cliente HTTP, identificadores, servidor MCP, reutilización y datos personales, almacén)
# Todo el catálogo
curl -s https://raw.githubusercontent.com/BquantFinance/Administracion-fuentes-publicas/main/catalog.json
# Fuentes de un sector con API REST y sin autenticación
curl -s .../catalog.json | jq '.sources[] | select(.sector=="economia-finanzas" and (.access|index("api-rest")) and .auth=="none") | .id'# pip install "fuentes-publicas-mcp @ git+https://github.com/BquantFinance/Administracion-fuentes-publicas"
from fuentes_publicas.clientes import ckan, socrata, pcaxis, arcgis, ogc
from fuentes_publicas.clientes.sesion import sesion # requests.Session con FNMT, User-Agent, reintentos y bloqueos
pcaxis.tabla(24077)[:3] # IPC del INE en CSV: UTF-8 real, coma decimal y periodo sin dato como None
list(socrata.filas("gn9e-3qhr")) # 87.930 filas de la Generalitat, no las 1.000 que da Socrata sin $limit
list(ckan.filas("cnmc", rid)) # todas las filas del datastore aunque el portal recorte limit a 32.000
ckan.comparar("comunidad-madrid", rec) # el datastore del padrón tiene 5.000 filas; el CSV, 18.718Además de las fichas, indices/ responde a las preguntas que se hacen antes de elegir una fuente:
- Productos: qué se puede construir hoy, para quién y con qué piezas.
- Recetas por intención: procedimientos verificados que encadenan fichas (de un NIF a sus subvenciones y contratos, de unas coordenadas a la referencia catastral, del sumario del BOE al texto consolidado). Cada receta lleva comprobaciones que
python scripts/check_recetas.pyejecuta contra los servidores reales. - Dónde está cada cosa: necesidades habituales con la ficha que las resuelve y la nota que evita el desvío típico.
- Identificadores: los códigos que cruzan datasets, con regex, ejemplo, emisor y vías verificadas de conversión.
- Códigos que son parámetros: valores que las APIs exigen y no se adivinan (Id del INE para
tv, países de DataComex, estación de AEMET por capital, productos de carburantes, rangos del BOE), obtenidos con llamadas reales. - Rutas muertas: URLs de documentación antigua que ya no sirven y su sustituta.
Medido (evals/): en diez tareas resueltas por el mismo agente con y sin catálogo (dos modelos), el acierto fue el mismo; con catálogo, en las tareas difíciles las llamadas HTTP y los pasos del agente bajan a la mitad y las fallidas casi a cero. En tareas con trampas silenciosas y un modelo pequeño (Haiku, tres repeticiones, tokens medidos turno a turno), el acierto pasa de 3 de 21 sin catálogo a 13 de 21 con el servidor MCP, con un 43 % menos de tokens; con las alertas, las trampas que aún fallaban pasan de 5 a 18 de 18.
Todo en indices/README.md y, para consumo programático, bajo la clave indices de catalog.json. Cada endpoint principal de una ficha lleva example (llamada copiable) y returns (forma de la respuesta vista en esa llamada). python scripts/mcp_catalogo.py expone el catálogo por MCP en local para cargar solo lo necesario (guía).
Lee CONTRIBUTING.md. Resumen: copia templates/source.yaml, rellena, ejecuta python scripts/validate.py && python scripts/build.py, abre un PR.
Catálogo y documentación: CC0 1.0. Los datos a los que apuntan las fichas tienen cada uno su propia licencia, indicada en el campo license.