Nacional IGAE — Ministerio de Hacienda

BDNS — Base de Datos Nacional de Subvenciones

Sistema Nacional de Publicidad de Subvenciones y Ayudas Publicas. Convocatorias, concesiones, planes estrategicos y grandes beneficiarios de todas las administraciones espanolas (AGE, CCAA, entidades locales, universidades). API REST publica sin autenticacion.

Ficha tecnica

Formato
REST API (JSON)
Registros
~10,5M concesiones / ~350.000 convocatorias
Cobertura
Desde 2016
Actualizacion
Continua
Licencia
Datos abiertos
Entidad
IGAE — Ministerio de Hacienda

Descripcion

La Base de Datos Nacional de Subvenciones (BDNS) es el sistema oficial de publicidad de subvenciones y ayudas publicas en Espana, regulado por la Ley 38/2003 General de Subvenciones (tras la reforma de la Ley 15/2014). Gestionada por la Intervencion General de la Administracion del Estado (IGAE) del Ministerio de Hacienda y Funcion Publica, centraliza la informacion de todas las ayudas concedidas por la AGE, las comunidades autonomas, las entidades locales, las universidades publicas y demas entes del sector publico estatal.

El Sistema Nacional de Publicidad de Subvenciones y Ayudas Publicas (SNPSAP) expone esta informacion a traves de un portal ciudadano en infosubvenciones.es y de una API REST publica documentada con Swagger/OpenAPI. La API permite consultar convocatorias, concesiones individuales, planes estrategicos, listados de grandes beneficiarios y sanciones, con filtros por fecha, organo convocante, jerarquia territorial (nivel1/nivel2/nivel3), instrumento de la ayuda, CPV y otros criterios.

Desde la renovacion del portal por Hacienda, es posible descargar conjuntos de datos completos ademas de consultar la API en tiempo real. El acceso a los endpoints publicos no requiere registro ni clave de API.

Estructura de datos

  • codigoBDNS — Codigo unico de la convocatoria
  • titulo / descripcion — Objeto de la convocatoria
  • nivel1 / nivel2 / nivel3 — Jerarquia territorial del organo convocante
  • organo — Organo que convoca la ayuda
  • fechaRecepcion / fechaPublicacion — Fechas de tramitacion
  • tiposBeneficiarios — Tipos de beneficiarios elegibles
  • instrumentos — Instrumento (subvencion, prestamo, aval, entrega dineraria...)
  • importeTotal — Importe maximo de la convocatoria
  • descripcionFinalidad — Finalidad de la ayuda (sector/objetivo)
  • convocatoriaBases — URL de las bases reguladoras
  • beneficiario — NIF/CIF y nombre del beneficiario (en concesiones)
  • importe — Importe concedido (en concesiones)
  • ayudaEstado / ayudaDeMinimis — Clasificacion juridica de la ayuda

Ejemplos de codigo

Buscar convocatorias recientes curl
# Documentacion Swagger de la API
open https://www.infosubvenciones.es/bdnstrans/doc/swagger

# Buscar convocatorias publicadas en 2025
curl -s "https://www.infosubvenciones.es/bdnstrans/api/convocatorias/busqueda?fechaDesde=01/01/2025&fechaHasta=31/12/2025&pageSize=50&page=0" \
  -H "Accept: application/json" | python3 -m json.tool
Paginar convocatorias con requests python
import requests

BASE = 'https://www.infosubvenciones.es/bdnstrans/api'
session = requests.Session()
session.headers.update({'Accept': 'application/json'})

page = 0
while True:
    resp = session.get(f'{BASE}/convocatorias/busqueda', params={
        'fechaDesde': '01/01/2025',
        'fechaHasta': '31/12/2025',
        'pageSize': 100,
        'page': page,
    })
    resp.raise_for_status()
    data = resp.json()
    items = data.get('content', [])
    if not items:
        break
    for c in items:
        print(c.get('codigoBDNS'), '-', (c.get('descripcion') or '')[:80])
    page += 1
Descargar concesiones por NIF beneficiario python
import requests

BASE = 'https://www.infosubvenciones.es/bdnstrans/api'

# Concesiones de un NIF concreto en un rango de fechas
resp = requests.get(f'{BASE}/concesiones/busqueda', params={
    'numeroIdentificacion': 'B12345678',
    'fechaDesde': '01/01/2024',
    'fechaHasta': '31/12/2025',
    'pageSize': 200,
    'page': 0,
}, headers={'Accept': 'application/json'})

for c in resp.json().get('content', []):
    print(f"{c.get('fechaConcesion')} | {c.get('importe')} EUR | BDNS {c.get('codigoBDNS')}")