# NEN NIPEZ Scraper — Czech Government Tenders (`studio-amba/nen-nipez-cz-scraper`) Actor

Search and extract Czech public procurement tenders from NEN (nen.nipez.cz), the national e-procurement tool. Filter by keyword or status. Returns tender details, contracting authority, deadlines, CPV/NIPEZ codes, and contact info. No login required.

- **URL**: https://apify.com/studio-amba/nen-nipez-cz-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 $1.20 / 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

## Czech Public Procurement Scraper — NEN NIPEZ Tenders

Search and extract Czech public procurement tenders from NEN (Národní elektronický nástroj), the Czech Ministry for Regional Development's national e-procurement tool at nen.nipez.cz. Filter by keyword or status. Returns tender title, contracting authority, deadline, procedure type, CPV/NIPEZ codes, contract value, and contact details. No login, no cookies required to use the actor.

### How to scrape NEN NIPEZ data

This actor queries NEN's internal search API and enriches every hit with the full server-rendered tender record from its detail page. NEN is the mandatory publication platform for most Czech public contracting authorities — ministries, regions, municipalities, state enterprises, universities, and hospitals all publish here. That gives this actor access to the national archive of Czech public procurement, currently well over a quarter million published tenders.

For every matching tender the actor fetches the detail page and pulls out the structured record NEN embeds server-side (not visible in the plain search list): estimated value, CPV and NIPEZ classification codes, place of performance, framework-agreement/DNS flags, and the contracting authority's named contact person with email and phone.

#### Who benefits from this data?

- **Government contractors** — Monitor new opportunities daily across construction, IT, supplies, and services. Filter by CPV code relevant to your business.
- **Consultancies and advisory firms** — Track Czech public-sector procurement patterns for market intelligence and client pitches.
- **B2B sales teams** — Identify which Czech public bodies are buying what you sell, with named contacts to reach out to.
- **Market researchers** — Analyze procurement volumes and sector trends across Czech regions (kraje).
- **Compliance and legal teams** — Monitor competitor contract awards and procedure types.

#### Search by keyword

Enter any keyword to find relevant tenders. Use Czech for the best results — `stavební práce` (construction works), `IT`, `úklidové služby` (cleaning services), `software`, `zdravotnický materiál` (medical supplies). Leave the field empty to get the most recently published tenders across every sector.

#### Filter by status

- **Ongoing** — tenders currently open (`neukoncena` in the source system)
- **Awarded** — tenders that have been awarded to a supplier (`zadana`)
- **Cancelled** — tenders the contracting authority cancelled (`zrusena`)
- **All** — no status filter

### Input parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `searchQuery` | String | `stavební práce` | Keywords to search in tender titles and descriptions. Leave empty for the newest tenders across all sectors. |
| `tenderStatus` | Enum | `all` | Filter: `all`, `open`, `awarded`, or `cancelled` |
| `maxResults` | Integer | `100` | Maximum number of tenders to return (1–10,000) |
| `proxyConfiguration` | Object | Apify automatic | Apify proxy settings. NEN has no anti-bot protection, so this is not required — automatic proxy is prefilled for reliability at scale. |

### What data does this scraper extract?

| Field | Type | Description |
|-------|------|--------------|
| `itemTitle` | String | Tender title (Nazev) |
| `referenceNumber` | String | NEN reference code, e.g. `N006/26/V00018665` |
| `organization` | String | Contracting authority name |
| `status` | String | `Ongoing`, `Awarded`, `Cancelled`, `Performance completed`, `Ended at specification phase`, `Planned`, or `Unsuccessful` |
| `publicationDate` | String | ISO timestamp of publication on the profile |
| `deadline` | String | Bid/application submission deadline (ISO timestamp, when set) |
| `estimatedValue` | String | Estimated contract value, when the authority discloses it |
| `currency` | String | Currency of the estimated value (defaults to `CZK`) |
| `category` | String | Contract nature: `Dodavky` (supplies), `Sluzby` (services), `Stavebni_prace` (works) |
| `cpvCodes` | Array | CPV classification code(s) with description |
| `region` | String | Main NUTS place-of-performance region (kraj) |
| `itemDescription` | String | Full subject-matter description |
| `contactInfo` | Object | Contracting authority contact: `name`, `email`, `phone` |
| `url` | String | Direct link to the tender's detail page on NEN |
| `scrapedAt` | String | ISO timestamp of when the data was scraped |
| `nipezId` | String | NIPEZ system identifier (identifikatorNipez) |
| `nipezCode` | String | NIPEZ code-list classification code |
| `nipezDescription` | String | NIPEZ code-list classification name |
| `procedureType` | String | Procurement procedure type, e.g. "Otevřené řízení" (open procedure) |
| `placeOfPerformance` | String | Free-text place of performance, when published |
| `isFrameworkAgreement` | Boolean | Whether the contract is awarded under a framework agreement |
| `isDns` | Boolean | Whether the contract is awarded through a Dynamic Purchasing System |
| `euNoticeId` | String | EU Official Journal notice identifier, for tenders above the EU threshold |
| `profileCode` | String | Contracting authority profile code on NEN |

### Example output

