Inteligencia de licitaciones: quién gana los contratos a los que te presentas

Las adjudicaciones de la Plataforma de Contratación del Sector Público, licitaciones y contratos menores, en JSON: quién ganó, qué órgano de contratación, cuántas ofertas hubo y con qué baja sobre el presupuesto base. Para decidir a qué te presentas, ajustar el precio frente al incumbente y seguir a la competencia.

Las preguntas de un equipo de licitaciones

  • ¿Quién gana los contratos de este órgano en mi categoría, y por cuánto? Filtra por buyer y por un prefijo CPV (cpv=45 son obras; 45233, carreteras).
  • ¿Qué ha ganado un competidor este año? Filtra por su NIF (nif) o por su nombre (supplier). Las UTE aparecen con su propio NIF.
  • ¿Merece la pena presentarse? bids_received en cada adjudicación: un órgano cuyos contratos reciben una sola oferta es una oportunidad o un terreno cerrado, y el historial dice cuál.
  • ¿Qué baja hace falta? amount_eur es el importe de adjudicación sin impuestos y amount_estimated_eur el presupuesto base de licitación sin impuestos: la baja es 1 menos su cociente.
  • ¿Está sano el adjudicatario actual? company_id enlaza la adjudicación con la ficha del proveedor: estado, concursos inscritos y marcas de riesgo.

Competencia y baja, en pocas líneas

Ejemplo: cuántas adjudicaciones de obras de carretera de este año tuvieron una sola oferta y cuál fue la baja mediana. Deja fuera los importes marcados como techo de un acuerdo marco (amount_is_ceiling) o sospechosos (amount_suspect).

import requests

BASE = 'https://api.prometiam.com/functions/v1/risk-api'
H = {'Authorization': 'Bearer rk_live_...'}

def adjudicaciones(**filtros):
    cursor = None
    while True:
        p = {**filtros, 'limit': 100, **({'cursor': cursor} if cursor else {})}
        r = requests.get(f'{BASE}/procurement/awards', headers=H, params=p)
        r.raise_for_status()
        body = r.json()
        yield from body['data']
        cursor = (body.get('pagination') or {}).get('next_cursor')
        if not cursor:
            break

filas = [a for a in adjudicaciones(country='ES', cpv='45233', date_from='2026-01-01')
         if not a['amount_is_ceiling'] and not a['amount_suspect']]
una_oferta = sum(1 for a in filas if a['bids_received'] == 1)
bajas = sorted(1 - a['amount_eur'] / a['amount_estimated_eur'] for a in filas
               if a['amount_eur'] and a['amount_estimated_eur'])
print(len(filas), 'adjudicaciones;', una_oferta, 'con una sola oferta;',
      f'baja mediana {bajas[len(bajas) // 2]:.1%}' if bajas else 'sin importes')

Qué trae cada adjudicación

Una fila es una adjudicación a un adjudicatario: el importe es su parte, sin impuestos, y amount_contract_eur el contrato entero. En España casi todas traen las ofertas recibidas, el presupuesto base, el procedimiento y si el adjudicatario es pyme. Las adjudicaciones a personas físicas nunca se devuelven. La misma llamada cubre Francia, el Reino Unido y, por encima de los umbrales europeos, Irlanda, Polonia y Noruega.

Lo que no es

  • No es un servicio de alertas de licitaciones. Servimos adjudicaciones, es decir resultados: no publicamos licitaciones abiertas ni sus plazos.
  • No puntúa a los licitadores. Las puntuaciones beta de órganos de contratación (España y Francia) describen al órgano, nunca a una empresa que licita.

Si lo que buscas es revisar proveedores y órganos de contratación, y no preparar ofertas, la misma API se describe en API de contratación pública.

Cuánto cuesta

Cada llamada de contratación pública cuesta 2 créditos y devuelve hasta 100 adjudicaciones; los errores no cuestan nada. Un año de adjudicaciones de un órgano en una categoría suele caber en unas pocas llamadas. Starter cuesta 9,99 € al mes con 1.000 créditos, Professional 29,99 € con 10.000 y Scale 99,99 € con 50.000. La prueba gratuita dura 14 días con 500 créditos: se pide una tarjeta y no se cobra nada durante la prueba.

Páginas relacionadas

Empieza tu prueba gratuita de 14 días · Documentación de la API

La prueba dura 14 días e incluye 500 créditos. Se pide una tarjeta, pero no se cobra nada durante la prueba; después sigue el plan Starter (9,99 € al mes) salvo que la canceles.

Frequently asked questions

¿Publicáis las licitaciones abiertas?
No. Servimos adjudicaciones: quién ganó, qué órgano, el importe y cuántas ofertas hubo. Las licitaciones en plazo se consultan en la propia Plataforma de Contratación.
¿Se incluyen los contratos menores?
Sí. En España la API recoge tanto las licitaciones como los contratos menores que publica la Plataforma de Contratación del Sector Público.
¿Cómo se calcula la baja?
Como 1 menos el cociente entre el importe de adjudicación sin impuestos (amount_eur) y el presupuesto base de licitación sin impuestos (amount_estimated_eur), dejando fuera los techos de acuerdo marco.
¿Qué otros países cubre?
Francia, el Reino Unido y, por encima de los umbrales europeos, Irlanda, Polonia y Noruega, con el mismo formato de respuesta.