# Hungary Procurement Monitor — EKR & National Tenders (`smarcell/hungary-procurement-monitor`) Actor

Search Hungarian public procurement notices from the national EKR layer (below EU TED threshold). Filters by keywords, CPV, dates, and notice type. Complements EU TED scrapers.

- **URL**: https://apify.com/smarcell/hungary-procurement-monitor.md
- **Developed by:** [Seres Marcell](https://apify.com/smarcell) (community)
- **Categories:** Business, Developer tools
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 procurement notices

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#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

### What does this Actor do?

**Hungary Procurement Monitor** searches **Hungarian national public procurement notices** — the layer that sits **below EU TED thresholds** and is published through [EKR (Elektronikus Közbeszerzési Rendszer)](https://ekr.gov.hu/).

It queries the public [TendersGuru Hungary API](https://tenders.guru/hu/api), which indexes notices from Hungarian procurement sources, and returns normalized JSON you can filter, schedule, and integrate.

**Pair it with my [EU TED Tender Scraper](https://apify.com/smarcell/eu-ted-tender-scraper)** for complete Hungary coverage:

- **TED** → above-threshold EU notices
- **This Actor** → national / below-threshold EKR layer

No login, no API key, no browser. Only public notice metadata.

### Ready-to-run examples (no setup)

- [Open Hungarian IT tenders (CPV 72)](https://apify.com/smarcell/hungary-procurement-monitor/examples/hungary-open-it-procurement)
- [Open Hungarian healthcare tenders (CPV 85)](https://apify.com/smarcell/hungary-procurement-monitor/examples/hungary-open-healthcare)

Pair with [EU TED Tender Scraper](https://apify.com/smarcell/eu-ted-tender-scraper) for full Hungary coverage (EU + national layer).

### Why use it?

- Find **municipal, hospital, and university tenders** that never appear on TED
- Filter by **Hungarian keywords**, **CPV codes**, **notice type**, and **publication dates**
- Export JSON / CSV / Excel or consume via Apify API, webhooks, Make, n8n, or MCP agents
- **Pay-per-event** pricing — predictable cost per notice for daily monitoring runs

### What data can it extract?

| Field | Type | Description |
| --- | --- | --- |
| `noticeId` | string | Notice identifier from the source API |
| `tenderId` | string | Parent tender/procedure ID when available |
| `source` | string | Data source tag (`tendersguru-hu`) |
| `sourceUrl` | string | Link to the notice in the source API |
| `ekrUrl` | string | Direct EKR link when the source provides one |
| `titleHu` | string | Notice title (Hungarian) |
| `descriptionHu` | string | Notice description when published |
| `buyerName` | string | Contracting authority / buyer name |
| `cpvCodes` | string\[] | CPV codes attached to the notice |
| `noticeType` | string | Notice type token from the source |
| `publicationDate` | string | Publication date (`YYYY-MM-DD`) |
| `submissionDeadline` | string | Submission deadline when published |
| `isOpen` | boolean | `true` if deadline is today or in the future (or unknown) |
| `estimatedValue` | object | `{ amount, currency }` when published |
| `scrapedAt` | string | UTC timestamp when stored |

Not every notice includes every field. Missing values are `null` or `[]`.

### How to use

1. Open the **Input** tab.
2. Add optional **Keywords** (Hungarian or English, e.g. `informatika`, `építés`).
3. Add optional **CPV codes** (prefix match, e.g. `72` for IT services).
4. Optionally restrict **Notice types** or enable **Only open tenders**.
5. Set **Maximum notices** (1–500, default 50).
6. Run the Actor. Results appear in the default dataset.

Local test (Apify CLI):

```bash
cd hungary-procurement-monitor
apify run --input-file example_input.json
```

### Input

| Field | Required | Default | Notes |
| --- | --- | --- | --- |
| `keywords` | no | — | OR-combined substring match in title, description, buyer |
| `cpvCodes` | no | — | Prefix match against notice CPV codes |
| `noticeTypes` | no | — | `contract_notice`, `award_notice`, `prior_info`, `modification` |
| `onlyOpenTenders` | no | `false` | Skip notices with past submission deadline |
| `maxItems` | no | `50` | Integer 1–500 |
| `dateFrom` | no | — | Inclusive publication date `YYYY-MM-DD` |
| `dateTo` | no | — | Inclusive publication date `YYYY-MM-DD` |

Example — open IT tenders, max 10:

```json
{
  "keywords": ["informatika", "szoftver"],
  "cpvCodes": ["72"],
  "onlyOpenTenders": true,
  "maxItems": 10
}
```

### Output

Each dataset item is one procurement notice. Download from the **Output** tab or call:

```
GET https://api.apify.com/v2/datasets/{datasetId}/items
```

### Pricing

Pay-per-event: each stored notice is charged as event **`procurement-notice`** (see Pricing tab after publish).

Suggested platform pricing (set in Apify Console):

- **`procurement-notice`**: $0.003 per notice (~$3 / 1,000 notices)
- **`actor-start`**: $0.01 per run (optional platform event)

### Limitations & compliance

- Reads **public procurement notices only** — no bid submission, no authenticated EKR access.
- Data is aggregated via TendersGuru; for authoritative EKR documents follow `ekrUrl` / `sourceUrl` links.
- Source API pagination and field coverage may change; the Actor uses defensive parsing.
- Respect source rate limits; the Actor retries on transient HTTP errors and sleeps between pages.

### Related Actors

- [EU TED Tender Scraper](https://apify.com/smarcell/eu-ted-tender-scraper) — above-threshold EU notices
- [eMAG Price Watcher](https://apify.com/smarcell/emag-price-watcher) — HU/RO e-commerce price monitoring

### Support

Open an issue on the Actor page or contact the author via Apify Console.

# Actor input Schema

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

Optional Hungarian or English terms matched against title, description, and buyer name (case-insensitive substring). Multiple keywords are OR-ed.

## `cpvCodes` (type: `array`):

Optional Common Procurement Vocabulary prefixes (e.g. 72, 72000000). A notice matches if any CPV starts with any prefix.

## `noticeTypes` (type: `array`):

Optional notice categories: contract\_notice, award\_notice, prior\_info, modification.

## `onlyOpenTenders` (type: `boolean`):

When true, skip notices whose submission deadline is in the past (or unknown deadline is kept).

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

Maximum number of matching notices to store (1–500).

## `dateFrom` (type: `string`):

Inclusive lower bound for publication date (YYYY-MM-DD).

## `dateTo` (type: `string`):

Inclusive upper bound for publication date (YYYY-MM-DD).

## Actor input object example

```json
{
  "onlyOpenTenders": false,
  "maxItems": 50
}
```

# Actor output Schema

## `notices` (type: `string`):

Hungarian national procurement notices stored in the default dataset.

# 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("smarcell/hungary-procurement-monitor").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("smarcell/hungary-procurement-monitor").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 smarcell/hungary-procurement-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,smarcell/hungary-procurement-monitor"
        }
    }
}

```

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/wqMu0R1KQT3Ehz1Q0/builds/abKDhiYaWt6tkK6jk/openapi.json
