DebtStrike

Jak pobrać dane z KRS przez API — REST, JSON, bez scrapowania

Dane z KRS są jawne i dostępne maszynowo — problem zaczyna się przy pierwszej integracji: masz NIP, a rejestr chce numeru KRS.

10 sierpnia 2026 · 7 min czytania · ← wszystkie artykuły

BigDebt · Kontrahent nie zapłacił w terminie? Zgłoś to bezpłatnie — zgłoszenia wierzycieli budują bazę dyscypliny płatniczej obok KRS, VAT i KRZ.

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 — P dla rejestru przedsiębiorców, S dla 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.