Poland Company Lookup (NIP / KRS) avatar

Poland Company Lookup (NIP / KRS)

Pricing

from $5.00 / 1,000 company profiles

Go to Apify Store
Poland Company Lookup (NIP / KRS)

Poland Company Lookup (NIP / KRS)

Send a Polish NIP or KRS number — get one normalized JSON profile. Optionally check a bank account against Biała Lista before you pay.

Pricing

from $5.00 / 1,000 company profiles

Rating

0.0

(0)

Developer

Northlist

Northlist

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

17 hours ago

Last modified

Categories

Share

Look up a Polish company or sole trader with a NIP or KRS number and get one English-friendly JSON profile: legal name, legal form, status, and registered address.

Data comes live from official registers — KRS, CEIDG, and the Ministry of Finance VAT whitelist (Biała Lista). You do not need to know which register to call.

Optionally pass the supplier’s bank account. The Actor checks whether that account is assigned to the NIP on Biała Lista and returns a paySafe verdict before you pay.

Store ID: northlist/pl-company-lookup

Why use it

Foreign invoicing, ERP, KYB, and CRM tools collect a Polish NIP or KRS at signup. Those numbers sit in different government systems, often with Polish-only portals and a sales process for an API key.

This Actor is the self-serve path: one input, one JSON shape, pay per lookup, ready for n8n / Make / your backend.

Typical jobs:

  • Onboarding — store legal name, status, and address when a Polish customer or supplier signs up.
  • KYB / AML — add a normalized Polish profile next to other country registries.
  • CRM enrichment — new row in HubSpot / Pipedrive → this Actor → write name, status, address back.
  • Pay-safe — invoice NIP + IBAN + amount → paySafe.verdict. Block or split-pay on DO_NOT_PAY. Keep requestId on the payment file.

What you send vs what we query

You sendWho it isSourceExtra key?
KRS numberCompany (sp. z o.o., S.A., …)National Court RegisterNo
Company NIPSame companiesVAT whitelist → KRS extractNo
Sole-trader NIP (JDG)CEIDGCEIDG APIYes — free JWT (see below)
Any of the above + bankAccountPay-safeProfile, then Biała Lista checkNo

Up to 30 identifiers per run (identifiers). One dataset item per identifier.

Input

FieldRequiredWhat it does
identifierOne of identifier / identifiersNIP (10 digits) or KRS. Spaces, dashes, and a PL prefix are stripped.
identifiersOne of identifier / identifiersBatch, max 30.
identifierTypeNoauto (default), nip, or krs.
CEIDG_API_TOKENOnly for JDG NIPSecret JWT from dane.biznes.gov.pl. Not needed for KRS or company NIP.
bankAccountNoPolish NRB (26 digits) or IBAN. Turns on pay-safe.
checkDateNoYYYY-MM-DD (Europe/Warsaw). Defaults to today. Used only with bankAccount.
amountPlnNoInvoice gross in PLN. Over 15 000 with an unassigned account → DO_NOT_PAY.
includeRawSourceNoDebug: attach upstream JSON as raw. PESEL, IBANs, and person names are stripped.

Output

Every run returns one object per identifier. Unknown numbers come back as status: "not_found" (still a billed lookup). A bad NIP checksum on a single identifier fails the run and is not billed.

{
"identifier": {
"input": "0000028860",
"type": "krs",
"krs": "0000028860",
"nip": "7740001454",
"regon": "610188201"
},
"name": "ORLEN SPÓŁKA AKCYJNA",
"legalForm": "S.A.",
"status": "active",
"address": {
"street": "CHEMIKÓW 7",
"city": "PŁOCK",
"postalCode": "09-411",
"country": "PL"
},
"registeredSince": "2001-07-19",
"representatives": "redacted_in_source_api",
"source": { "krs": true, "ceidg": false, "whitelist": false },
"fetchedAt": "2026-08-30T14:00:00.000Z",
"warnings": []
}

status is one of: active, deregistered, suspended, unknown, not_found.

Board member names and PESEL are hidden in the official KRS JSON API. This Actor always returns "representatives": "redacted_in_source_api". Identity lookup never copies bank accounts or personal names from the VAT whitelist search.

Pay-safe (paySafe)

Present only when you set bankAccount. Same dataset item — no second Actor.

verdictMeaning
PAYAccount is assigned to this NIP on the check date.
DO_NOT_PAYAccount is not assigned, and the amount is missing or over 15 000 PLN gross. Polish VAT rules can make that transfer expensive; treat this as a hard stop or use split payment.
BELOW_THRESHOLDAccount not assigned, but amountPln is 15 000 or less.
FOREIGN_IBAN_EXCLUDEDNot a Polish NRB/IBAN — Ministry check is not used.
NIP_UNAVAILABLENo NIP to check (for example a KRS-only miss). Not billed as pay-safe.
CHECK_UNAVAILABLEMinistry API rate limit or error. Not billed as pay-safe; retry later.

You get accountLast4, accountAssigned, and the official Ministry requestId. The full IBAN is never returned. paySafe is evidence from the Ministry API, not a tax ruling.

Pricing

Pay per event (FREE tier):

What you didEventPrice
Actor startedapify-actor-start$0.00005
One company profile (including not_found and cache hits)lookup$0.008 ($8 / 1,000)
Biała Lista bank-account checklookup-whitelist$0.025

A profile-only run is about $0.008. Profile + pay-safe is about $0.033.

Not billed: invalid NIP checksum, invalid bank account, empty input, or REGON as input (the run fails). Pay-safe is not billed on NIP_UNAVAILABLE or CHECK_UNAVAILABLE.

Successful profiles are cached for 7 days; genuine not-found for 1 day. Pay-safe for “today” expires at midnight Warsaw.

How to run

Apify Console

Open the Actor, paste a NIP or KRS into Polish identifier, click Start. Try KRS 0000028860 or company NIP 7740001454.

API

Replace APIFY_TOKEN with your Apify API token. This waits for the run and returns the dataset JSON:

curl "https://api.apify.com/v2/acts/northlist~pl-company-lookup/run-sync-get-dataset-items?token=APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"identifier":"0000028860","identifierType":"krs"}'

Company by NIP (no CEIDG token):

{ "identifier": "7740001454", "identifierType": "nip" }

Pay-safe (profile + whitelist check):

{
"identifier": "7740001454",
"identifierType": "nip",
"bankAccount": "PL40124010661111001156329830",
"amountPln": 20000
}

n8n / Make

  1. Use the Apify node (or HTTP Request).
  2. Actor: northlist/pl-company-lookup.
  3. Operation: run Actor and get dataset items.
  4. Body:
{
"identifier": "{{ $json.nip }}",
"identifierType": "auto"
}

Map name, status, and address onto the CRM record.

To block a supplier payment, add bankAccount and amountPln, then branch on paySafe.verdict === "DO_NOT_PAY". Store paySafe.requestId on the invoice.

Sole traders (CEIDG)

Company NIPs and all KRS lookups work with no extra key.

For a JDG NIP, register a free JWT at dane.biznes.gov.pl and paste it into the secret input CEIDG_API_TOKEN. Without it, a sole-trader lookup cannot hit CEIDG.

Limits and scope

  • REGON is not accepted as input in this version.
  • Max 30 identifiers per run.
  • KRS JSON does not include unredacted board names; we do not scrape PDFs to restore them.
  • This is not an official court extract (odpis) and not KSeF.
  • Ministry daily quotas apply on the VAT whitelist (search vs check are separate). If you see CHECK_UNAVAILABLE, wait and retry; that row is not billed as pay-safe.