# Romania EU Funding Calls (`openrows/romania-eu-funding-calls`) Actor

Structured EU grant-call records from Romania's Ministry of Investments and European Projects (mfe.gov.ro): programme, status, dates, budget and eligibility.

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

## Pricing

$10.00 / 1,000 funding calls

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

## Romania EU Funding Calls

Structured, up-to-date records of Romania's EU-funded grant calls ("apeluri de proiecte"), straight
from the Ministry of Investments and European Projects (MIPE).

Extracts public data from [mfe.gov.ro](https://mfe.gov.ro/) — specifically its official funding-calls
calendar — and delivers it as a clean dataset you can download as JSON, CSV or Excel, or pull through
the API. HTTP-only, no browser, so runs are fast and cheap.

### What data you get

For every **funding call** the Actor returns:

| Field               | Description                                                                                                           |
| ------------------- | --------------------------------------------------------------------------------------------------------------------- |
| `url`               | Page the result was extracted from                                                                                    |
| `scrapedAt`         | ISO 8601 timestamp of the extraction                                                                                  |
| `title`             | The call's name, as published                                                                                         |
| `programme`         | The operational programme the call belongs to (e.g. "Program Regional Nord-Est")                                      |
| `callStatus`        | `open`, `closed` or `upcoming` — derived from `openingDate`/`deadline` vs. today                                      |
| `openingDate`       | ISO date the call opens for submissions                                                                               |
| `deadline`          | ISO date the call closes                                                                                              |
| `budget`            | Total call budget (number), when published; `null` otherwise                                                          |
| `currency`          | `"EUR"` whenever `budget` is set; `null` otherwise                                                                    |
| `beneficiariesText` | The source's eligibility text, verbatim, as free text — see Limitations for why this is text, not a list              |
| `guideUrl`          | Always `null` in this version — see Limitations                                                                       |
| `summary`           | The call's own stated objective, when published; `null` otherwise                                                     |
| `publishedAt`       | Always `null` in this version — see Limitations                                                                       |
| `callNumber`        | The Ministry's own reference number for the call — the **stable key** for this dataset (extra field; see Limitations) |
| `fundingSource`     | EU fund family behind the call, e.g. FEDR, FSE+, FEAMPA (extra field)                                                 |
| `submissionType`    | Competitive vs. continuous submission, as published (extra field)                                                     |
| `euBudget`          | EU-funded portion of the budget (number), when published; `null` otherwise (extra field)                              |
| `geographicArea`    | The call's geographic scope, as published (extra field)                                                               |
| `managingAuthority` | The public authority managing the call (extra field)                                                                  |
| `supportType`       | The form of support, e.g. "Grant", as published (extra field)                                                         |

### Input

| Option                | Type    | Default                         | Description                                                                       |
| --------------------- | ------- | ------------------------------- | --------------------------------------------------------------------------------- |
| `startUrls`           | array   | the funding-calls calendar page | Leave the default; see Limitations for why there is only one meaningful start URL |
| `maxItems`            | integer | `100`                           | Stop after this many results (max 10,000). Also your cost cap.                    |
| `proxyConfiguration`  | object  | Apify datacenter                | Proxy settings                                                                    |
| `programme`           | string  | -                               | Only return calls under this exact operational programme name                     |
| `status`              | string  | -                               | Only return calls with this computed status: `open`, `closed` or `upcoming`       |
| `publishedSince`      | string  | -                               | Only return calls whose `openingDate` is on or after this date (`YYYY-MM-DD`)     |
| `maxRequestsPerCrawl` | integer | `10`                            | Hard cap on pages fetched (advanced; this target normally needs exactly one)      |

Example input:

```json
{
    "maxItems": 50,
    "status": "open",
    "programme": "Program Regional Nord-Est"
}
```

### Output example

```json
{
    "url": "https://mfe.gov.ro/calendar-apeluri-de-finantare/",
    "scrapedAt": "2026-09-22T20:14:08.312Z",
    "title": "Asigurarea AT necesare pentru pregatirea perioadei post 2027",
    "programme": "Program Asistență Tehnică",
    "callStatus": "open",
    "openingDate": "2026-06-10",
    "deadline": "2026-12-31",
    "budget": 62459011,
    "currency": "EUR",
    "beneficiariesText": "Bănci sau instituții aflate în proprietate publică, autoritate a administrației publice centrale finanțată integral de la bugetul de stat sau BAS, autoritate a administrației publice centrale finanțată parțial din venituri proprii și bugetul de stat sau BAS, instituțiile publice din subordinea sau coordonarea Guvernului ori a ministerelor",
    "guideUrl": null,
    "summary": "Sprijin pentru pregătirea perioadei post 2027",
    "publishedAt": null,
    "callNumber": "964",
    "fundingSource": "FSE+",
    "submissionType": "Necompetitiv cu termen-limită de depunere",
    "euBudget": 31588020,
    "geographicArea": "Acoperire nationala",
    "managingAuthority": "AM_POAT_Autoritatea de Management pentru Program Asistență Tehnică",
    "supportType": "Grant"
}
```

A run summary (items pushed, items skipped by category, pages fetched, failed requests by category,
stop reason) is stored in the run's key-value store under the key `OUTPUT`.

### Pricing

**Pay per result.** You are charged per result and nothing else: no platform usage, no compute units.
Listing pages, retries and failed requests are free. The current rate is on the *Pricing* tab of this
Actor — that is the only place it is set, so no figure is repeated here.

- `maxItems` caps the number of results, and therefore the cost, of a run.
- The run also stops when it reaches the *maximum total charge* you set for the run in Apify Console
  or through the API.

### Tips

- Start with `maxItems: 20` to check the fields before a large run.
- Leave `startUrls` at its default. The Ministry publishes its whole calendar on one page (see
  Limitations), so pointing this Actor at other MIPE pages will not add data.
- Use `status: "open"` with a `programme` filter to build a shortlist of calls you can still apply to.
- Match and de-duplicate on `callNumber`, not `title`: `callNumber` (the Ministry's own reference
  number) is unique per call, `title` is not.
- Results come back in the Ministry's own order (records are grouped by `programme`, not sorted by
  date or status), so a small `maxItems` on an unfiltered run returns only the first programme(s) in
  that order, not a representative sample. Set the `programme` input to get every call for a specific
  programme regardless of `maxItems`.