```json
{
    "itemTitle": "Energetické úspory SUPŠ Uh. Hradiště Všehrdova – stavební práce",
    "referenceNumber": "N006/26/V00018665",
    "organization": "Střední uměleckoprůmyslová škola Uherské Hradiště",
    "status": "Awarded",
    "publicationDate": "2026-06-15T13:02:36",
    "deadline": "2026-07-07T10:00:00",
    "estimatedValue": "",
    "currency": "CZK",
    "category": "Stavebni_prace",
    "cpvCodes": [
        { "code": "45000000-7", "description": "Stavební práce" }
    ],
    "region": "Zlínský kraj",
    "itemDescription": "Předmětem veřejné zakázky jsou stavební práce spočívající v rekonstrukci budovy...",
    "contactInfo": {
        "name": "Ivo Savara",
        "email": "savara@supsuh.cz",
        "phone": "572 551 500"
    },
    "url": "https://nen.nipez.cz/en/verejne-zakazky/detail-zakazky/N006-26-V00018665",
    "scrapedAt": "2026-09-01T14:10:51.401Z",
    "nipezId": "RVZ2600101722",
    "nipezCode": "45000000-7",
    "nipezDescription": "Stavební práce",
    "procedureType": "Zjednodušené podlimitní řízení",
    "placeOfPerformance": "",
    "isFrameworkAgreement": false,
    "isDns": false,
    "euNoticeId": "",
    "profileCode": "P26V00018665"
}
```

### Tips for best results

- **Daily monitoring**: Run on a schedule to catch new tenders shortly after publication. Combine with `tenderStatus: "open"` to only see tenders you can still bid on.
- **CPV code targeting**: Note the CPV codes relevant to your business from the first run, then use them in follow-up keyword searches.
- **Competitor intelligence**: Search by competitor or product names to see what contracts they are pursuing across Czech public bodies.
- **Market sizing**: Run without a keyword filter to see the volume of recent activity across every sector before narrowing down.
- **Combine with other sources**: Pair with the [TED EU procurement scraper](https://apify.com/studio-amba) for tenders above the EU publication threshold, which NEN mirrors to the EU Official Journal.

### How much does it cost to run?

NEN's search and detail endpoints are free, public government data. Your only cost is Apify compute time.

| Search size | Estimated time | Estimated cost |
|-------------|---------------|----------------|
| 20 tenders | ~30 seconds | ~$0.01 |
| 100 tenders | ~2 minutes | ~$0.05 |
| 500 tenders | ~10 minutes | ~$0.20 |
| 1,000 tenders | ~20 minutes | ~$0.40 |

Each tender requires one extra request to its detail page to pull the full record (value, CPV codes, contact info), so times are higher than a list-only scrape. Pricing is pay-per-result at roughly $0.002/result plus a small per-run start fee, i.e. per item cost stays close to $0.002/item at any volume.

Usage cost only settles after the run reports SUCCEEDED — reading the dataset mid-run (before the run finishes) will undercount what you'll actually be charged.

### Use as an API

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run = client.actor("studio-amba/nen-nipez-cz-scraper").call(run_input={
    "searchQuery": "IT",
    "tenderStatus": "open",
    "maxResults": 50,
})

for tender in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"{tender['itemTitle']} | {tender['organization']} | Deadline: {tender['deadline']}")
```

### Limitations

- **No server-side text search on exact phrase**: NEN's fulltext search matches loosely against title, description, and organization name — broad keywords return broad result sets.
- **Estimated value is often empty**: Many Czech small-scope tenders ("malý rozsah") are not required to disclose an estimated value on the public profile.
- **Place of performance and EU notice ID are conditional**: These only populate when the contracting authority filled them in, or when the tender is above the EU publication threshold.
- **Detail fetching adds time**: Each tender gets an individual request for the full record. Set `maxResults` accordingly for large runs.

### Other European procurement scrapers

- Check the [Studio AMBA actor catalog](https://apify.com/studio-amba) for more European public procurement scrapers, including TED (EU-wide), TenderNed (Netherlands), DOFFIN (Norway), and eTenders (Ireland).

### Your feedback

Found a bug or want a feature? Open an issue on the [Issues tab](https://console.apify.com/actors/studio-amba~nen-nipez-cz-scraper/issues).

# Actor input Schema

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

Search tenders by keyword (matched against title and description). Use Czech for best results. Examples: 'stavební práce' (construction works), 'IT', 'úklidové služby' (cleaning services). Leave empty to return the most recently published tenders across all sectors.

## `tenderStatus` (type: `string`):

Filter by tender status.

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

Maximum number of tenders to return.

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

Apify proxy configuration. NEN NIPEZ itself has no anti-bot protection, but Apify run containers need a proxy to reach it -- Czech RESIDENTIAL is used by default and verified working.

## Actor input object example

```json
{
  "searchQuery": "stavební práce",
  "tenderStatus": "all",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "CZ"
  }
}
```

# 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": "stavební práce",
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "CZ"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/nen-nipez-cz-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": "stavební práce",
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "CZ",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/nen-nipez-cz-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": "stavební práce",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "CZ"
  }
}' |
apify call studio-amba/nen-nipez-cz-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,studio-amba/nen-nipez-cz-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/jfKviIDOxSITFoYSI/builds/tsXOTP5kE9vR5QPiY/openapi.json
