Skip to main content

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!

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.1.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.1-py3-none-any.whl (38.1 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for bdns_fetch-1.2.1.tar.gz
Algorithm Hash digest
SHA256 810b853c6742325d1660a6aa965ee5c040d2df2a9b34194ed296bbbcc6c3194c
MD5 e2dc40a9e0449200b2353f3944a7ed99
BLAKE2b-256 bf3dee8d96d51c79e69684f733c203de1a108a2a289fb5886427ab7da0082db5

See more details on using hashes here.

Provenance

The following attestation bundles were made for bdns_fetch-1.2.1.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.1-py3-none-any.whl.

File metadata

  • Download URL: bdns_fetch-1.2.1-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.12

File hashes

Hashes for bdns_fetch-1.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 057effbc7537adff741d68375612518fb4fe94c5aa8cb297331f5029e648a683
MD5 93d398664ff605cdd22497380e495b31
BLAKE2b-256 0f196d9cedd5b6e37fca5247d9a1e7aa97fc60fddd055da0860a01d263605c87

See more details on using hashes here.

Provenance

The following attestation bundles were made for bdns_fetch-1.2.1-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.

Release history Release notifications | RSS feed

1.3.0

2 files

This release

1.2.1 This release

2 files

1.2.0

2 files

1.1.0

2 files

1.0.1

2 files

1.0.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page