# Polish Premises Prospector - REGON jednostki lokalne (`regdata/polish-premises-prospector`) Actor

Build prospect lists at the physical-site level from the Polish REGON registry. One row per premise (jednostka lokalna) with industry (PKD), address, company age, and ownership, filterable by region (TERYT).

- **URL**: https://apify.com/regdata/polish-premises-prospector.md
- **Developed by:** [getregdata](https://apify.com/regdata) (community)
- **Categories:** Automation, Developer tools, Lead generation
- **Stats:** 3 total users, 2 monthly users, 95.2% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 premises

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Polish Premises Prospector - Site-Level REGON (jednostki lokalne)

Build B2B prospect lists in Poland at the **individual physical-site level** - one row per
premise (*jednostka lokalna*), not just the registered company HQ. For each company you seed,
this actor expands it into **every physical location** registered in the official GUS REGON
registry, with the attributes you need to filter and prioritize:

- **Industry** - per-site PKD activity code + name (each premise can have its own activity)
- **Address** - full readable address (województwo, powiat, gmina, city, street, number, postcode)
- **Region** - TERYT symbols for precise filtering by voivodeship / county
- **Company age** - registration / start date of both the site and the parent company
- **Ownership** - parent legal form and ownership form (e.g. private, foreign, State Treasury)
- **Headcount** *(optional, company-level proxy)* - see "Headcount" below

Output is one row per premise plus the company HQ, ready for CSV/Excel/API.

### Why site-level?

REGON registers **local units** (*jednostki lokalne*) separately from the legal entity. Each
gets its own 14-digit REGON, its own address, and its own PKD activity. A bank has hundreds of
branches; a manufacturer has plants and warehouses at different addresses. Filtering the legal
entity alone only ever returns the HQ - this actor returns the **actual workplaces**.

### How it works

````

seed identifiers ──▶ public GUS REGON registry ──▶ entity report + entity PKD
(anonymous, no API key)       + local-unit list (every premise)
\+ per-site report + PKD
──▶ one row per premise (HQ + jednostki lokalne)
──▶ filter by region (TERYT) and site type (PKD)
──▶ optional per-site headcount overlay (footprint / LinkedIn)

````

**No API key required.** This actor reads the public REGON registry anonymously (it does not use
the registered BIR web-service key). You **seed** the companies to examine (see Discovery), and the
actor expands each into its premises and filters them.

### Input

| Field | Description |
|---|---|
| `seedIdentifiers` | List of NIP / REGON / KRS (auto-detected by shape). |
| `seedDatasetId` | Apify dataset ID to read identifiers from (chain in a regional search / KRS export). |
| `seedIdType` | How to read 10-digit ids (`auto` / `nip` / `regon` / `krs`). NIP and KRS are both 10 digits. |
| `regions` | Presets `warszawa`, `lodz`, `kutno`, or `{ "woj": "10", "powiat": "03" }`. Empty = all Poland. |
| `siteTypes` | `factory`, `warehouse`, `clinic`, `school`, `coliving`. Empty = all industries. |
| `pkdCodes` | Explicit PKD prefixes, e.g. `"86"`, `"8610"`, `"5210B"`. |
| `fetchSitePkd` | Fetch each premise's own PKD (one extra call/premise). Off = inherit company PKD. |
| `includeHeadcount` | Attach a per-site headcount signal (footprint for industrial, LinkedIn for white-collar; see below). |
| `headcountMethod` | `auto` (default), `footprint`, `linkedin`, or `none`. |
| `maxResults`, `minIntervalMs` | Output cap and politeness delay between requests. |

### Discovery: how to seed a regional list

The actor works on real public registry data with **no key or sandbox** to worry about. Get your
seed universe from one of:

1. **The companion `polish-regon-scraper` actor (recommended)** - run a by-address / by-PKD
   discovery there, then pass its dataset id as `seedDatasetId`. This actor reads `nip`/`regon`/`krs`
   from each item. The two actors share the same anonymous REGON client.
2. **A KRS export or your own prospect list** - drop the identifiers into `seedIdentifiers`.
3. **A paid GUS bulk data order** - the cleanest way to get the full local-unit universe for a
   region (statistical confidentiality applies, so no headcount).

### Headcount (read this)

No source publishes a **verified per-site headcount** for Poland - REGON's employment figure
is legally confidential. So instead of pretending otherwise, every enriched row carries a
`headcountBasis` that tells you exactly how much of the number is *sourced* vs *modeled*:

| `headcountBasis` | What it means | Method | Best for |
|---|---|---|---|
| `reported-proxy` | A real, sourced **count** (a tally of actual LinkedIn profiles for the company in that city) | LinkedIn employees-by-city | Offices, clinics, schools, universities |
| `modeled-estimate` | A number **we compute** (building footprint ÷ employment density, ±50-100%) | OSM footprint | Factories, warehouses, DCs |
| *(none, `unknown`)* | No signal available | - | - |

`headcountMethod=auto` routes white-collar site types to the LinkedIn city-count (the primary,
sourced signal). For each company we **resolve the canonical LinkedIn page** before counting:
first by name (`harvestapi/linkedin-company`, validated by website-domain / name overlap), then -
if the legal name is too far from the brand - by **website domain** (`s-r/free-linkedin-company-finder`,
e.g. `pkobp.pl` -> `/company/pko-bp`). A low-confidence match is rejected (-> `unknown`) rather
than returned as a wrong number. We then count employees by the resolved URL, filtered to the
site's city. **Caveats:** it's a per-*city* count (not split between two sites in the same city)
and undercounts blue-collar sites. Counting uses `harvestapi/linkedin-company-employees` at
~**$0.02/company-city** (the count is read from the run log, so only 1 profile is scraped);
resolution adds ~$0.003-0.004/company. Bound LinkedIn spend with `maxEnrich`.

For **industrial site types** (factory/warehouse/DC), where LinkedIn is blind, `auto` routes to the
**building-footprint** method - the only realistic *per-site* number. It geocodes the site address
(OSM Nominatim), reads the building's floor area from OpenStreetMap (Overpass), and divides by an
employment-density factor (warehouse ~80, manufacturing ~40 m²/FTE; UK Employment Densities Guide)
× building levels. The result is flagged `modeled-estimate` with a **±50-100% band**
(`headcountLow`/`headcountHigh`) and a caveat, because the floor area is sourced but the people
figure is computed, not reported. It uses **only free OSM APIs** (no Apify helper-actor cost); if no
building can be resolved at the address, the row is left as `unknown` rather than guessed. Per OSM
usage policy the actor self-throttles to ≤1 request/second and sends a descriptive User-Agent
(`footprintUserAgent`). Data © OpenStreetMap contributors (ODbL).

### Output (one row per premise)

`regon14`, `parentRegon`, `nip`, `krs`, `isHeadquarters`, `name`, `companyName`,
`addressText`, `voivodeship`, `powiat`, `gmina`, `city`, `postalCode`, `street`,
`buildingNumber`, `apartmentNumber`, `terytWoj`/`terytPowiat`/`terytGmina`,
`pkdMainCode`, `pkdMainName`, `pkdAll`, `siteStartDate`, `companyRegistrationDate`,
`companyAgeYears`, `legalForm`, `ownershipForm`, `website`, `localUnitsCount`,
`headcountEstimate`, `headcountLow`, `headcountHigh`, `headcountBasis`, `headcountMethod`,
`headcountSource`, `headcountConfidence`, `linkedinCityCount`,
`headcountCaveat`, `scrapedAt`, `dataSource`.

### Coverage notes

- **Strong**: factories (PKD 10-33), warehouses/distribution (52, 46), private clinics (86),
  private schools/universities (85). These commonly register premises as local units.
- **Weak**: co-living - buildings are not entities; only the operator's declared premise
  (PKD 55/68) may appear. Expect partial coverage.
- Only legal entities (`Typ = P`) are expanded. Sole-proprietor businesses are skipped.

### Permissions

This Actor requests **full permissions** because its optional LinkedIn headcount enrichment
orchestrates third-party LinkedIn Actors (`harvestapi/linkedin-company`,
`harvestapi/linkedin-company-employees`), and calling them requires it. The Actor only runs those
Actors and writes its own dataset - it does not read or modify any other data in your account. If
you don't use LinkedIn headcount, the core REGON extraction and the free OSM building-footprint
headcount work the same.

### Source

Data: [GUS REGON BIR](https://api.stat.gov.pl/Home/RegonApi) (official Polish statistical
business registry). This actor uses the registry's JSON `ajaxEndpoint` interface.

# Actor input Schema

## `seedIdentifiers` (type: `array`):

List of company identifiers to expand. Auto-detected by shape: 9 or 14 digits = REGON, 10 digits = NIP (override with Seed identifier type). The BIR registry has no geographic search, so you seed the companies to examine here (or via Seed dataset).
## `seedDatasetId` (type: `string`):

Optional Apify dataset ID to read identifiers from (fields: nip / regon / regon14 / krs). Use this to chain in a regional REGON web search or a KRS export as the discovery source.
## `seedIdType` (type: `string`):

How to interpret 10-digit identifiers (NIP and KRS are both 10 digits).
## `regions` (type: `array`):

Filter premises to these regions. Use presets (warszawa, lodz, kutno) or objects like {"woj":"10","powiat":"03"} (TERYT symbols). Empty = all of Poland.
## `siteTypes` (type: `array`):

Filter premises by industry preset: factory, warehouse, clinic, school, coliving. Empty = all industries. (Large offices are not cleanly identifiable by PKD - leave empty or use PKD codes.)
## `pkdCodes` (type: `array`):

Explicit PKD code prefixes to match (e.g. "86", "8610", "5210B"). Combined with Site types.
## `fetchSitePkd` (type: `boolean`):

Fetch each premise's own PKD activity (one extra API call per premise). When off, premises inherit the parent company's main PKD.
## `includeHeadcount` (type: `boolean`):

Attach a per-site headcount signal. Each row is labelled with headcountBasis: 'reported-proxy' (LinkedIn employees-by-city, a real sourced count) or 'modeled-estimate' (building footprint ÷ density for industrial sites - computed, ±50-100%). No source publishes a verified per-site count; see README.
## `headcountMethod` (type: `string`):

auto = LinkedIn city-count for office/clinic/school sites and a building-footprint estimate for industrial sites (factory/warehouse/DC). Force a single method if desired.
## `linkedinActorId` (type: `string`):

Apify actor used for LinkedIn employees-by-city counts.
## `linkedinResolverActorId` (type: `string`):

Actor that resolves a company name to its canonical LinkedIn page (URL + company-wide employee count). The match is validated (website domain / name overlap) and rejected if low-confidence, so wrong matches become 'unknown' rather than false counts. Leave default.
## `linkedinDomainResolverActorId` (type: `string`):

Fallback resolver: maps a company's website domain (from REGON) to its LinkedIn page when name resolution fails - fixes companies whose brand differs from their legal name (e.g. pkobp.pl -> /company/pko-bp). Pay-per-success. Leave default; clear to disable.
## `linkedinMode` (type: `string`):

Profile detail level (cost): short is cheapest and enough for a headcount count.
## `linkedinMaxItems` (type: `integer`):

Profiles actually scraped per company+city. The headcount COUNT is read from the run log ('Found N profiles total'), so 1 is enough and cheapest (~$0.02/company-city). Raise only if you also want the profile list.
## `maxEnrich` (type: `integer`):

Hard cap on paid LinkedIn calls per run (~$0.02/company-city; 0 = unlimited). The footprint estimator uses free OSM APIs and is NOT counted against this budget. Bounds cost.
## `footprintUserAgent` (type: `string`):

Contact User-Agent sent to the free OSM Nominatim/Overpass APIs used by the building-footprint headcount estimator. Their usage policy requires a descriptive identifier with a contact. Leave default unless you want your own contact string.
## `maxResults` (type: `integer`):

Maximum premise rows to output (0 = unlimited).
## `minIntervalMs` (type: `integer`):

Politeness delay between REGON requests. Keep >= 300ms to avoid the public site's conditional rate limit.

## Actor input object example

```json
{
  "seedIdentifiers": [
    "5250007738",
    "5260250995"
  ],
  "seedIdType": "auto",
  "regions": [
    "warszawa",
    "lodz",
    "kutno"
  ],
  "siteTypes": [
    "factory",
    "warehouse",
    "clinic",
    "school"
  ],
  "fetchSitePkd": true,
  "includeHeadcount": false,
  "headcountMethod": "auto",
  "linkedinActorId": "harvestapi/linkedin-company-employees",
  "linkedinResolverActorId": "harvestapi/linkedin-company",
  "linkedinDomainResolverActorId": "s-r/free-linkedin-company-finder---linkedin-address-from-any-site",
  "linkedinMode": "short",
  "linkedinMaxItems": 1,
  "maxEnrich": 0,
  "footprintUserAgent": "polish-premises-prospector/1.0 (Apify actor; contact via Apify Store)",
  "maxResults": 0,
  "minIntervalMs": 350
}
````

# Actor output Schema

## `premises` (type: `string`):

Site-level rows: REGON-14, HQ flag, name, address, PKD, company age, legal form, ownership, headcount band.

# 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 = {
    "seedIdentifiers": [
        "5250007738",
        "5260250995"
    ],
    "regions": [
        "warszawa",
        "lodz",
        "kutno"
    ],
    "siteTypes": [
        "factory",
        "warehouse",
        "clinic",
        "school"
    ],
    "linkedinActorId": "harvestapi/linkedin-company-employees",
    "linkedinResolverActorId": "harvestapi/linkedin-company",
    "linkedinDomainResolverActorId": "s-r/free-linkedin-company-finder---linkedin-address-from-any-site"
};

// Run the Actor and wait for it to finish
const run = await client.actor("regdata/polish-premises-prospector").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 = {
    "seedIdentifiers": [
        "5250007738",
        "5260250995",
    ],
    "regions": [
        "warszawa",
        "lodz",
        "kutno",
    ],
    "siteTypes": [
        "factory",
        "warehouse",
        "clinic",
        "school",
    ],
    "linkedinActorId": "harvestapi/linkedin-company-employees",
    "linkedinResolverActorId": "harvestapi/linkedin-company",
    "linkedinDomainResolverActorId": "s-r/free-linkedin-company-finder---linkedin-address-from-any-site",
}

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

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

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

```

## CLI example

```bash
echo '{
  "seedIdentifiers": [
    "5250007738",
    "5260250995"
  ],
  "regions": [
    "warszawa",
    "lodz",
    "kutno"
  ],
  "siteTypes": [
    "factory",
    "warehouse",
    "clinic",
    "school"
  ],
  "linkedinActorId": "harvestapi/linkedin-company-employees",
  "linkedinResolverActorId": "harvestapi/linkedin-company",
  "linkedinDomainResolverActorId": "s-r/free-linkedin-company-finder---linkedin-address-from-any-site"
}' |
apify call regdata/polish-premises-prospector --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=regdata/polish-premises-prospector",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Polish Premises Prospector - REGON jednostki lokalne",
        "description": "Build prospect lists at the physical-site level from the Polish REGON registry. One row per premise (jednostka lokalna) with industry (PKD), address, company age, and ownership, filterable by region (TERYT).",
        "version": "1.0",
        "x-build-id": "65s5rfESdd531jWhZ"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/regdata~polish-premises-prospector/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-regdata-polish-premises-prospector",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/regdata~polish-premises-prospector/runs": {
            "post": {
                "operationId": "runs-sync-regdata-polish-premises-prospector",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/regdata~polish-premises-prospector/run-sync": {
            "post": {
                "operationId": "run-sync-regdata-polish-premises-prospector",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "seedIdentifiers": {
                        "title": "Seed identifiers (NIP / REGON / KRS)",
                        "type": "array",
                        "description": "List of company identifiers to expand. Auto-detected by shape: 9 or 14 digits = REGON, 10 digits = NIP (override with Seed identifier type). The BIR registry has no geographic search, so you seed the companies to examine here (or via Seed dataset).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "seedDatasetId": {
                        "title": "Seed dataset ID",
                        "type": "string",
                        "description": "Optional Apify dataset ID to read identifiers from (fields: nip / regon / regon14 / krs). Use this to chain in a regional REGON web search or a KRS export as the discovery source."
                    },
                    "seedIdType": {
                        "title": "Seed identifier type",
                        "enum": [
                            "auto",
                            "nip",
                            "regon",
                            "krs"
                        ],
                        "type": "string",
                        "description": "How to interpret 10-digit identifiers (NIP and KRS are both 10 digits).",
                        "default": "auto"
                    },
                    "regions": {
                        "title": "Regions",
                        "type": "array",
                        "description": "Filter premises to these regions. Use presets (warszawa, lodz, kutno) or objects like {\"woj\":\"10\",\"powiat\":\"03\"} (TERYT symbols). Empty = all of Poland.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "siteTypes": {
                        "title": "Site types",
                        "type": "array",
                        "description": "Filter premises by industry preset: factory, warehouse, clinic, school, coliving. Empty = all industries. (Large offices are not cleanly identifiable by PKD - leave empty or use PKD codes.)",
                        "items": {
                            "type": "string"
                        }
                    },
                    "pkdCodes": {
                        "title": "PKD codes (advanced)",
                        "type": "array",
                        "description": "Explicit PKD code prefixes to match (e.g. \"86\", \"8610\", \"5210B\"). Combined with Site types.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "fetchSitePkd": {
                        "title": "Fetch per-site PKD",
                        "type": "boolean",
                        "description": "Fetch each premise's own PKD activity (one extra API call per premise). When off, premises inherit the parent company's main PKD.",
                        "default": true
                    },
                    "includeHeadcount": {
                        "title": "Include headcount enrichment",
                        "type": "boolean",
                        "description": "Attach a per-site headcount signal. Each row is labelled with headcountBasis: 'reported-proxy' (LinkedIn employees-by-city, a real sourced count) or 'modeled-estimate' (building footprint ÷ density for industrial sites - computed, ±50-100%). No source publishes a verified per-site count; see README.",
                        "default": false
                    },
                    "headcountMethod": {
                        "title": "Headcount method",
                        "enum": [
                            "auto",
                            "linkedin",
                            "footprint",
                            "none"
                        ],
                        "type": "string",
                        "description": "auto = LinkedIn city-count for office/clinic/school sites and a building-footprint estimate for industrial sites (factory/warehouse/DC). Force a single method if desired.",
                        "default": "auto"
                    },
                    "linkedinActorId": {
                        "title": "LinkedIn employees actor ID",
                        "type": "string",
                        "description": "Apify actor used for LinkedIn employees-by-city counts.",
                        "default": "harvestapi/linkedin-company-employees"
                    },
                    "linkedinResolverActorId": {
                        "title": "LinkedIn company resolver actor ID",
                        "type": "string",
                        "description": "Actor that resolves a company name to its canonical LinkedIn page (URL + company-wide employee count). The match is validated (website domain / name overlap) and rejected if low-confidence, so wrong matches become 'unknown' rather than false counts. Leave default.",
                        "default": "harvestapi/linkedin-company"
                    },
                    "linkedinDomainResolverActorId": {
                        "title": "LinkedIn domain resolver actor ID",
                        "type": "string",
                        "description": "Fallback resolver: maps a company's website domain (from REGON) to its LinkedIn page when name resolution fails - fixes companies whose brand differs from their legal name (e.g. pkobp.pl -> /company/pko-bp). Pay-per-success. Leave default; clear to disable.",
                        "default": "s-r/free-linkedin-company-finder---linkedin-address-from-any-site"
                    },
                    "linkedinMode": {
                        "title": "LinkedIn scrape mode",
                        "enum": [
                            "short",
                            "full"
                        ],
                        "type": "string",
                        "description": "Profile detail level (cost): short is cheapest and enough for a headcount count.",
                        "default": "short"
                    },
                    "linkedinMaxItems": {
                        "title": "LinkedIn max profiles per company-city",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Profiles actually scraped per company+city. The headcount COUNT is read from the run log ('Found N profiles total'), so 1 is enough and cheapest (~$0.02/company-city). Raise only if you also want the profile list.",
                        "default": 1
                    },
                    "maxEnrich": {
                        "title": "Max enrichment calls (shared budget)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Hard cap on paid LinkedIn calls per run (~$0.02/company-city; 0 = unlimited). The footprint estimator uses free OSM APIs and is NOT counted against this budget. Bounds cost.",
                        "default": 0
                    },
                    "footprintUserAgent": {
                        "title": "Footprint contact User-Agent",
                        "type": "string",
                        "description": "Contact User-Agent sent to the free OSM Nominatim/Overpass APIs used by the building-footprint headcount estimator. Their usage policy requires a descriptive identifier with a contact. Leave default unless you want your own contact string.",
                        "default": "polish-premises-prospector/1.0 (Apify actor; contact via Apify Store)"
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum premise rows to output (0 = unlimited).",
                        "default": 0
                    },
                    "minIntervalMs": {
                        "title": "Min interval between requests (ms)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Politeness delay between REGON requests. Keep >= 300ms to avoid the public site's conditional rate limit.",
                        "default": 350
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
