TL;DR
- KNF (Komisja Nadzoru Finansowego) prowadzi rejestry wszystkich nadzorowanych podmiotów finansowych w Polsce
- Ponad 75 000 podmiotów w 3 rejestrach - bez oficjalnego API
- Portale webowe używają nieudokumentowanych JSON API za jQuery DataTables - bez uwierzytelniania
- Zbudowałem aktora na Apify, który odpytuje wszystkie 3 rejestry i zwraca JSON za $0.008 za podmiot
Dlaczego KNF Nie Ma Publicznego API
Pracujesz w fintech compliance i musisz regularnie odpowiadać na pytanie: "Czy ta firma ma licencję KNF?"
KNF - Komisja Nadzoru Finansowego - odpowiada za nadzór nad bankami, zakładami ubezpieczeń, firmami inwestycyjnymi, instytucjami płatniczymi i rynkiem kapitałowym w Polsce. Powstała w 2006 roku z połączenia trzech oddzielnych regulatorów (bankowego, ubezpieczeniowego i papierów wartościowych). Dzisiaj nadzoruje cały polski sektor finansowy.
Mimo skali tej roli regulacyjnej, KNF nie oferuje publicznego API. Zamiast tego prowadzi trzy oddzielne portale, każdy obsługujący inny segment rynku finansowego:
-
e-RUP (
e-rup.knf.gov.pl) - ~17 000 rekordów: instytucje płatnicze, pieniądza elektronicznego, dostawcy AIS -
RPKIP (
rpkip.knf.gov.pl) - ~58 000 rekordów: agenci ubezpieczeniowi, brokerzy, pośrednicy reasekuracyjni -
RDL (
rdl.knf.gov.pl) - ~250 rekordów: instytucje pożyczkowe (lombardy, firmy pożyczkowe)
Każdy portal ma formularz wyszukiwania. Jedno zapytanie na raz. Brak eksportu hurtowego. Brak dokumentacji API. Jeśli musisz zweryfikować 500 kontrahentów na potrzeby przeglądu compliance, czeka Cię wiele dni ręcznego kopiowania danych.
KNF rejestr scraper: jak działa ukryte API
Wszystkie trzy portale używają tego samego wzorca: biblioteka w2ui JavaScript grid z JSON API pod spodem. Grid wysyła requesty POST do ładowania danych - i te endpointy działają bez przeglądarki.
Format requestu to URL-encoded JSON z protokołem wyszukiwania w2ui:
{
"cmd": "get",
"limit": 500,
"offset": 0,
"search": [
{ "field": "name", "type": "text", "operator": "contains", "value": "mBank" }
]
}
Brak uwierzytelniania. Brak cookies. Brak CSRF. Wystarczy POST z odpowiednim body.
Każdy z trzech rejestrów ma własny bazowy URL, ale struktura zapytań jest identyczna. API zwraca czysty JSON ze wszystkimi danymi podmiotu - numery rejestracyjne, NIP, typy podmiotów, adresy, status i podmioty macierzyste.
Paginacja działa przez standardowe parametry offset i limit. Maksymalny limit to 500 na zapytanie. Przy eksporcie całej bazy scraper iteruje automatycznie przez wszystkie strony, obsługując limity i powtórzenia.
Ważny szczegół: rejestr RPKIP (pośrednicy ubezpieczeniowi) jest największy - ~58 000 rekordów. Pełny eksport trwa kilka minut, ponieważ serwery rządowe ograniczają zapytania hurtowe. Aktor obsługuje to z wbudowanym exponential backoff.
Jak używać KNF rejestr scrapera
Python
from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("minute_contest/knf-registry-scraper").call(
run_input={
"registry": "all", # 'e-rup', 'rpkip', 'rdl' lub 'all'
"name": "mBank",
"maxResults": 100
}
)
items = client.dataset(run["defaultDatasetId"]).list_items().items
for entity in items:
print(f"{entity['name']} | {entity.get('entityTypeLabel')} | {entity['registry']}")
JavaScript (Node.js)
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('minute_contest/knf-registry-scraper').call({
registry: 'all',
name: 'mBank',
maxResults: 100
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach(e => console.log(`${e.name} | ${e.entityTypeLabel} | ${e.registry}`));
Eksport całej bazy 75 000+ podmiotów
run = client.actor("minute_contest/knf-registry-scraper").call(
run_input={"registry": "all", "exportAll": True}
)
# Zwraca całą bazę rejestrów jako JSON
Dane z KNF Scrapera: Co Dostajesz
| Pole | Przykład |
|---|---|
| name | mBank S.A. |
| registryNumber | IP30/2013 |
| nip | 5260200883 |
| entityType | PSD_PI |
| entityTypeLabel | Instytucja płatnicza |
| status | Aktywny |
| address | ul. Prosta 18, Warszawa |
| registrationDate | 2013-12-17 |
| parentEntity | (dla agentów: instytucja macierzysta) |
| registry | e-rup |
Przykład z praktyki: screening compliance w fintech
Wyobraź sobie firmę fintech, która onboarduje partnerów płatniczych w Europie Środkowej. Przed integracją z polską instytucją płatniczą, zespół compliance musi potwierdzić, że podmiot posiada ważną licencję KNF.
Bez automatyzacji analityk otwiera e-rup.knf.gov.pl, wpisuje nazwę firmy, sprawdza status, kopiuje numer rejestracyjny do arkusza i powtarza dla kolejnej firmy. Przy 2-3 minutach na wyszukiwanie, sprawdzenie 200 potencjalnych partnerów zajmuje cały dzień pracy.
Z KNF rejestr scraperem ten sam zespół przekazuje listę nazw firm lub numerów NIP do aktora. Jednym wywołaniem API z exportAll: true otrzymują kompletny zbiór wszystkich licencjonowanych instytucji płatniczych. Prosty filtr po liście partnerów generuje zweryfikowany raport compliance w minuty - nie w godziny.
To podejście wspiera też bieżący monitoring. Uruchamiając aktora co tydzień i porównując wyniki z poprzednim eksportem, można automatycznie wykrywać cofnięcia licencji, nowych uczestników rynku lub zmiany statusu.
Kto Potrzebuje Danych z Rejestrów KNF
- Compliance fintech - weryfikacja, czy partner/konkurent ma ważną licencję KNF
- Zespoły AML/KYC - potwierdzenie, że kontrahent finansowy jest prawidłowo nadzorowany
- Brokerzy ubezpieczeniowi - sprawdzenie statusu rejestracji agentów
- Platformy pożyczkowe - weryfikacja rejestracji instytucji pożyczkowych w RDL
- Raportowanie regulacyjne - hurtowy eksport nadzorowanych podmiotów
- Badania rynkowe - analiza krajobrazu polskich usług finansowych
FAQ
Czy mogę szukać po NIP zamiast po nazwie firmy?
Tak. Aktor akceptuje zarówno name, jak i nip jako parametry wejściowe. Wyszukiwanie po NIP jest dokładne (exact match) i zwraca wyniki szybciej, ponieważ odpytuje unikalny identyfikator. To preferowana metoda, gdy znasz NIP podmiotu.
Jak często dane w rejestrach KNF są aktualizowane?
Portale KNF są aktualizowane przez regulatora w miarę podejmowania decyzji licencyjnych - zazwyczaj w ciągu kilku dni roboczych od decyzji. Nie ma stałego harmonogramu. Dla celów compliance uruchamianie scrapera co tydzień lub przed każdą decyzją onboardingową daje dane bliskie rzeczywistemu czasowi.
Jaka jest różnica między trzema rejestrami (e-RUP, RPKIP, RDL)?
e-RUP obejmuje usługi płatnicze (instytucje płatnicze, pieniądz elektroniczny, usługi informacji o rachunkach). RPKIP obejmuje dystrybucję ubezpieczeń (agenci, brokerzy, pośrednicy reasekuracyjni) - to największy rejestr z ~58 000 rekordów. RDL obejmuje instytucje pożyczkowe (firmy pożyczkowe, lombardy) i jest najmniejszy z ~250 rekordami. Użyj registry: 'all', aby przeszukać wszystkie trzy naraz.
Ceny
| Metoda | Koszt |
|---|---|
| Ręczne wyszukiwanie na portalach KNF | Darmowe (po jednym) |
| Ten aktor | ~13 zł za 1000 podmiotów |
| Eksport całej bazy (75K) | ~960 zł |
Darmowe $5 kredytów Apify = ~625 wyszukiwań za darmo.
Wypróbuj: apify.com/minute_contest/knf-registry-scraper
Ten artykuł jest częścią serii Polish Business Data APIs o programistycznym dostępie do polskich rejestrów publicznych.
Top comments (0)