# EU Funding & Tenders Scraper — Grants + Procurement (`studio-amba/eu-funding-tenders-scraper`) Actor

Scrape EU grants and tender opportunities from the European Commission Funding & Tenders Portal (SEDIA). Search by keyword, filter by status and programme (Horizon Europe, Digital Europe, LIFE, Erasmus+). Get call identifiers, deadlines, budgets, and topic links.

- **URL**: https://apify.com/studio-amba/eu-funding-tenders-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## EU Funding & Tenders Portal Scraper

Extract EU grant calls and tender opportunities from the European Commission's official [Funding & Tenders Portal](https://ec.europa.eu/info/funding-tenders/opportunities/portal/screen/home) (SEDIA). Search by keyword, filter by programme and status, and get structured data with deadlines, budgets, and direct links — no login, no cookies, no manual portal browsing.

### Why use this actor?

The Funding & Tenders Portal is the single entry point for all centrally managed EU funding: Horizon Europe research grants, Digital Europe deployment calls, LIFE environment projects, Erasmus+ partnerships, EU institution tenders, and more. Billions of euros in opportunities are published here every year.

Manually monitoring the portal is slow and easy to get wrong: deadlines are buried in topic pages, cascade-funding calls appear and disappear, and the search UI doesn't export anything. This actor turns the portal into a clean dataset you can feed into:

- **Grant consultancies** — monitor new calls for clients, build deadline calendars
- **Research offices and universities** — track Horizon Europe topics in your field
- **SMEs and startups** — find cascade funding (open calls with €50k–€2M sub-grants) and EIC opportunities
- **Bid teams** — watch EU institution tenders by CPV code and keyword
- **Funding databases and newsletters** — refresh your listings automatically on a schedule

### Features

- Searches the same API the official portal frontend uses — fast and reliable, no HTML parsing
- Covers **grants** (calls for proposals, including cascade funding) and **tenders** (EU institution calls for tenders)
- Filter by **status**: open, forthcoming, closed, or all
- Filter by **programme**: Horizon Europe, Digital Europe, EDF, CEF, Erasmus+, LIFE, EU4Health, CERV, Creative Europe, Single Market Programme, EMFAF, AMIF, ISF, BMVI, EUAF, and legacy Horizon 2020
- Extracts per-topic **budgets** (parsed from the call budget tables) and tender estimated values
- Returns **all deadline cut-offs** for multi-stage and multiple cut-off calls
- Direct links to the official topic/tender detail pages

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `searchQuery` | String | No | Keyword to search for (default: `digital`). Examples: `climate`, `cybersecurity`, `renewable energy`, `AI` |
| `opportunityType` | String | No | `grants` (default), `tenders`, or `all` |
| `status` | String | No | `open` (default), `forthcoming`, `closed`, or `all` |
| `programme` | String | No | Programme abbreviation: `HORIZON`, `DIGITAL`, `EDF`, `CEF`, `ERASMUS`, `LIFE`, `EU4H`, `CERV`, `CREA`, `SMP`, `EMFAF`, `AMIF`, `ISF`, `BMVI`, `EUAF`, `H2020`. Empty = all programmes |
| `maxItems` | Integer | No | Maximum opportunities to return (default: 100) |
| `proxyConfiguration` | Object | No | Apify proxy settings |

Run it with completely empty input `{}` and it returns open grant calls matching "digital" — useful for a quick test.

### Output

Each item contains:

