Poland VAT Whitelist & KRS API: Biała lista, NIP, Accounts avatar

Poland VAT Whitelist & KRS API: Biała lista, NIP, Accounts

Pricing

from $2.55 / 1,000 entity checkeds

Go to Apify Store
Poland VAT Whitelist & KRS API: Biała lista, NIP, Accounts

Poland VAT Whitelist & KRS API: Biała lista, NIP, Accounts

VAT status, whitelisted bank accounts, KRS board, share capital and liquidation flags for Polish NIPs, IBANs and KRS numbers in bulk. Official MF request ID. No API key, no login. MCP-ready for AI agents. Not found is free. $3 per 1,000 entities. Weryfikacja kontrahenta: biała lista VAT i KRS.

Pricing

from $2.55 / 1,000 entity checkeds

Rating

0.0

(0)

Developer

ABM

ABM

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Security

Limited permissions

Share

Poland VAT Whitelist & KRS API (Biała lista VAT, NIP, KRS)

Price: $0.003 per entity found ($3 per 1,000). Invalid, unknown and not-found inputs are free. No monthly rental.

Check Polish counterparties in bulk: for every NIP, bank account (NRB / IBAN PL), KRS number or NIP;account pair, this actor returns

  • the VAT taxpayer status from the Ministry of Finance whitelist (Wykaz podatników VAT, "Biała lista VAT"): active (Czynny), exempt (Zwolniony), not registered, removal / denial / restoration dates and legal basis;
  • the bank accounts on the whitelist and whether a given account belongs to the supplier (also covers virtual accounts via the official check endpoint);
  • the official MF request ID (whitelistRequestId), the proof of verification accountants keep for the tax file;
  • KRS data from the National Court Register: legal form, share capital, board and representation rules, commercial proxies, supervisory board, shareholders, main PKD activity, last financial statement filed and liquidation / insolvency entries (section 6).

Outputs are available in English or Polish (outputLanguage), with an LLM-ready summary sentence per entity.

Data comes only from the two free public government APIs (wl-api.mf.gov.pl and api-krs.ms.gov.pl). No API key, no login, no scraping of HTML pages.

How much does it cost?

VolumePrice
1 entity found$0.003
1,000 suppliers checked$3.00
10,000 invoices' bank accounts$30.00

You pay one entity-checked event per input that is found (NIP on the whitelist, account on the whitelist, KRS number that exists, or NIP;account pair confirmed). Invalid NIPs, wrong checksums, unknown NIPs, accounts not on the list and API errors are returned in the dataset free of charge. Set a maximum charge per run in Apify and the actor stops cleanly when it is reached.

Input

{
"nips": ["5252344078", "PL 774-000-14-54"],
"bankAccounts": ["34103015080000000504162001"],
"nipAccountPairs": ["5252344078;34103015080000000504162001"],
"krsNumbers": ["0000387251"],
"includeKrs": true,
"outputLanguage": "en",
"date": "",
"onlyChanged": false,
"watchlistName": "default",
"saveKrsExtract": false
}
FieldDescription
nipsPolish tax IDs. Dashes, spaces and the PL prefix are accepted. Checksum is validated locally.
bankAccounts26-digit NRB numbers (with or without PL). Returns whether the account is whitelisted and its owner.
nipAccountPairsNIP;ACCOUNT – official yes/no check that the account belongs to that NIP.
krsNumbersKRS numbers (leading zeros optional). Adds the VAT status of the company's NIP.
includeKrsFetch KRS data for NIPs / accounts whose owner has a KRS number (default true).
outputLanguageen or pl for vatStatus and summary. Official Polish values are always kept too.
dateWhitelist status on a past date (YYYY-MM-DD, up to 5 years back). Empty = today, Polish time.
onlyChangedMonitoring mode: only output (and pay for) entities that changed since the last run.
watchlistNameSeparate memory per client / supplier list for onlyChanged.
saveKrsExtractSave the full official KRS JSON in the key-value store, link in krsRawExtractUrl.

Output

One dataset item per input. Example for a NIP (abridged):

