Castilla y León — Subvenciones concedidas
Subvenciones registradas como concedidas en la BDNS por la administración autonómica de Castilla y León, con API Opendatasoft, CSV, JSON y Excel. Ojo: el conjunto está parado y solo llega a marzo de 2022.
Serie parada. Sin datos nuevos desde marzo de 2022. Los datos publicados siguen siendo válidos para análisis históricos, pero no esperes registros nuevos.
Ficha técnica
- Formato
- CSV/JSON/XLS + API Opendatasoft
- Registros
- 364.704
- Cobertura
- Concesiones del 3/1/2018 al 31/3/2022 (sin datos posteriores)
- Actualización
- No programada (sin datos nuevos desde 2022)
- Licencia
- CC BY 4.0
- Entidad
- Junta de Castilla y León
Descripción
Dataset del portal de análisis de datos abiertos de la Junta de Castilla y León que expone las subvenciones concedidas por la administración autonómica castellanoleonesa, tomando como origen la Base de Datos Nacional de Subvenciones (BDNS) gestionada por la IGAE del Ministerio de Hacienda.
Antes de usarlo, ten en cuenta la cobertura: en octubre de 2026 tenía 364.704 registros con fechas de concesión entre el 3 de enero de 2018 y el 31 de marzo de 2022. La actualización no sigue un calendario y el conjunto no ha incorporado concesiones posteriores, así que para lo reciente hay que ir a la BDNS y filtrar por Castilla y León. Tampoco hay un conjunto que lo continúe: en el portal de análisis de la Junta solo aparecen, además de este, las subvenciones COVID-19, las del programa RELEO de préstamo de libros y el listado de convocatorias, sin concesiones.
Incluye dos magnitudes: el importe de concesión (importe_concesion, la cantidad comprometida en el momento del otorgamiento) y la ayuda equivalente (ayuda_equivalente, que en las subvenciones suele coincidir con el importe). Las personas físicas aparecen como «***» y sin NIF. El portal utiliza el motor Opendatasoft, con API REST de consulta, exportación y agregación, además de descargas directas en CSV, JSON y Excel. El endpoint /records no deja pasar de 10.000 resultados con offset; para el conjunto completo usa /exports.
El dataset excluye convocatorias con más de 10.000 registros por limitaciones de exportación de la propia BDNS. Esta publicación cumple con lo previsto en el Real Decreto 130/2019 sobre publicidad de subvenciones y ayudas públicas.
Estructura de datos
- identificador — Identificador del registro
- organo_convocante / organo_concedente / organo_tramitador — Órganos de la Junta
- codigo — Código de la convocatoria en la BDNS
- titulo_descripcion — Título de la convocatoria
- nombre_razon_social — Beneficiario («***» en personas físicas)
- nif_cif — NIF/CIF del beneficiario (vacío en personas físicas)
- instrumento_de_ayuda — Instrumento (subvención directa, concurrencia…)
- fecha_de_la_concesion — Fecha de concesión
- importe_concesion — Importe concedido (EUR)
- ayuda_equivalente — Ayuda equivalente (EUR)
- ayudas_covid / medida_covid — Marca y medida de las ayudas COVID
Ejemplos de código
# Primeros 20 registros en JSON
curl -s "https://analisis.datosabiertos.jcyl.es/api/explore/v2.1/catalog/datasets/subvenciones-concedidas/records?limit=20" | python3 -m json.tool
# Descargar dataset completo en CSV (separador «;», UTF-8 con BOM)
curl -sL -o subvenciones_cyl.csv \
"https://analisis.datosabiertos.jcyl.es/api/explore/v2.1/catalog/datasets/subvenciones-concedidas/exports/csv"
# Agregado: concesiones e importe total por año
curl -sG "https://analisis.datosabiertos.jcyl.es/api/explore/v2.1/catalog/datasets/subvenciones-concedidas/records" \
--data-urlencode "select=count(*) as n, sum(importe_concesion) as total" \
--data-urlencode "group_by=year(fecha_de_la_concesion) as anio" \
--data-urlencode "order_by=anio" import pandas as pd
# El endpoint de exportación no tiene el tope de 10.000 registros de /records
URL = 'https://analisis.datosabiertos.jcyl.es/api/explore/v2.1/catalog/datasets/subvenciones-concedidas/exports/csv'
df = pd.read_csv(URL, sep=';', encoding='utf-8-sig', dtype={'nif_cif': str},
parse_dates=['fecha_de_la_concesion'], low_memory=False)
print(f'Registros: {len(df):,}')
print(df['fecha_de_la_concesion'].min(), '->', df['fecha_de_la_concesion'].max())
# Personas físicas anonimizadas («***»): se excluyen del ranking
empresas = df[df['nombre_razon_social'] != '***']
top = (empresas.groupby(['nif_cif', 'nombre_razon_social'])['importe_concesion']
.sum().sort_values(ascending=False).head(15))
print(top)