GOV APIzakazky.gov.cz ↗
Search Czech public procurement tenders, fetch full tender detail records, and read AI-generated summaries of tender documentation via the Zakázky GOV API.
What is the GOV API?
The Zakázky GOV API exposes 3 endpoints covering Czech public procurement tenders aggregated on zakazky.gov.cz. Use search_tenders to run keyword searches returning tender IDs, titles, contracting authority names, submission deadlines, and procedure types. Retrieve complete records with get_tender_details — including CPV codes, lots, document metadata, and estimated values — or pull the portal's AI-generated management summary via get_tender_ai_summary.
curl -X GET 'https://api.parse.bot/scraper/e0e21df3-b07e-4c12-828a-ef3c33f08de7/search_tenders?query=software' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace zakazky-gov-cz-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Czech public-tender search, detail drill-down, and AI summary."""
from parse_apis.zakazky_gov_cz_api import ZakazkyGov, TenderStatusFilter, TenderNotFound
client = ZakazkyGov()
# Search active tenders for a keyword; cap total items fetched.
for hit in client.tender_summaries.search(query="software", limit=5):
print(hit.title, "|", hit.contracting_authority, "|", hit.status)
# Drill into the first result's full detail via the summary→detail navigation.
hit = client.tender_summaries.search(query="software", limit=1).first()
if hit is not None:
tender = hit.details()
print(tender.title, tender.contract_kind, tender.regime)
for dl in tender.deadlines:
print(dl.deadline_type, dl.deadline)
for doc in tender.documents:
print(doc.name, doc.document_type, doc.size_bytes)
# Fetch the portal's AI-generated management summary for the same tender.
ai = tender.ai_summary()
if ai.summary_available and ai.summary is not None:
print(ai.summary.scope)
print(ai.summary.evaluation_criteria[:120])
# Point-lookup by a known tender id.
try:
tender = client.tenders.get(tender_id="RVZ2600158888")
print(tender.title, tender.main_cpv_code)
for auth in tender.contracting_authorities:
print(auth.name, auth.ico, auth.nuts_code)
except TenderNotFound:
print("tender not found")
print("exercised: tender_summaries.search / details / ai_summary / tenders.get")
Full-text keyword search over public tenders, newest publication first. Returns one page of tender summaries (tender_id, title, description, contracting authority name, submission deadline, status code, procedure type, topic tags). By default only currently active tenders are returned; status=all also includes finished and cancelled ones. Paging is cursor based: limit (1-50, default 50; the portal accepts at most 50 per page and larger values are clamped to 50) sets the page size and when has_more is true the returned next_page_token is passed back unchanged as page_token to fetch the next page. An unknown keyword yields an empty tenders array with count 0.
| Param | Type | Description |
|---|---|---|
| limit | integer | Page size; the portal's maximum is 50 and values above 50 are clamped to 50. |
| queryrequired | string | Keyword or phrase matched against tender titles and descriptions (Czech-language content). |
| status | string | Whether to return only active tenders or all tenders regardless of state. |
| page_token | string | Continuation cursor copied from a previous response's next_page_token. Omit for the first page. |
{
"type": "object",
"fields": {
"count": "number of tenders in this page",
"query": "the keyword that was searched",
"tenders": "array of tender summaries: tender_id (stable RVZ identifier used by the other endpoints), title, description, contracting_authority, submission_deadline (ISO 8601 UTC or absent), status (site status code such as AKTIVNI_NEUKONCEN), procedure_type, tags",
"has_more": "true when another page exists",
"status_filter": "the status filter applied (active or all)",
"next_page_token": "cursor for the next page, null on the last page"
},
"sample": {
"data": {
"count": 1,
"query": "software",
"tenders": [
{
"tags": [
"#Software",
"#ItSluzby"
],
"title": "Software MATLAB 2026 – 2027",
"status": "AKTIVNI_NEUKONCEN",
"tender_id": "RVZ2600120390",
"description": "Předmětem veřejné zakázky je poskytnutí licencí a služeb podrobně popsaných v Příloze č. 2 – licenční smlouva.",
"procedure_type": "VEREJNA_ZAKAZKA",
"submission_deadline": "2026-09-11T07:00:00Z",
"contracting_authority": "Vysoká škola chemicko-technologická v Praze"
}
],
"has_more": false,
"status_filter": "active",
"next_page_token": null
},
"status": "success"
}
}About the GOV API
Searching Tenders
The search_tenders endpoint accepts a required query string matched against Czech-language tender titles and descriptions, returning results ordered by newest publication first. Each page carries up to 100 summaries (clamped from any higher limit value), each containing a stable tender_id in the form RVZ followed by 10 digits. Filter by status to restrict results to active tenders only or include all regardless of state. Pagination is cursor-based: copy next_page_token from the response into the page_token parameter of the next call; the field is null on the final page.
Tender Detail Records
get_tender_details takes a single tender_id and returns the full structured record for that tender. Key fields include title, description, regime, status, and tags. The estimated_value field is null when the contracting authority has not published a value. The documents array is flattened across lots and provides document_id, name, document_type, size_bytes, created_at, and published for each attachment. The lots array preserves the source's original structure including per-lot procedure status, deadlines, and evaluation details. A profile_url links back to the tender on the authority's own profile page when available.
AI-Generated Summaries
get_tender_ai_summary returns the portal's own AI-generated summary for a given tender_id. When summary_available is true, the summary object contains structured sections: scope, qualification_requirements, evaluation_criteria, place_of_performance, required_bid_contents, and additional_sections. The source_documents array lists the document_id, document_type, and name of each document the summary was derived from. When the portal has not generated a summary for a tender, summary_available is false and both summary and source_documents are empty.
The GOV API is a managed, monitored endpoint for zakazky.gov.cz — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when zakazky.gov.cz changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official zakazky.gov.cz API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Monitor newly published Czech public tenders matching specific keywords, such as IT services or construction, using search_tenders with status filtering.
- Extract CPV codes and estimated values from get_tender_details to classify and prioritize procurement opportunities by category and budget.
- Build deadline trackers by pulling the flattened deadlines array from get_tender_details across multiple tender_ids.
- Quickly assess qualification requirements and evaluation criteria for a tender without reading full documentation, using get_tender_ai_summary.
- Compile attachment inventories by parsing the documents array from get_tender_details for document names, types, and sizes.
- Identify contracting authorities active in a domain by aggregating authority names from search_tenders results over time.
- Filter tenders by lot-level procedure status from get_tender_details to track which procurements have entered specific phases.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.