Poland Company Lookup (NIP / KRS)
Pricing
from $5.00 / 1,000 company profiles
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
Maintained by CommunityActor 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,addressback. - Pay-safe — invoice NIP + IBAN + amount →
paySafe.verdict. Block or split-pay onDO_NOT_PAY. KeeprequestIdon the payment file.
What you send vs what we query
| You send | Who it is | Source | Extra key? |
|---|---|---|---|
| KRS number | Company (sp. z o.o., S.A., …) | National Court Register | No |
| Company NIP | Same companies | VAT whitelist → KRS extract | No |
| Sole-trader NIP (JDG) | CEIDG | CEIDG API | Yes — free JWT (see below) |
Any of the above + bankAccount | Pay-safe | Profile, then Biała Lista check | No |
Up to 30 identifiers per run (identifiers). One dataset item per identifier.
Input
| Field | Required | What it does |
|---|---|---|
identifier | One of identifier / identifiers | NIP (10 digits) or KRS. Spaces, dashes, and a PL prefix are stripped. |
identifiers | One of identifier / identifiers | Batch, max 30. |
identifierType | No | auto (default), nip, or krs. |
CEIDG_API_TOKEN | Only for JDG NIP | Secret JWT from dane.biznes.gov.pl. Not needed for KRS or company NIP. |
bankAccount | No | Polish NRB (26 digits) or IBAN. Turns on pay-safe. |
checkDate | No | YYYY-MM-DD (Europe/Warsaw). Defaults to today. Used only with bankAccount. |
amountPln | No | Invoice gross in PLN. Over 15 000 with an unassigned account → DO_NOT_PAY. |
includeRawSource | No | Debug: 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.
verdict | Meaning |
|---|---|
PAY | Account is assigned to this NIP on the check date. |
DO_NOT_PAY | Account 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_THRESHOLD | Account not assigned, but amountPln is 15 000 or less. |
FOREIGN_IBAN_EXCLUDED | Not a Polish NRB/IBAN — Ministry check is not used. |
NIP_UNAVAILABLE | No NIP to check (for example a KRS-only miss). Not billed as pay-safe. |
CHECK_UNAVAILABLE | Ministry 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 did | Event | Price |
|---|---|---|
| Actor started | apify-actor-start | $0.00005 |
One company profile (including not_found and cache hits) | lookup | $0.008 ($8 / 1,000) |
| Biała Lista bank-account check | lookup-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
- Use the Apify node (or HTTP Request).
- Actor:
northlist/pl-company-lookup. - Operation: run Actor and get dataset items.
- 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.