# Ukraine Company Register & Beneficial Owners Scraper (EDR) (`scrapers_lat/ukraine-edr-companies-scraper`) Actor

Look up Ukrainian companies by EDRPOU code and export firmographics plus ownership: name, status, registration date, charter capital, KVED activities, registered address, director, founders (with codes) and ultimate beneficial owners with nationality and control type. Export to JSON, CSV or Excel.

- **URL**: https://apify.com/scrapers\_lat/ukraine-edr-companies-scraper.md
- **Developed by:** [Scrapers Lat](https://apify.com/scrapers_lat) (community)
- **Categories:** Developer tools, Automation, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $15.60 / 1,000 company records

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/platform/actors/running/actors-in-store#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

[![Ukraine Company Register & Beneficial Owners Scraper (EDR)](https://scrapers.lat/banners/ukraine-edr-companies-scraper.png)](https://console.apify.com/actors/8wwsrVUK2Yx5PNu5F/input)

## Ukraine Company Register & Beneficial Owners Scraper (EDR)

Here is one real result, with every field the actor returns (the `beneficialOwners` separators shown here as hyphens are em dashes in the raw data; every other value is unchanged):

```json
{
  "edrpou": "31316718",
  "name": "ТОВ \"НОВА ПОШТА\"",
  "status": "Зареєстровано",
  "registrationDate": "19.01.2001",
  "recordNumber": "15881200000001718",
  "charterCapital": 4654075,
  "charterCapitalCurrency": "UAH",
  "primaryKvedCode": "53.20",
  "primaryActivity": "Інша поштова та кур'єрська діяльність",
  "activitiesCount": 23,
  "activities": "53.20 Інша поштова та кур'єрська діяльність | 86.90 Інша діяльність у сфері охорони здоров'я | 46.18 Діяльність посередників, що спеціалізуються в торгівлі іншими товарами | 86.21 Загальна медична практика | 85.60 Допоміжна діяльність у сфері освіти | 85.59 Інші види освіти, н.в.і.у. | 82.99 Надання інших допоміжних комерційних послуг, н.в.і.у. | 78.30 Інша діяльність із забезпечення трудовими ресурсами",
  "directorName": "Тафійчук Євген Олександрович",
  "authorizedPersons": ["Тафійчук Євген Олександрович"],
  "beneficialOwnersCount": 2,
  "topBeneficialOwner": "Климов Вячеслав Валерійович",
  "beneficialOwnerNames": ["Климов Вячеслав Валерійович", "Поперешнюк Володимир Анатолійович"],
  "beneficialOwnerNationalities": ["Україна"],
  "beneficialOwners": "Климов Вячеслав Валерійович - Україна - Непрямий вирішальний вплив ; Поперешнюк Володимир Анатолійович - Україна - Непрямий вирішальний вплив",
  "foundersCount": 2,
  "founderNames": ["ПУБЛІЧНЕ АКЦІОНЕРНЕ ТОВАРИСТВО \"ЗАКРИТИЙ НЕДИВЕРСИФІКОВАНИЙ ВЕНЧУРНИЙ КОРПОРАТИВНИЙ ІНВЕСТИЦІЙНИЙ ФОНД \"ПРАЙД\"", "КОМПАНІЯ \"НП ХОЛДИНГС ЛІМІТЕД\""],
  "founders": "ПУБЛІЧНЕ АКЦІОНЕРНЕ ТОВАРИСТВО \"ЗАКРИТИЙ НЕДИВЕРСИФІКОВАНИЙ ВЕНЧУРНИЙ КОРПОРАТИВНИЙ ІНВЕСТИЦІЙНИЙ ФОНД \"ПРАЙД\" ; КОМПАНІЯ \"НП ХОЛДИНГС ЛІМІТЕД\"",
  "founderCodes": ["38901693"],
  "address": "03026, місто КИЇВ, місто КИЇВ, **** ******** , ******* *** , ****** *",
  "detailUrl": "https://clarity-project.info/edr/31316718",
  "source": "Ukraine EDR (Unified State Register)",
  "observedAt": "2026-08-15T10:56:50.388Z"
}
```

The most complete Ukrainian company register scraper available. It returns every firmographic field the EDR exposes for a company, plus ownership: founders with their codes, ultimate beneficial owners with nationality and control type, the director and authorized persons, charter capital and KVED activities. Look up any company by its EDRPOU code.

**📥 [Input](https://apify.com/scrapers_lat/ukraine-edr-companies-scraper/input-schema) · 📤 [Output](https://apify.com/scrapers_lat/ukraine-edr-companies-scraper/output-schema) · 💰 [Pricing](https://apify.com/scrapers_lat/ukraine-edr-companies-scraper/pricing) · ▶️ [Examples](https://apify.com/scrapers_lat/ukraine-edr-companies-scraper/examples)**

![Apify](https://img.shields.io/badge/Platform-Apify-1CE1CE?logo=apify\&logoColor=white)
![Coverage](https://img.shields.io/badge/Coverage-Ukraine-blue)
![Output](https://img.shields.io/badge/Output-JSON%20%7C%20CSV%20%7C%20Excel-orange)
![Billing](https://img.shields.io/badge/Billing-Pay%20per%20result-brightgreen)

### Table of contents

- [What it does](#what-it-does)
- [Use cases](#use-cases)
- [Quickstart](#quickstart)
- [Input reference](#input-reference)
- [Output reference](#output-reference)
- [Example output record](#example-output-record)
- [Run via API and CLI](#run-via-api-and-cli)
- [Fetch results](#fetch-results)
- [Billing and limits](#billing-and-limits)
- [FAQ and troubleshooting](#faq-and-troubleshooting)

### What it does

The actor looks up Ukrainian companies and organisations in the Unified State Register (EDR) by their EDRPOU code and writes one normalized record per company to the run's dataset. Each record carries the registered name, status, registration date and record number, charter capital, primary KVED activity code and a pipe-joined list of activities, the registered address, the director and authorized persons, the founders with their own EDRPOU codes where they are companies, and the ultimate beneficial owners with nationality and type of control. Missing source values are returned as `null`.

Values are in Ukrainian as published in the register. The `beneficialOwners` and `founders` string fields are compact, human-readable summaries; the parallel array fields (`beneficialOwnerNames`, `founderNames`, `founderCodes`) hold the same data for programmatic use.

The register front-end sits behind Cloudflare. The actor tries a plain HTTP request first and only falls back to a hosted solver when it hits a challenge, so you never configure a proxy or a browser.

### Use cases

- **KYB and onboarding checks on Ukrainian companies**: pull the EDR company profile, director and ultimate beneficial owners for a counterparty before you sign or pay.
- **AML and sanctions due diligence**: screen beneficial ownership and nationality, and turn on the AI risk note for a fast compliance red-flag read on each company.
- **Supplier and vendor verification**: confirm a Ukrainian supplier is an active registered legal entity with a matching EDRPOU code, status and address.
- **Beneficial ownership and UBO research**: map who ultimately controls a company, including corporate founders and their own EDRPOU codes.
- **Lead enrichment for sales and marketing**: append firmographics, KVED activity, charter capital and decision-maker names to a list of Ukrainian company codes.
- **Investigative journalism and OSINT**: trace ownership networks and directors across the Ukrainian state register.
- **Credit and counterparty risk scoring**: feed status, charter capital and ownership signals into your own risk model.
- **Register monitoring**: re-run a list of EDRPOU codes on a schedule to watch for status, director or ownership changes.

### Quickstart

Open the actor, paste this into the input, and press Run. It looks up Nova Poshta by its EDRPOU code.

```json
{
  "edrpous": ["31316718"],
  "maxCompanies": 10
}
```

Put one or more EDRPOU codes (the 8-digit Ukrainian company id) in `edrpous`. One run looks up every code in the list. Non-numeric characters are stripped, and codes are de-duplicated.

### Input reference

| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| `edrpous` | string\[] | yes | (none) | One or more EDRPOU codes (the 8-digit Ukrainian company or organisation id), for example `["31316718", "00032112"]`. One run looks up every code in the list. |
| `maxCompanies` | integer | no | `30` | Maximum number of companies to return in this run. |
| `withAiRisk` | boolean | no | `false` | Optional AI KYB risk note. Adds an AI-generated compliance red-flag summary to each company (`aiRiskLevel`, `aiRiskSummary`, `aiRiskFlags`). Billed only when a usable note is produced. Disabled for free-plan users. |

You must supply at least one valid EDRPOU code. Codes shorter than 6 or longer than 10 digits are discarded.

### Output reference

One dataset item per company. Types: `string`, `number`, `integer`, `string[]`, or `null` when the source value is absent.

| Field | Type | Description |
|---|---|---|
| `edrpou` | string | EDRPOU code of the company, unique per company. |
| `name` | string | Registered company name (Ukrainian). |
| `status` | string | Registration status, for example `Зареєстровано` (registered). |
| `registrationDate` | string | Registration date (`DD.MM.YYYY`). |
| `recordNumber` | string | State register record number. |
| `charterCapital` | number | Charter capital amount, or `null`. |
| `charterCapitalCurrency` | string | Currency of the charter capital, `UAH` when an amount is present, else `null`. |
| `primaryKvedCode` | string | Primary KVED (economic activity) code, for example `53.20`. |
| `primaryActivity` | string | Label of the primary KVED activity. |
| `activitiesCount` | integer | Total number of registered KVED activities. |
| `activities` | string | Up to the first 8 activities, each `code label`, joined with `|`, or `null`. |
| `directorName` | string | Director or head of the company, or `null`. |
| `authorizedPersons` | string\[] | Authorized persons on record. |
| `beneficialOwnersCount` | integer | Number of ultimate beneficial owners. |
| `topBeneficialOwner` | string | First listed ultimate beneficial owner, or `null`. |
| `beneficialOwnerNames` | string\[] | All ultimate beneficial owner names. |
| `beneficialOwnerNationalities` | string\[] | Nationalities of the beneficial owners. |
| `beneficialOwners` | string | Human-readable summary of each owner with nationality and control type, joined with `;`. Separators inside each owner are em dashes in the raw data. `null` when none. |
| `foundersCount` | integer | Number of founders. |
| `founderNames` | string\[] | Founder names, up to the first 25. |
| `founders` | string | Founder names joined with `;`, or `null`. |
| `founderCodes` | string\[] | EDRPOU codes of founders that are themselves registered companies. |
| `address` | string | Registered address (may be partly masked by the source). |
| `detailUrl` | string | Direct link to the company page. |
| `aiRiskLevel` | string | AI KYB risk level (`low`, `medium` or `high`). Present only when `withAiRisk` is on; `null` otherwise. |
| `aiRiskSummary` | string | Concise AI compliance red-flag summary interpreting status, ownership, sanctions/PEP hints and activity. Present only when `withAiRisk` is on. |
| `aiRiskFlags` | string\[] | Short AI-identified red flags. Present only when `withAiRisk` is on. |
| `source` | string | Always `Ukraine EDR (Unified State Register)`. |
| `observedAt` | string | ISO 8601 timestamp of when the record was collected. |
| `error` | string | Present only on a failed run; a single item with this field is written instead of a company. |

### Example output record

Real record from a live run (input `{"edrpous":["00032112"],"maxCompanies":10}`), the state-owned Ukreximbank:

```json
{
  "edrpou": "00032112",
  "name": "АТ \"УКРЕКСІМБАНК\"",
  "status": "Зареєстровано",
  "registrationDate": "23.01.1992",
  "recordNumber": "10681200000001397",
  "charterCapital": 45570041124.24,
  "charterCapitalCurrency": "UAH",
  "primaryKvedCode": "64.19",
  "primaryActivity": "Інші види грошового посередництва",
  "activitiesCount": 1,
  "activities": "64.19 Інші види грошового посередництва",
  "directorName": "Пономаренко Віктор Вікторович",
  "authorizedPersons": ["Пономаренко Віктор Вікторович"],
  "beneficialOwnersCount": 0,
  "topBeneficialOwner": null,
  "beneficialOwnerNames": [],
  "beneficialOwnerNationalities": [],
  "beneficialOwners": null,
  "foundersCount": 1,
  "founderNames": ["ДЕРЖАВА В ОСОБІ КАБІНЕТУ МІНІСТРІВ УКРАЇНИ"],
  "founders": "ДЕРЖАВА В ОСОБІ КАБІНЕТУ МІНІСТРІВ УКРАЇНИ",
  "founderCodes": ["00031101"],
  "address": "03150, місто КИЇВ, місто КИЇВ, ****** ********** , ******* ***",
  "detailUrl": "https://clarity-project.info/edr/00032112",
  "source": "Ukraine EDR (Unified State Register)",
  "observedAt": "2026-08-15T10:57:06.988Z"
}
```

### Run via API and CLI

Start a run and wait for it to finish, then read the dataset. Replace `<TOKEN>` with your Apify API token.

Run synchronously and get dataset items in one call:

```bash
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~ukraine-edr-companies-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"edrpous":["31316718","00032112"],"maxCompanies":10}'
```

Start a run asynchronously:

```bash
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~ukraine-edr-companies-scraper/runs?token=<TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"edrpous":["31316718"],"maxCompanies":100}'
```

Apify CLI:

```bash
apify call scrapers_lat/ukraine-edr-companies-scraper \
  --input '{"edrpous":["00032112"]}'
```

### Fetch results

Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing `format`:

```bash
## JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"

## CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"

## Paginate large datasets
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
```

`<DATASET_ID>` is returned as `defaultDatasetId` in the run object. Use `offset` and `limit` to page through large result sets. `clean=true` drops empty and internal fields.

### Billing and limits

- **Pay per result.** You are charged per company returned (`result` event). See the [pricing tab](https://apify.com/scrapers_lat/ukraine-edr-companies-scraper/pricing) for the current per-result price.
- **AI KYB risk note (optional add-on).** Turn on `withAiRisk` to add an AI compliance red-flag summary to each company (`ai_risk` event, $0.012). It is opt-in and off by default, disabled for free-plan users, and billed only when a usable AI note is produced.
- **No charge on failure.** If a code is not found or a run errors, no billable result is written for it. The first error in a run writes a single unbilled `error` item.
- **Spend cap respected.** Set `maxTotalChargeUsd` on the run; once reached, the actor stops emitting and charging further billable results.
- **Free Apify plans** are capped at 10 companies per run. Upgrade for a higher `maxCompanies`.
- **Cloudflare fallback.** The source is behind Cloudflare. The actor requests directly first and only routes through a hosted solver when challenged, which adds time for those companies.

### FAQ and troubleshooting

**A run returned only an `error` record. Why?**
You supplied no valid EDRPOU code, or the source could not be reached. Provide at least one 8-digit code. Not-found codes are skipped and are not charged.

**What is an EDRPOU code?**
It is the unique identification number of a Ukrainian company or organisation, similar to a company registration number. It is the only input this actor needs.

**Why is some of the address masked with asterisks?**
The source masks parts of the registered address for some records. The actor returns exactly what the source shows and never invents the hidden characters.

**How do I get the beneficial owners in a structured form?**
Use the array fields `beneficialOwnerNames` and `beneficialOwnerNationalities`, and `beneficialOwnersCount`. The `beneficialOwners` string is a compact one-line summary of the same data.

**The text is in Ukrainian. Can I get it in English?**
The register publishes in Ukrainian, so values are returned as published. Translate downstream if you need English.

**Is this an official government tool?**
No. This actor is independent and has no affiliation with the Ukrainian state register or its front-ends. It reads only publicly available company data. Use it in accordance with the source terms.

### Related scrapers

- [Estonia Business Register Scraper](https://apify.com/scrapers_lat/estonia-business-register-scraper): Estonian companies with officers and VAT.
- [Czech ARES Companies Scraper](https://apify.com/scrapers_lat/czech-ares-companies-scraper): Czech company register records.
- [Bulgaria Commercial Register Scraper](https://apify.com/scrapers_lat/bulgaria-commercial-register-scraper): Bulgarian companies and owners.
- [GLEIF LEI Company Records Scraper](https://apify.com/scrapers_lat/gleif-lei-company-records-scraper): Global legal entity identifiers and parents.
- [Belgium KBO Companies Scraper](https://apify.com/scrapers_lat/belgium-kbo-companies-scraper): Belgian company register records.

### More scrapers at scrapers.lat

Built and maintained by [scrapers.lat](https://scrapers.lat), where we publish scrapers for US, UK, European and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at [scrapers.lat](https://scrapers.lat).

***

> Independent tool, not affiliated with the Ukrainian state register or its front-ends. Accesses only publicly available company data. Use in accordance with the source terms.

# Actor input Schema

## `edrpous` (type: `array`):

One or more EDRPOU codes (the 8-digit Ukrainian company/organisation identification number). One run looks up every code in the list. Example: 31316718, 00032112.

## `maxCompanies` (type: `integer`):

Maximum number of companies to return in this run.

## `withAiRisk` (type: `boolean`):

Use AI to add a concise KYB compliance red-flag summary to each company (interprets status, beneficial owners, sanctions/PEP hints and activity into a buyer-facing risk note). Billed only when a usable AI note is produced. Disabled for free-plan users.

## Actor input object example

```json
{
  "edrpous": [
    "31316718",
    "00032112"
  ],
  "maxCompanies": 30,
  "withAiRisk": 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 = {
    "edrpous": [
        "31316718"
    ],
    "maxCompanies": 30
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapers_lat/ukraine-edr-companies-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 = {
    "edrpous": ["31316718"],
    "maxCompanies": 30,
}

# Run the Actor and wait for it to finish
run = client.actor("scrapers_lat/ukraine-edr-companies-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 '{
  "edrpous": [
    "31316718"
  ],
  "maxCompanies": 30
}' |
apify call scrapers_lat/ukraine-edr-companies-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapers_lat/ukraine-edr-companies-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/8wwsrVUK2Yx5PNu5F/builds/6ZUgIiSyjSwWpcZaK/openapi.json
