Poland uses a hybrid approach with two different registries and APIs, routing company lookups based on entity type. For a given entity, data comes from a single source determined by the registration prefix.
KRS (Krajowy Rejestr Sadowy / National Court Register). Operated by the Ministry of Justice, the KRS is the primary source for all legal entities: limited liability companies (sp. z o.o.), joint-stock companies (S.A.), partnerships, associations, foundations, cooperatives, and other registered entities. Data is retrieved from two complementary API endpoints (odpisaktualny for current extracts and danepodmiotu for entity-level data), fetched in parallel with automatic failover. Provides company name, legal form, status, address, capital, activity codes (PKD), management board members, procurators, and shareholders (sp. z o.o. only).
CRBR (Centralny Rejestr Beneficjentow Rzeczywistych / Central Register of Beneficial Owners). Poland’s official UBO registry, mandatory for all entities registered in KRS. Provides ultimate beneficial owner data including ownership percentages, control types (direct/indirect), and management positions. Accessed programmatically.
eKRS Financial Documents Portal (ekrs.ms.gov.pl). Official portal for financial documents filed by KRS companies. Provides annual financial statements, consolidated statements, management reports, auditor opinions, and approval resolutions. Documents may be in XML format (automatically converted to PDF).
biznes.gov.pl API. Government API for the Central Register and Information on Business Activity (CEIDG). Used for search across both registers (KRS + CEIDG) and as the sole data source for sole proprietors. Provides company name, owner name, address, PKD activity codes, status, and basic contact information.
Dual Register System: Poland maintains two separate registers — KRS for legal entities (companies, non-profits, cooperatives) and CEIDG for sole proprietors (individual businesses). Our system uses prefixed identifiers (krs- / nip-) to route requests to the correct register and API.
How does the API choose between KRS and CEIDG?
krs-{number} prefix: Routes to the KRS API. Used for all legal entities registered in the National Court Register (companies, associations, foundations, cooperatives).
nip-{number} prefix: Routes to the biznes.gov.pl API. Used for sole proprietors registered in CEIDG.
The prefix is required because both KRS and NIP numbers are 10-digit identifiers that could collide. Not all KRS entities have a NIP (e.g., some associations and foundations), making KRS the only reliable identifier for those entities.Key Takeaway: Always use the appropriate prefix when querying. Search results from the API already include the correct prefix.
Prefixed identifiers are required. Company IDs must use krs- or nip- prefixes to route to the correct register. Without a prefix, the system cannot determine the data source and will return an error.
KRS Number Padding: KRS numbers are always 10 digits with leading zeros (e.g., 0001010154). When searching by KRS number, shorter inputs are automatically padded to 10 digits.
Search Performance: Use identifier-based searches (KRS, NIP, REGON) for best performance and exact matching. Name searches query biznes.gov.pl and may return multiple results from both KRS and CEIDG registers.
Search queries multiple sources in parallel. For identifier searches, the system queries KRS by KRS number, KRS by NIP, CEIDG by NIP, and CEIDG by REGON simultaneously. Results are deduplicated by ID, with KRS results taking precedence over CEIDG when both match.
The system prioritizes closure dates in the following order:
Deletion finalization date (dataUprawomocnienia in extract header) — highest priority
Register deletion dates (dataWykreslenia from dzial6 KRS/RP deletion records)
Bankruptcy completion date (dataZakonczeniaPostepowania)
CEIDG cancellation/cessation dates (for sole proprietors)
Status classification is AI-enhanced. The local Polish status name from KRS is always preserved verbatim. The AI analyzes the status in context to provide standardized mapping. Deterministic rules (deletion, bankruptcy, liquidation) take precedence before AI enrichment.
Poland ships a closed enum of 51 legal forms sourced directly from the Polish registers. The enum covers the 50 distinct formaPrawna strings the KRS returns, plus one canonical entry for CEIDG sole traders. There is no AI fallback: an unknown value is rejected with invalid at ingestion time so the enum stays accurate and any new form the register introduces surfaces as a deploy blocker.Provenance:
KRS values were harvested from the full July 2024 snapshot of the Krajowy Rejestr Sadowy (849,757 entities across the commercial register RejP and the association register RejS). The top 13 forms cover 99.7% of the register and the full set is 50 distinct strings.
CEIDG sole traders are projected onto a single canonical entry (Osoba fizyczna prowadząca działalność gospodarczą), because the biznes.gov.pl API does not expose a formaPrawna field for CEIDG entries (a sole trader has no entity-level legal form under Polish law).
ISO 20275 (ELF) codes are attached as a cross-reference where GLEIF publishes one. Out of the 51 entries, 33 have an ELF code and 18 do not. GLEIF is not the source of the enum; the register is. We attach ELF codes opportunistically for LEI matching and nothing more.
GLEIF’s ISO 20275 list for Poland is incomplete and is not a safe source of truth. 18 of the 50 KRS-returned forms have no ELF code at all (for example the granular stowarzyszenie subtypes, public-benefit organizations, and church-related entities). This is why the enum is built from the register itself, not from ISO 20275.
Legal representatives are extracted from two KRS data sections: the management board (reprezentacja.sklad) and procurators (prokurenci). Role classification is AI-enriched — the AI analyzes each role in the context of the company’s legal form to assign ISO 5009 codes.
Personal data is redacted at the source by the Polish Ministry of Justice. Verified live on 2026-04-14: every name and PESEL the KRS API returns is masked to the first character (for example W***** L******** and PESEL 6**********). This applies to both the public KRS Open API (api-krs.ms.gov.pl) and the Wyszukiwarka API (wyszukiwarka-krs-api.ms.gov.pl) we use in production. Earlier in 2026 the Wyszukiwarka API returned full unredacted personal data, but the ministry tightened the redaction policy across both endpoints.Implications for the response payload:
legalRepresentatives[].individual.name.firstName and lastName are first-letter masked.
legalRepresentatives[].individual.identifiers.pesel is first-digit masked.
legalRepresentatives[].individual.birthDate and gender are derived from PESEL and therefore unavailable (the masked value cannot be parsed).
shareholders[].individual.name is also redacted for sp. z o.o. shareholder records.
The role (localName and standardized), structural fields, addresses, capital, and dates are all unaffected.
If you need full unredacted board member data for AML or KYC, contact us so we can route the request through a paid Centralna Informacja KRS document order or a licensed third-party data provider. Note that the ultimate beneficial owners datapoint is sourced from CRBR (a separate Polish register) and is not redacted: UBO records still come through with full names, birth dates, and nationalities. UBOs and legal representatives answer different questions and one is not a substitute for the other.
For KRS management board members and procurators, birth dates and gender would normally be extracted from PESEL numbers (Polish Personal Identification Number, 11 digits). The parser is in place, but the field is currently unavailable end-to-end because the KRS API returns PESEL as a single first digit followed by 10 asterisks (6**********). Until the ministry restores full PESEL access, birthDate and gender are not populated for Polish legal representatives.
PESEL format and extraction details (parser, currently dormant)
PESEL format:YYMMDDCCCSS (11 digits)
YY — Year (last 2 digits)
MM — Month (with century indicator: 01-12 = 1900s, 21-32 = 2000s)
DD — Day of birth
CCC — Serial number
S — Gender digit (even = female, odd = male)
S — Checksum digit
When unredacted PESEL becomes available, the parser will extract birth date (year, month, day) and gender for each representative without code changes.
Procurators (authorized signatories) from KRS are mapped as additional legal representatives with the PROKURENT role and standardized as Other. For CEIDG sole proprietors, the entrepreneur is automatically mapped as the sole legal representative with role “Wlasciciel” (Owner).
Other key persons are not currently extracted from Polish registries. All management board members and procurators are mapped as legal representatives.
Shareholders are extracted from the KRS register for sp. z o.o. (Limited Liability Companies) only, from the wspolnicySpzoo section (Section 1 of the KRS extract).
Individual shareholder names are redacted by the KRS API, the same way representative names are. Where the KRS used to return a full first name and surname for an individual shareholder, the API now returns first-character masks (J***** K******). Corporate shareholder records are unaffected: the company name, KRS, NIP and REGON identifiers all come through intact, and you can use those identifiers to fetch the corporate shareholder’s own profile if needed.
Share counts are parsed from Polish KRS text strings using a combination of regex (fast path) and AI (complex cases):
Example Text
Parsed Value
93.387 UDZIALOW O WARTOSCI 4.669.350,00 ZL
93,387 shares
1 UDZIAL O WARTOSCI 50,00 ZL
1 share
500 UDZIALOW
500 shares
10.000 AKCJI
10,000 shares
Polish number format: Poland uses dot (.) as thousands separator and comma (,) as decimal separator. The parser handles this automatically. Share percentages are not directly available from KRS — only absolute share counts are extracted.
Individual and corporate shareholders with share counts
S.A. (Joint-Stock)
No
Shareholders not listed in public KRS register
sp.k. / sp.j. (Partnerships)
No
Partner data not structured in shareholder format
Associations / Foundations
No
Not applicable
CEIDG (Sole Proprietors)
No
Not applicable
For corporate shareholders, Polish identifiers (KRS, NIP, REGON) are included when available. Foreign corporate shareholders without Polish identifiers are included with name only. Share percentages are not directly available from KRS; only share counts are extracted.
UBO data is sourced from CRBR (Centralny Rejestr Beneficjentów Rzeczywistych), the Polish Central Register of Beneficial Owners operated by the Ministry of Finance. CRBR is a separate register from KRS, established under Polish AML law (transposing 4AMLD/5AMLD), and it is mandatory for almost every entity registered in KRS to disclose its beneficial owners there.A beneficial owner in CRBR is the natural person who ultimately owns or controls the entity, defined by the Polish AML act as direct or indirect ownership above 25%, or any other form of effective control. Where no natural person meets that threshold (typical for state-owned entities, listed companies, and complex structures), CRBR records senior managing officials as a fallback per the AML directive.
CRBR is not redacted. Unlike the KRS API, CRBR returns full first names, surnames, birth dates, nationalities, and a description of how control is exercised. The redaction policy the Ministry of Justice applies to KRS does not apply to CRBR, because the whole point of CRBR is to expose this data for AML and KYC compliance.
Each UBO record returned by the API contains:
Field
Source
Notes
name.firstName / lastName / fullName
CRBR
Unredacted
birthDate
CRBR
Day, month, year
nationality
CRBR
ISO 3166-1 alpha-2
control.types[]
CRBR
One or more of ownership-of-shares, significant-influence-or-control, senior-management-position
control.description
CRBR
Polish-language description of how the control is exercised, as filed by the entity
control.details[].nature
CRBR
direct or indirect
control.details[].monetaryAmount
CRBR
When the filing expresses the stake as a PLN or EUR amount instead of a percentage
CRBR returns no UBOs for entities that are exempt from disclosure (state-owned enterprises, the State Treasury, certain public-benefit organizations) or for entities whose ownership chain resolves to a listed parent. In those cases the response contains an empty ultimateBeneficialOwners array, which is correct, not a gap.UBO data is fetched on demand. Use either the dedicated endpoint topo api ubo PL <krs> / GET /v2/company/{id}/ubo, or include ultimateBeneficialOwners in the dataPoints array on a profile request. The ubo_extract document SKU (pol-ubo-data) returns the full CRBR PDF excerpt for filing in compliance dossiers.
Poland uses the PKD (Polska Klasyfikacja Dzialalnosci) classification, which is the Polish adaptation of the European NACE Rev. 2 standard. PKD codes are structurally identical to NACE codes and are mapped directly without transformation.
KRS (przedmiotDzialalnosci) or CEIDG (mainPkd / otherPkd)
62.01.Z
No (official)
ISIC
Derived from NACE or AI-inferred
6201
Sometimes
The KRS provides both the main activity (przedmiotPrzewazajacejDzialalnosci) and secondary activities (przedmiotPozostalejDzialalnosci). CEIDG provides mainPkd (primary) and otherPkd[] (additional).
AI Enrichment: When ISIC codes cannot be derived from NACE via formal mapping tables, the system uses an LLM to match activity descriptions to ISIC Rev. 4 codes. Every activity item includes an isAIInferred flag. PKD/NACE codes are never AI-inferred for Poland.
KRS: roles + structure available; first names, surnames and PESEL are first-character masked at the source. CEIDG: owner mapped from CEIDG metadata.
Shareholders
Yes (sp. z o.o. only, individual names redacted)
No
Only for Limited Liability Companies. Corporate shareholder identifiers (KRS, NIP, REGON) are intact; individual shareholder names are first-character masked.
Other Key Persons
No
No
Not currently extracted
Ultimate Beneficial Owners
Yes
No
From CRBR (Central Register of Beneficial Owners)
Activity Codes
Yes
Yes
PKD codes from KRS or CEIDG
Documents
Yes
Yes
Different document sets per register type
Financial Statements
Yes
No
From ekrs.ms.gov.pl, automatic XML-to-PDF conversion
Establishments
No
No
Not currently extracted
Legend: Yes = Available | No = Not Available | Async = Asynchronous processing
Current KRS Extract availability: The current extract (tradeRegisterExtract) is only available for active companies. Inactive, dissolved, or deleted companies can only access the historical extract (otherDocuments[]), which contains the full history including closure details.
Uchwaly o zatwierdzeniu sprawozdan — Approval Resolutions
Uchwaly o podziale zysku — Profit Distribution Resolutions
Automatic XML-to-PDF Conversion: Financial documents in Poland are often published in XML format using the Ministry of Finance schema. We automatically convert these XML files to human-readable PDF format using the official Polish government visualization tool at e-sprawozdania.mf.gov.pl. Both the original XML and the converted PDF are stored and accessible. If conversion fails, the original XML file is still returned.
Due to technical limitations of the Polish financial documents portal, the document format (XML vs PDF) is not available in the availableDocuments listing. The format field will be undefined during listing and is only determined when the document is actually downloaded.
All examples use placeholder data. Query: POST /v2/company with { "id": "<id>", "countryCode": "PL", "dataPoints": ["company", "legalRepresentatives"] }
Active sp. z o.o. (KRS Company) -- with Shareholders
Note: First names, surnames and PESEL of individual representatives and shareholders are first-character masked at the source by the KRS API. The example above shows the actual on-the-wire shape for a real Polish company today. PESEL-derived birthDate and gender are unavailable for the same reason.
Note: Dissolved companies are mapped from the danepodmiotu endpoint only when the full extract (odpisaktualny) is not available. Shareholders are not available in this case. Only the historical trade register extract is available as a document. Personal data is first-character masked the same way as for active companies.
Note: CEIDG entities have the entrepreneur mapped as the sole legal representative with role “Wlasciciel” (Owner). No shareholders, UBOs, or financial statements are available.
UBO Response (dedicated datapoint)
Query with "dataPoints": ["ultimateBeneficialOwners"]:
Note: UBO records are unredacted and verified live. CRBR is operated by the Polish Ministry of Finance, not by the Ministry of Justice that runs KRS, and the redaction policy on KRS does not apply here.
Note: UBOs are fetched from the CRBR (Central Register of Beneficial Owners). Three control types are recognized: (1) direct ownership of shares/assets, (2) indirect control through controlling entity, (3) senior management position under AML law. Ownership amounts may be in PLN (monetary) or percentage.
Available Documents (KRS Company)
Documents are returned when "dataPoints": ["availableDocuments"] is requested.For active KRS companies:
Company IDs must use krs- or nip- prefixes to route to the correct register. Without a prefix, the system returns an error.
KRS and NIP can collide
Both KRS and NIP are 10-digit numbers. The prefix system prevents ambiguity. Not all KRS entities have a NIP (e.g., associations, foundations).
Shareholders only for sp. z o.o.
Only Limited Liability Companies have shareholder data in KRS. Joint-stock companies, partnerships, and CEIDG entities do not expose shareholder information.
Share percentages unavailable
KRS provides only absolute share counts (e.g., “93.387 shares”), not ownership percentages. The parser extracts the count from Polish text using regex + AI.
Liquidation detected from company name
Companies in liquidation are identified by “W LIKWIDACJI” appearing in the legal name, not from a dedicated status field in KRS.
Legal forms are a closed enum
Poland uses a closed enum of 51 legal forms sourced directly from the registers (50 from the KRS July 2024 snapshot of 849,757 entities plus one canonical CEIDG sole-trader entry). Unknown values are rejected with an invalid error at ingestion time. No AI fallback.
ISO 20275 is incomplete for Poland
GLEIF’s ELF list publishes codes for 33 of the 51 forms; the remaining 18 (granular stowarzyszenie subtypes, public-benefit organizations, church entities) have no ELF. We attach ELF codes where they exist for LEI matching and ignore the gap elsewhere.
Personal data is redacted at the source
Verified live on 2026-04-14: every name and PESEL the KRS API returns is first-character masked (W***** L********, PESEL 6**********). This applies to both the public KRS Open API and the Wyszukiwarka API we use in production. Names of board members, procurators, individual shareholders, and PESEL-derived birth date and gender are therefore unavailable until the ministry restores access. Roles, addresses, capital, identifiers, and structural fields are unaffected.
PESEL parser is dormant
The PESEL-to-birth-date and PESEL-to-gender parser is in place but unreachable in practice because PESEL is masked at the source. When unredacted PESEL becomes available again, the parser will populate birthDate and gender without code changes.
Procurators as legal representatives
Procurators (authorized signatories) from KRS are mapped as additional legal representatives with the PROKURENT role, standardized as Other.
Financial documents may be XML
Financial statements from the Ministry of Finance portal may be in XML format. The system automatically converts XML to PDF, but the format is unknown until download.
KRS API resilience
The KRS API uses parallel request attempts (3 concurrent per endpoint) with automatic failover. Both odpisaktualny and danepodmiotu endpoints are fetched in parallel for maximum data coverage.
CEIDG data is limited
CEIDG (sole proprietor) profiles have significantly less structured data than KRS companies. No shareholders, UBOs, or financial statements are available. The owner is mapped as the sole legal representative.
PKD codes = NACE codes
Polish PKD classification is structurally identical to NACE Rev. 2. PKD codes are mapped directly as NACE codes without transformation.
Dissolved companies use fallback endpoint
When a company is dissolved, the full KRS extract (odpisaktualny) may not be available. The system falls back to danepodmiotu which provides limited data (no shareholders, limited representatives).
Current extract only for active companies
The Aktualny odpis z KRS (current trade register extract) is unavailable for closed/dissolved companies. Use the historical extract instead.
UBO data from CRBR
UBO data is fetched from the CRBR registry. This may occasionally be slower than direct API calls.