Poland CRBR Beneficial Owners Scraper
Pricing
from $0.06 / 1,000 item extracteds
Poland CRBR Beneficial Owners Scraper
Extract Polish CRBR beneficial ownership records by NIP, KRS, company name, PESEL, or beneficiary name for AML, KYC, KYB, and due diligence.
Pricing
from $0.06 / 1,000 item extracteds
Rating
0.0
(0)
Developer
Hanna Nosova
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
15 days ago
Last modified
Categories
Share
Search Poland's public Central Register of Beneficial Owners (CRBR) and export complete company filings, beneficial owners, control rights, representatives, discrepancies, and filing evidence. The Actor uses the Ministry of Finance's documented public data service and needs no CRBR login or paid data-provider key.
Use it for AML, KYC, KYB, due diligence, compliance evidence, investigations, and authorized registry research.
Best-value mode
Set outputMode to companyRecords to receive one row per company filing with every beneficial owner and every direct, indirect, or other control right nested in that row. This is the most data per billable result.
Use ownerRows when your downstream system needs one flattened row per beneficial owner. It remains the default for backward compatibility.
Ready-to-run examples
- Verify a Polish company in CRBR by NIP — one complete company filing with all owners and rights
- Export Polish beneficial owners from CRBR by KRS — one flattened row per beneficial owner
- Export historical Polish CRBR company filings — bounded filing history across a date range
Input example
{"searches": [{ "mode": "nip", "query": "6770065406" }],"outputMode": "companyRecords","maxResults": 20}
What data can I get?
- Company identity: name, NIP, KRS, legal form, Polish and foreign address fields
- Complete beneficial-owner details returned by CRBR
- All direct, indirect, and other control rights, including amounts, units, codes, privileges, and descriptions
- Filing representatives and their roles
- Presentation period, event date, correction details, reference numbers, and request timestamps
- Discrepancies, query status, request ID, and source metadata
- Deterministic
recordKeyvalues for deduplication and resumable batches not_foundrows for valid queries with no match and unchargederrorrows for failed searches
Who is it for?
- AML and KYC teams verifying beneficial ownership before onboarding
- KYB teams enriching authorized Polish company portfolios
- Compliance, legal, and finance teams retaining official filing evidence
- Investigators, journalists, and researchers working with a lawful purpose
Search options
| Mode | Required value | Best use |
|---|---|---|
nip | 10-digit NIP | Fast, precise company lookup |
krs | 1-10 digit KRS | Fast, precise company lookup |
companyName | At least 2 characters | Discovery; may return many companies |
beneficiaryPesel | 11-digit PESEL | Exact beneficiary lookup |
beneficiaryName | First name, last name, and birthDate | Beneficiary lookup without PESEL |
Exact NIP or KRS searches are the safest choice for production KYB. A broader company-name query can return more companies in one request, but should be bounded with maxResults.
Input settings
| Field | Type | Default | Description |
|---|---|---|---|
searches | array | required | One or more CRBR searches; up to 10,000 per run |
outputMode | string | ownerRows | companyRecords for maximum data per row, or ownerRows for flattened owner rows |
maxResults | integer | 20 | Maximum saved dataset rows |
dateFrom | YYYY-MM-DD | today | Start of the CRBR presentation period |
dateTo | YYYY-MM-DD | today | End of the CRBR presentation period |
requestDelayMs | integer | 500 | Delay between source requests; use 0 only for bounded batches |
requestTimeoutSecs | integer | 30 | Timeout for each attempt |
maxRetries | integer | 2 | Retries for temporary failures and rate limits |
includeRaw | boolean | false | Include the parsed source fragment; larger and may contain additional personal data |
Historical searches can return more filings than a current-day lookup. The Ministry states that current-state requests may take up to five minutes and historical-period requests may take until the end of the next business day, so allow an adequate Actor timeout for wide historical periods.
Output example
In companyRecords mode, a row has this shape:
{"recordType": "company","outputMode": "companyRecords","found": true,"companyName": "COMARCH S.A.","nip": "6770065406","krs": "0000057567","beneficialOwners": [{"fullName": "...","citizenships": ["PL"],"controlEntries": [{"kind": "direct","controlType": "...","ownershipAmount": "...","ownershipUnit": "..."}]}],"representatives": [],"discrepancies": [],"requestId": "...","sourceApiVersion": "2022/12/01","retrievedAt": "2026-07-20T00:00:00.000Z"}
The dataset schema lists every available field. RUN_SUMMARY records settled counts and warnings. If a run reaches its safe deadline or customer charge limit with pending searches, RUN_CHECKPOINT lets an Apify resurrection continue without duplicating stored rows. Increase the charge limit before resurrecting a charge-limited run.
Pricing
This Actor uses pay-per-event pricing. A run costs $0.005 to start, plus one item charge per successfully stored dataset row. Failed search rows are not charged. Valid no-match rows are charged because they are auditable query results.
| Apify tier | Price per result row |
|---|---|
| Free | $0.000115 |
| Bronze | $0.000100 |
| Silver | $0.000078 |
| Gold | $0.000060 |
| Platinum | $0.000040 |
| Diamond | $0.000028 |
At the Bronze rate, 1,000 companyRecords rows in one run cost about $0.105 including the start event. Batching searches amortizes the start fee. A single query is about $0.0051, so avoid starting a separate run for every identifier when one authorized batch will do.
Cost-efficient input recipes
Batch exact company checks
{"searches": [{ "mode": "nip", "query": "6770065406" },{ "mode": "krs", "query": "0000057567" }],"outputMode": "companyRecords","maxResults": 1000}
Retrieve historical filings
{"searches": [{ "mode": "nip", "query": "6770065406" }],"outputMode": "companyRecords","dateFrom": "2024-01-01","dateTo": "2026-07-20","maxResults": 100}
Flatten owners for a warehouse
{"searches": [{ "mode": "companyName", "query": "COMARCH" }],"outputMode": "ownerRows","maxResults": 100}
API usage
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('fetch_cat/poland-crbr-beneficial-owners-scraper').call({searches: [{ mode: 'nip', query: '6770065406' }],outputMode: 'companyRecords',maxResults: 20,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_APIFY_TOKEN')run = client.actor('fetch_cat/poland-crbr-beneficial-owners-scraper').call(run_input={'searches': [{'mode': 'nip', 'query': '6770065406'}],'outputMode': 'companyRecords','maxResults': 20,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
cURL
curl -X POST 'https://api.apify.com/v2/acts/fetch_cat~poland-crbr-beneficial-owners-scraper/runs?token=YOUR_APIFY_TOKEN' \-H 'Content-Type: application/json' \-d '{"searches":[{"mode":"nip","query":"6770065406"}],"outputMode":"companyRecords","maxResults":20}'
MCP and AI agents
Use the focused Apify MCP URL:
https://mcp.apify.com?tools=fetch_cat/poland-crbr-beneficial-owners-scraper
Claude CLI
$claude mcp add apify-crbr --url "https://mcp.apify.com?tools=fetch_cat/poland-crbr-beneficial-owners-scraper"
JSON config
{"mcpServers": {"apify-crbr": {"url": "https://mcp.apify.com?tools=fetch_cat/poland-crbr-beneficial-owners-scraper"}}}
Example prompt: “Look up these authorized Polish company NIPs, return one company record per filing, and flag discrepancies or missing CRBR matches.”
Scheduling and integrations
Create an Apify Task for a stable batch, then schedule it for periodic KYB refreshes. Export results through the API, webhooks, Zapier, Make, Google Sheets, or your own data warehouse. Use recordKey as the merge key and retain requestId, presentation dates, and retrievedAt as evidence.
Limits and responsible use
- The source is public and free, but it is a query service—not a bulk registry dump. This Actor does not attempt exhaustive enumeration.
- The official service publishes no service-level guarantee. Temporary outages and maintenance can occur; retries honor rate-limit guidance and stay within the run deadline.
- Broad name queries and long historical periods can be slower. Keep batches bounded and use exact identifiers where possible.
- CRBR can return names, PESEL values, birth dates, citizenship, residence, and ownership details. Process personal data only with a lawful basis and for an authorized purpose. Apply access controls, retention limits, and data-minimization rules appropriate to your jurisdiction.
- Do not use the Actor for harassment, identity theft, indiscriminate profiling, or unlawful surveillance.
- Registry declarations are submitted by authorized representatives. Treat them as official registry evidence, not as a substitute for independent risk assessment.
FAQ
Is GraphQL available?
No documented GraphQL interface was found. The Ministry publishes a documented public data service and its current WSDL/specification. Using that service is more stable and complete than copying calls from the CRBR web application.
What is the cheapest way to get the most data?
Batch exact identifiers into one run and choose companyRecords. One result row contains the whole filing, all owners, and all rights. Add a historical date range only when you need filing history, because historical requests can be slower and return more records.
Does CRBR require a login or API key?
No. The official search register is public and free.
Can this synchronize the entire registry?
The official service is designed for searches. If you need continuous synchronization of hundreds of thousands of entities, a commercial full-registry mirror may be operationally better, but it adds a paid dependency. This Actor intentionally uses the free official source for bounded searches.
Why did my run stop with pending searches?
The Actor reserves cleanup time before the Apify timeout. It saves a checkpoint and can continue after resurrection rather than risking incomplete writes or duplicate charges.
Related actors
- Poland KRS Company Registry Scraper — company registry details from KRS
- Poland VAT White List Scraper — Polish VAT status and bank-account checks
Support
Open an issue from the Actor page and include:
- Run ID or run URL
- Sanitized input JSON
- Expected output
- Actual output returned by the Actor
- A reproducible public URL or public registry example, when available
Do not post private batch data or personal identifiers in a public issue.