### Limitations

- mfe.gov.ro pages that require a login are not accessible and are not scraped (none of the calendar
  data needs a login).
- **One data source, one page.** The Ministry's funding-calls calendar
  (`https://mfe.gov.ro/calendar-apeluri-de-finantare/`) embeds its entire dataset — every call it has
  published, open or not — as one JSON block on that single page, rather than paginating individual
  call pages. That is genuinely how the site works (see `NOTES.md` in the Actor's source for the
  recon); this Actor reads that block directly instead of simulating a browser to click through a
  calendar UI that renders the same data.
- **`beneficiariesText` is free text, not a category list.** The source publishes eligibility as
  prose with nested clauses, not a clean enum — splitting it on commas shreds multi-clause categories
  and, for a handful of calls, turns an explicit carve-out ("not eligible: sole traders...") into what
  looks like an eligible entry, inverting the source's own meaning. This Actor returns the source
  string exactly as published; parse it yourself if you need a structured list, and treat any
  "not eligible" / "cu excepția" clause in it as an exclusion, not an addition.
- **`guideUrl` and `publishedAt` are always `null`.** The calendar does not link a call to its
  "Ghidul Solicitantului" (applicant guide) PDF, and per-programme guide listings on the same site
  have no field tying a guide back to a specific call number. Guessing a match by title text would
  risk attaching the wrong guide or date to the wrong call, so these fields are left empty rather than
  guessed. `openingDate` is the most reliable "how new is this" signal available.
- **`callStatus` is computed, not the site's own label.** It compares `openingDate`/`deadline` to the
  run date (at UTC calendar-day granularity). The site's own internal state field is an editorial
  workflow marker, not an open/closed signal, so it is not used.
