# Polish IT Tenders Feed - BZP Procurement Leads (`burly_bat/polish-it-tenders-feed-bzp-procurement-leads`) Actor

Find Polish public procurement opportunities for software, IT services, hardware, cloud and cybersecurity from the official BZP/e-Zamówienia public API. Exports clean dataset records with buyer, deadline, CPV codes and official notice links.

- **URL**: https://apify.com/burly\_bat/polish-it-tenders-feed-bzp-procurement-leads.md
- **Developed by:** [Burly Bat](https://apify.com/burly_bat) (community)
- **Categories:** Lead generation, Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 returned tender notices

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Polish IT Tenders Feed - BZP Procurement Leads

Apify Actor MVP for finding Polish public procurement notices from the official BZP/e-Zamowienia public API and exporting IT-relevant tender leads as normalized dataset records.

This Actor is intentionally cost-bounded:

- no proxies,
- no SERP APIs,
- no paid enrichment,
- no browser automation,
- no overage-dependent upstream.

### What it does

1. Queries the public BZP/e-Zamowienia board endpoint:
   `https://ezamowienia.gov.pl/mo-board/api/v1/Board/Search`
2. Restricts the run by publication date range, notice type, page size and max results.
3. Parses CPV codes and normalizes buyer, deadline, title and notice identifiers.
4. Marks likely IT opportunities using IT keywords and CPV prefixes.
5. Pushes matching records to the Apify dataset.

### Example input

Default recurring run for the latest notices:

```json
{
  "maxResults": 50,
  "pageSize": 50,
  "noticeType": "ContractNotice",
  "sourceMode": "live"
}
````

When `dateFrom` and `dateTo` are omitted, the Actor uses the latest 7-day window
ending today.

Fixed-date QA/demo input:

```json
{
  "dateFrom": "2026-06-20",
  "dateTo": "2026-06-29",
  "maxResults": 50,
  "pageSize": 50,
  "noticeType": "ContractNotice",
  "keywords": ["informatycz", "oprogramowanie", "serwer", "cyberbezpieczen", "cloud"],
  "cpvPrefixes": ["302", "324", "480", "488", "720", "722", "723", "724", "725", "726", "727", "728", "729"],
  "includeNonMatching": false,
  "sourceMode": "live"
}
```

Use `"sourceMode": "offline"` for deterministic local/demo runs with the bundled fixture.

### Output fields

Each dataset item has this normalized shape:

- `id`
- `source`
- `sourceApiUrl`
- `noticeUrl`
- `noticeNumber`, `bzpNumber`, `tenderId`, `noticeType`
- `title`
- `buyerName`, `buyerCity`, `buyerProvince`, `buyerCountry`, `buyerNationalId`
- `publicationDate`, `submissionDeadline`, `daysUntilDeadline`
- `orderType`, `clientType`, `tenderType`, `belowEuThreshold`
- `cpvCodes[]`
- `matchedKeywords[]`
- `matchedCpvPrefixes[]`
- `isItRelevant`
- `raw`

See `docs/sample_output.json` for a compact example.

### Hard limits

- Date range: maximum 31 days.
- `maxResults`: 1-500.
- `pageSize`: 1-100.
- Pagination stops when `maxResults` is reached or BZP returns fewer records than requested.
- Default export excludes non-matching notices. Set `includeNonMatching` to `true` only for QA or broader audits.

### Local development

```bash
npm install
npm run check
```

Run the Actor locally in offline mode:

```bash
rm -rf /tmp/bzp-apify-storage
mkdir -p /tmp/bzp-apify-storage/key_value_stores/default
printf '%s\n' '{"sourceMode":"offline","dateFrom":"2026-06-20","dateTo":"2026-06-29","maxResults":10}' \
  > /tmp/bzp-apify-storage/key_value_stores/default/INPUT.json
CRAWLEE_STORAGE_DIR=/tmp/bzp-apify-storage npm start
```

Run a tiny live smoke test:

```bash
rm -rf /tmp/bzp-apify-storage
mkdir -p /tmp/bzp-apify-storage/key_value_stores/default
printf '%s\n' '{"sourceMode":"live","dateFrom":"2026-06-20","dateTo":"2026-06-29","maxResults":5,"pageSize":5}' \
  > /tmp/bzp-apify-storage/key_value_stores/default/INPUT.json
CRAWLEE_STORAGE_DIR=/tmp/bzp-apify-storage npm start
```

### Publication status

This Actor is published on Apify Store as a paid pay-per-event MVP. Monetization uses Apify's default dataset item event: each returned tender notice is one chargeable result.

Publication notes:

- `STORE_DRAFT.md` - public listing draft.
- `docs/publication_checklist.md` - publish steps and gates.
- `docs/source_and_limits.md` - source, legal/operational limits and risks.

### Disclaimer

This Actor is not affiliated with, endorsed by or sponsored by UZP, BZP or e-Zamowienia. It uses public notice data and provides normalized procurement leads for research and monitoring. Buyers must verify all tender details in the official source before acting.

# Actor input Schema

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

Start date in YYYY-MM-DD. The Actor enforces a maximum 31-day range.

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

End date in YYYY-MM-DD. Defaults to today.

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

Hard cap on normalized records pushed to the dataset.

## `pageSize` (type: `integer`):

Items requested per public API page.

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

BZP notice type. ContractNotice is the default lead source.

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

Case-insensitive phrases matched against title and CPV text.

## `cpvPrefixes` (type: `array`):

Lead is marked relevant when any parsed CPV code starts with one of these prefixes.

## `includeNonMatching` (type: `boolean`):

When false, only notices matching keywords or IT CPV prefixes are exported.

## `sourceMode` (type: `string`):

Use live BZP API or bundled offline fixture for tests/demos.

## Actor input object example

```json
{
  "maxResults": 50,
  "pageSize": 50,
  "noticeType": "ContractNotice",
  "keywords": [
    "informatycz",
    "oprogramowanie",
    "software",
    "system",
    "serwer",
    "cyberbezpieczen",
    "cloud",
    "chmura",
    "wdrozenie",
    "utrzymanie",
    "licencj",
    "helpdesk",
    "it"
  ],
  "cpvPrefixes": [
    "302",
    "324",
    "480",
    "488",
    "720",
    "721",
    "722",
    "723",
    "724",
    "725",
    "726",
    "727",
    "728",
    "729"
  ],
  "includeNonMatching": false,
  "sourceMode": "live"
}
```

# Actor output Schema

## `results` (type: `string`):

Dataset items with buyer, title, deadline, CPV codes, matched keywords, and official BZP/e-Zamowienia notice links.

## `summary` (type: `string`):

Run summary stored in the default key-value store under the OUTPUT key.

# 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("burly_bat/polish-it-tenders-feed-bzp-procurement-leads").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("burly_bat/polish-it-tenders-feed-bzp-procurement-leads").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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 burly_bat/polish-it-tenders-feed-bzp-procurement-leads --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=burly_bat/polish-it-tenders-feed-bzp-procurement-leads",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Polish IT Tenders Feed - BZP Procurement Leads",
        "description": "Find Polish public procurement opportunities for software, IT services, hardware, cloud and cybersecurity from the official BZP/e-Zamówienia public API. Exports clean dataset records with buyer, deadline, CPV codes and official notice links.",
        "version": "0.1",
        "x-build-id": "C0o6k2c2rHu94oTBV"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/burly_bat~polish-it-tenders-feed-bzp-procurement-leads/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-burly_bat-polish-it-tenders-feed-bzp-procurement-leads",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/burly_bat~polish-it-tenders-feed-bzp-procurement-leads/runs": {
            "post": {
                "operationId": "runs-sync-burly_bat-polish-it-tenders-feed-bzp-procurement-leads",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/burly_bat~polish-it-tenders-feed-bzp-procurement-leads/run-sync": {
            "post": {
                "operationId": "run-sync-burly_bat-polish-it-tenders-feed-bzp-procurement-leads",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "dateFrom": {
                        "title": "Publication date from",
                        "type": "string",
                        "description": "Start date in YYYY-MM-DD. The Actor enforces a maximum 31-day range."
                    },
                    "dateTo": {
                        "title": "Publication date to",
                        "type": "string",
                        "description": "End date in YYYY-MM-DD. Defaults to today."
                    },
                    "maxResults": {
                        "title": "Maximum results",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Hard cap on normalized records pushed to the dataset.",
                        "default": 50
                    },
                    "pageSize": {
                        "title": "BZP API page size",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Items requested per public API page.",
                        "default": 50
                    },
                    "noticeType": {
                        "title": "Notice type",
                        "enum": [
                            "ContractNotice",
                            "ContractAwardNotice",
                            "ContractNoticeChangeNotice",
                            "TenderPlanNotice"
                        ],
                        "type": "string",
                        "description": "BZP notice type. ContractNotice is the default lead source.",
                        "default": "ContractNotice"
                    },
                    "keywords": {
                        "title": "IT keywords",
                        "type": "array",
                        "description": "Case-insensitive phrases matched against title and CPV text.",
                        "items": {
                            "type": "string"
                        },
                        "default": [
                            "informatycz",
                            "oprogramowanie",
                            "software",
                            "system",
                            "serwer",
                            "cyberbezpieczen",
                            "cloud",
                            "chmura",
                            "wdrozenie",
                            "utrzymanie",
                            "licencj",
                            "helpdesk",
                            "it"
                        ]
                    },
                    "cpvPrefixes": {
                        "title": "IT CPV prefixes",
                        "type": "array",
                        "description": "Lead is marked relevant when any parsed CPV code starts with one of these prefixes.",
                        "items": {
                            "type": "string"
                        },
                        "default": [
                            "302",
                            "324",
                            "480",
                            "488",
                            "720",
                            "721",
                            "722",
                            "723",
                            "724",
                            "725",
                            "726",
                            "727",
                            "728",
                            "729"
                        ]
                    },
                    "includeNonMatching": {
                        "title": "Include non-matching notices",
                        "type": "boolean",
                        "description": "When false, only notices matching keywords or IT CPV prefixes are exported.",
                        "default": false
                    },
                    "sourceMode": {
                        "title": "Source mode",
                        "enum": [
                            "live",
                            "offline"
                        ],
                        "type": "string",
                        "description": "Use live BZP API or bundled offline fixture for tests/demos.",
                        "default": "live"
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
