# EU Horizon / CORDIS Grant Awards Change Watch (`nexgenwatch/eu-horizon-grants-watch`) Actor

Receive seed-zero, structured records for newly signed and changed EU research grant awards — the funded projects published on the European Commission's official CORDIS database.

- **URL**: https://apify.com/nexgenwatch/eu-horizon-grants-watch.md
- **Developed by:** [NexGen Watch](https://apify.com/nexgenwatch) (community)
- **Categories:** Business, News
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $33.50 / 1,000 grant-award deltas

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 Horizon / CORDIS Grant Awards Change Watch

Receive seed-zero, structured records for **newly signed and changed EU research
grant awards** — the funded projects published on the European Commission's
official **CORDIS** database (the Funding & Tenders Portal *Projects & results*,
covering framework programmes such as **Horizon Europe** and **H2020**) — with
per-page run receipts, not another historical CORDIS dump.

The actor reads the public, logged-out CORDIS project search (most-recently-
updated first), parses each awarded project as published, and emits only
qualified post-baseline awards and material changes. Each record carries its
source-native CORDIS **project id**, the EU contribution amount, the official
call reference and coordinator, and a run receipt.

### How it works

1. Queries the public CORDIS `/search` JSON for `contenttype='project'`, sorted
   by content-update date (newest awards first), paginated and bounded.
2. Normalizes each awarded project — id, acronym, title, status, total cost,
   **maximum EU contribution**, start/end/signature dates, framework programme,
   call reference and coordinating organisation.
3. Applies your optional framework keep-filter (default `HORIZON`).
4. In watch mode, compares to a private baseline to emit `NEW_AWARD` for a newly
   listed funded project and `AWARD_UPDATED` when a buyer-visible field changes
   (status, EU contribution, dates).

The first watch run seeds silently (zero alerts). Later runs emit only new and
changed awards.

### Output

Three record types, discriminated by `record_type`:

- `eu_grant_award` — a normalized awarded project (snapshot mode).
- `eu_grant_award_delta` — a post-baseline change, with `before`/`after` and
  `changed_fields` (watch mode).
- `source_receipt` — a per-page run receipt (`terminal_state`, `canary_passed`,
  request counters). Always emitted, never billed.

Every item carries `source_url` and `observed_at`.

### Use cases

Research consultants and grant-seeking startups track newly funded projects and
competitors; tech-transfer offices monitor awards in their fields and find
coordinators/partners; data teams ingest structured EU grant-award records.

### Honest limits

A CORDIS award is an **official record that a project was funded**, not proof of
outcome, quality, or that funds were disbursed. Some projects omit an amount
(kept `null` with a parse warning). This actor watches a **bounded, most-
recently-updated window** of the CORDIS awards stream, not a complete
enumeration of every historical project — so, like an event feed, it **never
claims removal** from absence. Coordinator and programme are extracted
best-effort from the official relations block and are never inferred. No contact
enrichment, scoring or recommendations. CORDIS outages/shape drift fail loud
(BLOCKED / PARTIAL), never a silent empty success.

### Compliance

Public, logged-out CORDIS only. No login, key, CAPTCHA or paywall defeating; no
licensed source. The actor self-throttles to 2 requests/second and stops on any
source objection.

### Pricing

| Event | FREE | BRONZE | SILVER | GOLD+ |
|---|---|---|---|---|
| Actor Start (`apify-actor-start`) | $0.02 | $0.02 | $0.02 | $0.02 |
| Grant-award delta (`award_change`) | $0.05 | $0.045 | $0.04 | $0.0335 |
| Awards page check (`source_check`) | $0.10 | $0.09 | $0.08 | $0.067 |

Prices are the filed pay-per-event amounts per plan tier (PLATINUM/DIAMOND match GOLD). Blocked and refused runs do not intentionally charge value events.

# Actor input Schema

## `watchMode` (type: `boolean`):

When true, seed a private baseline and emit only post-baseline award deltas (first run emits zero). When false, emit snapshot eu\_grant\_award rows.

## `baselineKey` (type: `string`):

Named watch baseline (1-120 chars, \[A-Za-z0-9.\_:-]). Null derives a SHA-256 of the normalized filters.

## `frameworkProgrammes` (type: `array`):

Keep only awarded projects under these EU framework programmes (as published by CORDIS, e.g. HORIZON, H2020, FP7). Empty keeps all frameworks. Values are matched case-insensitively.

## `sort` (type: `string`):

CORDIS sort key. Most-recently-updated first surfaces new and changed awards.

## `pageSize` (type: `integer`):

CORDIS results per page (1-100).

## `emitDeltaTypes` (type: `array`):

Which watch-mode delta types to emit.

## `maxPages` (type: `integer`):

Maximum result pages to enumerate this run (bounded recency window over the CORDIS awards stream).

## Actor input object example

```json
{
  "watchMode": true,
  "frameworkProgrammes": [
    "HORIZON"
  ],
  "sort": "contentUpdateDate:decreasing",
  "pageSize": 50,
  "emitDeltaTypes": [
    "NEW_AWARD",
    "AWARD_UPDATED"
  ],
  "maxPages": 10
}
```

# 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("nexgenwatch/eu-horizon-grants-watch").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("nexgenwatch/eu-horizon-grants-watch").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 '{}' |
apify call nexgenwatch/eu-horizon-grants-watch --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=nexgenwatch/eu-horizon-grants-watch",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/nBS8Rd9GrNdYbaA53/builds/15WbiCXpDV8vIavVx/openapi.json
