Skip to main content
Glama

Czech, Slovakia, Hungary & Ukraine Prozorro Tenders API – TED

cee-public-tenders
Read-onlyIdempotent

List and filter public tenders from Czechia, Slovakia, Hungary and Ukraine in one normalized schema by country, keyword, CPV code and deadline.

Instructions

Lists public tenders from Czechia, Slovakia, Hungary and Ukraine in one normalised schema, collected from the official Prozorro, Slovak Vestník and TED sources: title, CPV codes, value, deadline and status, with includeDetails adding lots, places of performance, document links and an EU-funding flag (charged at a higher rate). Filter by country, lastDays, keywords, CPV prefixes and onlyOpen. It does not cover Poland; for Polish EU-funded procurement use polish-eu-funds-tenders-baza-konkurencyjnosci. Read-only: it only queries the public source and never writes to the registry; onlyNew merely keeps a stateKey memory in your own Apify account. Each call needs the APIFY_TOKEN env var and starts one paid run of the Apify Actor enterprising_hamster/cee-public-tenders on your Apify account, billed pay-per-event per delivered item plus any Apify platform usage; the server waits up to 300 s for the run and returns JSON {items, truncated} with at most maxItems (max 100) items and 256 KiB.

Input Schema

NameRequiredDescriptionDefault
onlyNewNoSkip (and do not charge) tenders already delivered by a previous run with the same state key. Use with a schedule for daily alerts.
cpvCodesNoOptional. CPV codes or prefixes; 45000000-7 matches every code starting with 45, 7226 matches 72260000 etc. A tender matches when any of its CPV codes starts with any prefix.
keywordsNoOptional. Keep tenders whose title, description or lot titles contain any of these words (case- and accent-insensitive, in the source language, e.g. software, stavba, építés, ремонт).
lastDaysNoWindow of publication dates, counted back from now. Slovakia uses the date a bulletin was released as open data.
maxItemsNoUpper limit of dataset items for each selected country.
onlyOpenNoKeep only calls for competition whose submission deadline is still in the future. Turn off to also get awards, cancellations, corrections and closed tenders.
stateKeyNoName of the remembered set of delivered tenders. Use different keys for different monitors.
countriesNoCountries to collect. Each country is fetched from its own official source and normalized into the same schema.
includeDetailsNoAdd description, lots with values and CPV codes, places of performance (NUTS or region), document and submission links and EU-funding flag. Charged as tender-with-details.
maxRequestsPerSecondNoPolite rate limit per source. Defaults to 3.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only/idempotent/non-destructive/open-world, so the description focuses on what they cannot: APIFY_TOKEN requirement, a paid per-item pay-per-event run of a named Actor, a 300 s server wait, and the {items, truncated} return with a 256 KiB cap. It also clarifies that onlyNew touches only the caller's own stateKey and never writes to the registry, resolving a likely false-positive on the read-only hint. Only the concrete error/timeout failure modes are unstated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is front-loaded: purpose, sources, fields, filters, exclusions come first, then the cost/auth/return caveats. It is dense prose in a single block rather than scannable bullets, and the includeDetails pricing note appears twice in substance (fields and rate), but no sentence is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the return-value burden and does so by naming the {items, truncated} shape, the 256 KiB cap and the maxItems limit. Auth, billing and timeout are all covered. A short note on what happens on run failure or timeout would make it complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3; the description still adds real meaning by summarizing what each filter dimension selects and, importantly, by noting includeDetails is charged at a higher rate and that maxItems is capped at 100 with 256 KiB truncation. That is value beyond the schema, though the per-parameter details (CPV prefix matching, accent-insensitive keywords, stateKey) are repeats of the schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Lists public tenders from Czechia, Slovakia, Hungary and Ukraine') with the exact sources (Prozorro, Slovak Vestník, TED), the normalized fields returned, and an explicit exclusion of Poland routed to the sibling 'polish-eu-funds-tenders-baza-konkurencyjnosci'. An agent can distinguish it from every listed sibling, which are all single-domain Polish datasets.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It names the alternative for the Polish case explicitly and states the boundary ('It does not cover Poland'), then spells out the filtering axes (country, lastDays, keywords, CPV prefixes, onlyOpen) so an agent knows which knobs select which subset. The when-to-use includeDetails tradeoff is also given alongside its higher price.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.