e-Zamówienia Poland Scraper — Public Procurement Tenders
Pricing
from $1.20 / 1,000 result scrapeds
e-Zamówienia Poland Scraper — Public Procurement Tenders
Search and extract Polish public procurement notices from ezamowienia.gov.pl. Filter by keyword, buyer, voivodeship, or date. Returns buyer info, deadlines, CPV codes, and full notice descriptions. No API key, no login required.
Pricing
from $1.20 / 1,000 result scrapeds
Rating
0.0
(0)
Developer
Studio Amba
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
19 hours ago
Last modified
Categories
Share
Search and extract Polish public procurement tender notices from ezamowienia.gov.pl, Poland's official national e-procurement platform run by the Public Procurement Office (Urząd Zamówień Publicznych, UZP). Filter by keyword, buyer name, buyer city, voivodeship, or date. Returns buyer details, submission deadlines, CPV classification codes, and full notice descriptions. No API key, no login required.
How to scrape Polish public procurement data
This actor reads notices straight from ezamowienia.gov.pl's own read-model API — the same JSON endpoint the site's search page calls in the browser. Every Polish contracting authority (ministries, municipalities, hospitals, state agencies, state-owned companies) is legally required to publish its procurement notices here, making it the single most complete source for Polish public procurement activity, both above and below the EU notification threshold.
Enter your search keywords, pick optional filters, and run. The actor fetches the search results list, then — when full details are enabled — calls each notice's published BZP (Biuletyn Zamówień Publicznych) document to pull CPV codes, description, and buyer contact details that aren't returned in the list view.
Who benefits from this data?
- Government contractors — Monitor which tenders are open across Polish ministries, municipalities, hospitals, and state agencies, and track submission deadlines.
- Market researchers — Analyze Polish public spending patterns, tender volumes, and procurement activity by sector and voivodeship.
- B2B sales teams — Identify which Polish public bodies buy what you sell. Build targeted prospect lists across the Polish public sector.
- Consultancies and advisory firms — Track tender activity by CPV category, region, or buyer to advise clients on Polish market entry and bidding strategy.
- Compliance and legal teams — Monitor competitor bids, verify buyer details, and check procedural transparency.
- Journalists and researchers — Investigate public spending on a topic, ministry, or municipality.
Search by keyword
Enter any keyword to find relevant notices. The search matches against the tender title ("Nazwa zamówienia"). Examples: informatyka (IT), sprzątanie (cleaning), budowa drogi (road construction), dostawa sprzętu (equipment supply).
Filter by buyer
Use organizationName to filter by the contracting authority's name ("Nazwa Zamawiającego"), or organizationCity for the buyer's city.
Filter by voivodeship
Poland is divided into 16 voivodeships (administrative regions). Set region to one of them (e.g. mazowieckie, małopolskie, śląskie) to scope results to buyers in that region, or leave it empty to search nationwide.
Filter by date
initiationDateFrom/initiationDateTo filter by when the procedure was published. submissionDateFrom/submissionDateTo filter by the bid submission deadline — useful for finding notices closing within a window.
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
searchQuery | String | informatyka | Keyword matched against the tender title |
organizationName | String | — | Filter by contracting authority name |
organizationCity | String | — | Filter by contracting authority city |
region | Enum | all | One of Poland's 16 voivodeships, or empty for all |
initiationDateFrom / initiationDateTo | String | — | Publication date range, YYYY-MM-DD |
submissionDateFrom / submissionDateTo | String | — | Bid submission deadline range, YYYY-MM-DD |
fetchFullDetails | Boolean | true | Fetch the full published notice (CPV codes, description, contact info) per result |
maxResults | Integer | 50 | Maximum number of notices to return (1–5,000) |
proxyConfiguration | Object | Apify proxy | Apify proxy settings |
What data does this scraper extract?
| Field | Type | Description |
|---|---|---|
itemTitle | String | Tender title ("Nazwa zamówienia") |
referenceNumber | String | BZP publication number, or the internal notice ID if unpublished |
organization | String | Contracting authority / buyer name |
status | String | Open, Closed, Cancelled, Finished, or Unknown |
publicationDate | String | Date the procedure was initiated / published |
deadline | String | Bid submission deadline |
estimatedValue | String | Estimated contract value — usually blank; rarely disclosed on national-threshold notices |
currency | String | Usually blank alongside estimatedValue |
category | String | Procedure mode ("Tryb postępowania"), e.g. "Przetarg nieograniczony" (open tender) |
cpvCodes | Array | CPV classification code(s) with descriptions (requires fetchFullDetails) |
region | String | Buyer's voivodeship |
itemDescription | String | Full notice description (requires fetchFullDetails) |
contactInfo | Object | Buyer address, phone, email, website (requires fetchFullDetails) |
url | String | Direct link to the notice on ezamowienia.gov.pl |
scrapedAt | String | ISO timestamp of when the data was scraped |
bzpNumber | String | BZP publication number, same as referenceNumber when present |
noticeType | String | Same value as category |
isTenderAmountBelowEU | Boolean | true if the procedure is below the EU notification threshold |
tedContractNoticeNumber | String | Cross-reference number on TED (EU-wide portal), if published there too |
numberOfLots | Integer | Number of lots in the tender (requires fetchFullDetails; 0 if details weren't fetched) |
Example output
{"itemTitle": "Świadczenie usług informatycznych w zakresie utrzymania systemów informatycznych","referenceNumber": "2026/BZP 00123456/01","organization": "Urząd Miasta Warszawy","status": "Open","publicationDate": "2026-08-20","deadline": "2026-09-15T10:00:00.000Z","estimatedValue": "","currency": "","category": "Przetarg nieograniczony","cpvCodes": [{ "code": "72267000-4", "description": "Usługi w zakresie konserwacji i napraw oprogramowania" }],"region": "mazowieckie","itemDescription": "Przedmiotem zamówienia jest świadczenie usług informatycznych...","contactInfo": {"city": "Warszawa","postalCode": "00-950","country": "Polska","email": "zamowienia@um.warszawa.pl"},"url": "https://ezamowienia.gov.pl/mp-client/search/list/abc123-def456","scrapedAt": "2026-08-31T14:08:58.360Z","bzpNumber": "2026/BZP 00123456/01","noticeType": "Przetarg nieograniczony","isTenderAmountBelowEU": false,"tedContractNoticeNumber": "","numberOfLots": 1}
Tips for best results
- Daily monitoring: Run on a schedule to catch newly published notices. Set
initiationDateFromto yesterday's date for fresh publications only. - Faster runs: Disable
fetchFullDetailswhen you only need the buyer, dates, and status — this skips the extra per-result request and roughly halves the run time. - Closing-soon lists: Use
submissionDateFrom/submissionDateToto build a list of tenders closing in the next week or month. - Nationwide vs regional: Leave
regionempty to search all 16 voivodeships at once, or scope to one region to focus on local buyers.
How much does it cost to run?
The ezamowienia.gov.pl data source is free and requires no login. Your only cost is Apify compute time and proxy usage. With fetchFullDetails enabled (default), each notice requires one extra request to the notice-board API for CPV codes, description, and contact info, so run time scales roughly linearly with maxResults.
| Search size | Estimated time | Estimated cost |
|---|---|---|
| 20 notices | ~30 seconds | |
| 100 notices | ~2 minutes | |
| 500 notices | ~10 minutes |
Disabling fetchFullDetails cuts these times roughly in half, since it skips the per-result detail fetch. Actual cost depends on Apify plan and proxy usage; a run's final usage cost only settles after the run reports SUCCEEDED — reading the dataset mid-run will undercount it.
Use as an API
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("studio-amba/ezamowienia-scraper").call(run_input={"searchQuery": "budowa","region": "mazowieckie","maxResults": 50,})for notice in client.dataset(run["defaultDatasetId"]).iterate_items():print(f"{notice['itemTitle']} | {notice['organization']} | {notice['deadline']}")
Limitations
- Estimated value is usually blank: unlike awarded-contract portals, most national-threshold notices on ezamowienia.gov.pl don't disclose an estimated or contract value in the fields this actor extracts.
- Search matches the tender title only: the
searchQueryfield matches "Nazwa zamówienia", not buyer or supplier names — useorganizationNameto filter by buyer. - CPV codes and description require
fetchFullDetails: with it disabled,cpvCodes,itemDescription,contactInfo, andnumberOfLotscome back empty. - Covers the notice lifecycle, not just open tenders: results include open, closed, finished, and cancelled procedures — filter or check the
statusfield if you only want currently open tenders.
Other European procurement scrapers
Check the Studio AMBA actor catalog for more European public procurement data, including eTenders (Ireland), DOFFIN (Norway), TenderNed (Netherlands), TED (EU-wide), BASE.gov.pt (Portugal), evergabe-online (Germany), and Belgian public procurement.
Your feedback
Found a bug or want a feature? Open an issue on the Issues tab.