{
"inputType": "nip",
"input": "5252344078",
"found": true,
"checkDate": "2026-11-05",
"name": "GOOGLE POLAND SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ",
"nip": "5252344078",
"regon": "140182840",
"krs": "0000240611",
"vatStatus": "Active VAT payer",
"vatStatusCode": "ACTIVE",
"vatStatusPl": "Czynny",
"isActiveVatPayer": true,
"residenceAddress": "RONDO IGNACEGO DASZYŃSKIEGO 2C, 00-843 WARSZAWA",
"registrationLegalDate": "2005-10-06",
"removalDate": null,
"bankAccounts": ["34103015080000000504162001"],
"bankAccountsCount": 1,
"hasVirtualAccounts": false,
"whitelistRequestId": "gadZC-996jk2c",
"whitelistRequestDateTime": "05-11-2026 06:08:12",
"krsFound": true,
"krsLegalForm": "SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ",
"krsLegalFormEn": "Limited liability company (sp. z o.o.)",
"krsRegistrationDate": "06.09.2005",
"krsShareCapital": 800000.0,
"krsShareCapitalCurrency": "PLN",
"krsRepresentationBody": "ZARZĄD",
"krsRepresentationMethod": "KAŻDY CZŁONEK ZARZĄDU SAMODZIELNIE",
"krsRepresentatives": [{"name": "P*** T****** M******", "function": "CZŁONEK ZARZĄDU", "suspended": false, "body": "ZARZĄD"}],
"krsProxies": [{"name": "M******** J***** K*********", "type": "PROKURA SAMOISTNA"}],
"krsMainActivityPkd": {"code": "…", "description": "…"},
"krsSection6Entries": [],
"krsInLiquidationOrInsolvency": false,
"summary": "GOOGLE POLAND SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ (NIP 5252344078): Active VAT payer on 2026-11-05. 1 bank account(s) on the whitelist. KRS 0000240611: Limited liability company (sp. z o.o.), share capital 800 000.00 PLN, represented by ZARZĄD (KAŻDY CZŁONEK ZARZĄDU SAMODZIELNIE).",
"error": null,
"checkedAt": "2026-11-05T06:08:13+00:00"
}

A bank account that is not on the whitelist returns "accountOnWhitelist": false, "vatStatusCode": "NOT_FOUND" and a warning in summary, and is not charged.

Use cases

1. Accounts payable: check every supplier account before the payment run

Who: an AP accountant at a Polish subsidiary paying 400 invoices a week. Payments over 15,000 PLN to an account not on the whitelist lose tax deductibility and create joint VAT liability. Input: {"nipAccountPairs": ["5252344078;34103015080000000504162001", "7740001454;PL61109010140000071219812874"]} Output: [{"input": "5252344078;34103015080000000504162001", "accountOnWhitelist": true, "whitelistRequestId": "bmnPn-996jk05"}, {"input": "7740001454;…", "accountOnWhitelist": false, "summary": "Bank account … is NOT assigned to NIP 7740001454…"}] Next: the ERP blocks the payments where accountOnWhitelist is false; the request IDs are archived with the payment batch as proof. Cost for 400 pairs: at most $1.20.

2. Monthly supplier master-data monitoring

Who: a shared-services centre with 2,500 Polish vendors. Input: {"nips": ["5252344078", "5250007738", "…"], "onlyChanged": true, "watchlistName": "vendors-pl", "includeKrs": true} scheduled on the 1st of each month. Output: only vendors whose VAT status, account list, board or liquidation flags changed, e.g. {"nip": "…", "vatStatusCode": "NOT_REGISTERED", "removalDate": "2026-10-12", "changedSinceLastRun": true} Next: changes land in a Google Sheet for the vendor-master team. First run: 2,500 × $0.003 = $7.50; following months only changed vendors are charged (typically a few dozen, under $0.20).

3. KYB / onboarding of a new B2B customer

Who: a credit controller or a fintech onboarding SMEs. Input: {"krsNumbers": ["0000387251"], "outputLanguage": "pl", "saveKrsExtract": true} Output: {"krsName": "MTM GÓRNICTWO SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ", "krsShareCapital": 400000.0, "krsRepresentationMethod": "JEŻELI ZARZĄD SPÓŁKI JEST JEDNOOSOBOWY…", "vatStatus": "Czynny podatnik VAT", "krsInLiquidationOrInsolvency": false, "krsRawExtractUrl": "https://api.apify.com/v2/key-value-stores/…/records/krs-0000387251"} Next: the analyst checks who may sign the contract (representation method), the share capital for the credit limit, and stores the raw extract in the customer file.

4. AI agent answering "Can I pay this invoice?"

An agent receives a PDF invoice, extracts NIP and account, calls this actor through MCP and answers with the summary field, which is a ready-made sentence in English or Polish.

API examples

Python

