# Poland KRS Scraper (`aurenic/poland-krs-scraper`) Actor

Extract Polish company data from the official Ministry of Justice KRS registry. Name, NIP, REGON, address, share capital, management board, PKD activities, and status. No API key, no login.

- **URL**: https://apify.com/aurenic/poland-krs-scraper.md
- **Developed by:** [Aurenic](https://apify.com/aurenic) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 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

## Poland KRS Scraper

Extract Polish company data from the official Ministry of Justice KRS registry. Name, NIP, REGON, address, share capital, management board, PKD activities, and status. No API key, no login.

### What does Poland KRS Scraper do?

Look up any company in Poland's National Court Register (**Krajowy Rejestr Sądowy**) through the Ministry of Justice's official Open API at `api-krs.ms.gov.pl`.

For every KRS number you get the complete registry record:

- **Identity** — name, legal form, NIP, REGON, KRS number
- **Address** — full registered office
- **Capital** — share capital amount and currency
- **Management board** — board members with roles and representation mode
- **Activities** — PKD industry codes with descriptions
- **Status** — active, liquidation, bankruptcy, or suspended

The API is **free, public, and keyless** — no registration, no API key, no terms acceptance\[citation:1]\[citation:7].

### Output fields

| Field | Description |
|---|---|
| krs | 10-digit KRS number |
| registry | `P` (companies) or `S` (associations) |
| name | Registered company name |
| legalForm | Legal form (sp. z o.o., S.A., etc.) |
| nip | Polish tax identifier |
| regon | Polish statistical identifier |
| registrationDate | Date of first registration |
| lastEntryNumber / lastEntryDate | Most recent entry number and date |
| address / city / postalCode / country | Registered office |
| shareCapital / shareCapitalCurrency | Share capital |
| board | Array of `{ name, role, isMasked }` |
| representationMode | How the company can be legally represented |
| pkdCodes | Array of `{ code, description }` |
| primaryPkd | Primary PKD activity |
| liquidation / bankruptcy / activitySuspended | Status flags |
| status | Computed status: `active`, `liquidation`, `bankruptcy`, `suspended` |
| sourceUrl | Ministry of Justice search portal |

**Note on board member names:** Since the 2023 RODO amendment, the official KRS API returns personal names in **masked form** (e.g. `L******`)\[citation:1]\[citation:17]. This actor passes the masked value through as-is. For complete names, a PDF extract from the government portal is required — a separate actor covers that\[citation:15]\[citation:20].

### Who is it for?

- **KYB and AML onboarding** teams verifying Polish counterparties
- **B2B sales teams** enriching Polish prospect lists with registry data
- **Compliance teams** checking share capital, board composition, and status
- **Procurement teams** validating supplier legal form and PKD activities
- **Due diligence analysts** screening for liquidation, bankruptcy, and suspended activity
- **Data journalists** investigating Polish business structures

### Pricing

**$0.80 per 1,000 results.** No subscription.

| Results | Cost |
|---|---|
| 100 | $0.08 |
| 1,000 | $0.80 |
| 10,000 | $8.00 |

### How to use it

1. Enter one or more **KRS Numbers** (10 digits, zeros auto-padded).
2. Select **Registry Type** — P for companies, S for associations.
3. Optionally enable **Full Extract** for historical entry changes.
4. Click **Start**.

### Output example

```json
{
  "recordType": "company",
  "krs": "0000033014",
  "registry": "P",
  "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",
  "city": "WARSZAWA",
  "postalCode": "02-952",
  "country": "POLSKA",
  "shareCapital": 50400,
  "shareCapitalCurrency": "PLN",
  "board": [
    { "name": "S. T. S.", "role": "PREZES ZARZADU", "isMasked": true }
  ],
  "representationMode": "Dwaj czlonkowie zarzadu dzialajacy lacznie",
  "pkdCodes": [
    { "code": "5911Z", "description": "Dzialalnosc zwiazana z produkcja filmow" }
  ],
  "liquidation": false,
  "bankruptcy": false,
  "activitySuspended": true,
  "status": "suspended",
  "sourceUrl": "https://wyszukiwarka-krs.ms.gov.pl/",
  "scrapedAt": "2026-09-25T12:00:00.000Z"
}
```

### Technical details

- **Official Ministry of Justice API** — `https://api-krs.ms.gov.pl/api/krs`\[citation:1]\[citation:7].
- **Endpoints** — `GET /OdpisAktualny/{krs}?rejestr={P|S}&format=json` and `GET /OdpisPelny/{krs}`\[citation:6].
- **Rate limit** — approximately 2 requests/second. The actor defaults to 500ms between requests and backs off on 429\[citation:1].
- **Auto-fallback registry** — if a KRS number isn't found in P, the actor retries with S automatically\[citation:6].
- **No browser, no proxy, no API key** — pure JSON REST API.
- **Field flattening** — the API returns deeply nested XML/JSON under `odpis.dane.dzial1` through `dzial6`. The actor flattens to a single wide record.

### Known limits

- **Board member names are masked** in the official API responses (e.g. `L******`) due to the 2023 RODO amendment\[citation:1]\[citation:17]. Use a PDF-extract actor for full names\[citation:15]\[citation:20].
- **Rate limit is ~2 req/s.** For 1,000 companies, expect ~8 minutes.
- **Financial statements are not in this API.** Revenue and profit live in eKRS (separate system)\[citation:20].
- **KRS numbers must be 10 digits.** The actor auto-pads leading zeros.
- **Some entities have no PKD codes or board data** — newly registered companies may have incomplete records.

### FAQ

**Do I need an API key?** No. The Ministry of Justice API is fully keyless and free\[citation:1]\[citation:7].

**Do I need a proxy?** No. Datacenter IPs work at the documented rate limit.

**What's the difference between P and S registry?** P is for business entities (sp. z o.o., S.A., etc.). S is for associations and foundations.

**Why are board names masked?** RODO (Polish GDPR implementation) anonymizes personal data in API responses since 2023\[citation:17]. The actor cannot unmask them — that requires downloading the public PDF extract\[citation:15].

**How do I find a KRS number?** Search the company on `wyszukiwarka-krs.ms.gov.pl`. The KRS number is displayed with the company record.

**How do I export data?** After a run, go to Storage → Export as JSON, CSV, Excel.

### Support

Open an issue on the Actor's page for bugs or feature requests.

# Actor input Schema

## `mode` (type: `string`):

What to fetch.

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

10-digit KRS numbers (zeros are auto-padded). Example: 0000033014 for CINEMA GROUP.

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

P = Przedsiębiorcy (business entities, default). S = Stowarzyszenia (associations, foundations).

## `includeFull` (type: `boolean`):

Return the full historical extract (OdpisPelny) with all entry changes, instead of the current state only.

## `autoFallbackRegistry` (type: `boolean`):

If the KRS number is not found in the selected registry, retry the other one automatically.

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

Hard cap on records per run.

## `requestDelayMs` (type: `integer`):

Delay between requests. Ministry of Justice API allows ~2 req/s. Default 500ms matches that.

## `includeRaw` (type: `boolean`):

Include the full unmodified API response under a `raw` field. Inflates record size by ~50× — only enable for debugging.

## Actor input object example

```json
{
  "mode": "lookup",
  "krsNumbers": [
    "0000033014"
  ],
  "registry": "P",
  "includeFull": false,
  "autoFallbackRegistry": true,
  "maxItems": 500,
  "requestDelayMs": 500,
  "includeRaw": 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 = {
    "krsNumbers": [
        "0000033014"
    ]
};

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

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,aurenic/poland-krs-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/NMYfBJqmic2UohgOm/builds/DWfUFl4Q8vUl8IueJ/openapi.json
