Skip to main content

Python client and CLI to fetch data from the Base de Datos Nacional de Subvenciones (BDNS)

Project description

BDNS Fetch

PyPI version License: GPL v3 Python 3.11+

🇬🇧 English version

Introducción

La Base de Datos Nacional de Subvenciones (BDNS) es un repositorio público español que ofrece transparencia sobre todas las subvenciones y ayudas públicas concedidas por las administraciones. Gestionada por la Intervención General de la Administración del Estado (IGAE) bajo el Ministerio de Hacienda, la BDNS centraliza información desde 2014 para el sector público estatal y desde 2016 para el resto de administraciones (ver datos.gob.es, transparencia.gob.es). Estos datos incluyen el organismo convocante, el importe, el objeto, los beneficiarios y otra información relevante de cada subvención (transparencia.gob.es). La BDNS está regulada por el artículo 20 de la Ley 38/2003, General de Subvenciones, y por el Real Decreto 130/2019 (ver datos.gob.es, BOE). Los datos se publican en línea respetando el honor y la intimidad de las personas físicas (datos.gob.es).

Los datos del BDNS son accesibles a través del Sistema Nacional de Publicidad de Subvenciones y Ayudas Públicas (SNPSAP). La información puede consultarse en formato HTML desde el portal web oficial del Ministerio de Hacienda, y es exportable a formatos abiertos como CSV, XLSX o PDF. Además, existe una API REST que permite obtener los datos en formato JSON (datos.gob.es). La base de datos se actualiza diariamente, aunque el portal oficial impone limitaciones: por ejemplo, solo admite descargas de hasta 10.000 registros por consulta (transparencia.gob.es). También se aplica la retención legal de datos: las concesiones permanecen publicadas 4 años desde su concesión (solo 1 año más en caso de personas físicas) (datos.gob.es), tras lo cual se retiran automáticamente.

Propósito del proyecto

El objetivo del repositorio bdns-fetch es facilitar el acceso programático a los datos de la BDNS. Se trata de una librería Python y herramienta de línea de comandos (CLI) que implementa la API oficial de la BDNS, con el fin de extraer y analizar subvenciones de forma automatizada. En concreto, bdns-fetch cubre los 29 endpoints de datos disponibles en la API del BDNS, con soporte completo de parámetros y manejo automático de paginación (GitHub). Ofrece tanto una interfaz de cliente Python limpia y tipada como un comando bdns-fetch para pruebas rápidas. Esto supera las limitaciones del portal web oficial (búsqueda básica y a menudo lenta, sin posibilidad de descarga masiva) pues bdns-fetch permite consultas automatizadas y la extracción completa de datos a archivos JSONL.

Ventajas principales de bdns-fetch: permite descargar rápidamente subvenciones filtradas por criterios (organismo, fecha, descripción, etc.), aplicar paginación automática sin cargar manualmente cada página, y gestionar errores y reintentos.

Instalación

pip install bdns-fetch

o

git clone https://github.com/cruzlorite/bdns-fetch.git
cd bdns-fetch
pip install .

Uso

Cliente Python

La librería expone un cliente Python para llamar a los endpoints de la BDNS. Por ejemplo, para obtener la lista de organismos (ministerios, agencias, etc.) registrados:

from bdns.fetch.client import BDNSClient

# Inicializar el cliente
client = BDNSClient()

# Ejecutar la consulta al endpoint "organos"
organos = list(client.fetch_organos())
for org in organos:
    print(org["codigo"], "-", org["descripcion"])

Otro ejemplo: buscar Ayudas de Estado cuyo texto contenga "investigación". Se controla la paginación definiendo el tamaño de página y cuántas páginas queremos:

resultados = client.fetch_ayudasestado_busqueda(
    descripcion="investigación",
    pageSize=1000,   # registros por página (máx. 10000)
    num_pages=5,     # número máximo de páginas a recuperar
    from_page=0      # página de inicio (0 = primera página)
)
for element in resultados:
    print(element["titulo"], "-", element["importe"])

También es posible descargar documentos binarios asociados (por ejemplo, convocatorias o planes estratégicos) usando los métodos apropiados que devuelven bytes. Por ejemplo:

# Descargar PDF de convocatoria por ID (id y vpd obtenidos de la BDNS)
pdf_bytes = client.fetch_convocatorias_pdf(id=608268, vpd="A07")
with open("convocatoria.pdf", "wb") as f:
    f.write(pdf_bytes)

Interfaz de Línea de Comandos (CLI)

bdns-fetch incluye un CLI sencillo. Tras la instalación, use
bdns-fetch --help para ver opciones.

Obtener y guardar lista de órganos:

bdns-fetch --output-file organos.jsonl organos

