Poland KRS Business Register Scraper avatar

Poland KRS Business Register Scraper

Pricing

from $2.56 / 1,000 item extracteds

Go to Apify Store
Poland KRS Business Register Scraper

Poland KRS Business Register Scraper

Look up official Polish KRS entities by KRS number and export legal identity, status, addresses, representatives, identifiers, and source provenance.

Pricing

from $2.56 / 1,000 item extracteds

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

Look up official Polish National Court Register records by KRS number. The Actor turns the current Polish-language KRS API extract into consistent JSON for company verification, recurring KYB checks, enrichment, and audits. Each result preserves exact source provenance and can optionally include the complete current extract.

What this Actor does

Poland KRS Business Register Scraper accepts one or many KRS identifiers and retrieves the current official record from the Ministry of Justice API. It supports both:

  • P — the entrepreneurs register;
  • S — the associations, other social and professional organizations, foundations, and public healthcare institutions register;
  • auto — try P, then S when no entrepreneurs-register record exists.

One useful entity becomes one dataset item. Duplicate input identifiers are processed once. Missing identifiers are logged and skipped unless strict failure behavior is enabled.

Who is it for?

Use the Actor if you are:

  • a compliance analyst refreshing evidence for Polish counterparties;
  • a KYB or onboarding team validating legal identity and representatives;
  • a legal team collecting current KRS evidence with source links;
  • a data engineer enriching CRM, vendor, or supplier records;
  • an operations team scheduling repeat checks and comparing datasets;
  • a researcher exporting public Polish entity data to CSV, Excel, or JSON.

The Actor is designed for known-identifier verification. It does not search by company name.

Why use the official KRS source

Every result comes directly from api-krs.ms.gov.pl. The result includes:

  • the exact API request URL;
  • the official KRS portal URL;
  • the fetch timestamp;
  • current register identifiers and latest-entry metadata;
  • optional raw source data for audit or specialist processing.

The source may mask personal names and PESEL values. The Actor does not attempt to bypass that source behavior.

Data you can extract

FieldMeaning
krsNumberNormalized 10-digit KRS identifier
nameCurrent registered entity name
registryOfficial register code
legalFormLegal form in Polish
nipPolish tax identifier, when recorded
regonStatistical identifier, when recorded
registrationDateKRS registration date
recordStateOfficial numeric state of the register position
latestEntryNumberLatest register entry number
latestEntryDateLatest register entry date
latestEntrySignatureSignature for the latest entry
registeredOfficeNormalized seat and postal address
electronicDeliveryAddressBAE electronic-delivery address, when present
representationBodyGoverning representation body
representationMethodOfficial representation rule
representativesRepresentatives, roles, and suspension flags
proxiesCommercial proxies (prokurenci) from KRS
partnersPartners/shareholders exposed in section one
shareCapitalSource share-capital section
activitiesSource PKD activity section
statusProceedingsSection-six status and proceeding information
sourceApiUrlExact official API URL used
sourcePortalUrlOfficial KRS search portal
fetchedAtISO 8601 retrieval timestamp
rawCurrentExtractOptional full official current extract

Fields can be null when the register does not provide them for that legal form.

Getting started

  1. Open the Actor input page.
  2. Add one or more numeric KRS identifiers.
  3. Keep Register type on auto unless you know the register.
  4. Choose whether to include the complete raw current extract.
  5. Set the maximum records and concurrency.
  6. Click Start.
  7. Open the Dataset tab to inspect or export results.

A short identifier such as 123456 is normalized to 0000123456. Values containing letters or more than ten digits are rejected.

Input parameters

krsNumbers

Required array of 1–1,000 KRS identifiers. Each value must contain 1–10 digits. Duplicates are removed.

registry

Optional register selection:

  • auto (default): check P, then S;
  • P: entrepreneurs only;
  • S: associations and foundations only.

Selecting an exact register avoids a second request for absent records.

includeRawExtract

