Poland KRS Business Register Scraper
Pricing
from $2.56 / 1,000 item extracteds
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
Maintained by CommunityActor 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— tryP, thenSwhen 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
| Field | Meaning |
|---|---|
krsNumber | Normalized 10-digit KRS identifier |
name | Current registered entity name |
registry | Official register code |
legalForm | Legal form in Polish |
nip | Polish tax identifier, when recorded |
regon | Statistical identifier, when recorded |
registrationDate | KRS registration date |
recordState | Official numeric state of the register position |
latestEntryNumber | Latest register entry number |
latestEntryDate | Latest register entry date |
latestEntrySignature | Signature for the latest entry |
registeredOffice | Normalized seat and postal address |
electronicDeliveryAddress | BAE electronic-delivery address, when present |
representationBody | Governing representation body |
representationMethod | Official representation rule |
representatives | Representatives, roles, and suspension flags |
proxies | Commercial proxies (prokurenci) from KRS |
partners | Partners/shareholders exposed in section one |
shareCapital | Source share-capital section |
activities | Source PKD activity section |
statusProceedings | Section-six status and proceeding information |
sourceApiUrl | Exact official API URL used |
sourcePortalUrl | Official KRS search portal |
fetchedAt | ISO 8601 retrieval timestamp |
rawCurrentExtract | Optional full official current extract |
Fields can be null when the register does not provide them for that legal form.
Getting started
- Open the Actor input page.
- Add one or more numeric KRS identifiers.
- Keep Register type on
autounless you know the register. - Choose whether to include the complete raw current extract.
- Set the maximum records and concurrency.
- Click Start.
- 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): checkP, thenS;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 tier | Price 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
- Create an Apify Task containing your known KRS-number list.
- Schedule the Task daily, weekly, or monthly.
- Export each run dataset to Google Sheets, a warehouse, or object storage.
- Join snapshots on
krsNumberand comparelatestEntryNumber,latestEntryDate, legal identity, address, and representative fields. - 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 osfrom apify_client import ApifyClientclient = 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().itemsprint(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.
Related Automation Lab Actors
- Poland KRS Financial Statements Scraper — export KRS financial-filing mentions for known identifiers.
- VIES EU VAT Number Scraper — validate EU VAT registrations for a complementary business-verification workflow.
Choose this Actor for current Polish KRS legal identity and representation data. Choose the financial Actor when the primary job is filing-document discovery.