Cinco preguntas que puedes responder con datos de contratación pública

Cinco preguntas de periodismo de datos sobre contratación pública: qué dataset usar, qué campos mirar, cómo plantear el análisis y qué cautelas tener.

Por David Carrero ·

Con los datos abiertos de la Plataforma de Contratación del Sector Público se pueden responder, entre otras, estas cinco preguntas: quién concentra las adjudicaciones de un órgano, cuántos contratos menores se quedan justo por debajo del límite legal, qué licitaciones recibieron una sola oferta, cuánto se rebaja el precio entre la licitación y la adjudicación y cuánto encarga cada organismo a sus medios propios. Para cada una te contamos qué conjunto de datos usar, qué campos mirar y con qué cautelas leer el resultado.

Una advertencia que vale para todas: estos análisis sirven para encontrar preguntas, no para dar respuestas cerradas. Un patrón llamativo puede tener una explicación perfectamente legal, y antes de publicar hay que leer los expedientes y hablar con el órgano de contratación.

Antes de empezar: cómo preparar los datos

Los feeds de la Plataforma vienen en XML (formato CODICE) dentro de ZIP anuales, que tienes en Descargas. Si nunca los has abierto, empieza por cómo descargar los datos de la Plataforma y cómo leer el feed Atom con Python. Lo práctico es convertirlos en una tabla con una fila por lote adjudicado.

Dos trampas habituales al hacerlo:

  • Un mismo expediente aparece varias veces en el feed a medida que cambia de estado (publicado, adjudicado, formalizado…). Quédate con la versión más reciente de cada uno o contarás contratos repetidos.
  • Los importes llegan con y sin IVA en campos distintos. Compara siempre magnitudes equivalentes.

Si no programas, algunos portales del directorio ya ofrecen rankings y filtros que cubren parte de estas preguntas. Lo contamos en herramientas gratuitas para buscar contratos públicos sin programar.

1. ¿Quién concentra las adjudicaciones de un órgano?

Dataset: licitaciones por perfil de contratante y, para entidades que publican a través de plataformas autonómicas o provinciales, las plataformas agregadas.

Campos:

  • LocatedContractingParty, con el NIF y el código DIR3 del órgano.
  • TenderResult/WinningParty, con el NIF y el nombre del adjudicatario.
  • TenderResult/AwardedTenderedProject/LegalMonetaryTotal/TaxExclusiveAmount, el importe adjudicado sin IVA de cada lote.

Cómo plantearlo: filtra por el NIF del órgano, agrupa por NIF del adjudicatario y calcula qué porcentaje del importe total se lleva cada empresa. Con pandas:

import pandas as pd

# Tabla generada desde el feed Atom: una fila por lote adjudicado
df = pd.read_csv('awards_2025.csv', dtype={'buyer_nif': str, 'winner_nif': str})

TARGET_BUYER = 'Q0000000J'  # NIF del órgano que quieras estudiar

ranking = (
    df[df['buyer_nif'] == TARGET_BUYER]
    .groupby('winner_nif')
    .agg(contracts=('folder_id', 'nunique'), amount=('amount_excl_vat', 'sum'))
    .sort_values('amount', ascending=False)
)
# Cuota de cada adjudicatario sobre el total del órgano
ranking['share'] = ranking['amount'] / ranking['amount'].sum()
print(ranking.head(10))

Cautelas: agrupa por NIF y no por nombre, porque el mismo adjudicatario aparece escrito de varias formas. Las UTE tienen NIF propio y esconden a las empresas que las forman. Y en sectores con pocos proveedores (mantenimiento de un equipo concreto, por ejemplo) una concentración alta puede ser simplemente el mercado.

2. ¿Cuántos contratos menores rozan el umbral?

Dataset: contratos menores de la Plataforma, disponible desde 2018. Para la Junta de Andalucía hay además un conjunto propio.

El artículo 118 de la Ley 9/2017 define como menores los contratos de valor estimado inferior a 40.000 euros en obras y a 15.000 euros en suministros y servicios. El valor estimado se calcula sin IVA (artículo 101). Lo explicamos con más detalle en contratos menores: límites y dónde consultarlos.

Campos:

  • ProcurementProject/TypeCode, el tipo de contrato (1 suministros, 2 servicios, 3 obras).
  • BudgetAmount/TaxExclusiveAmount, el importe sin IVA.
  • LocatedContractingParty y TenderResult/WinningParty.

Cómo plantearlo: haz un histograma de importes por tipo de contrato y mira si hay un pico justo por debajo del límite. Después busca repeticiones: el mismo órgano, el mismo adjudicatario y objetos parecidos en fechas cercanas.

Cautelas: estar cerca del límite no es ilegal. Lo que prohíbe la ley es fraccionar un contrato para no superarlo, y el artículo 118.2 exige un informe que justifique que no se está haciendo. Además, la obligación de publicar los menores es al menos trimestral y excluye los de menos de 5.000 euros pagados por anticipo de caja fija (artículo 63.4), así que el feed no recoge todos los menores que existen.