- `budget` is `null` for roughly two-thirds of calls (recon count, 2026-09-22) — the Ministry has not
  published a figure for those yet, not a scraping gap.
- **Source caveats: none found.** The calendar page carries no disclaimer about the accuracy,
  currency or official status of its data (checked live, 2026-09-22) — just a standard copyright
  footer. This slot is otherwise reserved for what the source itself says about its own data.

### Data and compliance

This Actor collects **publicly available, non-personal data only**:

- It fetches pages that are reachable without logging in and does not bypass access controls.
- It does not collect names, e-mail addresses, phone numbers, addresses, user handles or any other
  field that identifies a person. The source data itself carries none of these (verified against the
  live records): eligibility fields describe categories of organisation, never a named applicant.
- It identifies itself with a plain User-Agent and sends no headers that imitate a browser.
- It sends few requests in parallel, waits between requests to the same site, and stops instead of
  working around a block.

**Removal requests.** If you believe this Actor exposes data it should not, open an issue on the Actor's
*Issues* tab and state the URL(s) concerned. Requests are answered there, and the fields or pages in
question are removed.

You are responsible for using the extracted data in line with the terms of mfe.gov.ro and the laws
that apply to you.

### Support

Report bugs and request fields on the *Issues* tab of this Actor. Include the run ID.

### Proxy

The source answers only from Romanian residential IP addresses when run on the Apify platform, so the default `proxyConfiguration` uses Apify residential proxies in Romania. Datacenter proxies and direct connections time out. The pages are small text, so proxy bandwidth per run is minor, but it is part of the cost.

# Actor input Schema

## `startUrls` (type: `array`):

The funding-calls calendar page to read. Leave the default unless the Ministry moves the page — the whole calendar is embedded in this one page, so there is nothing to gain from adding more start URLs.

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

Stop after this many results. You are charged per result, so this is also your cost cap. The calendar holds over 1000 calls (recon count, 2026-09-22); raise this to get more of them. Maximum 10,000 per run; split a bigger job across runs.

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

Proxy settings. Default: Apify residential proxies located in Romania — this site does not answer requests from datacenter addresses when the Actor runs on the Apify platform (verified 2026-09-22). Residential proxy bandwidth is small here (pages are text) but it is part of the run cost.

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

Only return calls under this operational programme. Exact match against the programme name as the Ministry publishes it.

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

Only return calls in this state, computed by comparing each call's opening date and deadline to today: 'upcoming' (opens in the future), 'open' (opening date has passed, deadline has not, or one of the two is unset), 'closed' (deadline has passed). Leave blank for all.

## `publishedSince` (type: `string`):

Only return calls whose opening date (YYYY-MM-DD) is on or after this date. The calendar does not expose a separate publication timestamp, so this is the closest 'new calls since X' filter available — see NOTES.md.

## `maxRequestsPerCrawl` (type: `integer`):

Hard cap on pages fetched. This target has no per-call detail pages — the whole calendar loads from the one start URL — so this only matters if you add extra start URLs.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://mfe.gov.ro/calendar-apeluri-de-finantare/"
    }
  ],
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "RO"
  },
  "maxRequestsPerCrawl": 10
}
```

# Actor output Schema

## `results` (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 = {
    "startUrls": [
        {
            "url": "https://mfe.gov.ro/calendar-apeluri-de-finantare/"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "RO"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("openrows/romania-eu-funding-calls").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 = {
    "startUrls": [{ "url": "https://mfe.gov.ro/calendar-apeluri-de-finantare/" }],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "RO",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("openrows/romania-eu-funding-calls").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 '{
  "startUrls": [
    {
      "url": "https://mfe.gov.ro/calendar-apeluri-de-finantare/"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "RO"
  }
}' |
apify call openrows/romania-eu-funding-calls --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,openrows/romania-eu-funding-calls"
        }
    }
}
```

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/JLLgKQLhHZK12wvwK/builds/9b0nZRaO4KlZneaBP/openapi.json
