# UVO Slovakia Scraper — Public Procurement Tenders (`studio-amba/uvo-gov-sk-scraper`) Actor

Scrape Slovak public procurement tenders from the Office for Public Procurement (uvo.gov.sk). Extract tender titles, contracting authorities, CPV/NUTS codes, contract type, procedure type, and key dates. No login required.

- **URL**: https://apify.com/studio-amba/uvo-gov-sk-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** Business, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $7.00 / 1,000 result scrapeds

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/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

## UVO Slovakia Scraper — Public Procurement Tenders

Scrape Slovak public procurement tenders from the Office for Public Procurement (Úrad pre verejné obstarávanie, uvo.gov.sk) — the national platform every Slovak public authority uses to publish tenders. Extract tender titles, contracting authorities, CPV/NUTS codes, contract type, procedure type, EU funding status, and the full timeline of a procurement case. No login or cookies required — all data is publicly available on uvo.gov.sk.

### Who this is for

- Contractors and consultants tracking construction, IT, and services tenders across Slovak municipalities and state bodies
- Lead-generation teams building prospect lists of active Slovak public buyers
- Market researchers tracking public spending by sector, region, or authority
- Procurement compliance and EU-funding trackers who need CPV/NUTS-coded tender data

### How to scrape UVO Slovakia data

1. Go to this actor's page on the Apify Store.
2. Click "Start" to open the input configuration.
3. Enter a Slovak-language search keyword (e.g. `cesta`, `rekonštrukcia`, `informačný systém`) or leave it as the default to get recent procurements.
4. Optionally filter by contracting authority name or CPV code.
5. Set the maximum number of results.
6. Click "Start" and wait for the run to finish.
7. Download your data in JSON, CSV, XML, or Excel format.

### What data source this uses

The scraper queries `uvo.gov.sk/vyhladavanie/vyhladavanie-zakaziek` — the official public search for procurement cases (zákazky) run by the Slovak Office for Public Procurement. Each result links to a detail page that carries the case's administrative record: authority, status, dates, and — once the authority has published a formal notice against it — CPV/NUTS classification, contract type, and procedure type.

### Input parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `searchQuery` | string | `"cesta"` | Free text keyword matched against tender titles (Slovak language) |
| `authorityName` | string | — | Filter by contracting authority name, e.g. `"Mesto Bratislava"` |
| `cpvCode` | string | — | Filter by CPV code, e.g. `"45000000-7"` for construction works |
| `maxResults` | integer | 100 | Maximum number of procurement notices to return (1–1000) |
| `fetchDetails` | boolean | `true` | Enrich each result with its detail page (status, CPV/NUTS codes, contract type, procedure type, EU funding, dates). Roughly doubles the number of requests. Turn off for a faster listing-only run. |
| `proxyConfiguration` | object | Apify automatic proxy | Proxy settings — uvo.gov.sk has no bot-wall, so the free automatic pool works fine |

#### Example input

```json
{
    "searchQuery": "rekonštrukcia",
    "authorityName": "",
    "cpvCode": "",
    "maxResults": 50,
    "fetchDetails": true
}
```

### Output fields

| Field | Type | Example | Description |
|-------|------|---------|-------------|
| `procurementId` | string | `"563317"` | UVO's internal case ID |
| `title` | string | `"Cesta II/499 Trebatice - Piešťany"` | Tender title |
| `buyer` | string | null | `"Správa a údržba ciest Trnavského samosprávneho kraja"` | Contracting authority name |
| `buyerId` | string | null | `"8700"` | Authority's profile ID on UVO |
| `status` | string | null | `"Aktívna"` | Case status (e.g. Aktívna = Active) |
| `cpvCodes` | array | `["45233140-2"]` | CPV (Common Procurement Vocabulary) codes, from the detail page |
| `cpvDescription` | string | null | `"Práce na ceste"` | Main CPV category description, from the listing |
| `nutsCodes` | array | `["SK021"]` | NUTS region codes |
| `nutsDescription` | string | null | `"Trnavský kraj"` | Region name |
| `contractType` | string | null | `"Práce"` | Contract type: Works / Goods / Services |
| `procedureType` | string | null | `"Verejná súťaž"` | Procurement procedure type |
| `isEvo` | boolean | `true` | Whether the tender runs through the EVO electronic system |
| `euFunded` | boolean | null | `false` | Co-financed from EU funds |
| `defenseSecurity` | boolean | null | `false` | Defense/security procurement |
| `electronicAuction` | boolean | null | `false` | Uses an electronic auction |
| `createdDate` | string | null | `"2026-08-12T12:04:00"` | When the case was created |
| `publicationDate` | string | null | `"2026-08-17T00:16:00"` | When the formal notice was published |
| `updatedDate` | string | null | `"2026-08-28"` | Last update date |
| `url` | string | `"https://www.uvo.gov.sk/..."` | Link to the case detail page |
| `scrapedAt` | string | `"2026-09-01T14:14:58.139Z"` | When this actor collected the record |