from apify_client import ApifyClient
client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("<username>/poland-vat-whitelist-krs").call(run_input={
"nips": ["5252344078", "7740001454"],
"includeKrs": True,
"outputLanguage": "en",
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["nip"], item["vatStatusCode"], item["bankAccountsCount"], item["krsShareCapital"])

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<APIFY_TOKEN>' });
const run = await client.actor('<username>/poland-vat-whitelist-krs').call({
nipAccountPairs: ['5252344078;34103015080000000504162001'],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map((i) => [i.input, i.accountOnWhitelist, i.whitelistRequestId]));

Integrations (Make, Zapier, n8n, Google Sheets)

  • n8n / Make: Google Sheets "Watch rows" (new supplier with NIP and IBAN) → Apify: Run actor with {"nipAccountPairs": ["{{nip}};{{iban}}"]} → Get dataset items → write accountOnWhitelist, vatStatus and whitelistRequestId back into the row, and send a Slack alert when accountOnWhitelist is false.
  • Zapier: use the Apify app "Run Actor" action, then "Fetch Dataset Items".
  • Google Sheets / Excel: export the dataset as CSV or XLSX from the run page, or schedule the actor with onlyChanged and the Apify Google Sheets integration.
  • Webhooks / REST API: POST https://api.apify.com/v2/acts/<username>~poland-vat-whitelist-krs/run-sync-get-dataset-items?token=…

Use with AI agents (MCP)

The actor is available through the Apify MCP server (https://mcp.apify.com) for Claude, Cursor, ChatGPT and other agents. Tool input is the JSON above; each result contains a self-contained summary sentence plus structured fields (vatStatusCode, accountOnWhitelist, krsInLiquidationOrInsolvency) that an agent can reason on directly.

FAQ

Is this the official data? Yes. It calls the Ministry of Finance whitelist API and the Ministry of Justice KRS API, the same sources as the government search websites. The whitelistRequestId is the official identifier of the query.

Can I check a past date? Yes, set date (the whitelist keeps 5 years of history). KRS data is always the current extract.

Why are board members' names partly hidden (M******)? The KRS API itself masks personal names and PESEL numbers of natural persons. The actor returns the functions, the governing body, the representation rules and company shareholders in full. Names of partners and representatives of partnerships and sole traders do appear in the whitelist data (whitelistRepresentatives, whitelistPartners) when the Ministry publishes them.

What about sole traders (JDG)? They are on the VAT whitelist but not in KRS; you get the VAT status and accounts, KRS fields stay null.

What does "NOT_FOUND" mean for a NIP? The NIP has a valid checksum but is not in the VAT taxpayer list on that date (never registered for VAT, or unknown). It is not charged.

Do I need a proxy or an API key? No.

Limits

  • The Ministry of Finance limits search queries per IP (about 100 queries a day, 30 identifiers each). The actor groups identifiers by 30 and rotates to another datacenter IP if the limit is hit; if no IP is left, remaining items are returned with a clear error and are not charged.
  • nipAccountPairs use the official check endpoint (about 5,000 checks per day per IP).
  • KRS search by NIP or name is not offered by the public KRS API; KRS data is reached through the KRS number published on the whitelist or given in krsNumbers. A company not registered for VAT can only be found by its KRS number.
  • KRS personal names are masked by the source (see FAQ).
  • Section 6 flags (krsSection6Entries) list the non-empty sections (e.g. likwidacja, postepowanieUpadlosciowe); read the raw extract for the details.

Po polsku: weryfikacja kontrahenta – biała lista VAT i KRS

Aktor sprawdza masowo kontrahentów w wykazie podatników VAT (biała lista) Ministerstwa Finansów i w KRS: status VAT (czynny, zwolniony, niezarejestrowany), rachunki bankowe na białej liście, czy rachunek należy do danego NIP (przed przelewem powyżej 15 000 zł), identyfikator zapytania do dokumentacji, a z KRS: formę prawną, kapitał zakładowy, zarząd i sposób reprezentacji, prokurentów, PKD oraz informacje o likwidacji lub upadłości. Wyniki po polsku: "outputLanguage": "pl".

Przykład wejścia:

{"nips": ["5252344078"], "nipAccountPairs": ["5252344078;34103015080000000504162001"], "outputLanguage": "pl"}

Przykład wyniku:

{"nip": "5252344078", "vatStatus": "Czynny podatnik VAT", "bankAccountsCount": 1, "krsShareCapital": 800000.0,
"summary": "GOOGLE POLAND SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ (NIP 5252344078): Czynny podatnik VAT na dzień 2026-11-05. Liczba rachunków na białej liście: 1. …"}

Płacisz tylko za znalezione podmioty: 0,003 USD za podmiot; błędne NIP-y i rachunki spoza listy są bezpłatne.