# Poland KRS New Company Registrations Feed (`datagrit/poland-krs-new-companies`) Actor

Newly registered Polish companies, foundations and associations from the official KRS court register: NIP, address, PKD, capital, email, with filters and change detection.

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

## Pricing

Pay per event

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

### What does Poland KRS New Company Registrations Feed do?

Get a list of Polish companies, foundations and associations that were just registered in the official KRS court register. Every row carries the KRS number, name, legal form, registered address, PKD activity code, share capital and, when the entity published them, an email address, a website, NIP and REGON. It is built for B2B sales teams, accountants, banks, insurers, KYB analysts and service providers who follow new Polish companies from their first days.

Instead of looking up companies one by one by KRS number, you pick a date window and the Actor returns everything first registered in it. You can narrow the feed by legal form, voivodeship, city, activity code, name keyword, share capital, published email and published website.

### What you can use it for

- **New-company prospecting:** accounting, banking, insurance, office space, web design, legal and payroll providers see newly registered sp. z o.o. companies while they are still choosing suppliers.
- **KYB and onboarding checks:** confirm that a counterparty exists in KRS, see its registration date and share capital, and tell a company that is three days old from one that is ten years old.
- **Market monitoring:** count new companies per voivodeship, city or PKD sector, week after week.
- **Change tracking:** switch to the all-changes mode to see which existing entities filed new entries (address, board, capital, activity) in a period.

### Example output

Each row is a flat JSON object. A shortened example of one result:

```json
{
  "krs": "0001269391",
  "register": "P",
  "name": "LEARNLY SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ",
  "legalFormType": "llc",
  "registrationDate": "2026-09-29",
  "isNewRegistration": true,
  "city": "SZCZECIN",
  "voivodeship": "ZACHODNIOPOMORSKIE",
  "mainPkdCode": "85.59.B",
  "shareCapital": 5000,
  "capitalCurrency": "PLN",
  "email": "kontakt@example.pl",
  "website": "example.pl",
  "boardMembersCount": 2,
  "shareholdersCount": 2,
  "sourceUrl": "https://api-krs.ms.gov.pl/api/krs/OdpisAktualny/0001269391?rejestr=P&format=json"
}
```

The full field list, with a description of every column, is in the dataset schema of the Actor. Board members and shareholders are returned only as counts; the email and website are whatever the entity entered in the register.

### Pricing

You pay per entity returned. Pricing depends on your Apify plan: a small fee when a run starts, then a price per result that is lower on paid plans. The Apify free plan includes monthly credit you can use to try the feed on real data. Duplicates and status rows for runs without results are never charged. Set a maximum spend in the run options and the Actor stops when it is reached.

### Input

- **Mode:** new registrations (default) or all changes.
- **Working days back** or **From/To date:** the window. Working days skip weekends and Polish public holidays, because registry courts do not register on those days; the default of 2 means today and the previous working day, so a run on a Sunday covers Thursday to Sunday. Explicit dates can span up to 31 days, a limit of this Actor; the KRS API serves bulletins from January 2020 onwards.
- **Registers:** P for companies and other entrepreneurs, S for associations and foundations, or both.
- **Scan depth:** complete (default) or recent numbers only.
- **Filters:** legal forms, voivodeships, cities, PKD prefixes (main activity or any), name keywords, minimum and maximum share capital, only with email, only with website.
- **Only new since last run:** for schedules, so each entity is returned once per settings combination.
- **Maximum companies:** the run stops at this number.

### FAQ

#### How does it work?

The Actor reads the official public API of the Polish Ministry of Justice. It downloads the daily KRS bulletin (the list of KRS numbers with an entry on a given day), then reads the current extract of each entity and keeps those whose registration date falls in your window. It does not log in anywhere and does not scrape web pages.

#### Does it find every new company?

A new registration gets a KRS number close to the newest ones, so in new-registrations mode the complete depth reads the entities whose number is within the newest 100,000 numbers of the window's bulletins; the rest of the bulletin is almost entirely changes to long-registered entities. Measured on 2026-09-30 against full reads of the bulletins: on 2026-09-29 all 267 registrations (248 in register P, 19 in register S) were within the newest 16,431 numbers; on 2026-09-25, 308 of 309 were within the newest 9,776, and the one missed entity had a number more than 500,000 below the newest and 21 register entries. The complete depth therefore returned 575 of the 576 registrations of those two days. The recent depth reads only the newest 3,000 numbers and returned 261 of the 267 registrations of 2026-09-29. In all-changes mode the complete depth reads every entity in the bulletin.

#### How long does a run take and what are the limits?

Measured locally on 2026-09-30: one full weekday (2026-09-29, registers P and S) meant 1,158 lookups and took 95 seconds; the recent depth took 41 seconds. A window of the whole of September 2026 means about 13,300 lookups in new-registrations mode, roughly 18 minutes at that speed, and about 62,500 lookups in all-changes mode. The API answers more slowly at busy hours. This Actor accepts windows of up to 31 days and up to 15 working days back.

#### How often should I run it?

Once a day is enough. Schedule the Actor with "Only new since last run" enabled and 2 working days back: the windows of consecutive runs overlap, and every entity is delivered once. The remembered entities are stored per combination of mode, registers, scan depth and filters in a key-value store named krs-feed-state in your account (45 days, 35 in all-changes mode). Only entities actually returned to you are remembered, so two schedules with different filters, or a manual test run with other settings, do not take results from each other. Numbers whose registration date is already known to be outside the window are not read again, which makes daily runs faster.

#### What personal data does the output contain?

