Regional Generalitat de Catalunya

Catalunya — RAISC (Concesiones y convocatorias)

Registre d'Ajuts i Subvencions de Catalunya (RAISC) de la Generalitat. Dos datasets Socrata con unos 22,8 millones de concesiones y 69.000 convocatorias de la Generalitat, diputaciones, comarcas y ayuntamientos catalanes. La fuente más rica de subvenciones de toda España.

Ficha técnica

Formato
API Socrata (JSON/CSV/XML + SoQL)
Registros
~22,8 millones concesiones / ~69.000 convocatorias (octubre de 2026)
Cobertura
Desde noviembre 2018
Actualización
Diaria
Licencia
CC BY (datos abiertos Generalitat)
Entidad
Generalitat de Catalunya

Descripción

El Registre d'Ajuts i Subvencions de Catalunya (RAISC) es el registro oficial de subvenciones y ayudas públicas de Catalunya, gestionado por la Generalitat y publicado como dos datasets Socrata en el portal de transparencia de la Generalitat. Contiene datos de la Generalitat, las cuatro diputaciones provinciales (Barcelona, Girona, Lleida, Tarragona), los consejos comarcales y los ayuntamientos catalanes.

El dataset de **concesiones** (s9xt-n979) tenía 22.794.027 registros en octubre de 2026, unos 21,4 millones de la administración autonómica y el resto de entidades locales: es con diferencia la mayor fuente regional de subvenciones de España. El dataset de **convocatorias** (khxn-nv6a) tiene unas 69.000 entradas. Ambos están accesibles a través de la API Socrata estándar, que soporta filtros SoQL ($select, $where, $group, $order), paginación con $limit/$offset y exportación en JSON, CSV y XML. No requiere autenticación ni API key.

Los nombres de columna son los del portal en catalán, abreviados por Socrata: el NIF está en cif_beneficiari, la razón social en ra_social_del_beneficiari y el importe en import_subvenci_pr_stec_ajut. Las personas físicas no se identifican: en lugar del NIF aparece «Benef. no publicable», «Persona física», «Altres» o «Estranger-Altres», así que conviene excluir esos valores antes de hacer rankings. Hay alguna fecha mal capturada (por ejemplo, del año 0023), y las agregaciones sobre todo el conjunto pueden tardar casi un minuto: filtra por fechas siempre que puedas.

Como fuente, es un superconjunto de la BDNS para el ámbito catalán: incluye más ayuntamientos y un histórico más detallado que lo que expone la BDNS nacional filtrada por Catalunya, y cada concesión lleva el código de la convocatoria en la BDNS (codi_bdns) para cruzarlas.

Estructura de datos

  • clau — Clave de la concesión (código RAISC, discriminador y fecha)
  • codi_raisc / codi_bdns — Código de la convocatoria en el RAISC y en la BDNS
  • entitat_oo_aa_o_departament_1 — Departamento o entidad convocante
  • t_tol_convocat_ria_castell / t_tol_convocat_ria_catal — Título de la convocatoria
  • cif_beneficiari — NIF/CIF del beneficiario («Benef. no publicable» en personas físicas)
  • ra_social_del_beneficiari — Razón social del beneficiario
  • tipus_de_beneficiaris — Tipo de beneficiario (persona física, pyme, entidad sin ánimo de lucro…)
  • import_subvenci_pr_stec_ajut — Importe de la subvención, préstamo o ayuda (EUR)
  • import_ajuda_equivalent — Ayuda equivalente (EUR)
  • data_concessi — Fecha de concesión
  • tipus_d_instument_d_ajut_1 — Instrumento (subvención, préstamo, garantía…)
  • finalitat_p_blica / finalitat_rais — Finalidad de la ayuda
  • administraci_ — Administración (autonómica o local: municipio, comarca, provincia…)
  • ajut_d_estat — Marca y datos de ayuda de Estado

Ejemplos de código

Consultar API Socrata (RAISC) curl
# Contar concesiones totales
curl -s "https://analisi.transparenciacatalunya.cat/resource/s9xt-n979.json?\$select=count(*)"

# Primeras 10 concesiones
curl -s "https://analisi.transparenciacatalunya.cat/resource/s9xt-n979.json?\$limit=10" | python3 -m json.tool

# Concesiones a un beneficiario por su NIF
curl -sG "https://analisi.transparenciacatalunya.cat/resource/s9xt-n979.json" \
  --data-urlencode "\$select=data_concessi,ra_social_del_beneficiari,t_tol_convocat_ria_castell,import_subvenci_pr_stec_ajut" \
  --data-urlencode "\$where=cif_beneficiari = 'Q0818001J'" \
  --data-urlencode "\$order=data_concessi DESC" --data-urlencode "\$limit=20"

# Top 20 beneficiarios de 2025 por importe (sin personas físicas; tarda cerca de un minuto)
curl -sG "https://analisi.transparenciacatalunya.cat/resource/s9xt-n979.json" \
  --data-urlencode "\$select=cif_beneficiari,ra_social_del_beneficiari,sum(import_subvenci_pr_stec_ajut) as total" \
  --data-urlencode "\$where=data_concessi between '2025-01-01' and '2025-12-31' AND cif_beneficiari not in ('Benef. no publicable','Persona física','Altres','Estranger-Altres')" \
  --data-urlencode "\$group=cif_beneficiari,ra_social_del_beneficiari" \
  --data-urlencode "\$order=total DESC" --data-urlencode "\$limit=20"

# Convocatorias del dataset secundario
curl -s "https://analisi.transparenciacatalunya.cat/resource/khxn-nv6a.json?\$limit=10" | python3 -m json.tool
Paginar con sodapy python
from sodapy import Socrata

client = Socrata("analisi.transparenciacatalunya.cat", None)

# Concesiones a un beneficiario (por NIF) desde 2025
offset = 0
while True:
    batch = client.get("s9xt-n979",
        select="data_concessi,ra_social_del_beneficiari,t_tol_convocat_ria_castell,import_subvenci_pr_stec_ajut",
        where="cif_beneficiari = 'Q0818001J' AND data_concessi >= '2025-01-01'",
        order="data_concessi",
        limit=2000,
        offset=offset)
    if not batch:
        break
    for r in batch:
        print(r['data_concessi'][:10], r['ra_social_del_beneficiari'], r['import_subvenci_pr_stec_ajut'])
    offset += 2000
Agregado con polars python
import polars as pl
import requests

# Concesiones e importe por órgano convocante desde 2025 (top 50)
url = 'https://analisi.transparenciacatalunya.cat/resource/s9xt-n979.json'
params = {
    '$select': 'entitat_oo_aa_o_departament_1 as organo, count(*) as n, sum(import_subvenci_pr_stec_ajut) as total',
    '$where': "data_concessi >= '2025-01-01'",
    '$group': 'entitat_oo_aa_o_departament_1',
    '$order': 'total DESC',
    '$limit': 50,
}
data = requests.get(url, params=params, timeout=120).json()
df = pl.DataFrame(data).with_columns(pl.col('n').cast(pl.Int64), pl.col('total').cast(pl.Float64))
print(df)