# Poland KRS Companies: Polish Company Register (KRS) Data (`cprussin/poland-krs-companies`) Actor

Polish company data from the official KRS (National Court Register) open API: NIP, REGON, address, email, website, PKD codes, share capital, board, representation rules, filed financial statements. Look up KRS numbers or get companies changed or newly registered by date. $3 per 1,000.

- **URL**: https://apify.com/cprussin/poland-krs-companies.md
- **Developed by:** [Connor Prussin](https://apify.com/cprussin) (community)
- **Categories:** Lead generation, Business
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 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.

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 Companies: Polish Company Register (KRS) Data API

**Poland KRS Companies** exports company data from the **KRS (Krajowy Rejestr Sądowy, National Court Register)**, Poland's official register of companies, associations and foundations, as clean JSON, CSV or Excel. It reads the Ministry of Justice's official open **KRS API** (api-krs.ms.gov.pl), published on dane.gov.pl as open data in the **public domain (CC0)**, so you can reuse the data freely. No login, no API key, no browser, no proxy.

- ✅ **Look up any KRS number**: name, legal form, NIP, REGON, registration date, registered address, email and website.
- ✅ **PKD activity codes**: main and other activities with descriptions.
- ✅ **Share capital**, representation rules, management board functions, supervisory board and commercial proxies (prokurenci).
- ✅ **Filed documents**: annual financial statements, auditor reports, approval resolutions and management reports, with filing dates and periods.
- ✅ **Delta feed**: every company with a new register entry on given days, from the official daily KRS Biuletyn.
- ✅ **New companies feed**: only companies first registered in your date range, for fresh B2B leads.
- ✅ **Both registers**: entrepreneurs (P) and associations, foundations and other organisations (S).

### Start in one minute

Click **Start** with the prefilled input:

```json
{
  "krsNumbers": ["0000019193", "0000028860"],
  "maxItems": 10
}
```

You get: two full company records (PKP S.A. and ORLEN S.A.) with `name`, `nip`, `regon`, `address`, `mainPkd`, `shareCapital`, `boardMembers`, `filedDocuments` and `sourceUrl`.

**Cost:** $0.006: 2 records × $0.003, plus the $0.00005 actor-start fee.

### Use with an AI assistant

Connect the [Apify MCP server](https://mcp.apify.com) to Claude, ChatGPT, Cursor or any MCP client (`https://mcp.apify.com?tools=cprussin/poland-krs-companies` loads only this actor), then paste:

```text
Use the Apify actor cprussin/poland-krs-companies to list companies newly registered in Poland yesterday, with name, city, main PKD code and share capital.
```

### Recipes

#### New Polish companies registered this week

```json
{
  "changedFrom": "2026-10-26",
  "changedTo": "2026-10-30",
  "newlyRegisteredOnly": true,
  "maxItems": 5000
}
```

#### Daily change feed (scheduled task)

Every company with a register entry yesterday (new board, address, capital, filings, liquidation...):

```json
{
  "changedFrom": "2026-10-30",
  "changedTo": "2026-10-30",
  "maxItems": 10000
}
```

#### Enrich a list of KRS numbers

```json
{
  "krsNumbers": ["19193", "28860", "0000001927"],
  "register": "auto"
}
```

### Input

| Field                 | Description                                                         | Example          |
| --------------------- | ------------------------------------------------------------------- | ---------------- |
| `krsNumbers`          | KRS numbers to look up (leading zeros optional)                     | `["0000019193"]` |
| `changedFrom`         | Delta feed: first day with register entries (YYYY-MM-DD)            | `"2026-10-30"`   |
| `changedTo`           | Last day, inclusive (default today; at most 93 days)                | `"2026-10-31"`   |
| `hourFrom` / `hourTo` | Optional hour window per day (Polish time), via the hourly bulletin | `8` / `12`       |
| `newlyRegisteredOnly` | Keep only companies first registered within the date range          | `true`           |
| `register`            | `auto` (P, then S), `P` (companies) or `S` (associations etc.)      | `"auto"`         |
| `maxItems`            | Max records (default 100)                                           | `1000`           |

### What data do you get for each company?

```json
{
  "krs": "0001276160",
  "register": "P",
  "name": "PRIVATE WINE AGENCY SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ",
  "legalForm": "SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ",
  "nip": "8982339619",
  "regon": "54606154000000",
  "registrationDate": "2026-10-29",
  "voivodeship": "DOLNOŚLĄSKIE",
  "county": "WROCŁAW",
  "municipality": "WROCŁAW",
  "city": "WROCŁAW",
  "street": "UL. KSIĘCIA WITOLDA",
  "buildingNumber": "49",
  "unitNumber": "15",
  "postalCode": "50-202",
  "postOffice": "WROCŁAW",
  "country": "POLSKA",
  "address": "UL. KSIĘCIA WITOLDA 49/15, 50-202 WROCŁAW, POLSKA",
  "email": null,
  "www": null,
  "eDeliveryAddress": null,
  "shareCapital": 6000,
  "shareCapitalCurrency": "PLN",
  "mainPkd": "46.34.A",
  "mainPkdDescription": "SPRZEDAŻ HURTOWA NAPOJÓW ALKOHOLOWYCH",
  "otherPkd": [
    {
      "code": "47.25.Z",
      "description": "SPRZEDAŻ DETALICZNA NAPOJÓW ALKOHOLOWYCH I BEZALKOHOLOWYCH"
    }
  ],
  "pkdCodes": ["46.34.A", "47.25.Z"],
  "organisationPurpose": null,
  "publicBenefitOrganisation": false,
  "representationBody": "ZARZĄD",
  "representationRules": "W PRZYPADKU ZARZĄDU JEDNOOSOBOWEGO DO REPREZENTOWANIA SPÓŁKI UPRAWNIONY JEST JEDYNY CZŁONEK ZARZĄDU SAMODZIELNIE. ...",
  "boardMembers": [
    {
      "name": "V********** A*******",
      "function": "PREZES ZARZĄDU",
      "suspended": false
    }
  ],
  "supervisoryBoard": [],
  "proxies": [],
  "filedDocuments": [],
  "latestFinancialStatementFiledOn": null,
  "latestFinancialStatementPeriod": null,
  "section6Entries": [],
  "lastEntryNumber": 3,
  "lastEntryDate": "2026-10-30",
  "lastEntryCaseNumber": "WR.VI NS-REJ.KRS/37504/26/647/REGON",
  "lastEntryCourt": null,
  "stateAsOf": "2026-10-30",
  "bulletinDates": ["2026-10-29"],
  "sourceUrl": "https://api-krs.ms.gov.pl/api/krs/OdpisAktualny/0001276160?rejestr=P&format=json",
  "scrapedAt": "2026-11-01T12:00:00.000Z"
}
```

Values are in Polish, as registered. `filedDocuments` lists notices of filed documents (`annualFinancialStatement`, `auditorReport`, `approvalResolution`, `managementReport`), not the documents themselves. `section6Entries` names register section 6 entries (liquidation, bankruptcy, mergers, transformations).

**Personal data:** the register itself masks people's names (e.g. `J**** K********`); they are exported exactly as published and never unmasked. PESEL numbers and birth dates are not exported, and PESEL numbers written into free text are redacted. Shareholder and partner lists are not exported.

### How much does it cost to get Polish company data?

Pay per event:

- **$0.003 per company record** ($3 per 1,000).
- $0.00005 per run start. Platform compute is included.
- Companies skipped by **Newly registered only** and KRS numbers that are not found are not billed.

### FAQ

**Is this legal?** Yes. The data comes from the Polish Ministry of Justice's official KRS API, listed on dane.gov.pl as open data under CC0 (public domain). The actor makes plain, polite GET requests (at most 3 in parallel, with pauses) and identifies itself.

**What is a KRS number?** The 10-digit number of an entity in the National Court Register, e.g. `0000019193`. It is printed on Polish invoices and websites next to NIP and REGON.

**Can I search by NIP, REGON or name?** Not yet: the official API looks up by KRS number. Use the delta feed to discover companies by date.

**How fresh is the data?** Each record is the current extract (odpis aktualny) at run time. The Biuletyn lists entries made on each day, usually by the next morning.

**How many companies change per day?** Typically 3,000-10,000 on working days; a few hundred on weekends.

**Why is a KRS number not found?** It may be deleted, never assigned, or only in the other register (use `register: "auto"`).

### Related actors

- [New Business Registrations](https://apify.com/cprussin/new-business-registrations): newly registered US LLCs and corporations from official state registries.
- [German Business Directory](https://apify.com/cprussin/german-business-directory): German businesses from Gelbe Seiten and Das Örtliche.

# Actor input Schema

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

KRS numbers to look up, with or without leading zeros, e.g. <code>0000019193</code> or <code>19193</code>. Leave empty to use only the changed-companies feed below.

## `changedFrom` (type: `string`):

Changed-companies feed: every company with a register entry on or after this day (from the official daily KRS Biuletyn), e.g. <code>2026-10-30</code>. Set it to yesterday in a scheduled task for a daily delta.

## `changedTo` (type: `string`):

Last day of the feed, inclusive. Defaults to today. At most 93 days per run.

## `hourFrom` (type: `integer`):

Optional: only entries from this hour of each day (0-23, Polish time), via the hourly Biuletyn.

## `hourTo` (type: `integer`):

Optional: only entries up to this hour of each day (0-23, Polish time).

## `newlyRegisteredOnly` (type: `boolean`):

Keep only companies whose KRS registration date is inside the date range: a feed of brand-new Polish companies. Older companies are skipped and not billed.

## `register` (type: `string`):

KRS register to read. <b>Auto</b> tries entrepreneurs (P) first, then associations and other organisations (S).

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

Stop after this many company records. Each record is billed once.

## Actor input object example

```json
{
  "krsNumbers": [
    "0000019193",
    "0000028860"
  ],
  "newlyRegisteredOnly": false,
  "register": "auto",
  "maxItems": 10
}
```

# 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": [
        "0000019193",
        "0000028860"
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("cprussin/poland-krs-companies").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": [
        "0000019193",
        "0000028860",
    ],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("cprussin/poland-krs-companies").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": [
    "0000019193",
    "0000028860"
  ],
  "maxItems": 10
}' |
apify call cprussin/poland-krs-companies --silent --output-dataset

```

## MCP server setup

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

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/PispdAUC6qNodS9TN/builds/bhMPr8qPfYpZnN937/openapi.json
