# Poland KRS Company Registry + Monitoring (`nerolabs/poland-krs-monitor`) Actor

Look up and monitor Polish companies on the official National Court Register (KRS): identity, address, share capital, management board, and status flags like suspension, with a recurring monitor mode that flags new registry entries.

- **URL**: https://apify.com/nerolabs/poland-krs-monitor.md
- **Developed by:** [Adam Pearce](https://apify.com/nerolabs) (community)
- **Categories:** Business, Automation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 company record returneds

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/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

### What does Poland KRS Company Registry + Monitoring do?

Need to verify a Polish counterparty, or know the moment something changes on their registry record? This Actor looks up companies on Poland's official National Court Register (Krajowy Rejestr Sadowy, KRS) and returns structured data: legal form, tax IDs, registered address, share capital, management board, and whether the business is currently suspended. Point it at one KRS number for a single lookup, a list for bulk checks, or turn on Monitor mode to schedule it daily or weekly and get flagged only when something on a watched company's record actually changes.

Data comes straight from the Ministry of Justice's own Open API (api-krs.ms.gov.pl), not a scrape of the search portal, so results are accurate and the source can't silently break the way an HTML scraper would. Run it via the Apify Console, the API, or on a schedule, and export results as JSON, CSV, or Excel.

### Why use this Actor?

- **KYB and compliance teams** verifying a Polish counterparty before onboarding: legal form, registered address, capital, and who's actually on the management board, in one call.
- **Sales and lead-gen teams** enriching a list of Polish companies with structured registry data instead of manually searching KRS one company at a time.
- **Anyone doing ongoing due diligence**: Monitor mode watches a list of companies and tells you the moment a new registry entry is recorded or a company's suspension status flips, so you're not re-checking the same unchanged records by hand every week.

### How to use Poland KRS Company Registry + Monitoring

1. Click **Try for free** or **Run** on the Actor page.
2. Enter a single `krsNumber` for a quick lookup, or a list of `krsNumbers` for bulk checks.
3. Choose the registry type: `P` for companies (entrepreneurs), `S` for associations and foundations.
4. To track companies over time, turn on `monitorMode`, keep the same `krsNumbers` and `watchlistId`, and schedule the Actor to run daily or weekly. Each run only charges for what actually changed.
5. View results in the Console table, or pull them via the API/dataset export.

### Input

See the Input tab for the full schema. Key fields:

| Field | Description |
|---|---|
| `krsNumber` | A single 10-digit KRS number to look up. |
| `krsNumbers` | A list of KRS numbers, for bulk lookup or Monitor mode. |
| `registry` | `P` (companies) or `S` (associations/foundations). Default `P`. |
| `monitorMode` | When true, compares against the last run and only reports what changed. |
| `watchlistId` | Keeps separate Monitor mode histories if you run more than one watchlist. |

### Output

Each result includes the company's identity, address, capital, management board, and status. Example (a single record, trimmed):

```json
{
  "krsNumber": "0000033014",
  "registrationStatus": "active",
  "name": "\"CINEMA GROUP\" SPOLKA Z OGRANICZONA ODPOWIEDZIALNOSCIA",
  "legalForm": "SPOLKA Z OGRANICZONA ODPOWIEDZIALNOSCIA",
  "nip": "5211071844",
  "regon": "01169939400000",
  "registrationDate": "02.08.2001",
  "lastEntryNumber": 48,
  "lastEntryDate": "14.07.2026",
  "address": "UL. WIERTNICZA 99, 02-952, WARSZAWA, POLSKA",
  "capitalAmount": "50400,00",
  "capitalCurrency": "PLN",
  "managementBoard": [{ "name": "S. T. S.", "role": "PREZES ZARZADU" }],
  "suspended": true,
  "suspensionNote": "Business activity suspended from 31.03.2026, no resumption date on file yet."
}
```

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

### Data table

| Field | What it is |
|---|---|
| `name`, `legalForm` | Registered company name and legal form. |
| `nip`, `regon` | Polish tax and statistical identifiers. |
| `registrationDate` | Date the entity was first registered in KRS. |
| `lastEntryNumber`, `lastEntryDate` | The registry's own change counter, increments on every update. |
| `address` | Registered office address. |
| `capitalAmount`, `capitalCurrency` | Share capital, where applicable to the legal form. |
| `managementBoard` | Names (GDPR-anonymized by the source itself, e.g. "S. T. S.") and roles. |
| `suspended`, `suspensionNote` | Whether business activity is currently suspended, and since when. |
| `changeDetected`, `changeSummary` | Monitor mode only: what changed since the last check. |

### Pricing / Cost estimation

Pay-per-event pricing, no subscription. A single lookup or bulk check costs $0.01 per company returned. Watching 20 companies daily in Monitor mode costs roughly $0.06 to $1/month depending on how often anything actually changes ($0.002 per no-change confirmation, $0.05 per real change caught). There's no charge for a company that isn't found on the register.

### Tips

- Bulk lookups (`krsNumbers`) are faster than repeated single-number runs, since they share one Actor start.
- For ongoing monitoring, schedule the Actor (Apify's built-in Schedules) rather than running it manually. Monitor mode is designed for exactly that.
- Keep `watchlistId` consistent across scheduled runs for the same list, changing it starts a fresh watch history.

### FAQ

**Does this work for associations and foundations, not just companies?**
Yes, set `registry` to `S`. Company (entrepreneur) lookups use `P`, the default.

**Why is the management board listed with initials instead of full names?**
That's not a limitation of this Actor, the Ministry of Justice's own API returns board member names GDPR-anonymized (first letters only) on the public Open API tier. This is reported exactly as the source provides it.

**What does "suspended" actually mean here?**
It reflects the KRS registry's own suspension/resumption record (dzial 6). A company can suspend and resume business activity multiple times; this field reflects the most recent entry only.

**A company isn't found. Does that mean it doesn't exist?**
Not necessarily. It could mean the number was never valid, it's registered under the other registry type (`P` vs `S`), or it's been deregistered. The register itself doesn't expose a reason code for a missing entry, so this Actor reports it honestly as "not found" rather than guessing why.

If this Actor saved you a manual KRS lookup, a review on the Actor page helps a lot and helps decide what to build next. Found a bug or have a request? Use the Issues tab, replies are personal, not automated.

# Actor input Schema

## `krsNumber` (type: `string`):

Exact 10-digit National Court Register number, e.g. 0000033014. Use this for a single-record lookup.

## `krsNumbers` (type: `array`):

A list of exact 10-digit KRS numbers. Required for Monitor mode (that's what gives each record a stable identity to track over time). Also the fastest way to check many known companies in one run.

## `registry` (type: `string`):

'P' covers entrepreneurs (companies), 'S' covers associations, foundations, and other organizations. Applies to every number in this run.

## `monitorMode` (type: `boolean`):

When true, the Actor loads the last registry-entry number it saw for each KRS number, compares against what the register says now, and returns only the change (or a cheap no-change confirmation). Schedule this Actor to run daily or weekly with the same krsNumbers and watchlistId for ongoing KYB monitoring. Requires krsNumber and/or krsNumbers.

## `watchlistId` (type: `string`):

Only needed if you're running more than one independent monitored watchlist from the same Apify account (e.g. one per client) and want their delta history kept separate. Leave as default otherwise.

## Actor input object example

```json
{
  "krsNumber": "0000033014",
  "krsNumbers": [],
  "registry": "P",
  "monitorMode": false,
  "watchlistId": "default"
}
```

# 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 = {
    "krsNumber": "0000033014"
};

// Run the Actor and wait for it to finish
const run = await client.actor("nerolabs/poland-krs-monitor").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 = { "krsNumber": "0000033014" }

# Run the Actor and wait for it to finish
run = client.actor("nerolabs/poland-krs-monitor").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 '{
  "krsNumber": "0000033014"
}' |
apify call nerolabs/poland-krs-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nerolabs/poland-krs-monitor"
        }
    }
}

```

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/pa5fPhfLcUhEUscAw/builds/5AHcCf8tiyno7ZIOb/openapi.json