| Field | Type | Example |
|-------|------|---------|
| `identifier` | String | `"HORIZON-CL5-2026-09-D4-03"` |
| `opportunityTitle` | String | `"Advanced data platforms for whole life carbon in building tools"` |
| `opportunityType` | String | `"grant"` or `"tender"` |
| `status` | String | `"open"`, `"forthcoming"`, or `"closed"` |
| `summary` | String | Short description of the topic or tender |
| `programmeName` | String | `"Horizon Europe (HORIZON)"` |
| `programmeCode` | String | `"HORIZON"` |
| `programmePeriod` | String | `"2021 - 2027"` |
| `callIdentifier` | String | `"HORIZON-CL5-2026-09"` |
| `callTitle` | String | Call or cascade-funding call name |
| `openingDate` | String | `"2026-05-05"` |
| `deadlineDate` | String | `"2026-09-15"` (first/next deadline) |
| `allDeadlines` | Array | All cut-off dates for multi-stage calls |
| `deadlineModel` | String | `"single-stage"`, `"two-stage"`, `"multiple cut-off"` |
| `budgetTotal` | Number | `15750000` (topic budget or tender estimated value) |
| `budgetCurrency` | String | `"EUR"` |
| `keywords` | Array | Topic keywords (where published) |
| `cpvCode` | String | Main CPV code (tenders) |
| `contractingAuthority` | String | Contracting authority name (tenders) |
| `url` | String | Official portal detail page |
| `scrapedAt` | String | ISO 8601 timestamp |

### Example output