Buscar ayudas de Estado con palabra clave y rango de fechas:

bdns-fetch --verbose --output-file ayudas_busqueda.jsonl ayudasestado-busqueda \
    --descripcion "innovación" --fechaDesde "2023-01-01" --fechaHasta "2024-12-31"

Descargar las últimas convocatorias oficiales:

bdns-fetch --output-file convocatorias.jsonl convocatorias-ultimas

Todos los datos extraídos por el CLI se guardan en formato JSON
Lines
(.jsonl), donde cada línea es un objeto JSON independiente.

Limitaciones conocidas y advertencias

  • Limitaciones de la librería: bdns-fetch no implementa ciertos endpoints que no devuelven JSON de datos. En concreto no maneja los endpoints de exportación (generación de ficheros CSV/XLSX desde la BDNS) ni las rutas de configuración del portal o sistema de suscripciones.

  • Retención de datos: La BDNS cumple el régimen legal de publicidad limitada. Los registros de subvenciones se eliminan automáticamente 4 años naturales después del año de concesión (solo 2 años para ayudas a personas físicas) (datos.gob.es). Por tanto, no encontrará en la BDNS concesiones muy antiguas.

  • Uso de datos públicos: Si bien los datos provienen de fuentes oficiales, es responsabilidad del usuario verificar su idoneidad para cada caso. Esta herramienta no proporciona garantía sobre la precisión de los datos, que pueden depender de la administración que reporta. Además, algunos datos personales están protegidos: la BDNS "publica respetando el honor y la intimidad personal o familiar" (datos.gob.es). Se recomienda uso responsable de la información y cumplimiento de la normativa de protección de datos correspondiente.

  • Advertencia legal: bdns-fetch se ofrece bajo la premisa de reutilización de datos abiertos. La Ley 38/2003 y el RD 130/2019 establecen las condiciones de publicación de subvenciones (datos.gob.es, BOE). El uso de esta herramienta para fines distintos a la investigación y transparencia ciudadana debe ceñirse a la legislación vigente. El autor no asume responsabilidad por interpretaciones erróneas o usos indebidos de los datos públicos obtenidos.

Licencia y enlaces relevantes

  • Licencia: bdns-fetch está licenciado bajo la GNU General Public License v3.0 (GPLv3) (PyPI, GitHub). Consulte el archivo LICENSE para más detalles.

  • Portal oficial BDNS: Sistema Nacional de Publicidad de Subvenciones y Ayudas Públicas -- Ministerio de Hacienda (portal SNPSAP).

  • Ley 38/2003 (General de Subvenciones): texto oficial en BOE (enlace).

  • Real Decreto 130/2019: regula la BDNS y publicidad de subvenciones, BOE (enlace).

  • Información adicional: Portal de transparencia del Estado sobre subvenciones -- transparencia.gob.es.

  • GPLv3: texto de la licencia en gnu.org.

bdns-fetch es software libre, desarrollado para facilitar la reutilización de datos públicos y promover la transparencia. ¡Su colaboración y contribuciones son bienvenidas!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bdns_fetch-1.2.0.tar.gz (35.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

bdns_fetch-1.2.0-py3-none-any.whl (38.1 kB view details)

Uploaded Python 3

File details

Details for the file bdns_fetch-1.2.0.tar.gz.

File metadata

  • Download URL: bdns_fetch-1.2.0.tar.gz
  • Upload date:
  • Size: 35.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for bdns_fetch-1.2.0.tar.gz
Algorithm Hash digest
SHA256 e45105d4efe49a033d1b5bc40e0a5d328425177952abe16460019402f758c017
MD5 32a72dc996ec36b028e60a2c17ece949
BLAKE2b-256 513d987e199ef4435ecc24c019535ea469b2c3af689cccb70c8a67844c3ff668

See more details on using hashes here.

Provenance

The following attestation bundles were made for bdns_fetch-1.2.0.tar.gz:

Publisher: ci-cd.yml on cruzlorite/bdns-fetch

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file bdns_fetch-1.2.0-py3-none-any.whl.

File metadata

  • Download URL: bdns_fetch-1.2.0-py3-none-any.whl
  • Upload date:
  • Size: 38.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for bdns_fetch-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 cc3ad06e6e2726fd9e4d87b4cc583f303208f2fd64fac650b1836ef65268a4c5
MD5 2d495de0e741b5d6a0e8880af184b01a
BLAKE2b-256 1d1c6b2d2d04186f1a6c7c2f9d0cfc01bd888ff9102b244798ce1206151494b4

See more details on using hashes here.

Provenance

The following attestation bundles were made for bdns_fetch-1.2.0-py3-none-any.whl:

Publisher: ci-cd.yml on cruzlorite/bdns-fetch

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page