Czech Contract Register (Registr smluv) → JSON avatar

Czech Contract Register (Registr smluv) → JSON

Pricing

from $1.40 / 1,000 contracts

Go to Apify Store
Czech Contract Register (Registr smluv) → JSON

Czech Contract Register (Registr smluv) → JSON

Contracts from the Czech Registr smluv open-data dumps (smlouvy.gov.cz) as clean JSON: publisher, parties, subject, value, attachments metadata. Filter by IČO, name, date, value. Natural persons redacted.

Pricing

from $1.40 / 1,000 contracts

Rating

0.0

(0)

Developer

Quietpine Labs

Quietpine Labs

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

Czech public contracts from Registr smluv as clean JSON — by IČO, party name or date

Get every contract published in the Czech Registr smluv (the statutory contract register at smlouvy.gov.cz, operated by Digitální a informační agentura) as one clean JSON record: publisher, contracting parties, subject, contract number, signature date, value excluding and including VAT, attachment metadata and a deep link. The actor streams the register's official open-data XML dumps (no HTML scraping, no third-party mirror, no attachment downloads), filters them by IČO, party name, date and value, redacts natural persons by default and, in incremental mode, returns each new contract exactly once.

Who uses it

  • Compliance and KYC teams — see what a supplier or customer has signed with the Czech public sector, by IČO.
  • Sales and market-intelligence teams — watch new contracts of a ministry, hospital or city and route them to a CRM via Make, Zapier or n8n.
  • Journalists, NGOs and data engineers — public spending as JSON instead of 80–185 MB XML files.

Use cases

1. All contracts of two counterparties published this month:

{ "icos": ["27661989", "45359326"] }

Contracts where the publisher or any party has one of these IČO; with a filter and no dates, the range is the current month to date.

2. Hospital contracts above 1 million CZK signed in Q3 2026:

{ "name": "nemocnice", "minValueCzk": 1000000, "dateFrom": "2026-07-01", "dateTo": "2026-09-30", "dateField": "concluded" }

Publisher or organisation party name contains "nemocnice" and the CZK value is at least 1,000,000.

3. Daily feed of everything new (schedule as a task):

{ "mode": "incremental", "cursorStore": "smluv-daily" }

Streams the daily dumps published since the last run; each contract is returned once.

Input

FieldTypeDefaultMeaning
icosstring[][]Keep contracts where the publisher or any party has one of these IČO (checksum-validated; up to 5,000).
namestring–Case- and diacritics-insensitive substring on the publisher name and organisation party names. Redacted persons never match.
dateFrom, dateTodateyesterday / current monthInclusive range, at most 93 days per run; dateTo is clamped to today.
dateFieldpublished / concludedpublishedPublication day in the register (dumps are partitioned by it) or signature date.
minValueCzkinteger–Keep contracts whose CZK value (excl. or incl. VAT, whichever is higher) is at least this. Records without a CZK value are dropped when set.
includeAttachmentsMetabooleantrueInclude attachments[] (file name, SHA-256, URL). Files are never downloaded.
includeInvalidbooleanfalseAlso return record versions flagged platnyZaznam = 0 (superseded or invalidated).
modefull / incrementalfullSee Incremental mode.
cursorStorestringregistr-smluv-contractsNamed key-value store that keeps the incremental cursor between runs.
maxRecordsinteger1000Stop after this many contracts.

Date defaults: no dates and no icos/name → yesterday's daily dump only; no dates but a filter → first day of the current month to today; only dateFrom → until today; only dateTo → from the first day of that month.

Output

