# Poland KYB Risk Check - Company, UBO & Insolvency (`regdata/poland-kyb-check`) Actor

Run a complete Polish KYB check from one NIP or KRS. Returns official company identity, beneficial owners from CRBR, and insolvency proceedings screened against the company AND every beneficial owner. One normalized verdict. $0.05 per completed check, plus component registry fees.

- **URL**: https://apify.com/regdata/poland-kyb-check.md
- **Developed by:** [getregdata](https://apify.com/regdata) (community)
- **Categories:** Lead generation, Agents, MCP servers
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $50.00 / 1,000 completed kyb check (orchestration fee)s

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## Poland KYB Risk Check - Company + Beneficial Owners + Insolvency in One Call

Give it a Polish **NIP** or **KRS**. Get back one finished KYB check:

- **Who the company is** - official identity from the state business register (REGON): legal name, KRS, legal form, registered address, registration date, and whether it still exists.
- **Who is actually behind it** - beneficial owners from the official UBO register (CRBR): names, citizenship, and the nature of their control.
- **Whether anyone in that structure is in the national debtor register** - KRZ, searched against **the company AND every single beneficial owner**, across *both* of its registers: the public register and the court announcements (obwieszczenia), where live bankruptcies are actually published.

One normalized verdict: `clear`, `findings`, `not_found`, or `partial`.

**Pricing:** a **$0.05 orchestration fee** per completed check - never charged for an incomplete or
not-found one - **plus the component registry lookups, which bill on your account as usual**.
Budget roughly **$0.14 per company**, plus about **$0.05 per beneficial owner screened**.
See [What a check costs](#what-a-check-costs).

### Why screen the beneficial owners and not just the company?

Because a clean company can be owned by someone in personal bankruptcy - and that is exactly the risk a KYB check exists to find. A company-only insolvency lookup will never see it.

Running that cascade by hand is awkward: the debtor register cannot search a person by name, only by their **PESEL**. You have to pull the UBO register first to learn each owner's PESEL, then run a separate debtor search for every one of them. This actor does that for you, in one call.

Because every lookup is keyed on an exact identifier - NIP for companies, PESEL for people - there is **no fuzzy name matching anywhere in the chain**, and therefore no false-positive matches on common surnames.

### What you get back

```json
{
  "query": "1080004850",
  "verdict": "findings",
  "charged": true,
  "riskFlags": ["company-in-debtor-registry", "company-bankruptcy-or-restructuring"],
  "company": {
    "name": "GETIN NOBLE BANK SPÓŁKA AKCYJNA W UPADŁOŚCI",
    "nip": "1080004850",
    "krs": "0000304735",
    "regon": "141334039",
    "legalForm": "116 - SPÓŁKI AKCYJNE",
    "address": "Rondo Ignacego Daszyńskiego 2C 00-843 Warszawa",
    "registrationDate": "2008-04-25",
    "active": true
  },
  "beneficialOwners": [
    {
      "name": "MIROSŁAW MOZDŻEŃ",
      "pesel": "73052511914",
      "citizenship": "POLSKA",
      "natureOfControl": ["inna osoba fizyczna"],
      "debtorRegistry": { "found": false, "entries": [] }
    }
  ],
  "debtorRegistry": {
    "found": true,
    "entries": [
      {
        "caseSignature": "WA1M/GUp/44/2023",
        "kind": "bankruptcy",
        "proceedingType": "Obwieszczenie dokumentu dotyczącego składnika masy upadłości",
        "court": "Sąd Rejonowy dla m.st. Warszawy w Warszawie",
        "startedAt": "2024-09-16",
        "role": null,
        "sourceUrl": "https://krz.ms.gov.pl/"
      }
    ]
  },
  "coverage": { "identity": "OK", "ubo": "OK", "insolvency": "OK", "uboScreened": 2 }
}
```

### What do the verdicts mean?

| verdict | meaning | charged |
|---|---|---|
| `clear` | Every source answered. No insolvency proceedings against the company or any beneficial owner. | yes |
| `findings` | Every source answered, and something needs a human: see `riskFlags`. | yes |
| `not_found` | No company is registered under that identifier (usually a typo). | **no** |
| `partial` | A source registry was unreachable, so the check is incomplete. Re-run it. | **no** |

"Charged" here means the **$0.05 orchestration fee**. Any component lookups that did run still bill
normally - so a `partial` check is not free, it just costs less than a complete one.

#### Risk flags

| flag | meaning |
|---|---|
| `company-in-debtor-registry` | The company appears somewhere in KRZ. **This alone does not mean it is insolvent** - see below. |
| `company-bankruptcy-or-restructuring` | A bankruptcy or restructuring case is on record for the company. |
| `ubo-in-debtor-registry` | A **beneficial owner** appears somewhere in KRZ. |
| `ubo-bankruptcy-or-restructuring` | A bankruptcy or restructuring case is on record for a beneficial owner. |
| `company-not-active` | The company has been struck off the business register. |
| `ubo-register-discrepancy-reported` | Someone has formally reported a discrepancy in the UBO filing. |

Each entry is classified by its court case signature (`WA1M/GUp/44/2023` -> `GUp` -> bankruptcy):

| `kind` | meaning |
|---|---|
| `bankruptcy` | Bankruptcy proceeding (GUp) |
| `bankruptcy-petition` | Petition to declare bankruptcy (GU) |
| `restructuring` | Restructuring proceeding (GR\*) |
| `discontinued-enforcement` | Enforcement action that was discontinued (Km / GKm) |
| `business-ban` | Ban on conducting business activity |
| `unknown` | The registry's detail lookup was unavailable - review manually |

#### Why we report the entry rather than declare "insolvent"

**KRZ does not disclose whether the entity is the debtor or a creditor in a proceeding** (the role
field is never populated). A large bank, for example, appears in enforcement cases as the *creditor*.
So this actor reports what the registry says - the case type, its signature, its status - and leaves
the legal conclusion to you. `role` is always returned as `null` rather than guessed.

### How do I run it?

Paste NIP or KRS numbers into **Company identifiers** and run. That's it - no API key, no login, nothing to configure.

#### JavaScript

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

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('regdata/poland-kyb-check').call({
    identifiers: ['6770065406', '1080004850'],
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const check of items) {
    console.log(check.query, check.verdict, check.riskFlags);
}
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient('YOUR_APIFY_TOKEN')

run = client.actor('regdata/poland-kyb-check').call(run_input={
    'identifiers': ['6770065406', '1080004850'],
})

for check in client.dataset(run['defaultDatasetId']).iterate_items():
    print(check['query'], check['verdict'], check['riskFlags'])
```

### What a check costs

This actor is an orchestrator: it calls three separate registry actors **on your account**, so their
normal fees appear on your Apify invoice alongside the orchestration fee. Nothing is hidden and
nothing is marked up - you pay the same component prices you would pay running them yourself.

| line item | price | how often |
|---|---|---|
| Orchestration fee (this actor) | **$0.05** | once per **completed** check |
| REGON identity | $0.004 | once per company |
| CRBR beneficial owners | $0.025 per run + $0.008 per company | one run per batch |
| KRZ insolvency search | **$0.025 per search** | **2 per company + 2 per beneficial owner** |

KRZ is the variable part, and it is why cost scales with ownership complexity: each company needs
two searches (public register **and** court announcements), and so does each beneficial owner. A
company with a hit needs one extra search to classify the case.

| example | all-in |
|---|---|
| Company with no beneficial owners on file | ~$0.14 |
| Company with 2 beneficial owners | ~$0.24 |
| Company with 6 beneficial owners | ~$0.44 |

Prices shown are current list prices for a free-plan account; paid plans are the same or lower.

**Running a large batch?** Cost is per company, with no batch discount, and a company with many
beneficial owners costs proportionally more. If you only need raw rows rather than a verdict, the
component actors are cheaper used directly - see [Related actors](#related-actors).

### FAQ

**Does this cover PEP screening or sanctions?**
No. This check covers company identity, beneficial ownership, and insolvency. It does not screen for politically exposed persons, sanctions, or adverse media, and it does not claim to.

**What happens if a government registry is down?**
You get a `partial` verdict, an explanation of which source was unreachable, and **no orchestration fee**. Component lookups that already ran still bill, so an incomplete check is cheaper but not free. If three checks in a row come back incomplete, the run stops early and tells you to try again later - so a registry outage can never quietly burn through a long list.

**Does a KRZ hit mean the company is bankrupt?**
No. It means the company appears in the register. Check the `kind`: only `bankruptcy`,
`bankruptcy-petition` and `restructuring` indicate insolvency. A `discontinued-enforcement` entry is
often the company appearing as a *creditor* whose enforcement action was closed.

**Is a `clear` verdict the same as "no data found"?**
No, and the distinction is the point. `clear` means the registers were reached and returned no proceedings. If a register cannot be reached, you get `partial`, never `clear`.

**Are the beneficial owners the same as the directors?**
No. Directors are the people who run the company; beneficial owners are the people who ultimately own or control it. This actor returns beneficial owners, from the official UBO register.

**Why is a PESEL included?**
It is the identifier the debtor register requires to screen a person, and it is published in the public UBO register. It is what makes the ownership screening exact rather than name-based.

**Do you support other countries?**
This actor is Poland-only. See the related actors below for other jurisdictions.

### Related actors

Part of a suite of official government registry actors - **no public API to build or maintain**, pay per result, nothing to configure.

| Country | Actors |
|---|---|
| Poland | [BDO](https://apify.com/regdata/bdo-waste-registry-scraper) · [CRBR](https://apify.com/regdata/crbr-beneficial-owners-scraper) · [KRS (financials)](https://apify.com/regdata/poland-krs-financial-scraper) · [EKW](https://apify.com/regdata/ekw-ksiegi-wieczyste-scraper) · [KNF](https://apify.com/regdata/knf-registry-scraper) · [KRS (board)](https://apify.com/regdata/krs-fullnames-scraper) · [KRZ](https://apify.com/regdata/krz-debtor-scraper) · [MSiG](https://apify.com/regdata/msig-scraper) · **KYB check (this actor)** · [PEP (Sejm)](https://apify.com/regdata/poland-parliamentary-pep-scraper) · [REGON (sites)](https://apify.com/regdata/polish-premises-prospector) · [REGON](https://apify.com/regdata/polish-regon-scraper) · [UOKiK](https://apify.com/regdata/uokik-clauses-scraper) |
| Germany | [Insolvenzbekanntmachungen](https://apify.com/regdata/germany-insolvency-scraper) · [Handelsregister](https://apify.com/regdata/germany-handelsregister-scraper) |
| Spain | [BORME](https://apify.com/regdata/borme-corporate-acts-scraper) · [Registro Mercantil](https://apify.com/regdata/spain-company-directory-scraper) · [Registro Público Concursal](https://apify.com/regdata/spain-concursal-scraper) |
| Italy | [INI-PEC](https://apify.com/regdata/italy-pec-lookup) · [Registro Imprese](https://apify.com/regdata/italy-registro-imprese-scraper) |
| Austria | [Ediktsdatei](https://apify.com/regdata/austria-ediktsdatei-scraper) · [WKO](https://apify.com/regdata/wko-business-directory-scraper) |
| France | [Societe.com](https://apify.com/regdata/societe-com-scraper) |
| Belgium | [KBO / BCE](https://apify.com/regdata/belgium-kbo-company-scraper) |
| Czechia | [ISIR](https://apify.com/regdata/czech-isir-insolvency-scraper) |
| Slovakia | [RPVS](https://apify.com/regdata/slovakia-rpvs-ubo-scraper) |
| Cyprus | [DRCOR](https://apify.com/regdata/cyprus-drcor-company-scraper) |
| Ireland | [CRO](https://apify.com/regdata/ireland-cro-company-scraper) |
| Portugal | [Publicações MJ](https://apify.com/regdata/portugal-corporate-acts-scraper) |
| Nigeria | [CAC](https://apify.com/regdata/nigeria-cac-company-scraper) |
| Colombia | [RUES](https://apify.com/regdata/colombia-rues-company-scraper) |
| USA | [California SoS](https://apify.com/regdata/california-sos-business-scraper) · [California UCC](https://apify.com/regdata/california-ucc-lien-scraper) |
| UAE | [ADGM](https://apify.com/regdata/uae-adgm-public-register-scraper) |
| Global | [Adverse media](https://apify.com/regdata/adverse-media-screener) |

**Common combinations:** company register -> [UBO](https://apify.com/regdata/crbr-beneficial-owners-scraper) -> [insolvency/debtors](https://apify.com/regdata/krz-debtor-scraper) -> [adverse media](https://apify.com/regdata/adverse-media-screener) is the standard KYB/onboarding chain.

For Poland that whole chain is one call: [Poland KYB Risk Check](https://apify.com/regdata/poland-kyb-check) takes a NIP or KRS and returns identity, beneficial owners and insolvency - screened against the company **and every beneficial owner** - as a single verdict. The component registry lookups it runs bill as usual, plus a small orchestration fee.

> Full suite: [apify.com/regdata](https://apify.com/regdata) · Callable from any MCP client via [mcp.apify.com](https://mcp.apify.com)

### Data sources & compliance

All three sources are **official, public** Polish government registers:

- REGON - Statistics Poland (GUS) business register
- CRBR - Central Register of Beneficial Owners, Ministry of Finance
- KRZ - National Register of Debtors, Ministry of Justice

The data is published by the state for public inspection. Personal data returned (names, PESEL) comes from these public registers and is intended for KYC/AML, due-diligence and credit-risk purposes. You are responsible for processing it lawfully under GDPR - in particular for having a lawful basis, and for not retaining it longer than your purpose requires.

# Actor input Schema

## `identifiers` (type: `array`):

The Polish companies to check, by NIP (10 digits) or KRS (10 digits, leading zeros). Each identifier returns one complete KYB check: identity, beneficial owners, and insolvency proceedings against the company and every beneficial owner.

## `krzConcurrency` (type: `integer`):

How many beneficial owners to screen against the insolvency register in parallel. Higher is faster; lower is gentler on the registry. Leave at the default unless a check is timing out.

## Actor input object example

```json
{
  "identifiers": [
    "6770065406",
    "5252248481"
  ],
  "krzConcurrency": 4
}
```

# Actor output Schema

## `checks` (type: `string`):

One check record per requested company in the default dataset.

# 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 = {
    "identifiers": [
        "6770065406"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("regdata/poland-kyb-check").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 = { "identifiers": ["6770065406"] }

# Run the Actor and wait for it to finish
run = client.actor("regdata/poland-kyb-check").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "identifiers": [
    "6770065406"
  ]
}' |
apify call regdata/poland-kyb-check --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=regdata/poland-kyb-check",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/4Pd1vnWOaqm8ZmYUR/builds/jekjS7fxiSHe9k5Mz/openapi.json
