Saltar al contenido

Datos abiertos

Descargas y datos en CSV y JSON

Cada búsqueda y cada ficha se descargan en CSV o JSON; los indicadores por órgano, los datos de los gráficos y los RSS también tienen su dirección. Aquí están todas, con ejemplos, sus límites y qué es cada columna.

Datos
Actualizados el 03/11/2026 (cada semana)
Una búsqueda
Hasta 1.000 filas, CSV o JSON
Una ficha
Hasta 10.000 contratos, CSV o JSON
Todo
Los Parquet de cada fuente, en GitHub

Descargas y datos

Qué es (y qué no)

No es una API estable

Son las descargas de la web y los ficheros que leen sus páginas. Pueden cambiar de nombre, de columnas o desaparecer con cualquier actualización, sin aviso. Sirven para bajar lo que se ve en una página; para un trabajo que tenga que durar o para bajar mucho, usa los datos completos de GitHub, que tienen versiones.

Las direcciones de abajo cuelgan de /api/ o de su página; ninguna pide registro. Cada descarga lleva los contratos tal como los publica cada fuente, con su IVA y sus marcas de calidad, y sin datos de personas físicas. Qué es cada columna, de qué fuente llega y con qué IVA, en el diccionario.

Una búsqueda

En el buscador, «Descargar» baja las primeras 1.000 filas de la búsqueda en su orden. La dirección de la descarga es la búsqueda: los mismos parámetros que la página (lo que va detrás de /buscar?), así que guardada la repite, con los datos de cada semana; el menú la da para copiarla. El fichero lleva en su nombre la fecha de los datos, y las cabeceras X-Busqueda (la búsqueda en la web) y X-Datos-Actualizados. Hace falta un texto o algún filtro.

Descargas de una búsqueda
DirecciónQué devuelveEjemplo
/api/buscar/exportar/csv?…La búsqueda en CSV (separador «;», decimales con coma, UTF-8 con BOM) /api/buscar/exportar/csv?ccaa=MD&year_from=2024&year_to=2024&only_menor=1
/api/buscar/exportar/json?…Lo mismo en JSON, con «meta» (la búsqueda, la fecha de los datos, la nota y qué es cada columna) y «contratos» /api/buscar/exportar/json?q=limpieza&ccaa=MD
Terminal
curl -s -o madrid-menores-2024.csv \
  'https://buscalicitaciones.com/api/buscar/exportar/csv?ccaa=MD&year_from=2024&year_to=2024&only_menor=1'
Python · pandas
import pandas as pd

url = 'https://buscalicitaciones.com/api/buscar/exportar/csv?ccaa=MD&year_from=2024&year_to=2024&only_menor=1'
menores = pd.read_csv(url, sep=';', decimal=',', encoding='utf-8-sig')
print(len(menores), 'filas;', menores['imp_adj_eur_corregido'].sum(), '€ que cuentan')

Sin texto, las filas van en el orden de la página con desempate por fuente, año e identificador: la misma dirección da las mismas filas mientras no cambien los datos. Con texto, en el orden del buscador de texto. Con texto, el CSV trae los campos de la tarjeta del buscador; sin texto, todas las columnas de la descarga.

Una ficha

Cada ficha de empresa y de órgano baja sus contratos, los más recientes primero, hasta 10.000. clave es la de la ficha (el NIF o, sin NIF, el nombre normalizado); cuenta=todas, cada publicación. Las fichas de personas físicas no se descargan.

Descargas de una ficha
DirecciónQué devuelveEjemplo
/api/exportar/organo/{csv|json}?clave=…Los contratos de un órgano /api/exportar/organo/json?clave=P2807900B
/api/exportar/empresa/{csv|json}?clave=…Los contratos de una empresa (su NIF) —
/api/rss/organo?clave=… · /api/rss/empresa?clave=…Sus 20 contratos más recientes, en RSS /api/rss/organo?clave=P2807900B
Python
import json, urllib.request

url = 'https://buscalicitaciones.com/api/exportar/organo/json?clave=P2807900B'
with urllib.request.urlopen(url) as r:
    d = json.load(r)
print(d['meta']['contratos_total'], 'contratos;', d['meta']['licencia'])
for c in d['contratos'][:5]:
    print(c['fecha_adj'], c['imp_adj_eur'], c['imp_adj_iva'], c['objeto'][:60])

Indicadores por órgano

Las tablas de los indicadores de cumplimiento y descriptores de cada ficha de órgano, para todos los órganos y años, en CSV y Parquet, con su propio diccionario: en Descargas de indicadores.

