Poland CEIDG Company Scraper — NIP, REGON, PKD & Reps avatar

Poland CEIDG Company Scraper — NIP, REGON, PKD & Reps

Pricing

$5.00 / 1,000 results

Go to Apify Store
Poland CEIDG Company Scraper — NIP, REGON, PKD & Reps

Poland CEIDG Company Scraper — NIP, REGON, PKD & Reps

Scrape a Polish CEIDG business entry (sole trader / entrepreneur) from biznes.gov.pl — name, NIP, REGON, legal form, VAT status, PKD activity codes, addresses, legal representatives and CEIDG change history. Structured JSON, no API key. You pay per completed lookup — matched or not.

Pricing

$5.00 / 1,000 results

Rating

0.0

(0)

Developer

NeuralVerge

NeuralVerge

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Poland CEIDG Company Scraper — NIP, REGON, PKD & Reps ✅ No API Key

Scrape a Polish CEIDG business entry (sole trader / entrepreneur) from biznes.gov.pl — name, NIP, REGON, legal form, VAT status, PKD activity codes, registered & correspondence addresses, legal representatives / proxies, permits, proceedings and the full CEIDG change history. Powered by the Neuralverge API. No API key or account required, and you pay per completed lookup — matched or not; failed runs are never charged.

Ideal for KYC/KYB, due diligence, compliance, lead enrichment and feeding company data to AI agents.

✨ Why this Actor

  • 🇵🇱 Full CEIDG entry — identity (NIP/REGON), addresses, VAT status, PKD codes, representatives, permits, proceedings and change history in one structured object.
  • 💸 Pay per completed lookup — matched or not. An unresolved entry URL comes back as one no result row, billed like any other row, so a batch never silently loses an input. A run that fails is never charged.
  • 🔑 No API key or account — extraction runs on the Neuralverge backend.
  • Real-time & structured — fresh data each run and one predictable JSON schema.

🔧 How it works

  1. Provide a CEIDG entry URL from biznes.gov.pl (the UUID-based entry link).
  2. Run the Actor. Fetching and AI-structuring the entry happens on the Neuralverge backend.
  3. Get one flat dataset row per entry — 34 columns, all at the top level (url, companyName, krsNumber, nip, regon, legalForm, …). Export to CSV, JSON or Excel, or pull it over the Apify API.

If the entry can't be resolved, the run still delivers one explicit no result row instead of finishing empty — it is billed like any other row. A run that fails (missing input, bad key, upstream error) writes nothing and costs $0.00.

Input

One entry per run.

FieldTypeNotes
profileUrlstringThe biznes.gov.pl CEIDG entry URL to extract.
{
"profileUrl": "https://www.biznes.gov.pl/en/wyszukiwarka-firm/wpis/ceidg/87BFC4FE-7E67-4E3E-9AA9-E3A9331F4198"
}

What you'll receive

One flat row per entry. Every field sits at the top level of the row, so the Output tab shows a single table with all 34 columns — there are no views to switch between. Exports (CSV, JSON, XML, Excel) contain exactly the same fields.

Columns: url, companyName, krsNumber, nip, regon, legalForm, startDate, email, phoneNumber, website, registeredAddressStreet, registeredAddressBuildingNumber, registeredAddressPostalCode, registeredAddressCity, correspondenceAddressStreet, correspondenceAddressBuildingNumber, correspondenceAddressPostalCode, correspondenceAddressCity, vatStatus, civilLawPartnerships, prohibitions, proceedings, successionManagerFirstName, successionManagerLastName, successionManagerAppointmentDate, professionalQualifications, legalCapacityStatus, legalCapacityStatusDetails, legalCapacityStatusEffectiveDate, permitsAndLicenses, otherEntries.

ListspkdCodes, legalRepresentatives, companyHistory — come back as arrays. The table renders each as an expandable "N items" cell; a CSV/JSON/Excel export carries them in full.

Nulls are normal. The column set is the same on every run, so a field the source does not expose for this entry comes back null rather than disappearing — a spreadsheet or CRM mapping built on one run keeps working on the next.

When nothing is found

A lookup that runs but matches nothing still returns a row — exactly one for the whole run — so a batch never silently loses an input:

ColumnValue
urlthe CEIDG entry URL you submitted, echoed back exactly
foundfalse
messagewhy nothing was returned

Filter these out with found != false (or drop rows where message is set). This row is billed as one entry — see Pricing.

Example output (real run)

A real dataset row, shown in full.

