# Poland Company Lookup by NIP (VAT White List + KRS) (`namusoft/poland-company-lookup`) Actor

Look up Polish companies by NIP in official government registers: name, VAT status, REGON, KRS, address, registered bank accounts, legal form, share capital and main activity. Pay only for NIPs the register answers.

- **URL**: https://apify.com/namusoft/poland-company-lookup.md
- **Developed by:** [NamuSoft](https://apify.com/namusoft) (community)
- **Categories:** Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$4.00 / 1,000 company looked ups

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/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

## Poland Company Lookup by NIP (VAT White List + KRS)

**Turn a list of Polish tax IDs (NIP) into verified company records from official government registers: name, VAT status, REGON, KRS, address, registered bank accounts, legal form, share capital and main activity.**

### What can you do with it?

- **Pay suppliers safely:** check that a supplier is an active VAT payer and see the bank accounts registered on the Ministry of Finance white list before you pay. Payments above PLN 15,000 to an unlisted account can cost you the tax deduction.
- **Onboard B2B customers (KYB):** verify a company exists, see its legal form and spot liquidation or bankruptcy proceedings.
- **Enrich your CRM:** add REGON, KRS, address, website and PKD activity code to company records in bulk.
- **Check history:** see the VAT status and bank accounts on a past date (up to 5 years back), e.g. the day an invoice was paid.
- **AI agents:** call it as a tool through Apify MCP to verify a Polish company inside an automated workflow.

### Example output

```json
{
  "input": "525-000-02-51",
  "nip": "5250000251",
  "status": "found",
  "name": "POLSKIE KOLEJE PAŃSTWOWE SPÓŁKA AKCYJNA",
  "vatStatus": "active",
  "vatStatusPl": "Czynny",
  "regon": "000126801",
  "krs": "0000019193",
  "address": "ALEJE JEROZOLIMSKIE 142A, 02-305 WARSZAWA",
  "vatRegistrationDate": "1996-01-01",
  "vatRemovalDate": null,
  "bankAccounts": ["…"],
  "hasVirtualAccounts": true,
  "company": {
    "legalForm": "SPÓŁKA AKCYJNA",
    "krsRegistrationDate": "2001-06-11",
    "address": "ALEJE JEROZOLIMSKIE 142A, 02-305 WARSZAWA",
    "website": "WWW.PKP.PL",
    "shareCapital": { "amount": 10150715600, "currency": "PLN" },
    "mainActivity": { "code": "70.10.Z", "description": "DZIAŁALNOŚĆ FIRM CENTRALNYCH (HEAD OFFICES) I HOLDINGÓW, Z WYŁĄCZENIEM HOLDINGÓW FINANSOWYCH" },
    "dissolutionProceedings": []
  },
  "statusDate": "2026-10-19",
  "error": null
}
```

`status` is one of:

| Status | Meaning | Charged? |
|---|---|---|
| `found` | The NIP is in the VAT register (active, exempt or removed) | Yes |
| `not-found` | The register has no entity with this NIP | Yes |
| `invalid-nip` | Not a valid NIP (wrong length or checksum) | No |
| `unavailable` | The government API did not answer (e.g. daily limit reached) | No |

`company` is filled for entities registered in KRS (companies, foundations, associations). Sole traders are not in KRS, so for them `company` is `null`.

### Pricing

**$4.00 per 1,000 looked-up NIPs** ($0.004 per NIP), KRS details included. You pay only for NIPs the register answers. Invalid NIPs and API outages are free.

### How to use

1. Paste your NIP numbers, one per line.
2. Optional: pick a past date to check the status on that day.
3. Click **Start**. Results appear in the dataset as each batch is processed.

### Limits

The Ministry of Finance limits how many searches can be made per day. The actor sends NIPs in batches of 30 to stay well within it, and it does not try to get around the limit. If the limit is reached, the remaining NIPs are marked `unavailable` (not charged) and you can run them again after midnight Polish time.

### FAQ

**Where does the data come from?** From two official public registers: the Ministry of Finance VAT white list (wl-api.mf.gov.pl) and the Ministry of Justice KRS API (api-krs.ms.gov.pl).

**Do you return personal data?** The actor returns company data. It does not return names of board members, shareholders or proxies, or PESEL numbers. For sole traders the business name is usually the owner's name, as published in the official register.

**Is the result legal proof?** Each record includes the white list `whitelistRequestId`, which the Ministry of Finance treats as confirmation that you checked the register.

**Something broke or a field is missing?** Open an issue in the **Issues** tab. We usually respond within 12 hours.

# Actor input Schema

## `nips` (type: `array`):

Polish tax IDs (NIP), one per line. Dashes, spaces and a PL prefix are fine. The same NIP written differently is looked up (and charged) once.

## `date` (type: `string`):

Check the VAT status and bank accounts as of this date (YYYY-MM-DD, up to 5 years back). Leave empty for today.

## `includeCompanyDetails` (type: `boolean`):

For companies registered in KRS, add legal form, share capital, main activity (PKD), website, e-delivery address and liquidation/bankruptcy flags.

## `includeBankAccounts` (type: `boolean`):

Include the bank accounts registered on the VAT white list. Large companies can have hundreds.

## Actor input object example

```json
{
  "nips": [
    "5261040828",
    "525-000-02-51"
  ],
  "includeCompanyDetails": true,
  "includeBankAccounts": true
}
```

# Actor output Schema

## `results` (type: `string`):

One record per NIP: status (found, not-found, invalid-nip, unavailable), name, VAT status, REGON, KRS, address, bank accounts and KRS company details.

# 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 = {
    "nips": [
        "5261040828",
        "525-000-02-51"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("namusoft/poland-company-lookup").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 = { "nips": [
        "5261040828",
        "525-000-02-51",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("namusoft/poland-company-lookup").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 '{
  "nips": [
    "5261040828",
    "525-000-02-51"
  ]
}' |
apify call namusoft/poland-company-lookup --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,namusoft/poland-company-lookup"
        }
    }
}
```

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/EkwX78cq12nidgXqZ/builds/6tShFYSdtpLjW1qFQ/openapi.json
