# ARES Scraper — Czech Company Register (IČO, DIČ, NACE, address) (`eudatalab/ares-cz-scraper`) Actor

Search the official Czech business register ARES by IČO list, company name, legal form, CZ-NACE code, address or region. Get IČO, DIČ, legal form, seat address, NACE codes, registry statuses and dates as clean JSON. No browser, pay per result.

- **URL**: https://apify.com/eudatalab/ares-cz-scraper.md
- **Developed by:** [Ihor Hrypas](https://apify.com/eudatalab) (community)
- **Categories:** Lead generation
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## ARES Scraper — Czech Company Register (IČO, DIČ, NACE, address)

Get Czech companies from **ARES** (ares.gov.cz, the Ministry of Finance's official register of economic subjects) as a clean table: IČO, name, DIČ (VAT ID), legal form, full seat address split into street / city / postal code / district / region, CZ-NACE activity codes with names, VAT-payer flag, status in 16 public registers (commercial register, trade register, VAT, insolvency…), commercial-register file number, tax office and founding date. Look up a list of IČO, or search by company name, activity, legal form, address or region. Pay only per company returned.

No browser, no login: data comes from the official public ARES REST API, so the Actor is fast (1 000 companies in about 30 seconds), cheap on platform usage and does not break on website redesigns.

### Sample output

Real rows from a staged run (CZ-NACE 10710 "bread and pastry" in Brno):

| ico | name | dic | legalFormEn | address | naceCodes | dateCreated | vatPayer |
|---|---|---|---|---|---|---|---|
| 01919083 | Uncle Baker s.r.o. | CZ01919083 | Limited liability company (s.r.o.) | Humenná 468/20, Bohunice, 62500 Brno | 016, 10710, 02400, … | 2017-10-31 | true |
| 04300700 | Crazy Bagi s.r.o. | CZ04300700 | Limited liability company (s.r.o.) | Sousední 285/21, Jehnice, 62100 Brno | 461, 10710, 56110, … | 2015-08-06 | true |
| 08401527 | Chleba Brno s.r.o. | CZ08401527 | Limited liability company (s.r.o.) | Nové sady 988/2, Staré Brno, 60200 Brno | 10710, 56110, 11010, … | 2019-08-08 | true |
| 18565913 | FORNIA s.r.o. | CZ18565913 | Limited liability company (s.r.o.) | Pavlovská 516/19, Kohoutovice, 62300 Brno | 10710, 471, 47780, … | 1991-07-08 | true |

One full record:

```json
{
  "ico": "01919083",
  "name": "Uncle Baker s.r.o.",
  "dic": "CZ01919083",
  "legalFormCode": "112",
  "legalForm": "Společnost s ručením omezeným",
  "legalFormEn": "Limited liability company (s.r.o.)",
  "address": "Humenná 468/20, Bohunice, 62500 Brno",
  "street": "Humenná",
  "houseNumber": "468/20",
  "cityPart": "Bohunice",
  "cityDistrict": "Brno-Bohunice",
  "city": "Brno",
  "postalCode": "62500",
  "district": "Brno-město",
  "region": "Jihomoravský kraj",
  "countryCode": "CZ",
  "naceCodes": ["016", "10710", "02400", "10", "…"],
  "naceActivities": [{ "code": "10710", "label": "Výroba pekařských a cukrářských výrobků, kromě trvanlivých" }, "…"],
  "vatPayer": true,
  "registrations": { "ROS": "AKTIVNI", "VR": "AKTIVNI", "RES": "AKTIVNI", "RZP": "AKTIVNI", "DPH": "AKTIVNI", "IR": "NEEXISTUJICI", "…": "…" },
  "commercialRegisterFileNo": "C 102893/KSBR",
  "taxOffice": "Územní pracoviště Brno IV",
  "dateCreated": "2017-10-31",
  "dateDissolved": null,
  "dateUpdated": "2026-05-23",
  "aresUrl": "https://ares.gov.cz/ekonomicke-subjekty?ico=01919083"
}
```

### Use cases

- **KYC / supplier checks**: paste a list of IČO and get the current name, seat, VAT status and insolvency-register status for each in one run.
- **B2B lead generation**: every bakery, construction firm or IT company (by CZ-NACE) in a city or region, with legal form and founding date.
- **CRM enrichment and de-duplication**: normalise company names and addresses to the official register record.
- **Market sizing**: count companies per activity, legal form and region.
- Feed official Czech company data to an AI agent via the Apify MCP server (e.g. "look up these IČO and tell me which are VAT payers").

### Pricing

Pay per event: **$0.002 per company**. No company, no charge. Set **Max results** to cap the cost of a run. Free-plan users can run it within their free credits.

### Input

| Field | Meaning | Default |
|---|---|---|
| IČO list | company IDs to look up directly (`27082440`, `6947`, `CZ 270 82 440`); when set, the search fields are ignored | — |
| Company name | words in the registered name (`pekárna`, `software`); case- and diacritics-insensitive | — |
| CZ-NACE activity codes | `10710`, `62`, `4120`, or a section letter like `F`; a code also matches all finer codes under it | 10710 (form prefill) |
| Legal form | s.r.o. (112), a.s. (121), sole trader (101) and all other current legal forms | all |
| Municipality / address | full-text match on the seat address: city, Prague district, street or postal code | Brno (form prefill) |
| Region (kraj) | one of the 14 Czech regions | whole country |
| Max results | stop after N companies (= cost cap) | 100 (form: 25) |
| Proxy | not needed for this open government API | off |

With no filter at all the Actor runs the prefilled demo search (bakeries in Brno).

**The 1 000 limit.** ARES refuses any search that matches more than 1 000 companies. The Actor then automatically splits the search by tax office (14 regions + the Specialised Tax Office, then each local office) and merges the results without duplicates. If a single local office still has more than 1 000 matches (e.g. all joint-stock companies in Prague 1), that part is skipped with a clear message in the log; add a company name, NACE code or address to get it. Companies with no tax office are not reachable through the split or the *Region* filter.

### Output fields

`ico`, `name`, `dic` (companies only — sole traders' DIČ is derived from their personal birth number and is returned as `null`), `vatGroupDic`, `legalFormCode`, `legalForm`, `legalFormEn`, `address`, `street`, `houseNumber`, `cityPart`, `cityDistrict`, `city`, `postalCode`, `district`, `region`, `country`, `countryCode`, `addressPointCode` (RÚIAN), `deliveryAddress`, `naceCodes` (CZ-NACE 2025), `naceActivities` (code + Czech label), `nace2008Codes`, `vatPayer`, `registrations`, `commercialRegisterFileNo`, `taxOfficeCode`, `taxOffice`, `primarySource`, `dateCreated`, `dateDissolved`, `dateUpdated`, `aresUrl`, `apiUrl`, `url`, `scrapedAt`

`registrations` holds the subject's status in each source register, keyed by the acronyms ARES uses: ROS (basic register of persons), VR (commercial and other public registers), RES (statistical register), RZP (trade licences), DPH (VAT), SK_DPH (VAT group), SD (excise duty), IR (insolvency), CEU (bankrupts), NRPZS (healthcare providers), RPSH (political parties), RCNS (churches), SZR (farmers), RS (schools), RED (subsidies), MONITOR (state accounting units). Values: `AKTIVNI`, `HISTORICKY`, `ZANIKLY`, `NEEXISTUJICI`, …

### Limits and fair use

Only the public ARES API is used, with polite rate limits (≤ 60 requests per minute, far below the register's own limits). Sole traders appear in ARES under their own name and business address; the Actor returns exactly what ARES publishes and nothing more. Respect the GDPR and ARES terms when reusing personal names.

### Problems?

Open an issue on the **Issues** tab — median response time is under 6 hours. Include the run ID.

# Actor input Schema

## `icos` (type: `array`):

Czech company IDs (IČO) to look up, e.g. 27082440 or 6947 (leading zeros are added). Up to thousands per run, fetched 100 per request. When this list is set, all search filters below are ignored.

## `companyName` (type: `string`):

Words in the registered business name, e.g. "pekárna", "software", "Škoda". Case- and diacritics-insensitive.

## `naceCodes` (type: `array`):

Economic activity codes (CZ-NACE 2025), e.g. 10710 (bread and pastry), 62 (IT services), 4120 (construction) or a section letter like F. A code also matches every finer code under it. Subjects match if they registered ANY of the codes.

## `legalForms` (type: `array`):

Leave empty for all. 112 = s.r.o. (LLC), 121 = a.s. (joint-stock), 101 = sole trader.

## `municipality` (type: `string`):

Full-text match on the registered seat address: a municipality (Brno, Plzeň), a Prague district (Praha 5), a street, or a postal code (60200). Fuzzy: "Praha 5" can also match other Prague addresses containing a 5.

## `region` (type: `string`):

Only subjects whose registered seat is in this region. Uses the region's tax offices on the ARES side (subjects with no tax office are not found by this filter).

## `maxItems` (type: `integer`):

Stop after this many companies. Each company is one charged event, so this is also your cost cap. The form prefills 25 for a quick first run. ARES answers at most 1 000 per search; bigger searches are split automatically by tax office.

## `proxyConfiguration` (type: `object`):

ARES is an open government API and does not need a proxy. Leave off unless you have a reason.

## Actor input object example

```json
{
  "naceCodes": [
    "10710"
  ],
  "municipality": "Brno",
  "maxItems": 25,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "naceCodes": [
        "10710"
    ],
    "municipality": "Brno",
    "maxItems": 25,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("eudatalab/ares-cz-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "naceCodes": ["10710"],
    "municipality": "Brno",
    "maxItems": 25,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("eudatalab/ares-cz-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "naceCodes": [
    "10710"
  ],
  "municipality": "Brno",
  "maxItems": 25,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call eudatalab/ares-cz-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,eudatalab/ares-cz-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/9QmR2aoLrujb1NmDJ/builds/uD2eeadygQuFNWn7M/openapi.json
