# Government Tenders & Procurement Tracker (EU, UK, Ukraine) (`xtracto/gov-tenders-ocds`) Actor

Track public tenders across Europe — one tender per row with buyer, deadline, contract value, category codes and awarded supplier. Covers EU (all member states), UK Contracts Finder and Ukraine, in one common format. Public data, no account needed.

- **URL**: https://apify.com/xtracto/gov-tenders-ocds.md
- **Developed by:** [Farhan Febrian Nauval](https://apify.com/xtracto) (community)
- **Categories:** Lead generation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## Government Tenders & Public Procurement Scraper (EU, UK, Ukraine)

Track **public tenders and awarded contracts across Europe** — one tender per row, with the buying authority, the bid deadline, the contract value, the category codes and (once awarded) the winning supplier.

Three official registers, one identical row shape:

| Register | Coverage |
| --- | --- |
| **EU — Tenders Electronic Daily** | Every EU/EEA member state plus other countries that publish there (Switzerland, Norway, and non-EU buyers using EU funds). 1.3M+ notices for construction alone. |
| **UK — Contracts Finder** | UK central government, councils, NHS and other public bodies. |
| **Ukraine — ProZorro** | Ukraine's national procurement system, including reconstruction and defence-adjacent buying. |

Built for bid teams and tender-watch services, suppliers looking for a pipeline, market-intelligence analysts, and journalists following public money.

***

### Why use this actor

- **No account, no login, no key.** Everything here is official public data.
- **One tender per row, in the same shape for every country** — buyer, deadline, value, currency, category codes, supplier. Compare a German construction notice with a UK council contract without writing any mapping code.
- **The original record travels with every row.** Alongside the tidy columns you get the register's own full record (lot detail, contact emails, delivery addresses, award history), so nothing is lost.
- **Filter the way buyers actually search** — by category code, country, keyword, contract type, date window, or stage of the process.
- **Titles and buyer names in your language.** EU notices carry up to 24 language versions; you pick the one you want in the title column.
- **Stable JSON output** for pipelines, CRMs, spreadsheets and databases, with automatic retries and export to JSON, CSV or Excel.

### How it works

1. Pick a **source** — the EU register, the UK register, Ukraine, or all three in one run.
2. Set a **date window** (leave it empty and the actor uses the last 7 days).
3. *(Optional)* Narrow the EU pull by **category code, country, keyword or contract type**, and the UK pull by **stage** (planning, open for bids, awarded, running).
4. The actor collects every matching notice, page after page, and writes each one to your dataset with the same set of columns regardless of which country it came from.
5. Download as JSON, CSV or Excel, or feed it straight into your own system.

You never manage accounts, keys, scrapers or infrastructure — set the filters and press **Run**.

### Use cases

**Build a live tender pipeline for your sales team**
Run daily with your category codes and countries; every new notice lands with its deadline and buyer contact so nothing is missed.

**See who is winning the contracts you bid for**
Pull awarded notices for your category and read the supplier and contract value columns — an instant competitor map with real prices.

**Price your bid**
Compare the published value of similar contracts across countries and years before you put a number on the page.

**Track reconstruction and public spending in Ukraine**
Pull the newest ProZorro tenders with buyer, value and deadline for monitoring or reporting.

### Input

```json
{
  "source": "ted",
  "publishedFrom": "",
  "publishedTo": "",
  "cpvCodes": "72000000",
  "buyerCountries": "",
  "keyword": "",
  "contractNature": "services",
  "tedQuery": "",
  "ukStage": "",
  "language": "eng",
  "maxItems": 200,
  "maxConcurrency": 6
}
```

| Field | Type | Description |
| --- | --- | --- |
| `source` | dropdown | `ted` (EU), `ukContractsFinder` (UK), `prozorro` (Ukraine) or `all` for every register in one run. |
| `publishedFrom` / `publishedTo` | string | Publication date window, `YYYY-MM-DD`. Leave both empty for the last 7 days. Used by the EU and UK registers; Ukraine always returns the newest tenders first. |
| `cpvCodes` | string | EU only. One or more category codes, comma-separated — `72000000` (IT services), `45000000` (construction). Empty = all categories. |
| `buyerCountries` | string | EU only. One or more 3-letter country codes of the buyer, comma-separated — `DEU`, or `DEU,FRA,ITA`. Empty = all countries. |
| `keyword` | string | EU only. Free-text search across the whole notice, e.g. `cyber security`. |
| `contractNature` | dropdown | EU only. `works` (construction), `supplies` (goods) or `services`. Empty = any. |
| `tedQuery` | string | EU only, advanced. Write your own query and the EU filters above are ignored — see below. |
| `ukStage` | dropdown | UK only. `planning`, `tender` (open for bids), `award`, `implementation`. Empty = any. |
| `language` | dropdown | Language for EU titles and buyer names (English, French, German, Spanish, Italian, Dutch, Polish, Portuguese, Swedish, Romanian). Falls back to English, then to whatever the notice has. |
| `maxItems` | integer | How many tenders to return **from each selected source**. `0` = every match (can be tens of thousands — narrow the date window first). |
| `maxConcurrency` | integer | How many Ukrainian tender pages to collect at once (1–12). |
| `proxyConfiguration` | object | Optional; not needed for these public registers. |

#### Advanced EU queries

`tedQuery` lets you write the EU register's own search expression when the simple filters aren't enough. Combine terms with `AND` / `OR`, use `=` for exact values, `~` for text matching, `IN (...)` for lists, and `today(-N)` for relative dates:

| Example | Meaning |
| --- | --- |
| `classification-cpv=45000000` | All construction notices |
| `buyer-country IN (DEU FRA)` | Buyers in Germany or France |
| `publication-date>=today(-7)` | Published in the last 7 days |
| `publication-date>=20260701 AND publication-date<=20260725` | A fixed date window |
| `FT~"cyber security"` | The phrase appears anywhere in the notice |
| `notice-title~"software"` | The word appears in the title |
| `contract-nature=services AND buyer-country=ITA` | Italian service contracts |

### Output — one record per tender

Every row starts with the same normalised columns whatever the country, followed by the register's own untouched record.

#### EU — Tenders Electronic Daily

```json
{
  "_input": "ted: publication-date>=20260718 AND publication-date<=20260725 AND classification-cpv=72000000 AND contract-nature=services",
  "_source": "S1-ted",
  "_scrapedAt": "2026-07-25T12:59:42Z",
  "recordType": "TENDER",
  "sourceSystem": "EU-TED",
  "tenderId": "497985-2026",
  "title": "Italy – Hydrometeorology services – Framework service contract for operating the \"Hydrological Forecast Centre - Analytics and Dissemination\" in support to the Copernicus Emergency Management Service (CEMS) Flood Early Warning Systems",
  "buyerName": "European Commission, DG JRC - Joint Research Centre",
  "buyerCountry": "ITA",
  "publishedDate": "2026-07-20",
  "deadline": "2026-09-17",
  "valueAmount": 4550000.0,
  "valueCurrency": "EUR",
  "status": "tendering",
  "noticeType": "cn-standard",
  "cpvCodes": ["71351612", "71351600", "71351900", "72316000", "80510000"],
  "supplierName": null,
  "noticeUrl": "https://ted.europa.eu/en/notice/-/detail/497985-2026",

  "publication-number": "497985-2026",
  "publication-date": "2026-07-20+02:00",
  "notice-type": "cn-standard",
  "contract-nature": ["services", "services"],
  "procedure-type": "open",
  "buyer-country": ["ITA"],
  "buyer-name": {"eng": ["European Commission, DG JRC - Joint Research Centre"], "fra": ["Commission européenne, DG JRC …"], "…": "22 more languages"},
  "notice-title": {"eng": "Italy – Hydrometeorology services – Framework service contract …", "…": "23 more languages"},
  "links": {"html": {"ENG": "https://ted.europa.eu/en/notice/-/detail/497985-2026", "…": "23 more"}, "pdf": {"…": "24 languages"}, "xml": {"MUL": "https://ted.europa.eu/en/notice/497985-2026/xml"}}
}
```

An awarded EU notice fills in the supplier and the final price instead:

```json
{
  "sourceSystem": "EU-TED",
  "tenderId": "497835-2026",
  "title": "Switzerland – IT services: consulting, software development, Internet and support – Erbringung von Informatikdienstleistungen «Microsoft Azure Cloud Betrieb»",
  "buyerName": "Kanton Zürich Finanzdirektion Amt für Informatik",
  "buyerCountry": "CHE",
  "publishedDate": "2026-07-20",
  "valueAmount": 3934408.0,
  "valueCurrency": "CHF",
  "status": "awarded",
  "supplierName": "DE_ISOLUTIONS AG",
  "noticeUrl": "https://ted.europa.eu/en/notice/-/detail/497835-2026"
}
```

#### UK — Contracts Finder

```json
{
  "_input": "ukContractsFinder: 2026-07-18..2026-07-25",
  "_source": "S1-ukcf",
  "_scrapedAt": "2026-07-25T12:59:09Z",
  "recordType": "TENDER",
  "sourceSystem": "UK-CF",
  "tenderId": "LEICSCC001-DN822655-76567968",
  "title": "SEN19019 -SEN-TAXI-Foxfields Academy",
  "buyerName": "Leicestershire County Council",
  "buyerCountry": "GBR",
  "publishedDate": "2026-07-25T13:50:31+01:00",
  "deadline": "2026-07-15T23:59:00+01:00",
  "valueAmount": 24700.0,
  "valueCurrency": "GBP",
  "status": "complete",
  "noticeType": "award",
  "cpvCodes": ["60000000"],
  "supplierName": "NMI TAXIS LTD",
  "noticeUrl": "https://www.contractsfinder.service.gov.uk/Notice/4781bb8e-e8b9-4335-afa2-525d08189d5a",

  "ocid": "ocds-b5fd17-b16ecab5-3a70-46f3-b7ea-63838d624681",
  "id": "4781bb8e-e8b9-4335-afa2-525d08189d5a-908294",
  "tag": ["award"],
  "initiationType": "tender",
  "tender": {
    "id": "LEICSCC001-DN822655-76567968",
    "description": "SEN19019 -SEN-TAXI-Foxfields Academy",
    "status": "complete",
    "classification": {"scheme": "CPV", "id": "60000000", "description": "Transport services (excl. Waste transport)"},
    "value": {"amount": 24700, "currency": "GBP"},
    "procurementMethod": "open",
    "procurementMethodDetails": "Open procedure",
    "tenderPeriod": {"endDate": "2026-07-15T23:59:00+01:00"},
    "contractPeriod": {"startDate": "2026-08-24T00:00:00+01:00", "endDate": "2027-07-31T23:59:59+01:00"},
    "suitability": {"sme": false, "vcse": false},
    "mainProcurementCategory": "services"
  },
  "parties": [
    {"id": "GB-CFS-58010", "name": "Leicestershire County Council", "address": {"streetAddress": "County Hall, Leicester Road, Glenfield", "locality": "Leicester", "postalCode": "LE3 8RA"}, "contactPoint": {"email": "Randip.Samra@leics.gov.uk", "telephone": "+44 1162323232"}, "roles": ["buyer"]},
    {"id": "GB-CFS-336959", "name": "NMI TAXIS LTD", "details": {"scale": "large", "vcse": false}, "roles": ["supplier"]}
  ],
  "buyer": {"id": "GB-CFS-58010", "name": "Leicestershire County Council"},
  "awards": [{"status": "active", "date": "2026-07-25T00:00:00+01:00", "value": {"amount": 24700, "currency": "GBP"}, "suppliers": [{"name": "NMI TAXIS LTD"}], "…": "documents, contract period"}]
}
```

#### Ukraine — ProZorro

```json
{
  "_input": "prozorro: latest tenders",
  "_source": "S1-prozorro",
  "_scrapedAt": "2026-07-25T12:59:11Z",
  "recordType": "TENDER",
  "sourceSystem": "UA-PROZORRO",
  "tenderId": "UA-2026-06-30-014626-a",
  "title": "Медичні матеріали",
  "buyerName": "ВІЙСЬКОВА ЧАСТИНА Т0110",
  "buyerCountry": "UKR",
  "publishedDate": "2026-06-30T18:01:48.740681+03:00",
  "deadline": "2026-07-11T09:00:00+03:00",
  "valueAmount": 365627.28,
  "valueCurrency": "UAH",
  "status": "active.awarded",
  "noticeType": "belowThreshold",
  "cpvCodes": ["33140000-3"],
  "supplierName": "ТОВ \"КИЇВ КОММЕРС ГРУПП\"",
  "noticeUrl": "https://prozorro.gov.ua/tender/UA-2026-06-30-014626-a",

  "tenderID": "UA-2026-06-30-014626-a",
  "description": "Спрощена закупівля застосовується відповідно до пункту 8 Особливостей здійснення оборонних закупівель на період дії правового режиму воєнного стану …",
  "procurementMethodType": "belowThreshold",
  "mainProcurementCategory": "goods",
  "value": {"amount": 365627.28, "currency": "UAH", "valueAddedTaxIncluded": true},
  "procuringEntity": {"name": "ВІЙСЬКОВА ЧАСТИНА Т0110", "identifier": {"scheme": "UA-EDR", "id": "…"}, "address": {"…": "street, locality, region"}, "contactPoint": {"…": "name, email, telephone"}, "kind": "defense"},
  "tenderPeriod": {"startDate": "2026-06-30T18:01:48+03:00", "endDate": "2026-07-11T09:00:00+03:00"},
  "items": [{"description": "Медичні матеріали", "quantity": 1.0, "classification": {"scheme": "ДК021", "id": "33140000-3"}, "…": "delivery address and date"}],
  "awards": [{"status": "active", "suppliers": [{"name": "ТОВ \"КИЇВ КОММЕРС ГРУПП\""}], "value": {"amount": 365627.28, "currency": "UAH"}}],
  "documents": ["… tender documents with download links"]
}
```

#### Output fields

| Field | Type | Description |
| --- | --- | --- |
| `sourceSystem` | string | Which register the row came from: `EU-TED`, `UK-CF` or `UA-PROZORRO`. |
| `tenderId` | string | The register's own reference for the tender or notice. |
| `title` | string | Tender title, in your chosen language where several exist. |
| `buyerName` | string | The contracting authority. |
| `buyerCountry` | string | 3-letter country code of the buyer (`DEU`, `GBR`, `UKR`…). |
| `publishedDate` | string | When the notice was published. |
| `deadline` | string | Deadline for receiving bids, where the notice states one. |
| `valueAmount` | number | Contract value — the awarded amount when there is one, otherwise the estimate. |
| `valueCurrency` | string | Currency of `valueAmount` (`EUR`, `GBP`, `UAH`, `CHF`, `CZK`…). |
| `status` | string | Where the tender is in its life: `planning`, `tendering`, `awarded` (EU); `active`, `complete`, `cancelled` (UK); ProZorro's own detailed statuses such as `active.tendering`. |
| `noticeType` | string | The register's own notice/procedure type, e.g. `cn-standard`, `award`, `belowThreshold`. |
| `cpvCodes` | array | Category codes describing what is being bought. |
| `supplierName` | string | Winning supplier once the contract is awarded; empty while the tender is still open. Several winners are joined with `;`. |
| `noticeUrl` | string | Link to the official notice page. |
| `_input` | string | The filters that produced this row. |
| `_source` | string | Which register produced this row. |
| `_scrapedAt` | string | When the row was collected (UTC). |
| *(everything else)* | — | The register's own record, field names untouched: lots, contact emails, delivery addresses, documents, award history. |

If something goes wrong the actor writes a row with `_error` and `_errorDetail` explaining what happened — runs never end silently empty.

### Notes and limits

- **`maxItems` counts per source.** `maxItems: 200` with `source: "all"` returns up to 600 rows.
- **The EU register returns up to 250 notices per page** and the actor keeps turning pages until your limit is reached; a single query can match well over a million notices, so use a date window or category filter for anything you actually want to download.
- **The UK register returns 100 notices per page** and covers UK public bodies only. Buyer country is reported as `GBR` for every row.
- **Ukraine is a newest-first feed** — the date window does not apply to it; use `maxItems` to control how far back you go. Each tender is fetched in full, so this source is a little slower than the other two.
- **Empty fields are real.** Early-stage notices have no supplier, contract-modification notices often have no deadline, and some buyers publish no value at all. The actor leaves these empty rather than guessing.
- **Values are not converted between currencies** — always read `valueAmount` together with `valueCurrency`.
- Additional national registers (for example France's BOAMP and Germany's regional portals) are candidates for future versions.

Verified live on 2026-07-25 against all three registers: EU deep paging confirmed over 600 consecutive notices with no duplicates, UK paging confirmed across 250 releases, and Ukrainian tender detail collected with no failures.

# Actor input Schema

## `source` (type: `string`):

Which public procurement register to pull from. 'All sources' runs every register in one go and returns them in the same record shape.

## `publishedFrom` (type: `string`):

Earliest publication date to include. Leave empty to use the last 7 days. Applies to the EU and UK registers; the Ukraine register always returns the most recent tenders first.

## `publishedTo` (type: `string`):

Latest publication date to include. Leave empty to use today. Applies to the EU and UK registers.

## `cpvCodes` (type: `string`):

EU only. One or more Common Procurement Vocabulary codes, comma-separated, e.g. '72000000' (IT services) or '45000000,71000000' (construction, architecture). Leave empty for every category.

## `buyerCountries` (type: `string`):

EU only. One or more 3-letter country codes of the buying organisation, comma-separated, e.g. 'DEU' or 'DEU,FRA,ITA'. Leave empty for every country.

## `keyword` (type: `string`):

EU only. Free-text search across the whole notice, e.g. 'cyber security'. Leave empty to skip keyword filtering.

## `contractNature` (type: `string`):

EU only. Restrict to works, supplies or services contracts. 'Any' returns all three.

## `tedQuery` (type: `string`):

EU only, optional. Write your own expert query and every EU filter above is ignored, e.g. 'classification-cpv=45000000 AND buyer-country=DEU AND publication-date>=today(-7)'. Leave empty to use the simple filters.

## `ukStage` (type: `string`):

UK only. Restrict to one stage of the contracting process. 'Any' returns all stages.

## `language` (type: `string`):

EU notices carry titles and buyer names in up to 24 languages. Pick the one you want in the title and buyer columns; if a notice has no version in that language the actor falls back to English, then to whatever is available.

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

How many tenders to return from each selected source (0 = every match, which can be tens of thousands — use a narrow date window if you do that).

## `maxConcurrency` (type: `integer`):

How many Ukrainian tender detail pages to collect at the same time. Higher is faster; lower is gentler on the register.

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

Optional. These are open government registers, so no proxy is needed — leave it off unless your network requires one.

## Actor input object example

```json
{
  "source": "ted",
  "publishedFrom": "",
  "publishedTo": "",
  "cpvCodes": "72000000",
  "buyerCountries": "",
  "keyword": "",
  "contractNature": "",
  "tedQuery": "",
  "ukStage": "",
  "language": "eng",
  "maxItems": 200,
  "maxConcurrency": 6,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `sourceSystem` (type: `string`):

Source System as reported by the source.

## `tenderId` (type: `string`):

Tender Id as reported by the source.

## `title` (type: `string`):

Title of the item.

## `buyerName` (type: `string`):

Buyer Name as reported by the source.

## `buyerCountry` (type: `string`):

Buyer Country as reported by the source.

## `publishedDate` (type: `string`):

Publication date.

## `deadline` (type: `string`):

Deadline as reported by the source.

## `valueAmount` (type: `string`):

Value Amount as reported by the source.

## `valueCurrency` (type: `string`):

Value Currency as reported by the source.

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

Status reported by the source.

## `supplierName` (type: `string`):

Supplier Name as reported by the source.

## `noticeUrl` (type: `string`):

Link to the notice.

## `_scrapedAt` (type: `string`):

UTC timestamp of the scrape, ISO 8601.

## `recordType` (type: `string`):

Which kind of row this is.

## `noticeType` (type: `string`):

Notice Type as reported by the source.

## `publication-number` (type: `string`):

Publication-number as reported by the source.

## `publication-date` (type: `string`):

Publication-date as reported by the source.

## `notice-type` (type: `string`):

Notice-type as reported by the source.

## `contract-nature` (type: `string`):

Contract-nature as reported by the source.

## `procedure-type` (type: `string`):

Procedure-type as reported by the source.

## `buyer-country` (type: `string`):

Buyer-country as reported by the source.

## `buyer-name` (type: `string`):

Buyer-name as reported by the source.

## `notice-title` (type: `string`):

Notice-title as reported by the source.

## `links` (type: `string`):

Links.

## `ocid` (type: `string`):

Ocid as reported by the source.

## `id` (type: `string`):

Unique identifier of the item at the source.

## `tag` (type: `string`):

Tag as reported by the source.

## `initiationType` (type: `string`):

Initiation Type as reported by the source.

## `tender` (type: `string`):

Tender as reported by the source.

## `parties` (type: `string`):

Parties.

## `buyer` (type: `string`):

Buyer as reported by the source.

## `awards` (type: `string`):

Awards.

# 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 = {
    "publishedFrom": "",
    "publishedTo": "",
    "cpvCodes": "72000000",
    "buyerCountries": "",
    "keyword": "",
    "tedQuery": "",
    "maxItems": 200
};

// Run the Actor and wait for it to finish
const run = await client.actor("xtracto/gov-tenders-ocds").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 = {
    "publishedFrom": "",
    "publishedTo": "",
    "cpvCodes": "72000000",
    "buyerCountries": "",
    "keyword": "",
    "tedQuery": "",
    "maxItems": 200,
}

# Run the Actor and wait for it to finish
run = client.actor("xtracto/gov-tenders-ocds").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 '{
  "publishedFrom": "",
  "publishedTo": "",
  "cpvCodes": "72000000",
  "buyerCountries": "",
  "keyword": "",
  "tedQuery": "",
  "maxItems": 200
}' |
apify call xtracto/gov-tenders-ocds --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,xtracto/gov-tenders-ocds"
        }
    }
}
```

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/aWWQxzDXzLKkaqmrH/builds/auaPB2RqIRq8aGlG9/openapi.json