{
"url": "https://www.biznes.gov.pl/en/wyszukiwarka-firm/wpis/ceidg/87BFC4FE-7E67-4E3E-9AA9-E3A9331F4198",
"companyName": "\"ALVARO-BMW\" Marcin Deneka",
"krsNumber": null,
"nip": "7272619740",
"regon": "381755855",
"legalForm": null,
"startDate": "2018-11-13",
"email": "jowita.2004@wp.pl",
"phoneNumber": "+48884084821",
"website": null,
"registeredAddressStreet": "Grunwaldzka",
"registeredAddressBuildingNumber": "33a",
"registeredAddressPostalCode": "91-335",
"registeredAddressCity": "Łódź",
"correspondenceAddressStreet": "ul. dr. Adama Próchnika",
"correspondenceAddressBuildingNumber": "27/6",
"correspondenceAddressPostalCode": "90-708",
"correspondenceAddressCity": "Łódź",
"vatStatus": "zwolniony",
"pkdCodes": [
"45.20.Z"
],
"civilLawPartnerships": null,
"prohibitions": null,
"proceedings": null,
"successionManagerFirstName": null,
"successionManagerLastName": null,
"successionManagerAppointmentDate": null,
"legalRepresentatives": [
{
"firstName": "MARZENA",
"lastName": "STUS",
"role": "Proxy",
"representationType": null
}
],
"professionalQualifications": null,
"legalCapacityStatus": null,
"legalCapacityStatusDetails": null,
"legalCapacityStatusEffectiveDate": null,
"permitsAndLicenses": null,
"companyHistory": [
{
"changeDate": "2019-09-10",
"changeDescription": "Zmiana danych we wpisie",
"entryUrl": null
},
{
"changeDate": "2019-03-25",
"changeDescription": "Nadanie numeru REGON (381755855)",
"entryUrl": null
},
{
"changeDate": "2019-03-22",
"changeDescription": "Zmiana danych we wpisie",
"entryUrl": null
},
{
"changeDate": "2018-12-11",
"changeDescription": "Nadanie numeru REGON (381755855)",
"entryUrl": null
},
{
"changeDate": "2018-12-10",
"changeDescription": "Zmiana danych we wpisie",
"entryUrl": null
},
{
"changeDate": "2018-11-13",
"changeDescription": "Zmiana statusu wpisu",
"entryUrl": null
},
{
"changeDate": "2018-11-07",
"changeDescription": "Nadanie numeru REGON (381755855)",
"entryUrl": null
},
{
"changeDate": "2018-11-07",
"changeDescription": "Nadanie numeru NIP (7272619740)",
"entryUrl": null
},
{
"changeDate": "2018-11-07",
"changeDescription": "Założenie działalności gospodarczej",
"entryUrl": null
}
],
"otherEntries": null
}

Pricing

Pay per event — $0.005 per entry ($5 per 1,000) written to the dataset. There is no run fee and no start fee.

EventPriceCharged
Actor startfreenever
Failed run — invalid input, API error, timeoutfreenever
Row written to the dataset$0.005 ($5 / 1,000)every row, including the "no result" row

A completed lookup is billed as one entry, matched or not. When the source returns nothing, the Actor writes one explicit no-result row — the query you submitted plus found: false and a message explaining it — and that row is charged at the normal per-entry price. A run that fails (missing input, bad key, upstream error) writes no row and costs $0.00.

An input that resolves to nothing produces exactly one such row for the whole run, so a miss costs $0.005 in total — never more.

Pricing is on top of your Apify platform usage.

Rate limit

Every Neuralverge Actor talks to the same backend, so there is a ceiling on how fast one Apify account can pull from it: 5 requests per second, counted across all Neuralverge Actors together. One run is normally one request, so this is about how many runs you start at once, not about the size of a single run — 5 requests per second is roughly 30 runs in flight at the same time, which is well above ordinary use.

Above the ceiling the backend answers HTTP 429. The Actor waits out the Retry-After it asks for and retries a few times before giving up; a run that does give up writes no row and is not charged.

If you need a higher rate for a bulk job, get in touch.

Free plan limits

Users on any paid Apify plan are not affected by anything in this section.

On the Apify Free plan all Neuralverge Actors share one budget, per user and per calendar month: 15 runs in total, at most 5 of them on this Actor, and 35 returned rows. A run that finds nothing still counts, because the lookup is performed either way. LinkedIn People Search is metered differently — one run there uses 25 of the 35 rows, because a full page of 25 profiles is bought upstream whether or not all of them are returned. When a limit is reached the Actor stops gracefully with a status message naming it; everything resets on the 1st of every month, and any paid Apify plan removes all of it.

Integrations & API

Results are stored in a standard Apify dataset — export as CSV, JSON, XML or Excel, or fetch on demand through the Apify API. The Actor also plugs into Apify's integrations (Make, Zapier, n8n, webhooks) and can be called from any MCP client.

FAQ

Do I need an account or API key? No. Extraction runs on the Neuralverge backend.

What URL do I use? A biznes.gov.pl CEIDG entry URL (the UUID-based link to a single entrepreneur's entry).

Am I charged if an entry isn't found? Yes — a lookup that ran is billed as one entry even when it matched nothing; you get a no result row that says so. A run that fails (missing input, bad key, upstream error) is not charged.


Disclaimer: This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by the Republic of Poland or CEIDG. Data originates from the public biznes.gov.pl / CEIDG register.