DEV Community

Cover image for eKRS Scraper: Sprawozdania Finansowe z KRS
Peter
Peter

Posted on • Originally published at apify.com

eKRS Scraper: Sprawozdania Finansowe z KRS

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
Enter fullscreen mode Exit fullscreen mode

O 15:00 klucz rotuje na:

2026-04-08-15\x00\x00\x00
Enter fullscreen mode Exit fullscreen mode

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')}")
Enter fullscreen mode Exit fullscreen mode

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}`);
}
Enter fullscreen mode Exit fullscreen mode

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)