Lead generation
Czech ARES Company Registry Scraper
Look up Czech companies in the official ARES registry by IČO or free-text business name — identity, registered address, NACE activity codes, and active registry sub-sources — as clean, flattened JSON/CSV rows for KYC/AML and B2B lead-gen workflows.
Free Apify credit covers a first run. No credit card to try.
What this Actor scrapes
The Czech Ministry of Finance publishes company records through ARES (Administrativní registr ekonomických subjektů), a keyless, unauthenticated JSON API with a documented, generous 500-requests/minute ceiling and both ID-lookup and name-search in the same API. No visible rival currently holds a Czech ARES-specific listing on the Apify Store. This Actor takes a batch of IČOs and/or free-text business names, flattens each match into a single typed row, and lets you pick exactly which sections you need so you never pay transfer for data you didn't ask for.
What we handle for you
- 🧊 Flattens ARES's nested JSON envelope into one clean row — identity, address, NACE codes, and active registrations, picked via a Sections filter so you only pay transfer for what you need.
- 🔢 IČOs stay strings, always — leading zeros never get stripped by a spreadsheet export or an overeager number cast.
- 🔁 We retry transient 429/5xx responses with exponential backoff, honouring Retry-After when ARES sends one.
- 🩹 Per-item fault isolation — one bad IČO or missing sub-key logs a warning and moves on; it never crashes the run.
- 🧱 Honest not-found handling — an unknown IČO or a zero-match search still finishes SUCCEEDED with found: false, never a crashed run.
- 💰 Pay-Per-Event pricing — a delivered answer (found or not) still costs you $0.01; invalid input costs nothing.
- 🧱 Rate-limit-aware pacing — concurrency capped well under ARES's documented 500-requests/minute ceiling, so a big batch never trips the Ministry's throttle.
- 🧊 Clean, typed dataset rows — Pydantic-validated, ISO-8601 timestamps, ready for JSON / CSV / Excel export straight from the Apify Console.
Use cases
- Run a KYC/AML check on a Czech counterparty by IČO before onboarding.
- Build a Czech B2B prospect list from a batch of business names.
- Verify NACE activity codes and active registrations for a due-diligence file.
- Screen a supplier or partner list for companies missing from the register.
Input
Paste this into the Apify Console, or send it as the run input over the API. Proxy settings are on by default; you rarely need to touch them.
| Field | Type | Required | What it does |
|---|---|---|---|
icos | array | no | Czech IČO company IDs to look up directly via the detail endpoint. Normalized to exactly 8 digits (zero-padded string, leading zeros preserved). Up to 500 per run. |
searchQueries | array | no | Free-text business names to search via the name-search endpoint. Up to 50 per run, 200 chars each. |
enrichWithDetail | boolean | no | For search-mode hits only: follow up each match with a detail lookup (adds VAT ID, founding date, NACE codes, active registrations). Direct IČO lookups always use the detail endpoint regardless of this flag. |
resultsPerQuery | integer | no | Page size per search query. v1 fetches one page per query; total_matches on each row tells you if more exist. |
sections | array | no | Which flattened sections to project per row — the fewer you request, the leaner (and cheaper to transfer) each row is. |
{
"icos": [
"27074358",
"45317054",
"00000000"
],
"searchQueries": [],
"enrichWithDetail": false,
"resultsPerQuery": 20,
"sections": [
"identity",
"address",
"nace",
"registrations"
],
"proxyConfiguration": {
"useApifyProxy": false
}
} Output
One row per result, schema-validated before it is written. Export JSON, CSV, Excel or XML from the run, or read it over the API.
query_typeicofoundnamelegal_form_codeaddress_citynace_codesactive_registrations
{
"query_type": "ico",
"ico": "27074358",
"ico_id": null,
"search_query": null,
"total_matches": null,
"found": true,
"warning": null,
"name": "Asseco Central Europe, a.s.",
"legal_form_code": "121",
"founding_date": "2004-06-25",
"vat_id": "CZ27074358",
"tax_office": null,
"last_updated": "2026-08-30",
"address_street": "Bud\u011bjovick\u00e1",
"address_house_number": "778",
"address_orientation_number": "3",
"address_city": "Praha",
"address_postal_code": "14000",
"address_country_name": "\u010cesk\u00e1 republika",
"address_country_code": "CZ",
"address_full_text": "Bud\u011bjovick\u00e1 778/3, 14000 Praha",
"nace_codes": [
"6201Z",
"6202Z"
],
"active_registrations": [
"Obchodn\u00ed rejst\u0159\u00edk",
"Registr pl\u00e1tc\u016f DPH"
],
"source_url": "https://ares.gov.cz/ekonomicke-subjekty-v-be/rest/ekonomicke-subjekty/27074358",
"scraped_at": "2026-09-08T12:00:00+00:00"
} Pricing
| Event | Price | When |
|---|---|---|
| Actor start | $0.20 | Once per run, covers warm-up and proxy session setup. |
| Result scraped | $0.0100 | Per result written to the dataset. |
You pay only for results that land. Cap any run with maxTotalChargeUsd. See pricing & billing for worked examples.
Limitations
- No auto-pagination across multiple search pages per query in v1 — resultsPerQuery caps at 100 and total_matches tells you if more exist.
- Search is by business name only — not by IČO substring, VAT ID, or address.
- Only current-state data is returned; no historical/change-log data.
- ARES documents a 500-requests/minute ceiling in the Ministry of Finance's open-data docs — we keep concurrency well under it by default, so very large batches take proportionally longer rather than risking a throttle.
FAQ
Do I need an API key?
What happens if an IČO doesn't exist?
Can I search by VAT ID or address instead of a name?
Why do some fields come back null in search mode?
Ready to run it?
Open the listing on Apify, paste the input above, and watch rows land. If it ever breaks, it is our problem before it is yours.
Related Actors