One item per contract record version. Real record from the default input (maxRecords: 20, yesterday's daily dump, local run on 2026-10-18):

{
"country": "CZ",
"id": "37597061",
"version": "39979257",
"url": "https://smlouvy.gov.cz/smlouva/39979257",
"publishedAt": "2026-10-16T22:03:44.000Z",
"publisher": {
"name": "Krajská nemocnice T. Bati, a. s.",
"ico": "27661989",
"address": { "street": "Havlíčkovo nábřeží", "houseNumber": "600", "city": "Zlín", "postalCode": "76001", "country": "CZ", "formatted": "Havlíčkovo nábřeží 600, 76001 Zlín, CZ" }
},
"parties": [
{ "type": "organisation", "name": "Merck Sharp & Dohme s.r.o.", "ico": "28462564",
"address": { "street": "Na Valentince", "houseNumber": "3336/4", "city": "Praha", "postalCode": "15000", "country": "CZ", "formatted": "Na Valentince 3336/4, 150 00 Praha" } }
],
"subject": "Objednávka OZL/LEK/26/33188",
"contractNumber": "OZL/LEK/26/33188",
"concludedOn": "2026-10-16",
"valueExclVat": { "amount": 312180.2, "currency": "CZK" },
"priceNotStated": false,
"attachments": [
{ "fileName": "OZL_LEK_26_33188_RS.pdf", "sha256": "ab853a2ec95d5195668fae2f81bca468e8743138f278837ac0115e35657d446e", "url": "https://smlouvy.gov.cz/smlouva/soubor/48174145/OZL_LEK_26_33188_RS.pdf" }
],
"isValid": true,
"provenance": {
"source": "registr-smluv",
"sourceName": "Registr smluv, Digitální a informační agentura",
"sourceUrl": "https://smlouvy.gov.cz/smlouva/39979257",
"licence": "Zdroj: Registr smluv (https://smlouvy.gov.cz), open data under zák. č. 340/2015 Sb. Recipients of this data are independent GDPR controllers; records made inaccessible at the source must be deleted.",
"retrievedAt": "2026-10-18T02:08:39.714Z",
"sourceUpdatedAt": "2026-10-17"
}
}

Field notes: id is the stable contract ID, version the published version (a new version is a new item). publishedAt is UTC; date filters use the register's Czech local day. Parties are { "type": "organisation", name, ico?, address?, isRecipient? } or { "type": "natural-person", "redacted": true }. Values come from the CZK fields (negative on amendments); a foreign-currency amount fills the field the publisher left empty, with its own currency. priceNotStated means the publisher gave a reason instead of a price; linkedRecordId points to the parent contract of an amendment. Addresses are best-effort parses of free text; formatted always holds the original. Run statistics are in the key-value store record STATS.

Pricing in plain words

You pay $2 per 1,000 contracts returned, plus $0.01 per run start — higher than our other actors because every run must download and stream the register's official XML dumps (0.1–185 MB) even when few records match. Empty results are free apart from the start fee. On the free plan ($5 monthly credit) that is about 2,300 contracts a month with one run a day. Bronze, Silver and Gold volume discounts are configured on the store page. The run stops gracefully at maxRecords or your maximum total charge; keep date ranges short and use incremental mode for monitoring.

Limits & fair use

  • The register publishes no rate limit. The actor downloads from data.smlouvy.gov.cz only, at 1 request per second with at most 2 downloads in flight, verifies each dump's SHA-1 against index.xml and fails fast with a clear message when the server returns HTML (maintenance) or a truncated file.
  • A date range covers at most 93 days per run. Daily dumps (0.1–15 MB, about 4,500 records on a working day) are used when the range starts within the last 45 days or in incremental mode; otherwise monthly dumps of 80–185 MB (about 90,000–110,000 records) are streamed at roughly 0.5–3 minutes per month, with flat memory because records are parsed one at a time.
  • concluded filtering is limited to the dumps selected by the same range: a contract signed in March but published in May is found only with a range covering May.
  • Reaching maxRecords or your budget stops the run and keeps what was pushed.

Incremental mode

mode: "incremental" processes daily dumps only. The cursor { "value": { "lastDumpDate": "YYYY-MM-DD", "seenIds": ["idSmlouvy:idVerze", …] }, "updatedAt": "…" } is stored under CURSOR in the run's default key-value store (read first, so you can seed or reset it) and in the named store cursorStore, which survives across runs — use a different name per configuration. The first run behaves like full over the resolved range (default: yesterday). Later runs stream the daily dumps from lastDumpDate to today and skip the seenIds of the last day, which is re-read because its dump may have been incomplete. dateFrom/dateTo are ignored once a cursor exists; gaps longer than 93 days are cut to 93. If maxRecords or the budget stops the run mid-day, seenIds holds only the records actually processed, so the next run continues without duplicates or gaps.

Data protection

The register's terms say the open dataset contains personal data and that its recipient becomes an independent GDPR controller; publishers, not the register, anonymise contracts (§ 5(8) of Act No. 340/2015 Coll.), so natural persons' names do appear in the dumps. This actor:

  • replaces every party flagged FO/ZFO (natural person) with { "type": "natural-person", "redacted": true };
  • redacts parties flagged PFO (natural-person entrepreneurs), and unflagged parties whose name looks like a personal name, unless their own IČO is in icos — and even then reduces their address to the municipality;
  • never outputs schvalil (the signatory), datovaSchranka or platce, and never fetches attachment contents;
  • matches name against organisations only, so a person cannot be looked up by name;
  • applies a key deny-list to every item as a last line of defence;
  • re-reads the regenerated dumps on every run and caches nothing but the incremental cursor (IDs only), so records the register makes inaccessible disappear from later runs; if you store datasets long-term, re-sync periodically and delete removed records, as the register's terms require.

Lawful basis for the processing inside a run is Art. 6(1)(f) GDPR — legitimate interest in making data that is public by law machine-readable for due diligence, procurement analysis and journalism. You are the controller of what you download. Removal requests for register content go to the register (registrsmluv@mvcr.cz); each record's url opens it on smlouvy.gov.cz. This section describes the actor's behaviour and is not legal advice.

FAQ

Why dumps and not a search API? The register offers no public read API; its only machine channel is open-data dumps, and its web search is HTML, which this actor does not scrape. That is also why a run with two IČO still streams the whole day's or month's dump and carries a start fee.

A party shows as redacted. Can I get the name? Only for natural-person entrepreneurs whose own IČO you supply in icos; private individuals are never returned.

Can I get the contract text or PDF? No — attachments are never downloaded; attachments[] gives the file name, SHA-256 and URL so you can fetch them yourself under the register's terms.

How fresh is the data? Daily dumps are generated around 04:30 Czech time for the previous day; yesterday's dump may still be flagged incomplete and is re-read by incremental mode. Monthly dumps are regenerated nightly, which is also how records the register made inaccessible vanish between runs — delete them from your copies too.

Who invoices me? Apify. Usage is billed to your Apify account; the developer never sees your data or payment details.

Source & licence

Zdroj: Registr smluv (https://smlouvy.gov.cz), open data under zák. č. 340/2015 Sb. Recipients of this data are independent GDPR controllers; records made inaccessible at the source must be deleted.

Terms of use: https://smlouvy.gov.cz/stranka/otevrena-data. Catalogue record: https://data.gov.cz/zdroj/datové-sady/17651921/a9945c027cf6ca67d959e8eb04885f22. Each record carries the attribution in provenance.licence. Not affiliated with Digitální a informační agentura or the Ministry of the Interior of the Czech Republic.

Changelog / support

  • 0.1 — first public release: daily and monthly dump streaming, IČO/name/date/value filters, natural-person redaction, incremental mode.

Questions, bugs and feature requests: use the Issues tab of this actor.

Documentation drafted with AI assistance and reviewed by the publisher before publication.