# or.justice.cz Scraper - Czech Business Register Company Data (`studio-amba/or-justice-cz-scraper`) Actor

Extract official company data from the Czech Veřejný rejstřík (or.justice.cz) business register: name, IČO, legal form, registration court/section/insert number, address, officers, shareholders, share capital. Search by name or IČO. No login required.

- **URL**: https://apify.com/studio-amba/or-justice-cz-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** Business, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 1,000 result scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## or.justice.cz Scraper — Czech Business Register Company Data

Search the [Czech Republic's Veřejný rejstřík](https://or.justice.cz/) (Public/Commercial Register), the
Ministry of Justice's official record of companies, cooperatives, and other registered legal entities.
Look up a company by name or IČO (identification number) and get its registration court, section and
insert number, legal form, registered address, statutory body officers, procuration holders, share
capital, shareholders, and current status. No login, no account, no API key.

Company register data like this is the backbone of KYB/KYC checks, credit-control workflows, and
counterparty due diligence — this actor turns a company name or IČO into a clean, structured record you
can drop straight into that kind of process instead of reading the register by hand.

### How to scrape or.justice.cz data

The actor talks directly to ARES (Registr ekonomických subjektů), the Czech Ministry of Finance's central
economic-subject registry that aggregates the same Veřejný rejstřík data or.justice.cz displays. This is a
free, public government API, not a scrape of the or.justice.cz frontend — so results are exact and the
actor doesn't depend on that portal's own session-gated search UI staying the same.

#### Search by company name

Enter a company name (full or partial) in **Company Name**, e.g. `Metrostav` or `Agrofert`. ARES matches
company names containing this text and returns every entity on file, then the actor filters down to the
ones that actually have a Veřejný rejstřík record (companies and cooperatives — sole traders registered
only in the trade licence register are excluded, since or.justice.cz doesn't cover them either).

#### Search by IČO

Set **IČO (Identification Number)** to an exact 8-digit Czech company ID, e.g. `26185610` for AGROFERT,
a.s., to fetch one specific company's full record directly. IČO takes priority if both are provided.

#### Result limit

**Max Results** caps how many company records the actor returns per run (default 20, hard cap 100). Each
result costs one detail-record fetch on top of the initial search call.

### What data does or.justice.cz Scraper extract?

| Field | Type | Description |
|-------|------|--------------|
| **companyName** | String | Official registered company name |
| **ico** | String | Czech company identification number (IČO), 8 digits |
| **court** | String | Registration court holding the record (e.g. Městský soud v Praze) |
| **section** | String | Register section code (Oddíl), e.g. "B" or "C" |
| **insertNumber** | String | File/insert number (Vložka) within the section |
| **legalForm** | String | Legal form, e.g. Společnost s ručením omezeným |
| **legalFormCode** | String | Numeric legal-form classification code as published by ARES |
| **registrationDate** | String | Registration date (ISO date, YYYY-MM-DD) |
| **street** | String | Registered seat street and number |
| **city** | String | Registered seat city/municipality |
| **postalCode** | String | Registered seat postal code |
| **country** | String | Always "Czechia" |
| **businessActivities** | Array | Registered business activities (předmět podnikání) |
| **statutoryBodyType** | String | Statutory body name(s), e.g. "Jednatelé" or "Představenstvo" |
| **statutoryBodyMembers** | Array | Current statutory body officers — name, role, date of birth, function-since date |
| **signingRules** | String | Governance structure (dualistic/monistic) where the register states one |
| **supervisoryBoard** | Array | Current supervisory board (dozorčí rada) members, same shape as statutory body |
| **procurationHolders** | Array | Current procuration (prokura) holders, same shape as statutory body |
| **procurationRules** | String | Procuration organ name where the register lists one |
| **shareCapital** | Number | Registered share capital amount |
| **shareCapitalCurrency** | String | Share capital currency (almost always CZK) |
| **shareCapitalRaw** | String | Raw share-capital value as published, for audit trail |
| **shareholders** | Array | Current shareholders on file — name, IČO (if a legal entity), address |
| **status** | String | `active`, `in_liquidation`, or `deregistered` |
| **deregistrationDate** | String | Deregistration date, if the entity has been struck off |
| **legalFactsRecent** | Array | Most recent entries from the register's running legal-facts log (capped) |
| **legalFactsTotalCount** | Number | Total legal-facts entries on file, including older ones not returned |
| **url** | String | Link to the public or.justice.cz search tool for this IČO |
| **scrapedAt** | String | ISO timestamp of extraction |

### Input parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|--------------|
| **Company Name** | String | `Metrostav` | Search by company name (full or partial) |
| **IČO (Identification Number)** | String | — | Search by an exact 8-digit IČO instead of a name |
| **Max Results** | Integer | `20` | Maximum company records to return (1–100) |
| **Proxy Configuration** | Object | Automatic Apify proxy | ARES has no anti-bot or geo-lock, so the default pool works fine |

### Example output

```json
{
    "companyName": "Metrostav a.s.",
    "ico": "00473760",
    "court": "Městský soud v Praze",
    "section": "B",
    "insertNumber": "758",
    "legalForm": "Akciová společnost",
    "legalFormCode": "121",
    "registrationDate": "1990-05-01",
    "street": "Koželužská 2450/4",
    "city": "Praha",
    "postalCode": "18000",
    "country": "Czechia",
    "businessActivities": ["Provádění staveb, jejich změn a odstraňování"],
    "statutoryBodyType": "Představenstvo",
    "statutoryBodyMembers": [
        { "name": "Jan Novák", "role": "předseda představenstva", "dateOfBirth": null, "functionSince": "2021-06-01" }
    ],
    "signingRules": null,
    "supervisoryBoard": [],
    "procurationHolders": [],
    "procurationRules": null,
    "shareCapital": 390000000,
    "shareCapitalCurrency": "CZK",
    "shareCapitalRaw": "390000000;00 KORUNY",
    "shareholders": [],
    "status": "active",
    "deregistrationDate": null,
    "legalFactsRecent": ["Valná hromada společnosti dne 12.6.2024 schválila..."],
    "legalFactsTotalCount": 34,
    "url": "https://or.justice.cz/ias/ui/rejstrik-$firma?ico=00473760",
    "scrapedAt": "2026-08-23T09:00:00.000Z"
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

### Common use cases

- Counterparty due-diligence — check a prospective supplier's or customer's legal form, statutory body,
  and share capital before signing a contract.
- KYC / AML pre-checks — pull official registration details and current status for a Czech company in
  one pass instead of searching the register by hand.
- Credit control — verify a company's registered address, officers, and status before extending terms.
- Sales / lead enrichment — turn a list of Czech company names or IČOs into structured firmographic data.

### Cost estimate

Each result costs one government-API detail fetch on top of a single search call (or none, if you search
by IČO directly) — no browser rendering, no proxy retries needed under normal conditions. A run returning
20 companies typically makes 21 HTTP requests total. A run's usage cost only settles after it reports
SUCCEEDED.

### Limitations

- **Veřejný rejstřík scope only.** Sole traders (OSVČ) and other entities registered only in the trade
  licence register (živnostenský rejstřík) are out of scope — or.justice.cz itself doesn't cover them
  either.
- **1,000-match search cap.** A very broad name search (e.g. a single common word) can exceed the
  underlying registry's 1,000-match cap and fail — narrow the search term or use an exact IČO instead.
- **No historical snapshots.** The actor returns the current state of each record plus a capped list of
  the most recent legal-facts log entries, not a full point-in-time history of every past change.

### Related scrapers

- **[KRZ Scraper](https://apify.com/studio-amba/krz-scraper)** — Poland's National Debtors Register (bankruptcy & restructuring).
- **[Registro Imprese Scraper](https://apify.com/studio-amba/registro-imprese-scraper)** — Italian company register data.
- **[eInforma Scraper](https://apify.com/studio-amba/einforma-scraper)** — Spanish company register data.
- **[North Data Scraper](https://apify.com/studio-amba/northdata-scraper)** — European company data across 16 countries.
- **[Handelsregister Scraper](https://apify.com/studio-amba/handelsregister-scraper)** — German commercial register data.

### Data source and legality

This actor reads publicly available company data from ARES, the Czech Ministry of Finance's open
economic-subject registry — the same underlying dataset the Ministry of Justice's or.justice.cz portal
displays. The API is free, requires no key or login, and is designed for public consumption. Use the data
in line with applicable data-protection rules.

# Actor input Schema

## `searchQuery` (type: `string`):

Search companies by name (e.g., 'Metrostav', 'Agrofert'). Matches company names containing this text. Ignored if IČO is provided. Defaults to 'Metrostav' if no search criteria provided. Very broad terms (e.g. common single words) can exceed the registry's 1,000-match search cap and fail -- narrow the term if that happens.

## `ico` (type: `string`):

Search by the 8-digit Czech company identification number (e.g., '26185610' for AGROFERT, a.s.). Returns a single detailed record.

## `maxResults` (type: `integer`):

Maximum number of company records to return. Each result costs one detail-record fetch in addition to the search request. Hard cap 100.

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

Apify proxy configuration. The underlying ARES government API has no anti-bot and no geo-lock (confirmed live) -- the default automatic proxy pool works fine.

## Actor input object example

```json
{
  "searchQuery": "Metrostav",
  "maxResults": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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 = {
    "searchQuery": "Metrostav",
    "maxResults": 10,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/or-justice-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 = {
    "searchQuery": "Metrostav",
    "maxResults": 10,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/or-justice-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 '{
  "searchQuery": "Metrostav",
  "maxResults": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call studio-amba/or-justice-cz-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,studio-amba/or-justice-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/CmYjZNsnoBCNHuaLw/builds/d5tWPlHhxb02xVLI6/openapi.json
