# Spain Grants & Subsidies – Open Calls (BDNS) (`shikimokami/spain-grants-subsidies`) Actor

Every public grant and subsidy call in Spain from the official BDNS database: status (open, upcoming, closed), real deadlines and days left, budget, region, province, who can apply and official documents. Filter by keyword, region, audience, topic or date. Updated 3 times a day.

- **URL**: https://apify.com/shikimokami/spain-grants-subsidies.md
- **Developed by:** [SHiki](https://apify.com/shikimokami) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 grants

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Spain Grants & Subsidies – Open Calls (BDNS) 💶

Get **every public grant and subsidy call in Spain** (*ayudas y subvenciones*) from the official national database, the **Base de Datos Nacional de Subvenciones (BDNS)**: central government, the 17 regions, provincial councils, town councils and other public bodies. Thousands of calls, each with a clear **status**, the **application deadline**, the **budget**, **who can apply**, the **region and province** it covers and the **official links and documents**.

The raw BDNS only gives you a registration date and free text such as *"20 business days from the day after the extract is published"*. This Actor turns that into real dates, tells you whether the call is open, upcoming or closed, and lets you filter the way people actually search.

### What can you do with it?

- 🔔 **Grant alerts**: run it every morning with *Published in the last days* = 1 and send the new calls to email, Slack or Google Sheets.
- 🧑‍💼 **Consultancies and gestorías**: find every open grant for SMEs and self-employed (*autónomos*) in your clients' province.
- 🏛️ **Associations and NGOs**: list the open calls for non-profits in your region, closing soonest first.
- 📊 **Analysis and journalism**: budgets by region, topic or administration; EU-funded calls (FEDER, FSE+, FEADER, Recovery Plan).
- 🧩 **Apps and websites**: clean, structured data with Spanish titles and English field names.

### Input

All filters are optional. With no input you get every call you can still apply for, newest first.

| Field | What it does |
|---|---|
| **Keywords** | Any of these words or phrases in the title, organization, topic, sectors or beneficiaries (Spanish, accents ignored). E.g. `digitalización`, `eficiencia energética`, `alquiler`. |
| **Exclude keywords** | Drop calls containing any of these. |
| **Status** | Open (official deadline), open (estimated deadline), deadline to be confirmed, upcoming, closed. |
| **Who can apply** | SMEs and self-employed, individuals and families, non-profits, large companies. |
| **Regions / Provinces** | E.g. *Andalucía*, *Comunidad de Madrid*, *Málaga*. A province also returns the region-wide calls that cover it. |
| **Include nationwide grants** | Also return calls open to the whole of Spain (default on). |
| **Granting administration** | Central government, regional, local, other public bodies. |
| **Topics** | Housing, employment, education, culture, R\&D, trade and SMEs, agriculture, environment… |
| **Granting organization contains** | E.g. `Ayuntamiento de Valencia`, `Diputación`, `Ministerio`. |
| **Published since** / **Published in the last days** | Only calls registered on or after a date, or in the last N days (ideal for daily alerts). |
| **Closing within (days)** | Only calls whose deadline is in the next N days. |
| **Minimum budget**, **EU-funded only**, **Sort by**, **Maximum results**, **Include documents** | |

#### Example: open grants for self-employed people in Málaga about digitalization

```json
{
  "keywords": ["digitalización", "digital"],
  "audiences": ["smesAndSelfEmployed"],
  "provinces": ["Málaga"],
  "sortBy": "deadline"
}
```

### Output

One record per call. Titles and texts are in Spanish, exactly as published.

```json
{
  "bdnsCode": "925845",
  "title": "Convocatoria destinadas a financiar proyectos ligados a destinos turísticos de excelencia en los territorios afectados por el Fondo de Transición Justa en Castilla y León",
  "organization": "Instituto para la Competitividad Empresarial de Castilla y León (Castilla y León)",
  "administrationLevel": "region",
  "procedure": "competitive",
  "status": "open",
  "applicationStart": "2026-08-26",
  "applicationEnd": "2026-10-26",
  "deadlineEstimated": false,
  "daysLeft": 12,
  "applicationStartText": null,
  "applicationEndText": null,
  "publishedAt": "2026-08-21",
  "budgetEUR": 11914000,
  "audiences": ["smesAndSelfEmployed"],
  "beneficiaryTypes": ["PYME Y PERSONAS FÍSICAS QUE DESARROLLAN ACTIVIDAD ECONÓMICA"],
  "topic": "otherBenefits",
  "topicEs": "Otras prestaciones económicas",
  "purpose": "Otras Prestaciones económicas",
  "sectors": ["Hoteles y alojamientos similares", "Restaurantes y puestos de comidas", "Actividades deportivas", "…"],
  "nationwide": false,
  "regions": ["Castilla y León"],
  "provinces": ["León", "Palencia"],
  "nutsRegions": ["ES413 - León", "ES414 - Palencia"],
  "euFunds": ["FTJ – FONDO DE TRANSICIÓN JUSTA"],
  "recoveryPlanFunded": false,
  "applicationPortalUrl": "https://www.tramitacastillayleon.jcyl.es/",
  "regulatoryBasesReference": "https://bocyl.jcyl.es/boletines/2024/02/07/pdf/BOCYL-D-07022024-17.pdf",
  "regulatoryBasesTitle": "Orden EYH/74/2024, de 31 de enero, por la que se aprueban las BBRR para la concesión de subvenciones…",
  "officialUrl": "https://www.infosubvenciones.es/bdnstrans/GE/es/convocatorias/925845",
  "pageUrl": "https://cuantogasta.github.io/ayudas/c/925845-convocatoria-destinadas-a-financiar-proyectos-ligados-a/",
  "documents": [
    {
      "name": "Documento de la convocatoria en español",
      "fileName": "Resolución convocatoria turismo FTJ 2026.pdf",
      "publishedAt": "2026-08-21",
      "url": "https://www.infosubvenciones.es/bdnstrans/api/convocatorias/documentos?idDocumento=1511625"
    }
  ],
  "dataUpdatedAt": "2026-10-13T12:04:48.158Z",
  "source": "Base de Datos Nacional de Subvenciones (BDNS), Intervención General de la Administración del Estado"
}
```

#### Status values

| `status` | Meaning |
|---|---|
| `open` | Open, with an official deadline (`applicationEnd`), or marked open by the BDNS. |
| `openEstimatedDeadline` | The deadline is counted from the publication in the official gazette (e.g. *"15 business days from the publication of the extract"*). `applicationEnd` is our estimate; the official wording is in `applicationEndText`. |
| `checkDeadline` | Recent call whose deadline is only in the regulatory bases: check them. |
| `upcoming` | The application period has not started yet (`applicationStart`). |
| `closed` | The deadline has passed. |

`audiences`: `smesAndSelfEmployed`, `individuals`, `nonProfits` (associations, foundations, NGOs, clubs and other legal entities without economic activity), `largeCompanies`.

Every run also saves a free **SUMMARY** record in the key-value store: number of calls, total budget, calls closing in the next 7 days, and counts by status, audience, topic, administration and region.

### Pricing

You only pay for the calls you get (pay per result). Use the filters and *Maximum results* to get exactly what you need.

### How fresh is the data?

The data is refreshed from the BDNS three times a day and covers every call registered in the last months, including the ones that have already closed. `dataUpdatedAt` tells you when it was last refreshed.

### FAQ

**Is this legal?** Yes. The BDNS is public open data of the Spanish Government (Intervención General de la Administración del Estado) and may be reused citing the source, which every record includes.

**Is the estimated deadline reliable?** It assumes the extract is published in the official gazette about 10 days after it is registered in the BDNS. Always confirm the date in the gazette or on the organization's website (`applicationPortalUrl`) before applying.

**Can I get notified of new grants?** Yes. Create an Apify schedule that runs every day with *Published in the last days* = 1 (plus your keywords, region or audience), and connect the results to email, Slack, Google Sheets or a webhook.

### Made by

The team behind [CuántoGasta Ayudas](https://cuantogasta.github.io/ayudas/), a free website to find the grants and subsidies open in every Spanish region.

# Actor input Schema

## `keywords` (type: `array`):

Keep grants whose title, organization, topic, sectors or beneficiaries contain ANY of these keywords (in Spanish, accents ignored). A keyword with several words needs all of them, e.g. "eficiencia energética", "digitalización", "contratación", "alquiler".

## `excludeKeywords` (type: `array`):

Drop grants that contain any of these keywords.

## `statuses` (type: `array`):

Which calls to return. By default, everything you can still apply for: open (official or estimated deadline), deadline to be confirmed, and upcoming.

## `audiences` (type: `array`):

Keep grants open to at least one of these groups.

## `regions` (type: `array`):

Grants for these regions, including those of their provinces and town councils.

## `provinces` (type: `array`):

Grants for these provinces, including region-wide calls that cover them.

## `includeNationwide` (type: `boolean`):

When filtering by region or province, also include grants open to the whole of Spain.

## `administrationLevels` (type: `array`):

Keep grants from these levels of administration.

## `topics` (type: `array`):

Keep grants about these topics (as classified by the BDNS).

## `organization` (type: `string`):

e.g. "Ayuntamiento de Madrid", "Diputación", "Ministerio de Industria".

## `publishedFrom` (type: `string`):

Only calls registered on or after this date (YYYY-MM-DD).

## `publishedInLastDays` (type: `integer`):

Only calls registered in the last N days. Use 1 in a daily schedule to get alerts of new grants. 0 = no limit.

## `deadlineWithinDays` (type: `integer`):

Only calls with a known deadline in the next N days. 0 = no limit.

## `minBudgetEUR` (type: `integer`):

Only calls with at least this total budget.

## `euFundedOnly` (type: `boolean`):

Only calls co-financed by EU funds (FEDER, FSE+, FEADER, Recovery Plan…).

## `sortBy` (type: `string`):

Order of the results.

## `maxResults` (type: `integer`):

0 = all matching grants.

## `includeDocuments` (type: `boolean`):

Add the list of official documents (call text, extracts, forms) with download links.

## Actor input object example

```json
{
  "keywords": [],
  "excludeKeywords": [],
  "statuses": [
    "open",
    "openEstimatedDeadline",
    "checkDeadline",
    "upcoming"
  ],
  "audiences": [
    "smesAndSelfEmployed"
  ],
  "regions": [],
  "provinces": [],
  "includeNationwide": true,
  "administrationLevels": [],
  "topics": [],
  "publishedInLastDays": 0,
  "deadlineWithinDays": 0,
  "minBudgetEUR": 0,
  "euFundedOnly": false,
  "sortBy": "deadline",
  "maxResults": 100,
  "includeDocuments": true
}
```

# Actor output Schema

## `grants` (type: `string`):

One record per grant call with status, deadline, budget, region and who can apply.

## `summary` (type: `string`):

Number of grants, total budget, grants closing in the next 7 days and counts by status, audience, topic, administration and region.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "audiences": [
        "smesAndSelfEmployed"
    ],
    "sortBy": "deadline",
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("shikimokami/spain-grants-subsidies").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "audiences": ["smesAndSelfEmployed"],
    "sortBy": "deadline",
    "maxResults": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("shikimokami/spain-grants-subsidies").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "audiences": [
    "smesAndSelfEmployed"
  ],
  "sortBy": "deadline",
  "maxResults": 100
}' |
apify call shikimokami/spain-grants-subsidies --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,shikimokami/spain-grants-subsidies"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/cp8ebIBf3XoMDBGU8/builds/XxKQ3bmUftODK6ttv/openapi.json
