Czech ARES Company Registry Scraper icon

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.

FieldTypeRequiredWhat 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

EventPriceWhen
Actor start$0.20Once per run, covers warm-up and proxy session setup.
Result scraped$0.0100Per 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?
No. ares.gov.cz is a public Czech Ministry of Finance API and needs no credentials — leave the proxy setting off too.
What happens if an IČO doesn't exist?
The row comes back with found: false and a warning describing what was queried — the run still finishes SUCCEEDED, you're never billed for a failed run just because one IČO was wrong.
Can I search by VAT ID or address instead of a name?
Not in v1 — ARES's keyless search endpoint takes a business name only. Look up the IČO first if you only have a VAT ID or address.
Why do some fields come back null in search mode?
Search rows are lighter than detail records. Set enrichWithDetail to true to fetch the full detail record for each match, or look the company up directly by IČO.

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

Teams that run this also run