# EU CORDIS Consortium & Project-End Intelligence (`afkdigital/eu-cordis-consortium-project-end-intelligence`) Actor

Search official EU CORDIS Horizon Europe and H2020 funded projects, complete consortia, EU contributions and project end dates. Filter by keyword, country, organisation type, funding and dates. JSON/CSV for Clay and n8n; no CORDIS key. $8 per 1,000 unique projects.

- **URL**: https://apify.com/afkdigital/eu-cordis-consortium-project-end-intelligence.md
- **Developed by:** [AFK Digital](https://apify.com/afkdigital) (community)
- **Categories:** Lead generation, Developer tools
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$8.00 / 1,000 unique funded projects

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

## EU CORDIS Consortium & Project-End Intelligence

Find EU-funded research projects, their full consortia, official organisation types, project funding and end dates in normalized JSON and CSV. Designed for Clay enrichment, n8n workflows, research partnership discovery and project-end monitoring.

### Data source and coverage

This Actor downloads the official CORDIS monthly open-data CSV packages for **Horizon Europe (HORIZON, 2021–2027)** and **Horizon 2020 (H2020, 2014–2020)**. Default: Horizon Europe. No CORDIS account, DET API key, proxy or geocoding service is required. FP7 and other funding programmes are outside this version's coverage.

- Horizon Europe: https://cordis.europa.eu/data/cordis-HORIZONprojects-csv.zip
- Horizon 2020: https://cordis.europa.eu/data/cordis-h2020projects-csv.zip
- Catalogue: https://data.europa.eu/data/datasets/cordis-eu-research-projects-under-horizon-europe-2021-2027
- CORDIS access options: https://cordis.europa.eu/about/services
- Public EURIO SPARQL endpoint (verified, not used by this version): https://cordis.europa.eu/datalab/sparql
- RDF dump and named graphs: https://data.europa.eu/data/datasets/named-graphs-from-eurio-knowledge-graph
- DET API: https://cordis.europa.eu/about/dataextractions-api — free but requires registration and a personal API key, subject to CORDIS limits. This Actor does not use it.

Bulk downloads provide project and organisation tables with explicit project IDs and preserve consortium membership. RDF dumps are much larger; interactive SPARQL performance varies. The Actor downloads the current official package on each run, but bulk data is a monthly snapshot and may lag the live project page. Always inspect source_updated_at. It is the source record's contentUpdateDate, with the publisher's original timestamp and unspecified timezone, not the time this Actor ran. checked_at is a separate UTC retrieval timestamp.

### Input

Example (default completes with 5 projects):

```json
{"programme":"HORIZON","maxResults":5,"maxChargeUsd":1}
```

Filter example:

```json
{"keywords":["solar","carbon"],"programme":"HORIZON","participantCountry":"DE","organizationType":"REC","minContributionEur":1000000,"projectEndFrom":"2025-01-01","projectEndTo":"2027-12-31","maxResults":20,"maxChargeUsd":0.16}
```

| Input | Meaning |
|---|---|
| keywords | Up to 20 literal phrases; case-insensitive OR across acronym, title, objective and project keywords |
| programme | HORIZON (default), H2020, or ALL |
| participantCountry | Two-letter official country code, such as DE, ES or TR |
| organizationType | Official activityType: REC, HES, PRC, PUB or OTH |
| minContributionEur | Minimum **project maximum EU contribution** (ecMaxContribution), EUR |
| projectEndFrom / projectEndTo | Inclusive source project endDate bounds, YYYY-MM-DD |
| maxResults | Unique projects, 1–1,000; default 5 |
| maxChargeUsd | Additional result charge cap; default $1; zero returns no results |

Filters are combined with AND, except keywords which use OR. Country and organisation-type conditions must be satisfied by the **same participant**. These conditions select projects; they never remove other consortium members from the output. Missing dates or amounts cannot satisfy filters on those fields. A source failure fails the run; it is never reported as a successful zero-match search.

### Output

One default Dataset item per unique project:

- project_id, acronym, title
- coordinator: array of coordinator organisation records
- participants: full array of source organisation rows linked by projectID, including coordinator and ended participation where present
- contribution_eur: source **project ecMaxContribution**, the maximum EU contribution
- total_cost_eur: source **project totalCost**
- start_date, end_date, topic (array of source topic identifiers), programme
- source_url, source_updated_at, source_download_url, checked_at
- project_status, objective, keywords, attribution, contribution_basis

Each participant includes organization_id, name, country, organization_type, organization_type_label, role, contribution_eur (source ecContribution), net_contribution_eur (source netEcContribution), total_cost_eur, source_updated_at and **source_fields** retaining every original organisation column. Blank amounts become null; genuine zero remains 0. Decimal commas are converted to JSON numbers. Participant amounts are never summed or substituted for project totals. A research organisation (REC) or education establishment (HES) is not presented as a company. PRC means a private for-profit entity, not a verified active sales prospect.

### Clay and n8n

Use Apify's run-and-retrieve-dataset integration or the run's JSON Dataset export. Access the complete JSON and CSV through the run Output links. PROJECTS_CSV in the Key-Value Store keeps participants, coordinator and topics as JSON strings inside a single CSV cell. Parse that cell as JSON in n8n or Clay when you need individual consortium members. The ordinary Apify flattened CSV export can produce wide columns; use PROJECTS_CSV to preserve arrays without a row expansion.

### Pricing and controls

**$0.008 per successful unique project ($8 per 1,000 projects).** Each project is written once to the default Dataset and billed by the apify-default-dataset-item PPE event. No separate startup, participant, download or retry charge. Platform run usage is included in this event price. Post-run storage access is governed by Apify's normal platform terms.

maxResults, maxChargeUsd and Apify's run spending limit jointly restrict output. Downloads are sequential, limited to two official packages (100 MiB each); source tables are capped at 180 MiB uncompressed each. A source request has a 40-second timeout and at most 3 attempts with bounded backoff, including Retry-After for transient errors. Source work has a 230-second deadline; cloud runs have a 300-second timeout and at most 512 MB memory. Project IDs are deduplicated before billing. On resumed runs, existing default Dataset IDs are checked before writing. There is no external pagination: the bulk tables are streamed rather than issuing unbounded page requests.

### Reuse, attribution and limitations

Source: **European Commission CORDIS / Publications Office of the European Union**. The dataset catalogue identifies Commission Decision **2011/833/EU** as its reuse licence:
https://eur-lex.europa.eu/eli/dec/2011/833/oj

The Decision permits commercial and non-commercial reuse, subject to its applicable conditions, including source acknowledgement and avoiding misleading or distorted reuse. This Actor transforms administrative project metadata into normalized records; it does not redistribute beneficiary reports, publications, images, logos, patents or other third-party works. The CORDIS website notice authorizes EU-owned editorial content under CC BY 4.0 unless otherwise stated and reserves third-party/beneficiary rights:
https://cordis.europa.eu/about/legal

Changes: renamed fields, decimal normalization, ID-based joins and JSON/CSV serialization. Attribution is carried on every output project. No affiliation or endorsement by the EU is claimed.

A project end date is the date published in CORDIS; it may change. It is **not a guarantee of new funding, a procurement event, an available budget or purchasing intent**. Maximum grant amounts are not proof of money actually disbursed. The source may contain omissions or delays. Results are for research and monitoring and are not legal, financial or procurement advice.

# Actor input Schema

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

Case-insensitive literal substring OR match in title, acronym, objective and project keywords.

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

HORIZON is the official source code for Horizon Europe. ALL downloads at most two packages.

## `participantCountry` (type: `string`):

Two-letter official source country code, e.g. DE, ES, TR. Filters projects; retains every participant.

## `organizationType` (type: `string`):

Official activityType. REC and HES are not classified as companies. Country and type must match the same participant.

## `minContributionEur` (type: `number`):

Project ecMaxContribution (maximum EU contribution); does not filter or sum participant contributions.

## `projectEndFrom` (type: `string`):

YYYY-MM-DD; compares the source project endDate, not participant end of participation.

## `projectEndTo` (type: `string`):

YYYY-MM-DD; projects with missing end dates do not match date filters.

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

One project per dataset row. Participant arrays and retries create no additional billable items.

## `maxChargeUsd` (type: `number`):

Additional result cap: floor(budget / 0.008). Platform run spending limit also applies; zero produces no results.

## Actor input object example

```json
{
  "programme": "HORIZON",
  "maxResults": 5,
  "maxChargeUsd": 1
}
```

# Actor output Schema

## `projects` (type: `string`):

No description

## `csv` (type: `string`):

No description

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

No description

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("afkdigital/eu-cordis-consortium-project-end-intelligence").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("afkdigital/eu-cordis-consortium-project-end-intelligence").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 '{}' |
apify call afkdigital/eu-cordis-consortium-project-end-intelligence --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,afkdigital/eu-cordis-consortium-project-end-intelligence"
        }
    }
}
```

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/N1c37XY0bGbaYPfLv/builds/5vfWWRXeHylbNBWS5/openapi.json