```json
{
    "identifier": "HORIZON-CL5-2026-09-D4-03",
    "opportunityTitle": "Advanced data platforms to integrate whole life carbon in building information tools, assessments, and certification (Built4People Partnership)",
    "opportunityType": "grant",
    "status": "open",
    "programmeName": "Horizon Europe (HORIZON)",
    "programmeCode": "HORIZON",
    "programmePeriod": "2021 - 2027",
    "callIdentifier": "HORIZON-CL5-2026-09",
    "callTitle": "Built4People",
    "openingDate": "2026-05-05",
    "deadlineDate": "2026-09-15",
    "allDeadlines": ["2026-09-15T00:00:00.000+0000"],
    "deadlineModel": "single-stage",
    "budgetTotal": 15750000,
    "budgetCurrency": "EUR",
    "url": "https://ec.europa.eu/info/funding-tenders/opportunities/portal/screen/opportunities/topic-details/horizon-cl5-2026-09-d4-03",
    "scrapedAt": "2026-06-11T12:17:52.180Z"
}
````

### How to scrape EU Funding & Tenders data

1. Open the actor on Apify and click **Try for free**
2. Enter a keyword in **Search Query** (e.g. `cybersecurity`) — or leave the defaults
3. Pick **Grants**, **Tenders**, or both, and choose a status (open calls are the default)
4. Optionally restrict to one programme, e.g. `HORIZON` or `DIGITAL`
5. Click **Start** and download your results as JSON, CSV, or Excel from the **Output** tab

You can also run it on a schedule (daily or weekly) and connect the dataset to Google Sheets, Make, Zapier, or your own API to get notified about new calls automatically.

#### Common use cases

- **Deadline watchlist**: `status: "open"` + your field keyword, run weekly, diff against last week's dataset
- **Cascade funding tracker**: `searchQuery: "open call"`, `opportunityType: "grants"` — catches sub-granting calls from funded projects
- **Tender monitoring by CPV**: `opportunityType: "tenders"` and filter the output on `cpvCode`
- **Forthcoming calls radar**: `status: "forthcoming"` to prepare proposals before calls open

### Cost estimate

This is a lightweight API-based actor: a run returning 100 opportunities typically uses well under 0.01 compute units and finishes in seconds. Expect roughly **$0.40 per 1,000 opportunities** at standard pay-per-event pricing.

### Limitations

- Data comes from the public SEDIA search index; very new opportunities can take a short while to appear there
- Programme-specific fields differ between grants and tenders: keywords/budget tables are grant fields, CPV codes and contracting authorities are tender fields
- Some continuously open tenders (dynamic purchasing systems, framework contracts) legitimately have no deadline
- Budget figures are parsed from published call budget tables and reflect the indicative topic budget, not a guarantee of award size
- Data is scraped from the public portal and may change without notice — always verify deadlines on the official topic page before submitting

### Need this data on a schedule, or a custom version?

We run this scraper as a managed service for businesses: scheduled runs,
deduplication, delta detection, and delivery to your inbox, Google Sheets,
or API — maintenance included. We can also build a custom version with your
exact fields and filters, or combine multiple sources into one feed.

See [studioamba.dev/services](https://studioamba.dev/services/) or email
<hello@studioamba.dev> for a free data sample.
We maintain 300+ European web scrapers and answer within one business day.

# Actor input Schema

## `searchQuery` (type: `string`):

Keyword to search for in funding opportunities. Examples: 'digital', 'climate', 'cybersecurity', 'renewable energy'.

## `opportunityType` (type: `string`):

Type of opportunities to return: grants (calls for proposals), tenders (calls for tenders), or both.

## `status` (type: `string`):

Filter by submission status. 'open' returns opportunities currently accepting submissions.

## `programme` (type: `string`):

Filter by EU programme abbreviation: HORIZON (Horizon Europe), DIGITAL (Digital Europe), EDF, CEF, ERASMUS, LIFE, EU4H, CERV, CREA, SMP, EMFAF, AMIF, ISF, BMVI, EUAF, H2020. Leave empty for all programmes. Advanced: a raw SEDIA frameworkProgramme id also works.

## `maxItems` (type: `integer`):

Maximum number of opportunities to return.

## `proxyConfiguration` (type: `object`):

Proxy settings for accessing the EU Funding & Tenders Portal API.

## Actor input object example

```json
{
  "searchQuery": "digital",
  "opportunityType": "grants",
  "status": "open",
  "maxItems": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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 = {
    "searchQuery": "digital",
    "opportunityType": "grants",
    "status": "open",
    "maxItems": 20,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/eu-funding-tenders-scraper").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 = {
    "searchQuery": "digital",
    "opportunityType": "grants",
    "status": "open",
    "maxItems": 20,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/eu-funding-tenders-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "searchQuery": "digital",
  "opportunityType": "grants",
  "status": "open",
  "maxItems": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call studio-amba/eu-funding-tenders-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=studio-amba/eu-funding-tenders-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "EU Funding & Tenders Scraper — Grants + Procurement",
        "description": "Scrape EU grants and tender opportunities from the European Commission Funding & Tenders Portal (SEDIA). Search by keyword, filter by status and programme (Horizon Europe, Digital Europe, LIFE, Erasmus+). Get call identifiers, deadlines, budgets, and topic links.",
        "version": "0.1",
        "x-build-id": "cOEg4x4MTldm5tVfH"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/studio-amba~eu-funding-tenders-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-studio-amba-eu-funding-tenders-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/studio-amba~eu-funding-tenders-scraper/runs": {
            "post": {
                "operationId": "runs-sync-studio-amba-eu-funding-tenders-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/studio-amba~eu-funding-tenders-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-studio-amba-eu-funding-tenders-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchQuery": {
                        "title": "Search Query",
                        "type": "string",
                        "description": "Keyword to search for in funding opportunities. Examples: 'digital', 'climate', 'cybersecurity', 'renewable energy'."
                    },
                    "opportunityType": {
                        "title": "Opportunity Type",
                        "enum": [
                            "grants",
                            "tenders",
                            "all"
                        ],
                        "type": "string",
                        "description": "Type of opportunities to return: grants (calls for proposals), tenders (calls for tenders), or both.",
                        "default": "grants"
                    },
                    "status": {
                        "title": "Status",
                        "enum": [
                            "open",
                            "forthcoming",
                            "closed",
                            "all"
                        ],
                        "type": "string",
                        "description": "Filter by submission status. 'open' returns opportunities currently accepting submissions.",
                        "default": "open"
                    },
                    "programme": {
                        "title": "Programme",
                        "type": "string",
                        "description": "Filter by EU programme abbreviation: HORIZON (Horizon Europe), DIGITAL (Digital Europe), EDF, CEF, ERASMUS, LIFE, EU4H, CERV, CREA, SMP, EMFAF, AMIF, ISF, BMVI, EUAF, H2020. Leave empty for all programmes. Advanced: a raw SEDIA frameworkProgramme id also works."
                    },
                    "maxItems": {
                        "title": "Max Items",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Maximum number of opportunities to return.",
                        "default": 100
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy settings for accessing the EU Funding & Tenders Portal API."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
