API y exportaciones
Llévate los datos: CSV, Excel y API.
Descarga en un clic la cartera, los vencimientos, los contratos de tus rivales, lo que encaja y tus clientes, o léelos desde tu CRM con una clave de API, o pregúntale a Claude con el servidor MCP. Cada fila, con su enlace oficial.
Tus datos de licitación, fuera de la pantalla
Adjudico.es reúne lo que la Plataforma de Contratación del Sector Público publica sobre cada empresa: lo que ha ganado, cuándo vence, quién gana en sus organismos y qué licitaciones abiertas encajan. Puedes llevártelo de dos maneras: descargando las listas en CSV o Excel desde la página que estás viendo, o leyéndolas con la API desde tu CRM, tus hojas de cálculo o tus propios programas.
| Plan | CSV | Excel | API |
|---|---|---|---|
| Gratuito | No | No | No |
| Empresa | Sí | No | No |
| Equipo | Sí | Sí | No |
| Consultora | Sí | Sí | 10.000 peticiones al día por organización |
| Grupo | Sí | Sí | 100.000 peticiones al día por organización |
Los precios y el resto de lo que incluye cada plan están en Precios.
Exportar a CSV y Excel
Con la sesión iniciada, el bloque Descargar CSV / Excel aparece en la página de cada empresa, en tu cola Hoy y en la lista de clientes de Mi cuenta. Estas son las listas:
- Cartera: las 25 adjudicaciones más recientes y cada contrato de servicios o suministros que termina en los próximos 12 meses, con importe, fecha de adjudicación, fecha de fin y su base.
- Vencimientos: los contratos que terminan en 12 meses, del más próximo al más lejano, con la cadencia del organismo cuando la repite con regularidad.
- Contratos de rivales: los contratos de quienes ganan tu actividad en tus organismos habituales que terminan en 12 meses, con el adjudicatario actual.
- Licitaciones que encajan: las abiertas publicadas o actualizadas en los últimos 90 días que encajan con tu perfil (o con el de un cliente), con su encaje alto, medio o bajo y los motivos.
- Clientes (Consultora): cada cliente con sus adjudicaciones, lo que le vence en 12 meses y el enlace a su informe.
Cada fila lleva su enlace oficial al expediente en la Plataforma de Contratación del Sector Público, y el archivo trae una hoja «Acerca de» con la fecha de los datos, su origen y qué es una estimación. Las fechas de fin son estimaciones salvo las que publica el organismo.
El CSV está pensado para Excel en español: UTF-8 con BOM, punto y coma entre campos y coma decimal (40000,50). Si lo vas a abrir con otra herramienta, añade ?sep=, a la descarga para usar comas y punto decimal. El Excel (.xlsx) trae números y fechas de verdad, la cabecera fija y el filtro puesto. Los títulos que empiezan por =, +, - o @ se guardan como texto, nunca como fórmula.
Claves de API
Crea las claves en Mi cuenta › API (planes Consultora y Grupo). Dale a cada una un nombre («CRM de la consultora») y solo los permisos que necesite. Puedes tener hasta 5 claves activas.
| Permiso | Qué deja leer |
|---|---|
read:companies | Empresas: resumen, contratos y vencimientos |
read:tenders | Licitaciones abiertas por CPV y zona, anuncios previos y órganos de contratación |
read:fits | Encajes con tus perfiles guardados |
La clave se muestra una sola vez, al crearla. Guardamos solo su huella SHA-256 y su prefijo (adj_XXXXXXXX), así que nadie, tampoco nosotros, puede volver a leerla. Si la pierdes, revócala y crea otra: la revocación es inmediata. Nunca escribimos una clave ni la cabecera Authorization en nuestros registros.
Autenticación
Cada petición lleva la clave en la cabecera Authorization. La API es de servidor a servidor: no admite peticiones desde el navegador de otra web (no envía cabeceras CORS) ni usa la sesión de tu cuenta, para que una página ajena no pueda usar tu clave.
Authorization: Bearer adj_XXXXXXXX_…Rutas
GET /public-api/companies/{nif}read:companies- Resumen de una empresa: adjudicaciones de 5 años, actividades, zonas y organismos principales.
GET /public-api/companies/{nif}/contractsread:companies- Sus contratos, con la fecha de fin y su base (publicada, derivada o estimada).
GET /public-api/companies/{nif}/expiriesread:companies- Sus contratos que vencen en 12 meses, del más próximo al más lejano.
GET /public-api/tendersread:tenders- Licitaciones abiertas, filtradas por CPV (
cpv) y zona NUTS (region). GET /public-api/prior-noticesread:tenders- Se prepara: contratos anunciados con un anuncio de información previa y aún sin licitar, por CPV, zona u órgano (
buyer). GET /public-api/buyers/{nif}read:tenders- Un órgano de contratación: qué compra, quién gana, con qué baja, qué tiene abierto, qué vence y qué ha anunciado.
GET /public-api/fitsread:fits- Licitaciones que encajan con el perfil de tu cuenta o, con
client, con el de un cliente.
Todas cuelgan de https://adjudico.es/api/v1. La descripción completa, con cada campo, está en OpenAPI 3.1: /api/v1/openapi.json.
Ejemplos con curl
curl -H "Authorization: Bearer $ADJUDICO_KEY" \
https://adjudico.es/api/v1/public-api/companies/B12345674curl -H "Authorization: Bearer $ADJUDICO_KEY" \
"https://adjudico.es/api/v1/public-api/companies/B12345674/expiries?limit=50"curl -H "Authorization: Bearer $ADJUDICO_KEY" \
"https://adjudico.es/api/v1/public-api/tenders?cpv=909®ion=ES51"curl -H "Authorization: Bearer $ADJUDICO_KEY" \
"https://adjudico.es/api/v1/public-api/fits?client=B12345674"{
"data": [
{
"tender_id": "https://contrataciondelestado.es/sindicacion/…",
"title": "Servicio de limpieza de edificios municipales",
"buyer": { "nif": "P0800000B", "name": "Ayuntamiento de …" },
"amount_ex": 80000,
"end": { "date": "2027-03-01", "basis": "award+duration", "is_estimate": true },
"source_url": "https://contrataciondelestado.es/…"
}
],
"next_cursor": "eyJ2IjoxLCJrIjpb…",
"as_of": "2026-10-26",
"source": "Ministerio de Hacienda, Plataforma de Contratación del Sector Público (PLACSP)…"
}Conectar con Claude o ChatGPT
Adjudico.es tiene un servidor MCP (Model Context Protocol, el estándar abierto con el que los asistentes de IA se conectan a fuentes de datos) en https://adjudico.es/mcp. Con tu clave de API, el asistente puede consultar empresas, vencimientos, licitaciones abiertas, anuncios previos, encajes y órganos de contratación mientras conversas. Es de solo lectura y usa los mismos permisos, el mismo plan (Consultora o Grupo) y el mismo cupo diario que la API: cada consulta de una herramienta cuenta como una petición; abrir la conexión y listar las herramientas no cuentan.
company_summaryread:companies- Resumen de una empresa por su NIF.
company_contractsread:companies- Sus contratos, con la fecha de fin y su base.
company_expiriesread:companies- Sus contratos que vencen en 12 meses.
open_tendersread:tenders- Licitaciones abiertas por CPV y zona.
prior_noticesread:tenders- Se prepara: anuncios de información previa aún sin licitar.
buyer_summaryread:tenders- Un órgano de contratación: qué compra, quién gana, qué abre y qué anuncia.
profile_fitsread:fits- Lo que encaja con tu perfil guardado o con el de un cliente.
Cada resultado trae, en cada elemento, su enlace oficial (source_url) y la clase de cada dato (claims: oficial, cálculo, previsión…). Las herramientas piden al asistente que cite las fuentes y que no presente una previsión como un hecho, y recuerdan que no es asesoramiento jurídico ni de licitación. Antes de decidir, abre el expediente oficial.
Claude Code (en el terminal). Sustituye la clave por la tuya; claude mcp list debe mostrar el servidor conectado:
claude mcp add --transport http adjudico https://adjudico.es/mcp \
--header "Authorization: Bearer adj_XXXXXXXX_…"Claude en la web o en la app de escritorio: en Customize › Connectors, pulsa + Add › Add custom connector, escribe un nombre y la dirección https://adjudico.es/mcp y pulsa Continue. En Authentication elige No sign-in y, en Request headers, añade la cabecera authorization con el valor Bearer adj_… (Claude envía el valor tal cual, con la palabra Bearer). En los planes Team y Enterprise lo añade quien administra la organización, en Organization settings › Connectors, y la clave la comparten todos los que usen el conector. Las cabeceras están en beta y Claude solo las ofrece a algunas organizaciones: si no ves Request headers, tu cuenta todavía no puede conectar un servidor con clave; usa Claude Code o la API de Claude.
{
"model": "claude-opus-5-5",
"max_tokens": 4096,
"mcp_servers": [
{
"type": "url",
"url": "https://adjudico.es/mcp",
"name": "adjudico",
"authorization_token": "adj_XXXXXXXX_…"
}
],
"tools": [{ "type": "mcp_toolset", "mcp_server_name": "adjudico" }],
"messages": [
{ "role": "user", "content": "¿Qué contratos de B12345674 vencen este año?" }
]
}ChatGPT: la app de ChatGPT conecta servidores MCP propios solo con OAuth o sin autenticación y no admite claves de API, así que todavía no puede usar este servidor. Desde la API de OpenAI (Responses) sí, con la clave en la cabecera:
{
"type": "mcp",
"server_label": "adjudico",
"server_url": "https://adjudico.es/mcp",
"headers": { "Authorization": "Bearer adj_XXXXXXXX_…" },
"require_approval": "never"
}El servidor responde a POST con JSON (Streamable HTTP sin sesión); GET responde 405. Una clave sin el permiso de una herramienta no la ve en la lista. Los errores de clave, plan y cupo son los de la API: 401, 403 y 429 con Retry-After.
Paginación por cursor
Las listas devuelven data y next_cursor. Pide la página siguiente con cursor=<next_cursor>; cuando next_cursor es null, no hay más. La misma dirección llega en la cabecera Link con rel="next", como manda el RFC 8288. limit va de 1 a 200 (50 por defecto). El orden es fijo, así que recorrer las páginas da cada fila una sola vez.
Link: <https://adjudico.es/api/v1/public-api/tenders?limit=50&cursor=eyJ2IjoxLCJrIjpb…>; rel="next"Límites
- Cupo diario por organización: 10.000 peticiones en Consultora y 100.000 en Grupo, compartidas por todas las claves del equipo. El contador vuelve a cero a medianoche, hora de Madrid.
- Ráfaga por clave: 60 peticiones por minuto.
- Cada respuesta dice cuánto queda:
X-RateLimit-Limit-DayyX-RateLimit-Remaining-Day. - Pasado un límite, la respuesta es 429 con
Retry-Afteren segundos.
Errores
Los errores siguen el RFC 9457 (application/problem+json), con un code estable y un detail en castellano. Nunca llevan detalles internos.
| Estado | code | Cuándo |
|---|---|---|
| 400 | validation | Un parámetro no es válido (NIF, CPV, zona, limit, cursor). |
| 401 | unauthenticated | Falta la clave, no es válida o está revocada. |
| 403 | forbidden | La clave no tiene el permiso de esa ruta. |
| 403 | plan_limit | El plan de la organización ya no incluye la API. |
| 404 | not_found | No constan adjudicaciones de ese NIF, o el cliente no es tuyo. |
| 429 | rate_limited | Cupo diario o ráfaga por minuto agotados. |
{
"type": "urn:radar:error:unauthenticated",
"title": "unauthenticated",
"status": 401,
"code": "unauthenticated",
"trace_id": "…",
"detail": "Esta clave de API está revocada."
}De dónde salen los datos
Del Ministerio de Hacienda, Plataforma de Contratación del Sector Público, como el resto de Adjudico.es: cómo los leemos y qué cubren está en Datos y cobertura. Una adjudicación es un dato oficial, no prueba de que el contrato se ejecutara. Las personas físicas no aparecen con nombre ni NIF.