KRS is a public register and the Actor uses its official API. The register itself masks the names and PESEL numbers of board members and shareholders, and the Actor returns only their counts. The email and website fields are copied as the entity published them; for small companies an email address can contain the name of a natural person. How you use the data, including for contacting companies, is your decision and your responsibility under the rules that apply to you.

#### Why is REGON or NIP sometimes empty?

Numbers are assigned after the court entry. For entities registered in the last hours or days the register may not yet show them. Email and website are optional in KRS, so only part of the entities publish them; the run summary tells you for how many.

#### What happens when the register changes?

The run summary reports in how many extracts the registration date and the fields used by your filters were present. If the API stops returning bulletins, the registration date drops below 90% of extracts, a field your filter relies on disappears, or more than 20% of lookups fail, the run fails with an explicit message instead of returning an empty dataset that looks like success.

### Related Actors

Look up one company by KRS number, NIP or REGON with a lookup Actor when you already know the entity. Use this feed when you want to discover entities you do not know yet.

# Changelog

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

# Actor input Schema

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

"New registrations" returns entities first entered in KRS inside the date window. "All changes" returns every entity that had any entry in the window (new registrations plus changes to existing entities).

## `daysBack` (type: `integer`):

How many working days to look back (Monday to Friday, Polish public holidays excluded), counting today when it is a working day. The window runs from the earliest of those days to today, so weekend and holiday entries in between are included. 2 = today and the previous working day; on a Sunday that is Thursday to Sunday, on a Monday Friday to Monday. Maximum 15. Ignored when "From date" is set.

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

First day of the window, YYYY-MM-DD. The KRS API serves bulletins from January 2020 onwards. Leave empty to use "Working days back".

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

Last day of the window, YYYY-MM-DD (inclusive). Defaults to today. This Actor accepts windows of at most 31 days; split longer periods into several runs.

## `registers` (type: `array`):

"P" is the register of entrepreneurs (companies, partnerships, cooperatives). "S" is the register of associations, foundations and other social organisations. Use \["P","S"] for both.

## `scanDepth` (type: `string`):

"Complete" reads every entity with an entry in the window whose KRS number is among the newest 100,000 numbers in that window's bulletins (in "All changes" mode: every entity with an entry). New registrations get numbers close to the newest ones: on the fully read days 2026-09-25 and 2026-09-29, 575 of the 576 entities with a registration date on that day were within the newest 16,431 numbers; the exception was an entity with a number more than 500,000 below the newest and 21 register entries. "Recent" reads only the newest 3,000 numbers: much faster, and it returned 261 of the 267 registrations of 2026-09-29.

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

Keep only these legal forms. Allowed: llc, joint-stock, simple-joint-stock, general-partnership, limited-partnership, limited-joint-stock-partnership, professional-partnership, foundation, association, cooperative, other.

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

Keep only entities with the registered seat in these voivodeships, for example MAZOWIECKIE or Łódzkie (case and Polish letters do not matter).

## `cities` (type: `array`):

Keep only entities whose address is in one of these cities, for example Warszawa or Kraków.

## `pkdPrefixes` (type: `array`):

Keep only entities whose activity code starts with one of these prefixes, for example 62 (IT), 62.01 or 47.91.Z. Which codes are checked depends on "PKD scope".

## `pkdScope` (type: `string`):

"Main" matches only the predominant activity. "Any" also matches the additional activities listed in the register.

## `nameKeywords` (type: `array`):

Keep only entities whose name contains at least one of these words, for example software or transport. Case and Polish letters do not matter.

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

Keep only entities with a share capital of at least this amount. Entities without a capital (associations, partnerships) are dropped when this is set.

## `maxShareCapital` (type: `number`):

Keep only entities with a share capital of at most this amount. Entities without a capital are dropped when this is set.

## `onlyWithEmail` (type: `boolean`):

Return only entities that published an email address in the register.

## `onlyWithWebsite` (type: `boolean`):

Return only entities that published a website address in the register.

## `sinceLastRun` (type: `boolean`):

Skip entities that earlier runs with the same settings already returned. The state is kept per combination of mode, registers, scan depth and all filters (the date window and "Maximum companies" do not count), in a key-value store named krs-feed-state in your account, for 45 days (35 in "All changes" mode). Only entities actually returned to you are remembered. Runs with other filters, and manual test runs with other settings, do not affect it.

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

Stop after this many entities. Also caps what the run can cost: you pay per entity returned.

## `proxyConfiguration` (type: `object`):

The official KRS API is public and needs no proxy. Enable one only if your runs are blocked.

## Actor input object example

```json
{
  "mode": "newRegistrations",
  "daysBack": 2,
  "registers": [
    "P"
  ],
  "scanDepth": "complete",
  "legalForms": [],
  "voivodeships": [],
  "cities": [],
  "pkdPrefixes": [],
  "pkdScope": "main",
  "nameKeywords": [],
  "onlyWithEmail": false,
  "onlyWithWebsite": false,
  "sinceLastRun": false,
  "maxItems": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

All extracted records as a 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 = {
    "mode": "newRegistrations",
    "daysBack": 2,
    "registers": [
        "P"
    ],
    "scanDepth": "complete",
    "maxItems": 20,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("datagrit/poland-krs-new-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 = {
    "mode": "newRegistrations",
    "daysBack": 2,
    "registers": ["P"],
    "scanDepth": "complete",
    "maxItems": 20,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("datagrit/poland-krs-new-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 '{
  "mode": "newRegistrations",
  "daysBack": 2,
  "registers": [
    "P"
  ],
  "scanDepth": "complete",
  "maxItems": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call datagrit/poland-krs-new-companies --silent --output-dataset

```

## MCP server setup

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