KRS ma oficjalne API — i to jest dobra wiadomość
Ministerstwo Sprawiedliwości udostępnia dane Krajowego Rejestru Sądowego przez publiczne API zwracające odpis w formacie JSON. Nie trzeba niczego scrapować, nie trzeba parsować PDF-ów, nie trzeba obchodzić zabezpieczeń. Dane są jawne z mocy ustawy o KRS, a interfejs jest przewidziany do użytku maszynowego.
To warto powiedzieć wprost, bo krąży przekonanie, że dane z KRS „trzeba wyciągać”. Nie trzeba. Trzeba je poprawnie odpytać.
Endpoint OdpisAktualny na api-krs.ms.gov.pl — dokumentacja w pigułce
Konkret, którego zwykle szuka integrator. Odpis aktualny pobiera się jednym żądaniem GET, bez klucza i bez rejestracji:
GET https://api-krs.ms.gov.pl/api/krs/OdpisAktualny/{numerKRS}?rejestr=P&format=json
- {numerKRS} — dziesięciocyfrowy numer KRS z zerami wiodącymi (np. 0000123456). Po NIP ani REGON ten endpoint nie wyszukuje.
- rejestr —
Pdla rejestru przedsiębiorców,Sdla stowarzyszeń, fundacji i innych organizacji. - format —
json. - Odpis pełny: ta sama składnia, ścieżka
/api/krs/OdpisPelny/….
Odpowiedź to obiekt odpis z nagłówkiem i danymi ułożonymi tak jak działy odpisu papierowego:
{
"odpis": {
"naglowekA": { "dataRejestracjiWKRS": "…", "stanZDnia": "…" },
"dane": {
"dzial1": {
"danePodmiotu": { "nazwa": "…" },
"kapital": { "wysokoscKapitaluZakladowego": { "wartosc": "…", "waluta": "PLN" } }
},
"dzial2": { … reprezentacja … },
"dzial4": { "zaleglosci": [ … ] },
"dzial6": { … likwidacja, upadłość … }
}
}
}
Trzy rzeczy, które warto wiedzieć, zanim kod trafi na produkcję — wszystkie trzy zmierzone na własnej integracji, nie z dokumentacji:
- 404 to poprawna odpowiedź, znaczy „nie ma podmiotu o tym numerze”. Traktowanie jej jak awarii zapisze zdrowe odpowiedzi rejestru jako błędy i zaśmieci monitoring.
- Kwoty są tekstem w formacie polskim („50 000,00”) — przed liczeniem trzeba zdjąć spacje i zamienić przecinek na kropkę.
- Ustaw twardy timeout (u nas 15 s). API bywa wolne w godzinach szczytu, a żądanie bez limitu potrafi wisieć i blokować wątek.
Pierwsza ściana: masz NIP, rejestr chce KRS
W praktyce integracja zaczyna się od tego, co masz w swoim systemie — a masz NIP. Kontrahent podaje NIP na fakturze, w formularzu, w umowie. Numeru KRS zwykle nie podaje nikt, bo nikt go nie pamięta.
Tymczasem API KRS operuje numerem KRS. Żeby zapytać o firmę po NIP, potrzebujesz najpierw mostu NIP → KRS. Buduje się go przez rejestr REGON (GUS BIR), który przyjmuje NIP i zwraca m.in. numer KRS. Czyli jedno pytanie biznesowe („co wiadomo o tej firmie”) to w rzeczywistości dwa zapytania do dwóch różnych rejestrów, z których każdy ma inny format, inne uwierzytelnianie i inne limity.
To jest typowy koszt ukryty integracji z rejestrami publicznymi: nie w tym, że danych nie ma, tylko że są rozrzucone i nie rozmawiają ze sobą.
Odpis aktualny kontra pełny — kiedy który
- Odpis aktualny — stan na dziś: reprezentacja, siedziba, kapitał, PKD, wspólnicy. To jest to, czego potrzebujesz w 90% przypadków, w tym do sprawdzenia, kto może podpisać umowę.
- Odpis pełny — dodatkowo historia zmian: kto był w zarządzie wcześniej, jak zmieniał się kapitał, kiedy zmieniano siedzibę. Potrzebny przy due diligence i przy pytaniu „czy w tej spółce ostatnio coś się nie posypało”.
Rotacja w zarządzie sama w sobie nie jest sygnałem ostrzegawczym. Trzy zmiany prezesa w dwanaście miesięcy — już tak. Tego nie zobaczysz w odpisie aktualnym.
Dlaczego scraper to zły pomysł, nawet gdy działa
Kuszące jest napisanie skryptu, który klika po wyszukiwarce i wyciąga HTML. Trzy powody, dla których to się nie opłaca:
- Kruchość. Zmiana klasy CSS albo kolejności pól wywraca parser. Dowiesz się o tym w produkcji, od klienta.
- Blokady. Portale rejestrowe stoją za zabezpieczeniami przed automatami. Obejście zabezpieczenia to już inna kategoria problemu niż pobranie danych.
- Brak semantyki. HTML nie odróżnia „rejestr odpowiedział, że firmy nie ma” od „rejestr nie odpowiedział”. A ta różnica potrafi kosztować.
Ostatni punkt jest najważniejszy i najczęściej pomijany — pisaliśmy o nim osobno: not_found kontra unavailable.
Jak to wygląda, gdy most jest już zbudowany
W DebtStrike Rejestry API most NIP → KRS jest po naszej stronie. Pytasz jednym identyfikatorem — NIP, KRS albo REGON — a w odpowiedzi dostajesz odpis w ustandaryzowanej kopercie, tej samej dla wszystkich siedmiu rejestrów, z datą ważności danych i notą o źródle wymaganą ustawą o otwartych danych.
Szczegóły parametrów i przykłady odpowiedzi: dokumentacja KRS API.
Jedno API do siedmiu polskich rejestrów publicznych.
KRS, biała lista VAT, REGON/GUS, CEIDG, CRBR, BZP i SUDOP — wspólna koperta odpowiedzi, jedno uwierzytelnianie, rozliczenie 1 zapytanie = 1 jednostka.
Zobacz dokumentację API →Materiał ma charakter informacyjny. Dane KRS są jawne na podstawie ustawy o Krajowym Rejestrze Sądowym, a ich źródłem jest Ministerstwo Sprawiedliwości. DebtStrike nie jest źródłem danych rejestrowych — odpowiada za ich pobranie, normalizację i oznaczenie czasem ważności.