Defaults to false. Enable it when you need source-native sections that are not normalized into dedicated fields. Raw values remain in Polish and may change when the upstream API evolves.

failOnNotFound

Defaults to false. When false, unknown KRS numbers are logged and omitted. When true, any unknown identifier causes a non-zero run result after completed lookups.

maxItems

Limits the number of unique supplied identifiers processed. The default is 100 and the maximum is 1,000.

maxConcurrency

Controls simultaneous official API requests. The default is 5 and the maximum is 10. Lower it if the official service is under load.

Example input

{
"krsNumbers": ["0000123456", "0000030897"],
"registry": "auto",
"includeRawExtract": false,
"failOnNotFound": false,
"maxItems": 2,
"maxConcurrency": 2
}

The first example exercises the entrepreneurs register. The second exercises the associations register.

Example output

{
"krsNumber": "0000123456",
"name": "RODENSTOCK POLSKA SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ",
"registry": "RejP",
"legalForm": "SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ",
"nip": "6342373405",
"regon": "27676445600000",
"registrationDate": "25.07.2002",
"recordState": 1,
"registeredOffice": {
"country": "POLSKA",
"province": "MAZOWIECKIE",
"city": "WARSZAWA",
"postalCode": "02-017"
},
"representationBody": "ZARZĄD",
"representatives": [
{
"firstName": "V*****",
"surname": "N******",
"role": "WICEPREZES ZARZĄDU SPÓŁKI",
"suspended": false
}
],
"sourceApiUrl": "https://api-krs.ms.gov.pl/api/krs/OdpisAktualny/0000123456?rejestr=P&format=json",
"fetchedAt": "2026-09-09T14:00:00.000Z"
}

Names above reflect the masking returned by the public API. They are not expanded or inferred.

How much does it cost to verify Polish KRS entities?

The Actor uses pay-per-event pricing:

  • a $0.005 one-time start charge per run;
  • a tiered item charge for each useful KRS entity written to the dataset.
Account tierPrice per returned entity
FREE$0.0049036
BRONZE$0.004264
SILVER$0.0033259
GOLD$0.0025584
PLATINUM$0.0025584
DIAMOND$0.0025584

Unknown, invalid, duplicate, or failed lookups do not produce an item charge. Batching identifiers into one run shares the start charge across the batch.

For example, the total customer charge for 10 returned entities is the start fee plus 10 item events at the active account tier. For 100 returned entities it is the start fee plus 100 item events. Apify selects the applicable tier for your account.

Reliability and retries

The Actor uses the public JSON API rather than browser automation. Requests have a 30-second timeout. Transient network errors, rate limits, and temporary server errors are retried up to three times with backoff. Stable not-found responses are not retried.

auto register detection can make two requests for an entity that exists only in S or does not exist. No proxy is used automatically. This keeps runtime and transfer costs low.

Integrations

The Actor returns current snapshots for supplied KRS identifiers. Connect those snapshots to systems that store, compare, or review them; the Actor does not provide built-in monitoring or name search.

Scheduled KYB checks

  1. Create an Apify Task containing your known KRS-number list.
  2. Schedule the Task daily, weekly, or monthly.
  3. Export each run dataset to Google Sheets, a warehouse, or object storage.
  4. Join snapshots on krsNumber and compare latestEntryNumber, latestEntryDate, legal identity, address, and representative fields.
  5. Route detected changes into your existing compliance review process.

Google Sheets and spreadsheet review

Download the dataset as CSV or Excel, or use an Apify integration to send the current records to Google Sheets. Keep each run in a dated sheet or append a snapshot timestamp, then compare stable krsNumber rows and latest-entry fields. Flatten nested representative and address fields in your integration when one-column-per-value reporting is required.

Warehouses and ETL pipelines

Fetch dataset items through the dataset API as JSON or JSONL and load them into your warehouse or data lake. Preserve sourceApiUrl, sourcePortalUrl, and fetchedAt with each row so downstream audits retain official provenance. JSON or JSONL is preferable when you need complete nested sections; CSV, Excel, XML, and RSS exports are also available.

