# Poland New Companies API – KRS Registrations Feed (`enterprising_hamster/polish-new-companies-krs`) Actor

New and changed Polish companies every day from the official KRS register (nowe spółki KRS): name, NIP, REGON, address, PKD, share capital, registration date. No personal data. For leads, KYC, CRM and AI agents (MCP). CSV, JSON, Excel.

- **URL**: https://apify.com/enterprising_hamster/polish-new-companies-krs.md
- **Developed by:** [Kamil Kaczmarek](https://apify.com/enterprising_hamster) (community)
- **Categories:** Lead generation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.20 / 1,000 companies

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/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 New Companies API – KRS Registrations Feed

**Poland new companies API**: a daily feed of **newly registered and changed companies** from the official **KRS** register (Krajowy Rejestr Sądowy, rejestr przedsiębiorców) of the Polish Ministry of Justice. One item per company: legal name, **KRS, NIP and REGON** numbers, legal form, registered seat address, main and other **PKD** activity codes, share capital, registration and last-entry dates, and a **new** or **changed** label. Press Start to get 20 companies from yesterday's KRS bulletin in about 10 seconds; export CSV, JSON or Excel. Polski opis: nowe i zmienione spółki z KRS (rejestr przedsiębiorców) każdego dnia, z NIP, REGON, adresem, PKD i kapitałem.

**No API key, no account at the source.** The KRS API is public. **No personal data**: only company-level fields are extracted. See [Privacy](#privacy).

### Use with AI agents (MCP)

Agents can call this Actor through the [Apify MCP server](https://mcp.apify.com). Add it as a single tool:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=enterprising_hamster/polish-new-companies-krs"
    }
  }
}
```

Questions an agent can answer with it:

- "Which companies were registered in Poland yesterday?" → `{"events": ["new"], "maxItems": 20}`
- "New IT companies in Mazovia last week with at least 5,000 PLN capital." → `{"dateFrom": "2026-10-19", "dateTo": "2026-10-25", "events": ["new"], "pkd": ["62"], "voivodeships": ["mazowieckie"], "minShareCapital": 5000}`

Fields an agent gets: `name`, `krs`, `nip`, `regon`, `legalForm`, `address`, `prevailingPkd`, `otherPkd`, `shareCapital`, `currency`, `registrationDate`, `lastEntryDate`, `eventType`, `sourceUrl`.

Cost per result: $0.004 per company, so the default 20 companies cost at most $0.08. Higher Apify plans pay less per row. Pass `maxTotalChargeUsd` in the MCP `callOptions`; the run stops before that limit and still returns SUCCEEDED with the rows saved so far.

### What data can you get

Every working day the KRS publishes a bulletin (Biuletyn) listing the KRS numbers that had an entry that day; on 27.10.2026 it listed about 3,600 numbers. For each number in your date window the Actor reads the current extract (odpis aktualny) of the register of entrepreneurs (rejestr P) and keeps:

- **Identity:** legal name, KRS number, NIP, REGON (new companies often get REGON a few days later), legal form (sp. z o.o., S.A., prosta spółka akcyjna, spółka jawna, komandytowa, foundation or association running a business...).
- **Seat:** voivodeship, city, postal code and street of the registered address.
- **Activity:** main PKD code with description and all other PKD codes.
- **Capital:** share capital (kapitał zakładowy) or, for a simple joint-stock company (P.S.A.), share capital in shares (kapitał akcyjny), as a 2-decimal string with currency.
- **Dates and event:** registration date, date of the last entry, and `eventType`: **new** when the registration date falls inside your window, **changed** when the company appeared on the bulletin but was registered earlier (a new entry such as a change of address, board, PKD or capital).

Entries of the register of associations (rejestr S) without business activity are skipped.

### How to use

1. Press **Start**. With no changes you get up to 20 companies (new and changed) from **yesterday's** bulletin, Europe/Warsaw time.
2. Pick a window with **From date** / **To date** (up to 31 days). Today's bulletin is still filling during the day, so prefer finished days.
3. Keep only **New registrations** for lead lists, or only **Changed companies** for monitoring.
4. Narrow down by **PKD codes** (full codes or prefixes, e.g. `62` for IT, `41`–`43` for construction), **voivodeships**, **legal forms** and **minimum share capital**.
5. Raise **Max companies** for more rows. For a daily feed, schedule the Actor each morning with the default empty dates.

### Input

| Field | Meaning |
| --- | --- |
| `dateFrom` / `dateTo` | Inclusive bulletin days (`YYYY-MM-DD`, Europe/Warsaw). Both empty → **yesterday**. At most **31** days. |
| `events` | `new`, `changed`, or both (default). |
| `pkd` | PKD code or prefix filters. |
| `voivodeships` | One or more of the 16 Polish voivodeships. |
| `legalForms` | Exact legal form strings as in KRS, e.g. `SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ`. |
| `minShareCapital` | Minimum capital; companies without capital are left out when set. |
| `maxItems` | Stop after N companies (default **20**, max 20,000). |

Within a day the feed reads the highest KRS numbers first, which is where that day's new registrations sit, so a short `maxItems` returns new companies first.

### Output

One item per company. Real example from 27.10.2026 (other PKD codes trimmed):

```json
{
  "name": "LIDRIA SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ",
  "krs": "0001275596",
  "nip": "5253112619",
  "regon": null,
  "legalForm": "SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ",
  "address": {
    "voivodeship": "MAZOWIECKIE",
    "city": "WARSZAWA",
    "postalCode": "00-137",
    "street": "ELEKTORALNA 13 121"
  },
  "prevailingPkd": {
    "code": "62.10.B",
    "description": "POZOSTAŁA DZIAŁALNOŚĆ W ZAKRESIE PROGRAMOWANIA"
  },
  "otherPkd": [
    {"code": "41", "description": "ROBOTY BUDOWLANE ZWIĄZANE ZE WZNOSZENIEM BUDYNKÓW MIESZKALNYCH I NIEMIESZKALNYCH"},
    {"code": "68", "description": "DZIAŁALNOŚĆ ZWIĄZANA Z OBSŁUGĄ RYNKU NIERUCHOMOŚCI"}
  ],
  "shareCapital": "5000.00",
  "currency": "PLN",
  "registrationDate": "2026-10-27",
  "lastEntryDate": "2026-10-27",
  "eventType": "new",
  "sourceUrl": "https://api-krs.ms.gov.pl/api/krs/OdpisAktualny/0001275596?rejestr=P&format=json"
}
```

The table view **Companies** shows name, KRS, event, dates, legal form, city, voivodeship, main PKD and capital. The key-value store record **SUMMARY** holds run counts (matched, saved, skipped, listings in the bulletin) and flags (cost limit reached, partial bulletin for today).

### Pricing (pay per event)

| Event | Price | When |
|---|---|---|
| `company` | $0.004 | One delivered company with identifiers, address, PKD, capital and dates. |

No start fee and no separate charge per dataset row. Higher Apify plans pay less (down to $0.0032 per company). Set a maximum cost per run in Apify and the Actor stops before it with the rows saved so far. Platform usage is included in the price.

### Use cases

- **B2B lead generation:** fresh companies every morning by PKD and region, e.g. new construction firms in Silesia for an accounting office, a bank, an insurer or a SaaS vendor.
- **KYC and onboarding:** check a new client's KRS, NIP, REGON, legal form, seat address and capital against the official register.
- **Market monitoring:** count new registrations per industry and voivodeship, follow changes in companies you track (the `changed` events).
- **CRM enrichment:** fill missing NIP, REGON, PKD and address fields from the KRS by date window.
- **AI agents:** answer "who registered a company in X yesterday" through MCP.

### Privacy

The KRS extract also contains people: board members, partners, shareholders, proxies and supervisory board members (the public API already masks their names and PESEL numbers). This Actor does not read those sections at all. It whitelists company-level fields only and never outputs PESEL, first names or surnames of people, representatives, partners, shareholders, proxies, e-mail addresses, websites, electronic delivery addresses (BAE) or court file signatures. Tests check this on recorded extracts with marker values in every person field.

Official company names are kept as registered. Some of them contain the name of a founder (for example general partnerships or brand names); that is the company's registered business name, not an extracted personal data field.

### Source and terms

- Data: **Ministerstwo Sprawiedliwości (Polish Ministry of Justice), Krajowy Rejestr Sądowy**, through the public KRS API at https://api-krs.ms.gov.pl (daily bulletin and current extracts in JSON). Every item links to its extract in `sourceUrl`.
- The KRS is a public register: anyone may access the data it holds, and the Ministry provides the API free of charge and without registration.
- The API extract is informational. For legally binding documents use the official extract from https://ekrs.ms.gov.pl.
- The bulletin for the current day is incomplete until the day ends; the `partialBulletin` flag in SUMMARY marks such runs.

### FAQ

**Is there an API for new companies registered in Poland?** Yes: the Ministry of Justice publishes the KRS API. This Actor turns its daily bulletin and extracts into one clean table with filters, callable from the Apify API, schedules or MCP.

**Can an AI agent (Claude, ChatGPT, Cursor) get new Polish companies with this?** Yes. Connect the Apify MCP server with this Actor as a tool (see "Use with AI agents (MCP)").

**Do I need an API key?** No. The KRS endpoints are public.

**Does it include sole traders (JDG)?** No. Sole traders are registered in CEIDG, not in KRS.

**Why is REGON empty?** New companies usually receive REGON from the statistics office some days after registration, so it may be empty in the first extracts.

**Can I get board members or shareholders?** No. The Actor is built to deliver company data only.

**How fresh is the data?** The bulletin and extracts are read at run time, so a run for yesterday returns the register as of now.

**Can I resume a run?** Companies already in the default dataset (by `krs`) are not fetched or charged again in the same run.

**What if I hit my Apify cost limit?** The run stops cleanly, keeps rows already saved and ends SUCCEEDED.

### Integrations

Use the Apify API, scheduler, webhooks, Make, Zapier, n8n or Google Sheets export as with any Actor. A daily schedule with empty dates gives one file of yesterday's companies per day.

### Development

```bash
python3 -m venv .venv && .venv/bin/pip install -r requirements-dev.txt
.venv/bin/python -m pytest
```

Tests run offline on recorded KRS fixtures whose person fields are replaced with sentinels (`tests/test_privacy.py` proves none of them reach the output). For a local run with simulated prices set `ACTOR_TEST_PAY_PER_EVENT=true`, `APIFY_ACTOR_PRICING_INFO` from `examples/pricing_info.local.json` and `APIFY_CHARGED_ACTOR_EVENT_COUNTS='{"company":0}'`, delete `./storage`, then run `python3 -m src`. `scripts/gen_dataset_schema.py` writes the dataset schema.

### Disclaimer

Not affiliated with the Ministry of Justice. The data come from the KRS API and are processed by this Actor; check the official extract before relying on them in legal matters.

### 🇵🇱 Po polsku

Aktor codziennie pobiera z oficjalnego API KRS Ministerstwa Sprawiedliwości biuletyn wpisów i aktualne odpisy z rejestru przedsiębiorców, i zwraca nowe oraz zmienione spółki: nazwę, numer KRS, NIP, REGON, formę prawną, adres siedziby, PKD przeważające i pozostałe, kapitał zakładowy (dla P.S.A. kapitał akcyjny) oraz daty rejestracji i ostatniego wpisu. Filtry: zakres dat (do 31 dni, domyślnie wczoraj), nowe lub zmienione, PKD, województwo, forma prawna, minimalny kapitał. Domyślnie 20 firm, $0.004 za firmę.

Dane osobowe: aktor nie odczytuje sekcji o zarządzie, wspólnikach, akcjonariuszach, prokurentach i radzie nadzorczej, nie zwraca PESEL, imion i nazwisk, e-maili, stron www ani adresów do doręczeń elektronicznych. Nazwy firm są zapisane tak jak w KRS; część z nich zawiera nazwisko założyciela.

Źródło: Ministerstwo Sprawiedliwości, Krajowy Rejestr Sądowy, https://api-krs.ms.gov.pl. Odpis z API ma charakter informacyjny; dokument urzędowy to odpis z https://ekrs.ms.gov.pl.

# Changelog

This Actor's version history is a separate document: https://apify.com/enterprising_hamster/polish-new-companies-krs/changelog.md

# Actor input Schema

## `dateFrom` (type: `string`):

First bulletin day (YYYY-MM-DD, Europe/Warsaw). Empty with dateTo empty means yesterday. One day when only dateFrom is set.

## `dateTo` (type: `string`):

Last bulletin day (inclusive). Must be used together with dateFrom. At most 31 days in the range.

## `events` (type: `array`):

New = registration date in the window. Changed = appeared on the bulletin but registered earlier. Last-entry date does not reclassify.

## `pkd` (type: `array`):

Match full PKD codes or prefixes (e.g. 93 matches 93.29.B). Empty = any activity.

## `voivodeships` (type: `array`):

Registered seat must be in one of these voivodeships. Empty = whole country.

## `legalForms` (type: `array`):

Exact forma prawna strings after trimming. Empty = any form.

## `minShareCapital` (type: `number`):

Companies without share capital fail this filter when set.

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

Stop after this many companies are saved (default keeps Start runs cheap).

## Actor input object example

```json
{
  "events": [
    "new",
    "changed"
  ],
  "pkd": [],
  "voivodeships": [],
  "legalForms": [],
  "maxItems": 20
}
```

# Actor output Schema

## `results` (type: `string`):

One item per company: legal name, KRS, address, PKD, capital, event type, source URL.

## `summary` (type: `string`):

Counts, skipped non-entrepreneurs, charge limit, partial bulletin flag, and window.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("enterprising_hamster/polish-new-companies-krs").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("enterprising_hamster/polish-new-companies-krs").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 '{}' |
apify call enterprising_hamster/polish-new-companies-krs --silent --output-dataset

```

## MCP server setup

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

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/Vg7CIDLyVOLk9TlIm/builds/3yawBGDegPz9hilZA/openapi.json
