Contratación Pública Abierta: un portal open source con casi 9 millones de contratos públicos
Contratación Pública Abierta es un portal de código abierto que reúne y normaliza casi 9 millones de contratos públicos de España y los enlaza a su fuente.
Por David Carrero ·
Contratación Pública Abierta es un portal de código abierto que descarga los contratos públicos de toda España, los normaliza y los presenta de forma que se puedan buscar, comparar y analizar. Reúne casi 9 millones de contratos de unos 17.300 organismos, agrupa a los adjudicatarios por su NIF/CIF y enlaza cada contrato con su anuncio oficial. El código está en GitHub con licencia MIT.
Por qué lo hemos hecho
Los datos de contratación pública en España son abiertos, pero no son cómodos. La Plataforma de Contratación del Sector Público los publica en feeds Atom con el formato CODICE, cada comunidad autónoma con plataforma propia los publica a su manera y el buscador oficial está pensado para encontrar un expediente concreto, no para responder preguntas como cuánto ha adjudicado un organismo este año o qué empresas trabajan más con él.
Además, el mismo adjudicatario aparece escrito de mil formas: con y sin «S.L.», con tildes o sin ellas, en mayúsculas o abreviado. Si agrupas por nombre, una empresa se convierte en diez. Contratación Pública Abierta resuelve esos dos problemas: junta las fuentes en una sola base de datos y usa el NIF como identificador.
Qué datos tiene
Según el README del proyecto, la base de datos cuenta ahora con:
- unos 8,9 millones de contratos públicos,
- unos 17.300 organismos contratantes,
- unos 644.000 adjudicatarios distintos,
- las 19 comunidades y ciudades autónomas, unas con fuente regional propia y el resto a través de la Plataforma.
De dónde salen
La base es la Plataforma de Contratación, con tres canales: licitaciones, contratos menores y plataformas agregadas. Ese tercer canal es imprescindible, porque los organismos de Cataluña, Euskadi, Andalucía, Madrid, Galicia, Navarra y La Rioja publican en la plataforma de su comunidad y no directamente en la estatal. Los canales no se solapan: sin el de agregadas faltaría buena parte del país.
A eso se suman los portales de datos abiertos de Cataluña, Andalucía, País Vasco, Asturias, Canarias, Comunitat Valenciana, Aragón, Castilla y León, Comunidad de Madrid y Región de Murcia, cada uno con su propio comando de sincronización, y los datos ya procesados del dataset histórico de BQuant. Todas estas fuentes tienen su ficha en nuestro catálogo de fuentes.
Cuatro principios
El proyecto se apoya en unas pocas reglas que explican cómo se comportan los datos:
- El NIF manda. Organismos y adjudicatarios se identifican por NIF, nunca por el nombre. Así se evitan los duplicados por variantes de escritura.
- Trazabilidad. Cada contrato guarda su identificador en la Plataforma, el enlace al anuncio oficial y la fuente de la que procede. Siempre se puede comprobar el dato en origen.
- Historial. Cuando un contrato se actualiza, la versión anterior se conserva.
- Portabilidad. Las migraciones funcionan tanto en SQLite, para desarrollar, como en PostgreSQL, para producción.
Qué se puede hacer con él
- Fichas de empresa, organismo y comunidad, centradas en el año en curso, con comparación interanual sobre el mismo tramo de meses y la evolución mes a mes.
- Histórico con una matriz de actividad por mes y año, y vistas por año concreto.
- Búsqueda de texto completo en español, con PostgreSQL.
- Mapa por territorios, rankings con gasto por habitante y gráficas de análisis.
- Grafo de relaciones entre organismos y empresas.
- Detección de anomalías, alertas por correo y RSS, e informes por comunidad o por año exportables a CSV y PDF.
La interfaz se ha diseñado para cumplir las pautas de accesibilidad WCAG 2.2 AA y para usarse también desde el móvil.
Cómo está hecho
Es una aplicación Laravel 12 (PHP 8.3 o superior) con Livewire 4, Alpine.js y Tailwind CSS 4 en la interfaz, Chart.js, Leaflet y D3.js para las visualizaciones, y PostgreSQL 17 en producción. Incluye configuración de Docker con FrankenPHP para levantarlo sin instalar nada a mano.
Los datos se cargan con comandos de Artisan, uno por fuente:
# Plataforma de Contratación
php artisan placsp:sync-licitaciones
php artisan placsp:sync-menores
# Una fuente autonómica, por ejemplo Cataluña
php artisan regional:sync-cat
# Recalcular estadísticas
php artisan stats:recalculate
Las instrucciones completas de instalación, en local o con Docker, están en el README del repositorio.
Lo que conviene saber
Los datos vienen de fuentes públicas y se normalizan de forma automática, así que pueden contener errores o no estar al día. Para cualquier uso oficial o legal hay que acudir a la fuente: la Plataforma de Contratación o el portal de la administración correspondiente. El proyecto no la sustituye; precisamente por eso cada contrato enlaza a su anuncio original.
Por ahora no hay una versión pública en línea: quien quiera usarlo tiene que instalarlo en su propio servidor. Nuestra intención es ofrecer una web de consulta abierta a todo el mundo, pero hasta entonces es una herramienta pensada para perfiles técnicos, redacciones o entidades que quieran montar su propio buscador.
Cómo participar
El proyecto acepta contribuciones mediante issues y pull requests en GitHub. Si conoces una fuente oficial de datos de contratación que no esté incorporada, si encuentras un error en la normalización o si lo has desplegado y quieres contarnos para qué lo usas, puedes abrir un issue o escribirnos. En la sección de código recogemos además otros proyectos libres que trabajan con estos mismos datos.
Preguntas frecuentes
¿Es gratis? Sí. El código tiene licencia MIT: puedes usarlo, modificarlo y desplegarlo, también con fines comerciales, siempre que mantengas el aviso de copyright y la licencia. Los datos tienen las condiciones de reutilización de cada fuente oficial.
¿Es un portal oficial? No. Es un proyecto independiente que trabaja con datos públicos oficiales y enlaza siempre a la fuente original.
¿Incluye contratos de ayuntamientos? Sí, los que se publican en la Plataforma de Contratación o en las plataformas autonómicas agregadas, que son muchos. Además incorpora los contratos menores del Ayuntamiento de Madrid desde su portal de datos abiertos.
¿Qué necesito para instalarlo? PHP 8.3 o superior, Composer, Node.js 20 o superior y una base de datos SQLite (para probar) o PostgreSQL 17 (para producción). Con Docker basta con tener Docker instalado.
¿Cada cuánto se actualizan los datos? Depende de cómo lo configures: los comandos de sincronización se pueden programar a diario, que es la frecuencia con la que la Plataforma publica novedades.