# EU Funding & Tenders Scraper (`maximedupre/eu-funding-tenders-scraper`) Actor

Scrape EU Funding & Tenders Portal grants and tenders. Export deadlines, budgets, programme details, tender CPV data, official URLs, and source keywords.

- **URL**: https://apify.com/maximedupre/eu-funding-tenders-scraper.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Business, Lead generation, Automation
- **Stats:** 10 total users, 5 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.01 / 1,000 scraped opportunities

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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 scraper for grant and tender data

EU Funding & Tenders Scraper collects public grant and tender opportunities from the official [European Commission Funding & Tenders Portal](https://ec.europa.eu/info/funding-tenders/opportunities/portal/screen/home). Use it to monitor EU funding tenders by keyword, programme, status, period, and deadline window, then export source-backed opportunity rows with deadlines, budgets, contribution ranges, agency details, tender CPV data, and official URLs.

- [EU funding tenders monitoring](https://apify.com/maximedupre/eu-funding-tenders-scraper/examples/eu-funding-tenders-monitoring) for grant offices, bid teams, researchers, and public-sector sales teams.
- [EU grants scraper](https://apify.com/maximedupre/eu-funding-tenders-scraper/examples/eu-grants-scraper) workflows for Horizon Europe, Digital Europe, LIFE, Erasmus, and other supported programmes.
- [EU tenders scraper](https://apify.com/maximedupre/eu-funding-tenders-scraper/examples/eu-tenders-scraper) workflows for tender opportunities published on the Funding & Tenders Portal.
- [Funding deadline tracking](https://apify.com/maximedupre/eu-funding-tenders-scraper/examples/funding-deadline-tracking) with programme-period and deadline-window filters plus all published cut-off dates in the output.
- [Grant and procurement exports](https://apify.com/maximedupre/eu-funding-tenders-scraper/examples/grant-and-procurement-exports) for spreadsheets, CRMs, dashboards, Apify API clients, schedules, and webhooks.

#### 📦 Returned data

Each dataset item is one successful EU Funding & Tenders opportunity. Fields can be `null` or empty when the source does not publish that fact for a specific opportunity.

- `identifier`, `title`, `opportunityType`, `status`, official `url`, `summary`, and `latestInfo`
- `programme` with code, name, period, and source divisions
- `call` with call identifier and call title
- `openingDate`, `deadlineDate`, `allDeadlines`, and `deadlineModel`
- `budget` with amount, currency, and source budget text when published
- `funding` with expected grants and contribution minimum, maximum, and currency when published
- `agency`, `countries`, and source `keywords`
- `tender` with CPV code and contracting authority for tender rows

Grant rows keep tender-only fields as `null`, so you do not get procurement fields filled with grant data. The Actor also keeps missing budgets, contribution ranges, agencies, countries, and latest-info text empty instead of guessing.

#### ▶️ How to run

1. Open the Input tab.
2. Enter a **Search query**, such as `digital`, `climate`, `health`, or a known topic code.
3. Choose **Opportunity type**: grants, tenders, or both.
4. Choose **Status**: open, forthcoming, closed, or all statuses.
5. Optionally add a **Programme** code such as `HORIZON`, `DIGITAL`, `LIFE`, `ERASMUS`, or a SEDIA programme ID.
6. Optionally choose **Programme period** and add **Deadline from** or **Deadline to** dates.
7. Set **Maximum opportunities** to control output size and cost.
8. Run the Actor and open the dataset.

For a broad first run, keep the prefilled `climate` query, collect grants and tenders across all statuses, and cap the run with **Maximum opportunities**. You can export the dataset as JSON, CSV, Excel, XML, RSS, or HTML, or call the Actor through the Apify API after the run finishes.

#### ⚙️ Input example

```json
{
  "searchQuery": "digital",
  "opportunityType": "all",
  "status": "all",
  "programme": "HORIZON",
  "programmePeriod": "2021-2027",
  "deadlineFrom": "2025-01-01",
  "deadlineTo": "2026-12-31",
  "maxItems": 100
}
```

Leave **Search query** empty when you want to browse by type, status, programme, period, and deadline filters only.

#### 📄 Output example

```json
{
  "identifier": "DIGITAL-2021-SKILLS-01-SPECIALISED",
  "title": "Specialised education programmes in key capacity areas",
  "opportunityType": "grant",
  "status": "open",
  "url": "https://ec.europa.eu/info/funding-tenders/opportunities/portal/screen/opportunities/competitive-calls-cs/43977648",
  "summary": null,
  "latestInfo": "Latest update from the portal.",
  "programme": {
    "code": "DIGITAL",
    "name": "Digital Europe Programme",
    "period": "2021 - 2027",
    "divisions": ["43152860"]
  },
  "call": {
    "identifier": null,
    "title": "DIGITWIN4CIUE Reduction-Fees Scholarships"
  },
  "openingDate": "2025-07-11",
  "deadlineDate": "2026-09-15",
  "allDeadlines": [
    "2025-10-31T17:00:00.000+0000",
    "2026-09-15T23:00:00.000+0000"
  ],
  "deadlineModel": "multiple cut-off",
  "budget": {
    "amount": 100000,
    "currency": "EUR",
    "text": "2026: 100000 EUR"
  },
  "funding": {
    "expectedGrants": 2,
    "contribution": {
      "minimum": 50000,
      "maximum": 100000,
      "currency": "EUR"
    }
  },
  "agency": {
    "name": "European Commission"
  },
  "countries": ["BE"],
  "keywords": [
    "DIGITAL-2021-SKILLS-01-SPECIALISED",
    "digital"
  ],
  "tender": null
}
```

#### 💳 Pricing

This Actor charges only for saved grant or tender opportunities. It does not charge an actor-start event, no-result runs, failed-query rows, zero-result rows, or status rows.

#### 🔌 Integrations

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

- Use the Apify API to pull opportunity rows into a grant database, CRM, or procurement workflow.
- Schedule repeat runs to monitor new open or forthcoming opportunities for a topic, programme, period, or deadline window.
- Export CSV or Excel files for analysts who review deadlines, budgets, contribution ranges, and programme context in spreadsheets.
- Connect finished runs to webhooks or downstream Apify integrations for alerts and reporting.

#### ❓ FAQ

**Can I scrape both EU grants and EU tenders?**

Yes. Set **Opportunity type** to grants, tenders, or both. Tender rows include tender-only fields when the source publishes them, while grant rows keep those fields empty.

**Can I track Horizon Europe or Digital Europe calls?**

Yes. Use **Programme** with codes such as `HORIZON` or `DIGITAL`. The Actor also supports other known EU programme codes listed in the input help text, and raw SEDIA programme IDs.

**Can I filter by programme period or deadline date?**

Yes. Use **Programme period**, **Deadline from**, and **Deadline to** to narrow saved rows. Deadline filtering checks the source's published cut-off dates for each opportunity.

**Does this scrape TED procurement notices?**

No. This Actor focuses on the EU Funding & Tenders Portal. TED-focused actors cover the broader Tenders Electronic Daily procurement source.

**Why not use the Funding & Tenders Portal API directly?**

Use the direct source path if you want to maintain your own request code, parsing, exports, retries, and scheduling. Use this Actor when you want EU Funding & Tenders rows in Apify with dataset exports, API access, schedules, and integrations already wired.

**What are EU Funding & Tenders alternatives?**

For EU-wide public procurement notices, TED-focused scrapers cover a broader procurement source. For awarded research project data, CORDIS-focused scrapers cover a different source. This Actor is focused on current Funding & Tenders Portal grant and tender opportunities.

### 📝 Changelog

- 0.2: Added programme period and deadline-window filters, plus richer opportunity fields for latest info, funding details, agencies, countries, and contribution ranges.
- 0.1: Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~eu-funding-tenders-scraper/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Other actors

- [World Bank Projects Scraper ↗](https://apify.com/maximedupre/world-bank-projects-scraper) - Export public World Bank project and indicator data for development finance research.
- [Pappers Sirene Scraper ↗](https://apify.com/maximedupre/pappers-sirene-scraper) - Search official French company registry data from public sources.
- [GLEIF LEI Lookup ↗](https://apify.com/maximedupre/gleif-lei-lookup) - Look up public Legal Entity Identifier records for KYB and company enrichment.
- [Hospital Price Transparency Scraper ↗](https://apify.com/maximedupre/hospital-price-transparency-scraper) - Collect CMS hospital profiles and public machine-readable price files.
- [US Travel Advisories Scraper ↗](https://apify.com/maximedupre/us-travel-advisories-scraper) - Monitor State Department and CDC travel risk data.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

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

Search opportunity titles and text. Leave empty to browse by the filters below.

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

Choose grants, tenders, or both.

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

Choose the submission state to monitor.

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

Filter by programme code such as HORIZON, DIGITAL, LIFE, ERASMUS, or a SEDIA programme ID.

## `programmePeriod` (type: `string`):

Choose a funding programme period.

## `deadlineFrom` (type: `string`):

Include opportunities with a deadline on or after this date.

## `deadlineTo` (type: `string`):

Include opportunities with a deadline on or before this date.

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

Limit how many matching opportunity rows the run returns.

## Actor input object example

```json
{
  "searchQuery": "climate",
  "opportunityType": "all",
  "status": "all",
  "programmePeriod": "2021-2027",
  "maxItems": 500
}
```

# Actor output Schema

## `results` (type: `string`):

Open the dataset with one row for each saved grant or tender opportunity.

# 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": "climate",
    "opportunityType": "all",
    "status": "all",
    "programme": "",
    "programmePeriod": "2021-2027",
    "maxItems": 500
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/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": "climate",
    "opportunityType": "all",
    "status": "all",
    "programme": "",
    "programmePeriod": "2021-2027",
    "maxItems": 500,
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/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": "climate",
  "opportunityType": "all",
  "status": "all",
  "programme": "",
  "programmePeriod": "2021-2027",
  "maxItems": 500
}' |
apify call maximedupre/eu-funding-tenders-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/r5Ks6Qb4VN4RivWJJ/builds/yIGxQ4kjjVhxL6UjM/openapi.json
