# Polish REGON Scraper - GUS Business Registry (no API key) (`regdata/polish-regon-scraper`) Actor

Scrape Poland's REGON (GUS) registry anonymously: look up by NIP/REGON/KRS, discover companies by address + PKD, and get local units (jednostki lokalne) as separate rows. No API key required.

- **URL**: https://apify.com/regdata/polish-regon-scraper.md
- **Developed by:** [getregdata](https://apify.com/regdata) (community)
- **Categories:** Lead generation, Automation, Agents
- **Features:** Limited permissions
- **Stats:** 23 total users, 6 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Polish REGON Scraper - GUS Business Registry | Wyszukiwarka REGON (baza firm GUS)

Look up any Polish company in the official **REGON** business registry (GUS) by NIP, REGON, or KRS - structured JSON with identifiers, legal form, ownership, full address, registration dates, and PKD codes. Unlike the official BIR web service (which makes you register for a key tied to your identity), this needs **no key, no registration, nothing to configure** - and it returns **local units (jednostki lokalne) as separate rows**, so you see every branch, not just the headquarters.

### What data do you get?

One record per entity or local unit:

```json
{
  "regon": "000010205",
  "regon14": "00001020500190",
  "nip": "5260006841",
  "name": "BANK POLSKA KASA OPIEKI SPÓŁKA AKCYJNA - ODDZIAŁ W ŁODZI",
  "recordType": "LOCAL_UNIT",
  "parentRegon": "000010205",
  "legalForm": "spółka akcyjna",
  "ownershipForm": "Własność krajowych osób fizycznych",
  "pkdMain": { "code": "64.19.Z", "name": "Pozostałe pośrednictwo pieniężne" },
  "voivodeship": "ŁÓDZKIE",
  "county": "Łódź",
  "city": "Łódź",
  "postalCode": "90-001",
  "street": "ul. Piotrkowska",
  "buildingNumber": "12",
  "registrationDate": "1998-01-29",
  "activityStartDate": "1929-10-17",
  "website": "www.pekao.com.pl",
  "scrapeStatus": "full",
  "scrapedAt": "2026-05-26T08:00:00.000Z"
}
```

| Field | Description |
|-------|-------------|
| `regon` / `regon14` | 9-digit REGON / 14-digit REGON (local units) |
| `nip` | Polish Tax ID |
| `name` | Entity or local-unit name |
| `recordType` | `HQ` (legal entity) or `LOCAL_UNIT` (jednostka lokalna) |
| `parentRegon` | Parent company REGON for a local unit |
| `legalForm` / `legalFormDetail` | Basic and detailed legal form |
| `ownershipForm` | Ownership form (forma własności) |
| `voivodeship` / `county` / `municipality` / `city` | Address names |
| `postalCode` / `street` / `buildingNumber` / `unitNumber` | Address detail |
| `terytVoivodeship` / `terytCounty` / `terytMunicipality` | TERYT codes |
| `pkdMain` / `pkd` | Main PKD `{code, name}` and full PKD list |
| `registrationDate` / `establishedDate` / `activityStartDate` / `endedDate` | Dates |
| `phone` / `email` / `website` | Contact details where published |
| `localUnitsCount` / `activitiesCount` | Counts from the report |
| `scrapeStatus` / `scrapedAt` | Per-record status and timestamp |

### How much does the REGON data cost?

**Pay per result** - you are not charged for Apify platform usage, only a fixed price per record. The price drops on higher Apify subscription tiers.

| Volume | Cost |
|--------|------|
| 1 result | $0.004 |
| 100 results | ~$0.40 |
| 1,000 results | ~$4.00 |
| 10,000 results | ~$40.00 |

There is effectively **no start fee** (only Apify's synthetic $0.00005 start event). Apify's $5 monthly free credit covers roughly **1,250 results**. No subscription, no minimum.

### Is it legal, and where does the data come from?

Data comes from the official **REGON** register (Krajowy Rejestr Urzedowy Podmiotow Gospodarki Narodowej) at [wyszukiwarkaregon.stat.gov.pl](https://wyszukiwarkaregon.stat.gov.pl/), maintained by **GUS** (Glowny Urzad Statystyczny / Statistics Poland). The registry is public - the actor reads only what GUS publishes openly. Extraction of this public data is permitted; you remain responsible for lawful, GDPR-compliant use of any personal data (e.g. sole-trader details) downstream.

### How do I use it?

Click **Try it** and paste this input:

```json
{ "searchMode": "nip", "identifiers": ["5260250995"] }
```

Look up by REGON or KRS by changing `searchMode`, and pass many identifiers in `identifiers` to enrich a whole list in one run.

### Input options

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `searchMode` | string | No | `nip` | `nip`, `regon`, or `krs` |
| `identifiers` | array | Yes | - | List of NIP / REGON / KRS numbers to look up |
| `pkdSections` | array | No | - | Keep only records in these PKD 2007 sections (A-U) |
| `pkdCodes` | array | No | - | Keep only records whose PKD starts with one of these |
| `pkdMatch` | string | No | `any` | `any` = any reported PKD; `main` = only the main PKD |
| `legalForms` | array | No | - | Keep only entities whose legal form contains a phrase |
| `fetchFullReport` | boolean | No | `true` | Fetch each entity's full REGON report |
| `fetchPkd` | boolean | No | `true` | Fetch PKD activity codes |
| `includeLocalUnits` | boolean | No | `true` | Include local units as separate rows |
| `maxResults` | integer | No | `0` | Max records (0 = unlimited) |

Search modes: `nip` (by tax ID), `regon` (by REGON, incl. local units), `krs` (by court-register number). Each takes the `identifiers` array.

### Local units, not just headquarters

Most tools return only a company's registered seat. This actor returns every **local unit (jednostka lokalna)** as its own row - each physical branch or establishment with its own 14-digit REGON and address, linked to the parent through `parentRegon`. That is a real "one row per location" view of a company's footprint, which matters for site-level lead-gen, territory mapping, and physical-presence checks. Turn it off with `includeLocalUnits: false` if you only want headquarters.

### What you can do with it

- **B2B lead generation** - build targeted company lists by region and industry, filtering on PKD sections/codes.
- **KYB / company verification** - confirm a company's identity, legal form, and status by NIP, REGON, or KRS.
- **CRM enrichment** - append official identifiers, structured address (with TERYT codes), and PKD to your records.
- **Territory & market mapping** - map business density and industry distribution across a region, down to branch level.
- **Bulk validation** - clean and enrich thousands of NIP/REGON/KRS numbers in one run.

### Run it from code

```bash
## cURL - start a run and get the dataset back
curl -X POST "https://api.apify.com/v2/acts/regdata~polish-regon-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "searchMode": "nip", "identifiers": ["5260250995"] }'
```

```javascript
// Node.js - apify-client
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('regdata/polish-regon-scraper').call({ searchMode: 'nip', identifiers: ['5260250995'] });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

```python
## Python - apify-client
from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("regdata/polish-regon-scraper").call(run_input={"searchMode": "nip", "identifiers": ["5260250995"]})
items = client.dataset(run["defaultDatasetId"]).list_items().items
```

### Integrations

Runs anywhere Apify does: call it from the **REST API**, **schedule** recurring enrichment, pipe results into **n8n / Make / Zapier**, or use it from any **MCP client** (Claude, Cursor) via [mcp.apify.com](https://mcp.apify.com).

### FAQ

**Is it legal to scrape REGON?** Yes. REGON is the official public business register published by GUS. Extraction of public data is permitted; you remain responsible for lawful, GDPR-compliant use of any personal data downstream.

**Do I need a key or registration, like the official BIR service?** No. The official BIR API makes you register for a user key tied to your identity. This actor needs no key and no registration - just an Apify account.

**What export formats are supported?** JSON, CSV, Excel, or XML, or read live via the API.

**How do I get every branch, not just the HQ?** Leave `includeLocalUnits: true` (the default). Each local unit comes back as its own row with a 14-digit REGON and `parentRegon`.

**Can I filter by industry?** Yes. Set `pkdSections` (A-U) or `pkdCodes` (prefix match). Keep `fetchPkd: true` so the filter has data to match on.

**Can I search by name or address?** No - lookup is by identifier (NIP / REGON / KRS). The official keyed REGON service does not support name or address search either.

### Limitations

- Lookup is by identifier (NIP / REGON / KRS); name and address search are not supported by the source register.
- PKD and legal-form filters are applied per record, so keep `fetchPkd: true` for PKD filtering to take effect.
- Employment figures are confidential in REGON and are not returned.

### Related actors

Part of a suite of official government registry actors - **no public API to build or maintain**, pay per result, nothing to configure.

| Country | Actors |
|---|---|
| Poland | [BDO](https://apify.com/regdata/bdo-waste-registry-scraper) · [CRBR](https://apify.com/regdata/crbr-beneficial-owners-scraper) · [KRS (financials)](https://apify.com/regdata/poland-krs-financial-scraper) · [EKW](https://apify.com/regdata/ekw-ksiegi-wieczyste-scraper) · [KNF](https://apify.com/regdata/knf-registry-scraper) · [KRS (board)](https://apify.com/regdata/krs-fullnames-scraper) · [KRZ](https://apify.com/regdata/krz-debtor-scraper) · [MSiG](https://apify.com/regdata/msig-scraper) · [KYB check](https://apify.com/regdata/poland-kyb-check) · [PEP (Sejm)](https://apify.com/regdata/poland-parliamentary-pep-scraper) · [REGON (sites)](https://apify.com/regdata/polish-premises-prospector) · **REGON (this actor)** · [UOKiK](https://apify.com/regdata/uokik-clauses-scraper) |
| Germany | [Insolvenzbekanntmachungen](https://apify.com/regdata/germany-insolvency-scraper) · [Handelsregister](https://apify.com/regdata/germany-handelsregister-scraper) |
| Spain | [BORME](https://apify.com/regdata/borme-corporate-acts-scraper) · [Registro Mercantil](https://apify.com/regdata/spain-company-directory-scraper) · [Registro Público Concursal](https://apify.com/regdata/spain-concursal-scraper) |
| Italy | [INI-PEC](https://apify.com/regdata/italy-pec-lookup) · [Registro Imprese](https://apify.com/regdata/italy-registro-imprese-scraper) |
| Austria | [Ediktsdatei](https://apify.com/regdata/austria-ediktsdatei-scraper) · [WKO](https://apify.com/regdata/wko-business-directory-scraper) |
| France | [Societe.com](https://apify.com/regdata/societe-com-scraper) |
| Belgium | [KBO / BCE](https://apify.com/regdata/belgium-kbo-company-scraper) |
| Czechia | [ISIR](https://apify.com/regdata/czech-isir-insolvency-scraper) |
| Slovakia | [RPVS](https://apify.com/regdata/slovakia-rpvs-ubo-scraper) |
| Cyprus | [DRCOR](https://apify.com/regdata/cyprus-drcor-company-scraper) |
| Ireland | [CRO](https://apify.com/regdata/ireland-cro-company-scraper) |
| Portugal | [Publicações MJ](https://apify.com/regdata/portugal-corporate-acts-scraper) |
| Nigeria | [CAC](https://apify.com/regdata/nigeria-cac-company-scraper) |
| Colombia | [RUES](https://apify.com/regdata/colombia-rues-company-scraper) |
| USA | [California SoS](https://apify.com/regdata/california-sos-business-scraper) · [California UCC](https://apify.com/regdata/california-ucc-lien-scraper) |
| UAE | [ADGM](https://apify.com/regdata/uae-adgm-public-register-scraper) |
| Global | [Adverse media](https://apify.com/regdata/adverse-media-screener) |

**Common combinations:** company register -> [UBO](https://apify.com/regdata/crbr-beneficial-owners-scraper) -> [insolvency/debtors](https://apify.com/regdata/krz-debtor-scraper) -> [adverse media](https://apify.com/regdata/adverse-media-screener) is the standard KYB/onboarding chain.

For Poland that whole chain is one call: [Poland KYB Risk Check](https://apify.com/regdata/poland-kyb-check) takes a NIP or KRS and returns identity, beneficial owners and insolvency - screened against the company **and every beneficial owner** - as a single verdict. The component registry lookups it runs bill as usual, plus a small orchestration fee.

> Full suite: [apify.com/regdata](https://apify.com/regdata) · Callable from any MCP client via [mcp.apify.com](https://mcp.apify.com)

### Informacje po polsku

#### Czym jest ten aktor?

Ten aktor to **wyszukiwarka REGON** - automatyczny dostep do oficjalnej **bazy firm GUS**. Sprawdz dowolny podmiot po **NIP, REGON lub KRS**. W przeciwienstwie do uslugi BIR, **nie wymaga klucza ani rejestracji** - nie musisz podawac swoich danych.

#### Co wyroznia ten aktor?

Zwraca **jednostki lokalne** jako osobne wiersze - kazdy oddzial firmy z wlasnym numerem REGON i adresem, powiazany z firma macierzysta przez `parentRegon`. To widok "jeden wiersz na lokalizacje", a nie tylko siedziba.

#### Dla kogo?

Do **generowania leadow B2B**, **weryfikacji kontrahenta (KYB)**, **wzbogacania danych w CRM** oraz **analizy rynku**. Dane jako ustrukturyzowany JSON gotowy do CSV, Excela lub integracji przez API. Placisz wylacznie za wyniki - bez abonamentu.

***

### Wyszukiwarka REGON - baza firm GUS przez API

Automatyczny dostep do rejestru REGON prowadzonego przez GUS: dane firm po NIP, REGON i KRS, kody PKD, jednostki lokalne jako osobne wiersze. Bez klucza API, bez rejestracji. Idealne do generowania leadow, weryfikacji kontrahentow (KYB) i wzbogacania danych. Rozliczenie wylacznie za uzycie.

# Actor input Schema

## `searchMode` (type: `string`):

How to look up companies: by NIP, REGON, or KRS number.

## `identifiers` (type: `array`):

The NIP, REGON, or KRS numbers to look up (one search mode at a time).

## `pkdSections` (type: `array`):

Keep only records with a PKD code in these PKD 2007 sections. C=Manufacturing, G=Trade, H=Transport, etc. Requires fetchPkd.

## `pkdCodes` (type: `array`):

Keep only records whose PKD code starts with one of these (e.g. "10", "62.01"). Requires fetchPkd.

## `pkdMatch` (type: `string`):

'main' = only the main (przeważająca) PKD must match; 'any' = any reported PKD may match.

## `legalForms` (type: `array`):

Keep only entities whose legal form contains one of these phrases (e.g. "spółka z ograniczoną", "spółka akcyjna").

## `fetchFullReport` (type: `boolean`):

Fetch each entity's full REGON report (legal form, ownership, dates, contact, full address). Adds one request per record.

## `fetchPkd` (type: `boolean`):

Additionally fetch each entity's PKD activity codes (main + secondary).

## `includeLocalUnits` (type: `boolean`):

Include each entity's local units (jednostki lokalne) as separate rows (recordType=LOCAL_UNIT, with parentRegon).

## `maxResults` (type: `integer`):

Maximum records to emit (0 = unlimited). Bounds cost on large regions.

## `minIntervalMs` (type: `integer`):

Delay between requests in milliseconds. Keep the default for reliable runs.

## `proxyConfiguration` (type: `object`):

Optional proxy settings. The default works for most runs.

## Actor input object example

```json
{
  "searchMode": "nip",
  "identifiers": [
    "5260250995"
  ],
  "pkdMatch": "any",
  "fetchFullReport": true,
  "fetchPkd": true,
  "includeLocalUnits": true,
  "maxResults": 25,
  "minIntervalMs": 350,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `companies` (type: `string`):

REGON records stored in the default dataset. See the dataset schema for the full field list and the 'overview' table view.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "identifiers": [
        "5260250995"
    ],
    "maxResults": 25
};

// Run the Actor and wait for it to finish
const run = await client.actor("regdata/polish-regon-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "identifiers": ["5260250995"],
    "maxResults": 25,
}

# Run the Actor and wait for it to finish
run = client.actor("regdata/polish-regon-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "identifiers": [
    "5260250995"
  ],
  "maxResults": 25
}' |
apify call regdata/polish-regon-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,regdata/polish-regon-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/W8hg34uhdxvf6nPpM/builds/85iw0KLjjOExnq75K/openapi.json