Descargas de indicadores
DirecciónQué devuelveEjemplo
/api/exportar/indicadores/{tabla}.{csv|parquet}Una tabla de indicadores (las de /exportar) /api/exportar/indicadores/diccionario.json
/api/indicadores/hechos/{lista}.csv?clave=…&anio=…Los contratos de una lista de hechos de una ficha y un año (dias-agrupados, series-mismo-objeto, sobre-el-umbral) —
Python · DuckDB
import duckdb   # pip install duckdb

duckdb.sql("SELECT * FROM 'https://buscalicitaciones.com/api/exportar/indicadores/descriptores_organo_anio.parquet' LIMIT 5").show()

Ofertas por licitador

Quién se presentó a cada licitación y con qué oferta, cuál ganó y su baja sobre el presupuesto: una fila por oferta, solo de empresas (nunca personas físicas, comunidades de bienes, sociedades civiles ni UTE con el nombre de una persona), de las fuentes que publican la relación de ofertas. Es la tabla del bloque «Quién se presentó» de cada ficha de contrato. Qué se publica y qué no, su cobertura y lo que no dice, en su metodología; cada columna, en el diccionario.

Descargas de las ofertas por licitador
DirecciónQué devuelveEjemplo
/api/exportar/licitadores/ofertas.csvTodas las ofertas en CSV (separador «;», decimales con coma, UTF-8 con BOM): 61.768 filas, 39,3 MB /api/exportar/licitadores/ofertas.csv
/api/exportar/licitadores/ofertas.parquetLo mismo en Parquet: 2,4 MB /api/exportar/licitadores/ofertas.parquet
/api/exportar/licitadores/meta.jsonProcedencia, licencia de cada fuente, fecha, regla, cobertura por fuente y año, lo que queda fuera por motivo, columnas y la huella (sha256) de cada fichero /api/exportar/licitadores/meta.json
/api/exportar/licitadores/vinculadas.{csv|parquet}Los pares de empresas de una misma licitación vinculadas en el Registro Mercantil (administrador común, mismo domicilio o mismo grupo; sin personas): 626 pares /api/exportar/licitadores/vinculadas.csv
Fuentes de las ofertas por licitador
FuenteOfertasLicitacionesAñosLicencia
Cantabria · Gobierno de Cantabria y su sector público22.646 7.821 2017-2026 CC BY 3.0 ES
TED · Diario Oficial de la UE (avisos eForms)39.122 8.124 2020-2026 Decisión 2011/833/UE (reutilización de los documentos de la Comisión)
Python · DuckDB
import duckdb   # pip install duckdb

# Licitaciones y ofertas publicadas por fuente y año
duckdb.sql("""
    SELECT fuente, anio, count(DISTINCT lote_clave) AS licitaciones, count(*) AS ofertas
    FROM 'https://buscalicitaciones.com/api/exportar/licitadores/ofertas.parquet'
    GROUP BY ALL ORDER BY ALL
""").show()

Cita cada fuente con su licencia (en meta.json: «atribucion»). Las filas con la misma lote_clave son las ofertas de una misma licitación o lote.

Los datos de los gráficos

Cada gráfico de Cómo se contrata tiene en «Ver los datos» la tabla de lo que enseña, su CSV y el CSV completo. Son los ficheros que lee la página: cambian con ella.

Datos de los gráficos
DirecciónQué devuelveEjemplo
/como-se-contrata/datos/{nombre}.csvEl CSV completo de un gráfico (rio, calendario, umbral, versiones, ley_series, ley_eventos, ley_normas) /como-se-contrata/datos/rio.csv
/como-se-contrata/datos/{nombre}.jsonLo que dibuja la página (rio, umbral, versiones, ley; calendario/{tipo}) /como-se-contrata/datos/rio.json

Precio frente a una referencia oficial

Pagado ÷ referencia oficial del mes en los contratos de carburantes y de papel A4 que dicen la cantidad en el objeto: por mercado, producto, provincia y año, y por órgano de contratación con 10 compras medibles o más. Ninguna fila es un contrato ni una empresa. Método y cobertura, en su metodología; las tablas, en Descargas.