API usage with cURL

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~poland-krs-business-register-scraper/runs?token=$APIFY_TOKEN&waitForFinish=120" \
-H "Content-Type: application/json" \
-d '{"krsNumbers":["0000123456"],"registry":"auto","maxItems":1}'

Retrieve dataset items using the defaultDatasetId returned by the run. Do not embed tokens in public source code.

API usage with JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/poland-krs-business-register-scraper').call({
krsNumbers: ['0000123456', '0000030897'],
registry: 'auto',
maxItems: 2,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

API usage with Python

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/poland-krs-business-register-scraper').call(
run_input={
'krsNumbers': ['0000123456'],
'registry': 'auto',
'maxItems': 1,
}
)
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)

Use with MCP and AI agents

Add the Actor to Claude Code:

claude mcp add --transport http apify \
"https://mcp.apify.com?tools=automation-lab/poland-krs-business-register-scraper"

Claude Desktop, Cursor, and VS Code setup

Use this same MCP server configuration in Claude Desktop, Cursor, or VS Code:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=automation-lab/poland-krs-business-register-scraper"
}
}
}

Example prompts:

  • “Fetch the current KRS record for 0000123456 and summarize legal identity and address.”
  • “Verify these KRS identifiers and return NIP, REGON, representatives, and official source links.”
  • “Refresh my Polish counterparty list and highlight latest-entry numbers for downstream comparison.”

AI output should not replace legal or compliance review.

Responsible use and legality

KRS is a public official register, but public availability does not remove every legal obligation. Use results only for lawful purposes. Apply data-minimization, retention, access-control, and accuracy procedures appropriate to your jurisdiction. Do not use masked fields to infer undisclosed personal data. Verify high-impact decisions against the live official source. Respect Apify's terms and the source's applicable rules.

Limitations

  • Input is by KRS identifier, not company name.
  • Results are current extracts, not historical change events.
  • The official API can be unavailable or rate-limited.
  • Source field names and nested raw sections are in Polish.
  • Personal names and identifiers may be masked by the official API.
  • Not every legal form contains the same sections.
  • A missing optional section appears as null, an empty array, or an empty object.
  • The Actor does not download PDF extracts or financial-statement files.
  • The Actor does not provide legal, sanctions, insolvency, or beneficial-ownership advice.

Troubleshooting

“Invalid KRS number”

Use digits only, with at most ten digits. The Actor adds leading zeroes automatically.

No dataset item was produced

Check the log for a not-found message. Try registry: "auto" if you selected the wrong register. Confirm the identifier in the official KRS portal. Enable failOnNotFound when omission should fail your pipeline.

The run reports a temporary API error

Retry later or reduce maxConcurrency. The Actor already retries transient failures three times inside a run. Do not add aggressive external retries against the public service.

A field is masked or null

That is the value supplied by the official current-extract API. Enable includeRawExtract to inspect the source section. The Actor does not reconstruct masked personal data.

FAQ

Is this the official Polish register?

The Actor is not operated by the Polish Ministry of Justice. It retrieves data from the Ministry's official public KRS API and includes source URLs.

Does it search by entity name?

No. Supply known KRS identifiers. Use the official search portal to identify a KRS number when you only know a name.

Can it process companies and foundations together?

Yes. Use registry: "auto" for mixed batches.

Does it charge for missing records?

No item event is emitted for a missing record. The one-time run-start charge still applies.

Can I compare changes automatically?

Schedule repeat runs and compare exported snapshots using stable krsNumber keys and latest-entry metadata. The Actor itself does not label differences.

Why are representatives' names masked?

The official API can return masked personal values. The output accurately preserves that source behavior.

Choose this Actor for current Polish KRS legal identity and representation data. Choose the financial Actor when the primary job is filing-document discovery.