# Greek Public Contracts & Tenders Search (KIMDIS) (`jimkarageo/greek-public-contracts-kimdis`) Actor

Search Greece's official public procurement registry (ΚΗΜΔΗΣ): contracts, tender notices, awards, payment orders and requests, with amounts, contractors, CPV codes and documents.

- **URL**: https://apify.com/jimkarageo/greek-public-contracts-kimdis.md
- **Developed by:** [Dimitris Karageorgis](https://apify.com/jimkarageo) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 results

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

## Greek Public Contracts & Tenders Search (KIMDIS)

Search Greece's official public procurement registry — **ΚΗΜΔΗΣ** (Central Electronic Registry of Public Contracts) — and get back clean, structured JSON: contracts, tender notices, awards, payment orders and purchase requests, with amounts, **named contractors and their VAT numbers**, CPV codes and document links.

Built on the official ΚΗΜΔΗΣ OpenData API. No HTML scraping, no login, no API key.

***

### Why this and not the transparency portal

Greece publishes public spending in two places. ΚΗΜΔΗΣ is the procurement-specific one, and for procurement it is far richer than the general transparency portal (Διαύγεια):

| | Διαύγεια | **ΚΗΜΔΗΣ (this Actor)** |
|---|---|---|
| Filter by amount | after fetching | **the registry filters it** |
| Find everything awarded to one company | not possible | **search by contractor VAT** |
| Filter by CPV code | no | **yes** |
| Contractor name & VAT | often missing | **on virtually every contract** |
| Record types | one | **five** |
| Links between related acts | no | **notice → award → contract → payments** |

If you need the whole of Greek government decision-making rather than procurement, use the companion Actor [Greek Government Decisions Search (Diavgeia)](https://apify.com/jimkarageo/greek-diavgeia-search). Many records here carry a `diavgeiaAda`, linking the two.

***

### Input

| Field | Type | Description |
|---|---|---|
| `recordTypes` | array | `contracts`, `notices`, `auctions`, `payments`, `requests`. Default `contracts`. |
| `keywords` | array of strings | Words to match in the record title. Each entry is searched separately and merged. |
| `organization` | string | Contracting authority: name, public-body id, or 9-digit VAT number. |
| `contractorVat` | string | Return only records awarded to this company VAT number (ΑΦΜ). |
| `contractorName` | string | Return only records whose contractor name matches. |
| `cpvCodes` | array of strings | CPV codes, e.g. `30200000-1`. |
| `dateFrom` / `dateTo` | string | `YYYY-MM-DD`. **Registry submission date** — see the note below. |
| `minAmount` / `maxAmount` | integer | Contract value in EUR, filtered by the registry itself. |
| `maxResults` | integer | Maximum records to return. Default `100`. |

All fields are optional. With no input you get the last 6 months of contracts, capped at `maxResults`.

#### Example input

Every IT contract over €50,000 awarded by the City of Athens in the first half of 2025:

```json
{
  "recordTypes": ["contracts"],
  "organization": "Δήμος Αθηναίων",
  "cpvCodes": ["30200000-1"],
  "minAmount": 50000,
  "dateFrom": "2025-01-01",
  "dateTo": "2025-06-30"
}
```

Everything one company has won across all of Greek government:

```json
{
  "recordTypes": ["contracts", "auctions", "payments"],
  "contractorVat": "800606208",
  "dateFrom": "2025-01-01",
  "dateTo": "2025-12-31"
}
```

***

### Output

```json
{
  "recordType": "contracts",
  "recordTypeLabel": "Σύμβαση",
  "adam": "25SYMV017078050",
  "title": "ΥΠΗΡΕΣΙΕΣ ΚΑΘΑΡΙΣΜΟΥ ΟΧΗΜΑΤΩΝ ΓΙΑ ΤΡΙΑ (3) ΈΤΗ",
  "submissionDate": "2025-06-24",
  "signedDate": "2025-06-24",
  "startDate": "2025-06-24",
  "endDate": "2028-06-24",
  "organizationId": "6013",
  "organizationName": "ΔΗΜΟΣ ΑΘΗΝΑΙΩΝ",
  "organizationVat": "090025537",
  "amountWithVat": 1016341.2,
  "amountWithoutVat": 819630.0,
  "contractorName": "ΝΤΑΛΑΕΚ ΜΟΝ. ΙΚΕ",
  "contractorVat": "800606208",
  "contractors": [{ "name": "ΝΤΑΛΑΕΚ ΜΟΝ. ΙΚΕ", "vatNumber": "800606208" }],
  "contractType": "Υπηρεσίες",
  "procedureType": "Ανοιχτή διαδικασία",
  "awardCriteria": "Βάσει κόστους – βέλτιστη σχέση ποιότητας – τιμής",
  "cpvCodes": ["50112300-6"],
  "region": "Κεντρικός Τομέας Αθηνών",
  "city": "ΑΘΗΝΑ",
  "cancelled": false,
  "relatedAdam": {
    "auctionAdam": ["25AWRD016780655"],
    "paymentAdam": ["26PAY019741128", "26PAY019710034", "..."]
  },
  "diavgeiaAda": null,
  "documentUrl": "https://cerpp.eprocurement.gov.gr/khmdhs-opendata/contract/attachment/25SYMV017078050",
  "source": "cerpp.eprocurement.gov.gr (ΚΗΜΔΗΣ)"
}
```

`adam` is the **ΑΔΑΜ**, the unique identifier of every act registered in ΚΗΜΔΗΣ.

**`relatedAdam` is the useful part.** Greek procurement runs as a chain — tender notice → award → contract → payment orders — and each record names the others by ΑΔΑΜ. The contract above links to its award and to 26 separate payment orders, so you can follow what was actually paid against a signed contract, not just what was promised.

***

### Three things to know

**1. Dates are submission dates, not signature dates.** `dateFrom`/`dateTo` filter the day an act was *published to the registry*, which is routinely weeks after the contract was signed. In a sample filtered to 10–12 June, contracts signed as far back as 21 May appeared. Every record carries both `submissionDate` and `signedDate`, so filter on the former and read the latter.

**2. Search contractors by VAT, not by name.** Greek company names are typed inconsistently by each authority — the same supplier appeared as "ΝΤΑΛΑΕΚ ΜΟΝ. ΙΚΕ", "ΝΤΑΛΑΕΚ ΜΟΝΟΠΡΟΣΩΠΗ ΙΚΕ" and even "ΝΤΑΛΑΕΧ" across eight contracts. The VAT number is the only reliable key.

**3. Volume costs requests.** ΚΗΜΔΗΣ returns a fixed 50 records per API call and offers no way to raise it, so 1,000 results means 20 calls. Set `maxResults` to what you actually need.

***

### Related Actors

- **[Greek Public Contractor Profile](https://apify.com/jimkarageo/greek-contractor-profile)** — take a contractor VAT number from these results and get that company's whole record with the Greek state: total won, which authorities award it, direct-award share, CPV mix and yearly trend.
- **[Greek Public Tenders Monitor & Alerts](https://apify.com/jimkarageo/greek-tenders-monitor)** — the same search, running on a schedule across both registries. It remembers what it already reported, so you are told only about genuinely new tenders and contracts, by email or webhook. Use it when you want to be notified rather than to go looking.
- [Greek Government Decisions Search (Diavgeia)](https://apify.com/jimkarageo/greek-diavgeia-search) — every kind of Greek government decision, not just procurement: appointments, circulars, grants, regulatory acts and more.

***

### Limitations & disclaimer

- Data comes from the official ΚΗΜΔΗΣ OpenData API **as published**. Contracting authorities upload their own acts, so completeness and accuracy are theirs. **No guarantee of completeness is given or implied.**
- The registry is refreshed by an automatic daily process, so very recent acts may not appear yet.
- Tender notices and purchase requests have no contractor yet, so contractor filters do not apply to them; the run log says so when they are ignored.
- Contracting-authority names are resolved against the official Greek public-body catalogue published by Διαύγεια, which uses the same organization identifiers as ΚΗΜΔΗΣ.
- This tool searches **contracts and public bodies**, not individuals. Contractor records are companies and their VAT numbers; some sole traders appear as named persons because Greek procurement law requires publication. Handle any personal data in results in line with the GDPR.
- Source data is licensed CC BY 4.0 by the Greek Ministry of Digital Governance. Not affiliated with or endorsed by the Ministry.

***

***

## Ελληνικά

### Τι κάνει

Ψάχνει το **ΚΗΜΔΗΣ** (Κεντρικό Ηλεκτρονικό Μητρώο Δημοσίων Συμβάσεων) και επιστρέφει δομημένα δεδομένα: συμβάσεις, προκηρύξεις, αναθέσεις, εντολές πληρωμής και αιτήματα — με ποσά, **ανάδοχο και ΑΦΜ αναδόχου**, κωδικούς CPV και σύνδεσμο στο έγγραφο.

Στηρίζεται στο επίσημο OpenData API — χωρίς scraping, χωρίς κλειδί.

### Γιατί είναι καλύτερο από τη Διαύγεια για διαγωνισμούς

Το ΚΗΜΔΗΣ φιλτράρει **ποσό από τον ίδιο τον server**, ψάχνει **ανάδοχο με ΑΦΜ** και υποστηρίζει **CPV** — τρία πράγματα που η Διαύγεια δεν κάνει. Και ο ανάδοχος υπάρχει σχεδόν πάντα, ενώ στη Διαύγεια λείπει συχνά.

### Τρία πράγματα που πρέπει να ξέρεις

1. **Οι ημερομηνίες είναι ανάρτησης, όχι υπογραφής.** Το φίλτρο πιάνει την ημέρα που αναρτήθηκε η πράξη στο μητρώο, που είναι συχνά εβδομάδες μετά την υπογραφή. Κάθε εγγραφή έχει και τα δύο πεδία.
2. **Ψάξε ανάδοχο με ΑΦΜ, όχι με επωνυμία.** Η ίδια εταιρεία γράφεται διαφορετικά από κάθε φορέα — σε οκτώ συμβάσεις εμφανίστηκε ως «ΝΤΑΛΑΕΚ ΜΟΝ. ΙΚΕ», «ΝΤΑΛΑΕΚ ΜΟΝΟΠΡΟΣΩΠΗ ΙΚΕ» και «ΝΤΑΛΑΕΧ». Μόνο το ΑΦΜ είναι αξιόπιστο.
3. **Το `relatedAdam` συνδέει την αλυσίδα**: προκήρυξη → ανάθεση → σύμβαση → εντολές πληρωμής. Βλέπεις τι πληρώθηκε τελικά, όχι μόνο τι υπογράφηκε.

### Νομικά

Τα δεδομένα προέρχονται από το επίσημο API του ΚΗΜΔΗΣ και παρέχονται **όπως έχουν αναρτηθεί** από τις αναθέτουσες αρχές — **χωρίς εγγύηση πληρότητας**. Άδεια πηγής: CC BY 4.0. Δεν συνδέεται με το Υπουργείο Ψηφιακής Διακυβέρνησης.

***

**Keywords:** Greece, Greek public procurement, ΚΗΜΔΗΣ, KIMDIS, public contracts, government tenders, contract awards, δημόσιες συμβάσεις, διαγωνισμοί, προκηρύξεις, αναθέσεις, ΑΔΑΜ, CPV, contractor VAT, ΑΦΜ αναδόχου, transparency, open data, eprocurement, MCP

# Actor input Schema

## `recordTypes` (type: `array`):

Which kinds of procurement acts to return. Each selected type is a separate search and results are merged. | Ποιους τύπους πράξεων να επιστρέψει. Κάθε επιλογή είναι ξεχωριστή αναζήτηση και τα αποτελέσματα ενώνονται.

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

Words to match in the record title. Each entry is a separate search and results are merged. A multi-word entry is matched as a phrase. | Λέξεις για αναζήτηση στον τίτλο. Κάθε καταχώρηση είναι ξεχωριστή αναζήτηση.

## `organization` (type: `string`):

Public body name, its Greek public-body id, or its 9-digit VAT number (ΑΦΜ). Names are matched against the official Greek public-body catalogue, ignoring accents and capitalisation, so 'Δήμος Αθηναίων' works. Leave empty to search all bodies. | Όνομα φορέα, κωδικός ή ΑΦΜ φορέα. Τα ονόματα αντιστοιχίζονται αυτόματα, χωρίς να μετράνε τόνοι και κεφαλαία.

## `contractorVat` (type: `string`):

Return only records awarded to this company VAT number (ΑΦΜ). Applies to contracts, awards and payment orders; tender notices and requests have no contractor yet, so it is ignored for those. | Επιστρέφει μόνο εγγραφές με αυτό το ΑΦΜ αναδόχου. Ισχύει σε συμβάσεις, αναθέσεις και εντολές πληρωμής.

## `contractorName` (type: `string`):

Return only records whose contractor name matches. Applies to contracts, awards and payment orders. | Επιστρέφει μόνο εγγραφές με ανάδοχο που ταιριάζει. Ισχύει σε συμβάσεις, αναθέσεις και εντολές πληρωμής.

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

Common Procurement Vocabulary codes to filter by, for example 30200000-1 for computer equipment. | Κωδικοί CPV για φιλτράρισμα, π.χ. 30200000-1 για εξοπλισμό υπολογιστών.

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

Earliest date the act was submitted to KIMDIS, format YYYY-MM-DD. NOTE: this is the registry submission date, not the date a contract was signed. Defaults to 6 months before 'Date to'. | Παλαιότερη ημερομηνία ΑΝΑΡΤΗΣΗΣ στο ΚΗΜΔΗΣ, όχι υπογραφής. Προεπιλογή: 6 μήνες πριν.

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

Latest submission date, format YYYY-MM-DD. Defaults to today. | Νεότερη ημερομηνία ανάρτησης. Προεπιλογή: σήμερα.

## `minAmount` (type: `integer`):

Only return records worth at least this much. Filtered by KIMDIS itself, so it costs nothing extra. | Μόνο εγγραφές με ποσό τουλάχιστον αυτό. Το φιλτράρισμα γίνεται από το ΚΗΜΔΗΣ.

## `maxAmount` (type: `integer`):

Only return records worth at most this much. | Μόνο εγγραφές με ποσό έως αυτό.

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

Maximum number of records to return. KIMDIS returns 50 records per API request. | Μέγιστος αριθμός εγγραφών. Το ΚΗΜΔΗΣ επιστρέφει 50 ανά αίτημα.

## Actor input object example

```json
{
  "recordTypes": [
    "contracts"
  ],
  "organization": "Δήμος Αθηναίων",
  "contractorVat": "094222211",
  "dateFrom": "2025-01-01",
  "dateTo": "2025-12-31",
  "maxResults": 100
}
```

# Actor output Schema

## `records` (type: `string`):

The matched Greek public procurement records, as JSON items 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 = {
    "recordTypes": [
        "contracts"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("jimkarageo/greek-public-contracts-kimdis").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 = { "recordTypes": ["contracts"] }

# Run the Actor and wait for it to finish
run = client.actor("jimkarageo/greek-public-contracts-kimdis").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 '{
  "recordTypes": [
    "contracts"
  ]
}' |
apify call jimkarageo/greek-public-contracts-kimdis --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jimkarageo/greek-public-contracts-kimdis"
        }
    }
}
```

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/hZJZ6QOZPSdg0zTn8/builds/5G4CE1aQ0gJcMEOvu/openapi.json