Descargas del precio frente a una referencia
DirecciónQué devuelveEjemplo
/api/exportar/precios/{tabla}.{csv|parquet}Una tabla (precios_mercado_anio o precios_organo) /api/exportar/precios/precios_mercado_anio.csv
/api/exportar/precios/meta.jsonProcedencia, referencias oficiales con su sha256 y el diccionario de las dos tablas /api/exportar/precios/meta.json
/como-se-contrata/datos/precios.jsonLo que dibuja el gráfico 7 (referencia por mes y provincia, trimestres y años) /como-se-contrata/datos/precios.json
Diccionario de precios_mercado_anio
ColumnaQué es
mercadocarburantes o papel
productogasoleo_a, gasoleo_b, gasoleo_c, gasolina95; en papel, lote1 (fibra virgen o sin indicar) o lote2 (reciclado)
provincia_inecódigo INE de la provincia del órgano; 00 = toda España (incluye las de provincia desconocida)
provincianombre de la provincia
anioaño del mes de referencia; «todos» = 2015-2026 (papel desde mayo de 2020)
contratoscontratos medibles (cantidad en el objeto, referencia del mes, razón válida)
mediana_razonmediana de pagado ÷ referencia (1 = el precio oficial del mes)
ic95_inflímite inferior del intervalo del 95 % (remuestreo de contratos, 2.000 réplicas)
ic95_suplímite superior
pct_por_encima% de contratos que pagaron más de un 15 % por encima de la referencia
Diccionario de precios_organo
ColumnaQué es
mercadocarburantes o papel
productoen carburantes, el producto; en papel, «todos»
organo_claveel órgano de contratación de la identidad (organo_clave)
organosu nombre
tipo_organosu tipo
contratoscompras medibles del órgano (10 o más)
por_encimacuántas pagaron más de un 15 % por encima (K de N)
pct_resto% por encima en el resto de compradores del mismo mercado y producto
p_valorprueba binomial de cola superior frente al resto
hechoverdadero si se separa del resto tras la corrección de Holm (5 %) sobre los órganos comparados del mercado
mediana_razonmediana de pagado ÷ referencia del órgano
ic95_inflímite inferior del intervalo del 95 % (2.000 réplicas)
ic95_suplímite superior
resto_contratoscompras medibles del resto
resto_medianamediana del resto
anio_desdeprimer año con compras medibles
anio_hastaúltimo año

RSS

Canales RSS
DirecciónQué devuelveEjemplo
/api/rss/buscar?q=…Los 30 contratos más recientes de una búsqueda con texto /api/rss/buscar?q=ambulancias
/en-plazo.xml · /en-plazo/{comunidad}.xmlLas licitaciones publicadas más recientemente que siguen en plazo /en-plazo.xml

Lo demás que hay bajo /api/ (las sugerencias de la caja de búsqueda, los trozos de las fichas que llegan aparte) es de las páginas: no está pensado para reutilizarse.

Diccionario de columnas

Qué es cada columna de los contratos, su tipo, su IVA, sus valores posibles y de qué fuentes llega, en el diccionario. Se genera del esquema de la tabla única y del informe de cada actualización semanal, así que no se desfasa.

Descargas del diccionario
DirecciónQué devuelveEjemplo
/api/exportar/diccionario.{json|csv}El diccionario entero /api/exportar/diccionario.json
/api/exportar/presencia-columnas.csvEl % de filas con valor de cada columna en cada tabla de origen /api/exportar/presencia-columnas.csv

Privacidad y límites

  • Un contrato adjudicado a una persona física va sin su nombre («[persona física]»), su NIF, su identificador ni su enlace; su ficha no se descarga. Un órgano que publica con el NIF de una persona física sale como «otros», sin NIF ni nombre (política de privacidad).
  • Una búsqueda baja como mucho 1.000 filas y una ficha 10.000 contratos: lo que pasa de ahí, en los datos completos.
  • Si lo automatizas, pide de una en una y deja al menos un segundo entre peticiones: la web es un proyecto pequeño. Los rastreadores no recorren /api/ (robots.txt).

Licencia y cita

Datos de fuentes oficiales reutilizables (Ley 37/2007). Cita la fuente oficial y buscalicitaciones.com. Las licencias de cada fuente (la del sector público español, la del TED, la del BOE), en la metodología. Cita la página o la descarga con su dirección y la fecha de los datos.

Cómo citar

«Descargas y datos en CSV y JSON». buscalicitaciones.com, https://buscalicitaciones.com/datos. Datos actualizados el 03/11/2026.

Los datos completos

Los datos de cada fuente, tal como los descarga el repositorio público, en Parquet y con sus versiones, en el último release de GitHub; cómo leerlos con DuckDB o pandas, en la metodología.