3. ¿Qué licitaciones tuvieron una sola oferta?

Dataset: licitaciones y plataformas agregadas.

Campos:

  • TenderResult/ReceivedTenderQuantity, el número de ofertas recibidas en cada lote.
  • TenderingProcess/ProcedureCode, el procedimiento.
  • RequiredCommodityClassification/ItemClassificationCode, el código CPV del objeto.

Cómo plantearlo: calcula, por órgano o por CPV, qué porcentaje de lotes adjudicados recibió una única oferta, y compáralo con la media de su sector. Ver la evolución por años suele contar más que una cifra suelta.

Cautelas: separa los procedimientos con publicidad de los negociados sin publicidad, donde una sola oferta puede ser lo esperable. Revisa también los valores vacíos o a cero, porque no todos los anuncios rellenan el campo. Una oferta única puede deberse a un mercado muy especializado, a un plazo corto o a unos pliegos muy exigentes, y averiguar cuál es el caso es precisamente el trabajo periodístico.

4. ¿Cuánto se rebaja el precio entre licitación y adjudicación?

Dataset: licitaciones. Si te interesan los contratos grandes y quieres compararlos con otros países, los avisos de TED traen el valor estimado y el adjudicado con campos comunes a toda Europa, como contamos en contratos españoles en TED.

Campos:

  • BudgetAmount/TaxExclusiveAmount, el presupuesto de licitación sin IVA.
  • TenderResult/AwardedTenderedProject/LegalMonetaryTotal/TaxExclusiveAmount, el importe adjudicado sin IVA.

Cómo plantearlo: calcula la baja como 1 - adjudicado / licitado y estudia su distribución por órgano, por CPV o por número de ofertas (en general, cuanta más competencia, más baja cabe esperar).

Cautelas: compara siempre sin IVA con sin IVA, porque el importe a pagar (PayableAmount) suele incluir el impuesto. Cuando hay lotes, el presupuesto del expediente y el de cada lote no coinciden, así que trabaja lote a lote. En acuerdos marco y contratos por precios unitarios el importe adjudicado puede no reflejar lo que se acabará pagando.

5. ¿Cuánto encarga cada organismo a sus medios propios?

Dataset: encargos a medios propios, con datos desde 2022. Tienes una guía completa en encargos a medios propios: qué son y dónde están los datos.

Los encargos están regulados en el artículo 32 de la LCSP, que establece que un encargo que cumpla sus requisitos no tiene la consideración de contrato. Por eso no aparecen en los feeds de licitaciones.

Campos:

  • LocatedContractingParty y su jerarquía ParentLocatedParty, para saber qué organismo hace el encargo y de qué ministerio o consejería depende.
  • TenderResult/WinningParty, la entidad que recibe el encargo.
  • BudgetAmount/TaxExclusiveAmount, el importe.

Cómo plantearlo: suma por organismo y por medio propio y compara con lo que ese mismo organismo licita en concurrencia en los feeds de licitaciones. Así ves qué parte de su actividad pasa por encargos directos.

Cautelas: la serie es corta y no permite ver tendencias largas. Encargar a un medio propio es legal si se cumplen los requisitos del artículo 32, de modo que un volumen alto no indica por sí solo ningún problema. Lo que sí merece pregunta es si el medio propio subcontrata después gran parte del trabajo.

Más allá de la Plataforma

Estas preguntas se pueden cruzar con otras fuentes. La BDNS dice qué subvenciones recibe una empresa adjudicataria (lo explicamos en la guía de la BDNS), y el inventario INVENTE ayuda a identificar qué entidades forman parte del sector público. En Fuentes de datos tienes el catálogo completo, también con las fuentes de cada comunidad autónoma.

Preguntas frecuentes

¿Puedo afirmar que hay fraude a partir de estos análisis? No. Los datos muestran patrones, no intenciones. Antes de publicar hay que revisar los expedientes, pedir explicaciones al órgano y, si hace falta, consultar a especialistas en contratación pública.

¿Necesito programar para hacer estos análisis? Para las cinco preguntas con datos completos, sí conviene saber algo de Python o R. Para una primera aproximación, algunos portales del directorio ofrecen rankings de adjudicatarios o datos de contratos con una sola oferta ya calculados.

¿Los datos de la Plataforma incluyen a todas las administraciones? Incluyen los órganos con perfil de contratante en la Plataforma y los que publican a través de plataformas agregadas. Algunas comunidades autónomas tienen además sus propios portales, que recogemos en datos abiertos de contratación por comunidad autónoma.

¿Por qué agrupar por NIF y no por nombre? Porque el nombre de una misma empresa aparece escrito de muchas formas (con o sin «S.L.», abreviado, con errores). El NIF es el identificador estable.