e-Zamówienia Poland Scraper — Public Procurement Tenders avatar

e-Zamówienia Poland Scraper — Public Procurement Tenders

Pricing

from $1.20 / 1,000 result scrapeds

Go to Apify Store
e-Zamówienia Poland Scraper — Public Procurement Tenders

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

Studio Amba

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

19 hours ago

Last modified

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

ParameterTypeDefaultDescription
searchQueryStringinformatykaKeyword matched against the tender title
organizationNameStringFilter by contracting authority name
organizationCityStringFilter by contracting authority city
regionEnumallOne of Poland's 16 voivodeships, or empty for all
initiationDateFrom / initiationDateToStringPublication date range, YYYY-MM-DD
submissionDateFrom / submissionDateToStringBid submission deadline range, YYYY-MM-DD
fetchFullDetailsBooleantrueFetch the full published notice (CPV codes, description, contact info) per result
maxResultsInteger50Maximum number of notices to return (1–5,000)
proxyConfigurationObjectApify proxyApify proxy settings

What data does this scraper extract?

FieldTypeDescription
itemTitleStringTender title ("Nazwa zamówienia")
referenceNumberStringBZP publication number, or the internal notice ID if unpublished
organizationStringContracting authority / buyer name
statusStringOpen, Closed, Cancelled, Finished, or Unknown
publicationDateStringDate the procedure was initiated / published
deadlineStringBid submission deadline
estimatedValueStringEstimated contract value — usually blank; rarely disclosed on national-threshold notices
currencyStringUsually blank alongside estimatedValue
categoryStringProcedure mode ("Tryb postępowania"), e.g. "Przetarg nieograniczony" (open tender)
cpvCodesArrayCPV classification code(s) with descriptions (requires fetchFullDetails)
regionStringBuyer's voivodeship
itemDescriptionStringFull notice description (requires fetchFullDetails)
contactInfoObjectBuyer address, phone, email, website (requires fetchFullDetails)
urlStringDirect link to the notice on ezamowienia.gov.pl
scrapedAtStringISO timestamp of when the data was scraped
bzpNumberStringBZP publication number, same as referenceNumber when present
noticeTypeStringSame value as category
isTenderAmountBelowEUBooleantrue if the procedure is below the EU notification threshold
tedContractNoticeNumberStringCross-reference number on TED (EU-wide portal), if published there too
numberOfLotsIntegerNumber 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 initiationDateFrom to yesterday's date for fresh publications only.
  • Faster runs: Disable fetchFullDetails when 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/submissionDateTo to build a list of tenders closing in the next week or month.
  • Nationwide vs regional: Leave region empty 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 sizeEstimated timeEstimated cost
20 notices~30 seconds$0.02 ($0.001 per result)
100 notices~2 minutes$0.08 ($0.001 per result)
500 notices~10 minutes$0.30 ($0.001 per result)

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 ApifyClient
client = 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 searchQuery field matches "Nazwa zamówienia", not buyer or supplier names — use organizationName to filter by buyer.
  • CPV codes and description require fetchFullDetails: with it disabled, cpvCodes, itemDescription, contactInfo, and numberOfLots come back empty.
  • Covers the notice lifecycle, not just open tenders: results include open, closed, finished, and cancelled procedures — filter or check the status field 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.