#### Example output

```json
{
    "procurementId": "563317",
    "title": "Cesta II/499 Trebatice - Piešťany",
    "buyer": "Správa a údržba ciest Trnavského samosprávneho kraja",
    "buyerId": "8700",
    "status": "Aktívna",
    "cpvCodes": ["45233140-2", "45233141-9", "45233142-6"],
    "cpvDescription": "Práce na ceste",
    "nutsCodes": ["SK021"],
    "nutsDescription": "Trnavský kraj",
    "contractType": "Práce",
    "procedureType": "Verejná súťaž",
    "isEvo": true,
    "euFunded": false,
    "defenseSecurity": false,
    "electronicAuction": false,
    "createdDate": "2026-08-12T12:04:00",
    "publicationDate": "2026-08-17T00:16:00",
    "updatedDate": "2026-08-28",
    "url": "https://www.uvo.gov.sk/vyhladavanie/vyhladavanie-zakaziek/detail/563317",
    "scrapedAt": "2026-09-01T14:14:58.139Z"
}
```

### Data quality note: why some fields are empty

`cpvCodes`, `nutsCodes`, `contractType`, and `procedureType` are only populated once the contracting authority has published a formal notice against the procurement case. A case that is still in the tendering/EVO phase legitimately has no CPV/NUTS classification yet on UVO's own site — this is a source-data characteristic, not a scraping gap. Across a 30-item verification run, the core identifying fields (`title`, `buyer`, `status`, `createdDate`, `updatedDate`, `url`) were populated on 100% of items; the notice-dependent fields (`cpvCodes`, `contractType`) were populated on ~73%, and `procedureType` on ~50%. All of these fields are nullable — treat `null` as "not yet published", never as zero or false.

### Cost estimate

This actor is priced per result on the Apify Store (Pay-Per-Event). With `fetchDetails` on, a run fetches one listing page plus one detail page per result — both plain HTTP requests against a low-traffic government site, so runs are fast (roughly 2 seconds per result). A 100-result run typically completes in under 4 minutes.

### Limitations

- Search matches tender titles only (Slovak language); it does not do full-text search across tender documents.
- `authorityName` and `cpvCode` filters use UVO's own exact-match/contains behavior — there is no fuzzy matching layer on top.
- A run's usage cost only settles once the run reports SUCCEEDED — reading the dataset mid-run will under-report the eventual cost.
- This actor covers procurement **cases** published on uvo.gov.sk. It does not cover EU-wide TED notices (see our TED EU Procurement Scraper) or Slovak sector-specific procurement outside UVO's own platform.

### Related scrapers

- [TED EU Procurement Scraper](https://apify.com/studio-amba/ted-eu-procurement-scraper) — EU-wide procurement notices from Tenders Electronic Daily
- [Belgian Public Procurement Scraper](https://apify.com/studio-amba/belgian-procurement-scraper) — Belgian tenders from TED and e-Notification
- [eTenders Ireland Scraper](https://apify.com/studio-amba/etenders-ie-scraper) — Irish public procurement notices
- [TenderNed Scraper](https://apify.com/studio-amba/tenderned-scraper) — Dutch government tenders

### Support

Found an issue or need a custom field? Contact us through the Apify Store issue tracker on this actor's page.

# Actor input Schema

## `searchQuery` (type: `string`):

Free text keyword to search tender titles (Slovak, e.g. 'cesta', 'rekonštrukcia', 'informačný systém'). Leave empty to get recent procurements.

## `authorityName` (type: `string`):

Filter by contracting authority name (e.g. 'Mesto Bratislava'). Optional.

## `cpvCode` (type: `string`):

Filter by CPV (Common Procurement Vocabulary) code, e.g. '45000000-7' for construction works. Optional.

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

Maximum number of procurement notices to return.

## `fetchDetails` (type: `boolean`):

Enrich each result with data from its detail page (status, CPV/NUTS codes, contract type, procedure type, EU funding, dates). Roughly doubles the number of requests. Turn off for a faster, listing-only run.

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

uvo.gov.sk serves plain HTTP with no bot-wall (verified 2026-09-01) — the default automatic proxy is sufficient, no residential proxy needed.

## Actor input object example

```json
{
  "searchQuery": "cesta",
  "maxResults": 20,
  "fetchDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (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 = {
    "searchQuery": "cesta",
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/uvo-gov-sk-scraper").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 = {
    "searchQuery": "cesta",
    "maxResults": 20,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/uvo-gov-sk-scraper").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 '{
  "searchQuery": "cesta",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call studio-amba/uvo-gov-sk-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,studio-amba/uvo-gov-sk-scraper"
        }
    }
}

```

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/TMsgzhDcQabN1EgXj/builds/b2ssCRBFRaXLiUK82/openapi.json
