GUS / REGON API by NIP
REST/JSON, no API key
Company data from Poland's REGON register (GUS BIR) by tax ID (NIP), with a single GET that returns clean JSON. No API key, no sign-up, no daily request limit. It is a layer over the GUS BIR service (SOAP) that handles the login, sessions and XML for you.
One GET, one JSON
The endpoint is public, the method is GET, and the ?format=json parameter returns machine-readable data (without it you get an HTML page for humans):
curl "https://skanfirmy.pl/regon/5260250995?format=json"
You get the official name, REGON number, registered address and legal form, straight from the REGON register kept by Statistics Poland (GUS):
{
"nip": "5260250995",
"source": "regon-gus",
"regon": "012100784",
"dane": {
"regon": "012100784",
"nip": "5260250995",
"nazwa": "ORANGE POLSKA SPÓŁKA AKCYJNA",
"wojewodztwo": "MAZOWIECKIE",
"powiat": "Warszawa",
"gmina": "Ochota",
"miejscowosc": "Warszawa",
"kodPocztowy": "02-326",
"ulica": "Aleje Jerozolimskie",
"nrNieruchomosci": "160",
"typ": "P",
"dataZakonczenia": ""
},
"checkedAt": "2026-08-23"
}
No API key, no sign-up, no limit
The endpoint works right away: no account to create, no API key to generate, no daily request limit to watch. That is a deliberate difference from commercial GUS wrappers: the goal is an integration you can wire up in a minute, including from an AI agent. The service is maintained free of charge; for heavy automated traffic we only ask for common sense (single lookups triggered by users, not bulk scraping).
Instead of GUS BIR SOAP
The official Statistics Poland service is BIR 1.1: SOAP with a Zaloguj → DaneSzukajPodmioty → Wyloguj sequence, a session id in a header, XML envelopes and MTOM responses. It works, but wiring it up can take an afternoon. Our endpoint runs that whole sequence server-side and returns ready JSON, so on your side it stays a single GET.
What /regon/{nip} returns:
| Field | Meaning |
|---|---|
regon | The entity's REGON number |
nazwa | Official name from the REGON register |
wojewodztwo, powiat, gmina, miejscowosc, kodPocztowy, ulica, nrNieruchomosci, nrLokalu | Registered address (for legal persons) |
typ | GUS literal: P — legal person, F — natural person (incl. sole proprietors), LP/LF — local units |
dataZakonczenia | Date business ceased (empty if the entity is active) |
For sole proprietors (natural person, typ: "F") a NIP lookup in the REGON register returns the name, REGON and type; the address fields stay empty (a limitation on the GUS side, not in our layer).
In Python
With the requests library it is a few lines:
import requests
def regon_data(nip: str) -> dict:
r = requests.get(f"https://skanfirmy.pl/regon/{nip}?format=json", timeout=10)
r.raise_for_status()
return r.json()["dane"]
d = regon_data("5260250995")
print(d["nazwa"], "· REGON", d["regon"])
# ORANGE POLSKA SPÓŁKA AKCYJNA · REGON 012100784
An entity that is not in the register returns 404, and a NIP with an invalid checksum returns 400. It is worth handling both instead of assuming every NIP has an entry.
In JavaScript
const r = await fetch("https://skanfirmy.pl/regon/5260250995?format=json");
if (r.ok) {
const { dane } = await r.json();
console.log(dane.nazwa, dane.regon);
}
In PHP
$ch = curl_init("https://skanfirmy.pl/regon/5260250995?format=json");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$dane = json_decode(curl_exec($ch), true)["dane"];
echo $dane["nazwa"] . " · REGON " . $dane["regon"];
More than REGON, from one NIP
If, besides GUS data, you need VAT status and a KRS entry, use /nip/{nip}?format=json: it combines the VAT register (White List, Ministry of Finance), KRS and the REGON number in one response. The other endpoints (all GET → JSON, no key):
/regon/{nip}— data from the REGON register (GUS)/nip/{nip}— VAT status + White List + KRS + REGON/nips/{list}— several NIPs at once (comma-separated)/vies/{country}/{number}— EU VAT number validation (VIES, European Commission)
For AI agents, at https://skanfirmy.pl/mcp there is a Model Context Protocol (MCP) server with a sprawdz_regon tool (and several others for NIP, KRS and VIES), also with no key. A model-readable map of the endpoints is in llms.txt. For a lookup in the UI, use the REGON (GUS) tool.
The public endpoint vs a typical paid GUS API
Most commercial REST wrappers over the GUS register run on a freemium model — an account, an API key and a daily request limit on the free tier. This endpoint is public and free. The differences in short:
| Typical paid GUS API | skanfirmy.pl /regon | |
|---|---|---|
| API key | required | not needed |
| Registration / account | yes | no |
| Free-tier limit | usually yes | no hard limit (please be reasonable) |
| Response format | REST/JSON | REST/JSON |
| MCP server for AI agents | usually none | yes |
| Scope | usually GUS/REGON data only | REGON + VAT White List, KRS, VIES (separate endpoints) |
| Model | freemium / subscription | free |
This is not the official GUS API — the data comes from the same source (the REGON register, BIR service), just exposed with a single GET request.
Where the data comes from, and what this is not
The data comes straight from the REGON register kept by Statistics Poland (GUS) (the BIR service). This is an independent tool; it is not the official GUS API and is not affiliated with it — it only exposes GUS data in a more convenient form. The scope and freshness of the data match the GUS register.
Frequently asked questions
Do I need an API key or to sign up?
No. The /regon/{nip} endpoint is public — it returns JSON once you add ?format=json, with no API key, no account and no daily request limit.
How is this different from the GUS BIR (SOAP) service?
The official GUS BIR 1.1 service is SOAP with login, a session, XML envelopes and MTOM responses. Our endpoint runs that sequence server-side and returns ready JSON, so on your side it stays a single GET request.
How do I get Polish company data from GUS by NIP in JSON?
Send a GET to https://skanfirmy.pl/regon/{NIP}?format=json. The response contains the name, REGON number, registered address and legal form of the entity from the REGON register.
Does it work for sole proprietors?
Yes. For natural persons running a business (typ: "F") the REGON register returns the name, REGON and entity type. The address fields stay empty — a limitation of the data GUS exposes in search, not of our layer.
Is it free to use?
Yes. The endpoint is free and requires no registration. The data comes straight from the REGON register kept by Statistics Poland (GUS).