TL;DR
- Polskie spółki muszą składać roczne sprawozdania finansowe w KRS
- Są publicznie dostępne na
ekrs.ms.gov.pl- ale tylko przez ręczny interfejs webowy - Portal używa szyfrowania AES z kluczem rotowanym co godzinę (opartym na strefie czasowej Warszawa)
- Zbudowałem eKRS sprawozdania finansowe scraper na Apify, który wyciąga ustrukturyzowane dane finansowe (aktywa, pasywa, przychody, zysk netto) za $0.03 za firmę
Czym jest eKRS i dlaczego dostęp do sprawozdań finansowych ma znaczenie
eKRS (Elektroniczny Krajowy Rejestr Sądowy) to elektroniczny portal Krajowego Rejestru Sądowego prowadzony przez Ministerstwo Sprawiedliwości. Od 2018 roku wszystkie polskie spółki z numerem KRS mają obowiązek składania rocznych sprawozdań finansowych elektronicznie przez ten portal. Obejmują one bilans, rachunek zysków i strat oraz informacje dodatkowe.
To tworzy jedną z największych publicznie dostępnych baz danych finansowych firm w Europie Środkowej. Setki tysięcy spółek składają sprawozdania co roku, a wszystkie są dostępne do publicznego wglądu bezpłatnie. Dane obejmują zarówno małe spółki z o.o. z minimalnym przychodem, jak i największe spółki giełdowe w Polsce.
Problem leży w dostępie. Portal ekrs.ms.gov.pl został zaprojektowany do ręcznego przeglądania po jednym dokumencie. Brak eksportu danych, brak masowego pobierania, brak publicznego API. Jeśli budujesz modele ryzyka kredytowego, analizujesz konkurencję w branży lub sprawdzasz setki celów inwestycyjnych - potrzebujesz tych danych w formacie maszynowym, a nie w rządowej aplikacji serwującej XML i XHTML po jednym dokumencie.
Jak działa szyfrowanie AES z rotacją klucza w eKRS
Portal eKRS to aplikacja Angular hostowana na infrastrukturze OpenShift Ministerstwa Sprawiedliwości. Szyfruje numery KRS przed wysłaniem zapytań API - ale z nietypowym mechanizmem.
Klucz szyfrowania zmienia się co godzinę.
Klucz pochodzi z bieżącej daty i godziny w strefie czasowej Warszawa, sformatowanej jako yyyy-MM-dd-HH i dopełnionej do 16 znaków bajtami null. Więc o 14:00 8 kwietnia 2026 w Warszawie klucz to:
2026-04-08-14\x00\x00\x00
O 15:00 klucz rotuje na:
2026-04-08-15\x00\x00\x00
Zapytania z kluczem wygenerowanym z błędną godziną nie przechodzą. Scraper obsługuje konwersję strefy czasowej używając Intl.DateTimeFormat z Europe/Warsaw - to krytyczne dla poprawnego generowania klucza, szczególnie podczas zmian czasu (Polska przechodzi między CET a CEST) i w kontenerach Docker ustawionych na UTC.
Portal implementuje również podpisywanie zapytań i zarządzanie sesją, które muszą być zreplikowane. Każde sprawozdanie finansowe jest przechowywane jako XML (Polskie Standardy Rachunkowości - PSR), XHTML/iXBRL (Międzynarodowe Standardy Sprawozdawczości Finansowej - MSSF) lub okazjonalnie jako skan PDF. Scraper obsługuje wszystkie trzy formaty i normalizuje je do ujednoliconej struktury JSON.
eKRS sprawozdania finansowe: co dostajesz
Aktor parsuje XML (Polskie Standardy Rachunkowości) i XHTML/iXBRL (MSSF) do ujednoliconego formatu JSON:
| Pole | Opis |
|---|---|
| krs | Numer KRS |
| companyName | Pełna nazwa spółki |
| year | Rok sprawozdawczy |
| fileFormat | xml, xhtml lub pdf |
| financials.totalAssets | Aktywa razem |
| financials.fixedAssets | Aktywa trwałe |
| financials.currentAssets | Aktywa obrotowe |
| financials.cashAndEquivalents | Środki pieniężne |
| financials.equity | Kapitał własny |
| financials.longTermLiabilities | Zobowiązania długoterminowe |
| financials.shortTermLiabilities | Zobowiązania krótkoterminowe |
| financials.revenue | Przychody |
| financials.operatingProfit | Zysk operacyjny |
| financials.netProfit | Zysk netto |
Aktor zwraca również surowe źródło XML/XHTML do własnego parsowania - przydatne jeśli potrzebujesz pól wykraczających poza standardowy zestaw, takich jak harmonogramy amortyzacji, rezerwy podatkowe czy raportowanie segmentowe.
Jak używać eKRS sprawozdania finansowe scraper
Python
from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
# Wyszukiwanie po NIP lub KRS
run = client.actor("minute_contest/poland-krs-financial-scraper").call(
run_input={"nip": "5261040828"} # lub krs: "0000019193"
)
items = client.dataset(run["defaultDatasetId"]).list_items().items
for stmt in items:
fin = stmt.get("financials", {})
print(f"{stmt['companyName']} - {stmt['year']}")
print(f" Przychody: {fin.get('revenue')}")
print(f" Zysk netto: {fin.get('netProfit')}")
print(f" Aktywa razem: {fin.get('totalAssets')}")
JavaScript (Node.js)
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('minute_contest/poland-krs-financial-scraper').call({
nip: '5261040828'
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const stmt of items) {
console.log(`${stmt.companyName} - ${stmt.year}`);
console.log(` Przychody: ${stmt.financials?.revenue}`);
console.log(` Zysk netto: ${stmt.financials?.netProfit}`);
}
Praktyczny przypadek: screening kondycji finansowej dostawców
Wyobraź sobie, że zarządzasz zakupami w firmie produkcyjnej z 200 polskimi dostawcami. CFO chce kwartalnego raportu o stabilności finansowej dostawców - czy któryś z nich jest zagrożony niewypłacalnością?
Bez tego scrapera ktoś z Twojego zespołu musiałby odwiedzić ekrs.ms.gov.pl 200 razy, ręcznie wyszukać każdą firmę, pobrać plik XHTML lub XML, a potem jakoś wyciągnąć odpowiednie dane finansowe do arkusza. To zajmuje dni ręcznej pracy i jest podatne na błędy.
Z eKRS scraperem przekazujesz 200 numerów NIP w jednej partii. W ciągu kilku minut dostajesz ustrukturyzowany JSON z aktywami, kapitałem własnym, przychodami i zyskiem netto dla każdego dostawcy. Uruchom prosty filtr: oznacz każdego dostawcę, gdzie kapitał własny jest ujemny, gdzie wskaźnik długu do aktywów przekracza 80% lub gdzie przychody spadły o ponad 30% rok do roku. Masz system wczesnego ostrzegania o ryzyku dostawców - zbudowany w jedno popołudnie za około 25 zł.
Kto potrzebuje danych ze sprawozdań finansowych eKRS
- Ryzyko kredytowe - sprawdź wypłacalność firmy przed podpisaniem umowy lub udzieleniem kredytu
- Analiza konkurencji - monitoruj przychody i rentowność konkurentów w ujęciu wieloletnim
- Screening inwestycyjny - hurtowa analiza kondycji finansowej celów przejęć w danym sektorze
- Due diligence dostawców - zweryfikuj stabilność finansową kluczowych dostawców przed podpisaniem długoletnich kontraktów
- Monitoring portfela - śledź roczne wyniki firm w portfelu inwestycyjnym
Porównanie cen eKRS Scraper
| Metoda | Koszt |
|---|---|
| Ręczne pobieranie z ekrs.ms.gov.pl | Darmowe (po jednym, bez ustrukturyzowanych danych) |
| MGBI API sprawozdania | 900-2200 zł/mies. subskrypcja |
| Ten aktor | ~13 zł za 100 firm |
Darmowe $5 kredytów Apify = ~190 sprawozdań finansowych za darmo.
FAQ
Jakie standardy sprawozdawczości obsługuje scraper?
eKRS sprawozdania finansowe scraper obsługuje zarówno Polskie Standardy Rachunkowości (PSR) składane jako XML, jak i Międzynarodowe Standardy Sprawozdawczości Finansowej (MSSF) składane jako XHTML/iXBRL. Obsługuje też skany PDF, choć ekstrakcja ustrukturyzowanych danych z PDF jest ograniczona. Aktor normalizuje wszystkie formaty do jednego schematu JSON - dostajesz te same nazwy pól niezależnie od formatu źródła.
Za ile lat wstecz są dostępne sprawozdania?
Portal eKRS zawiera sprawozdania finansowe składane od czasu wprowadzenia obowiązku elektronicznego w 2018 roku. Większość spółek ma dostępne dane za 5-7 lat. Niektóre większe spółki, które składały dobrowolnie przed nakazem, mogą mieć starsze rekordy. Scraper zwraca wszystkie dostępne lata dla danej spółki.
Czy mogę szukać po NIP zamiast numeru KRS?
Tak. W odróżnieniu od KRS scraper do danych zarządu, eKRS sprawozdania finansowe scraper akceptuje zarówno NIP (numer identyfikacji podatkowej) jak i numer KRS jako input. To wygodne, bo NIP jest często łatwiej znaleźć - widnieje na fakturach, stronach internetowych i w większości katalogów biznesowych.
Wypróbuj: apify.com/minute_contest/poland-krs-financial-scraper
Ten artykuł jest częścią serii Polish Business Data APIs o programistycznym dostępie do polskich rejestrów publicznych.
Top comments (0)