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.
buyer y por un prefijo CPV (cpv=45 son obras; 45233, carreteras).nif) o por su nombre (supplier). Las UTE aparecen con su propio NIF.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.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.company_id enlaza la adjudicación con la ficha del proveedor: estado, concursos inscritos y marcas de riesgo.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')
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.
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.
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.
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.