Financial statements of Polish companies, ready for analysis
Over 3 million statements from the Polish company register (KRS) in one data model: more than 800 fields covering the full balance sheet, the full income statement, cash flows and sector-specific layouts.
Available via MCP SQL REST API export in any format
Why kwerenda
Financial data is sold today as if analysis were a cost, not the work itself
Three differences that decide how much you actually get analysed.
You pay per query
A credit model means you calculate whether you can afford an analysis before you run it. Screening 500 companies becomes a budget decision, not an analytical one.
credits per queryYou pay for access
A flat monthly fee. Screening five hundred companies costs the same as screening one. What is worth checking is the analyst's call, not the budget's.
flat feeYou get the top of the balance sheet
Revenue, profit, total assets. Everything below that (provisions, liabilities split by maturity, costs by nature, cash flows) you read by hand out of a PDF.
~15 line itemsYou get the whole statement
The full balance sheet and the full income statement, cash flows, sector-specific line items and the narrative from the notes. Every line item has its own field, ready to query and export.
800+ fieldsYou cannot plug it into anything
A search box in a browser and an Excel export of a dozen columns, usually capped at a row limit. Your AI assistant has no access to the data, so you end up copy-pasting anyway.
manual exportYou connect in five minutes
MCP for Claude and ChatGPT, SQL for your BI, REST API for your own code. When you need a file, we export any slice of the database: the companies, years and columns you choose.
MCP · SQL · API · exportAccess
One database, any form of access
MCP for AI assistants, SQL for BI and notebooks, REST API for your own code, file export for spreadsheets and one-off analyses. The same data set; pick the form that suits you.
{
"mcpServers": {
"kwerenda": {
"command": "npx",
"args": ["-y", "@kwerenda/mcp-server"],
"env": {
"KWERENDA_API_KEY": "pk_live_••••••••"
}
}
}
}
Find the bottom percentile of companies by pension reserves, among those with a reserve above zero, headcount above 4, and revenue above one million.
-
kwerenda.screen 14,198 companiesmetric="pension_reserve", percentile="P10", filters… 1.4 s
The database matching these conditions holds 14,198 companies. The bottom-percentile threshold (P10) is PLN 7,502.55 in reserves. About 142 companies fall below it.
| Company | KRS | Pension reserve | Headcount | Revenue |
|---|---|---|---|---|
| Bratex sp. z o.o. | 0000112837 | 15.00 | 9.7 | 5,512,579 |
| Kormatex sp. z o.o. | 0000221934 | 31.00 | 20.0 | 2,756,497 |
| Ligmet sp. z o.o. | 0000347612 | 157.63 | 16.0 | 7,208,497 |
| Norvex sp. z o.o. | 0000398201 | 252.46 | 11.4 | 2,145,689 |
| Polstal sp.k. | 0000450128 | 439.70 | 128.0 | 117,271,739 |
Need the whole database in-house? We deliver full database dumps and dedicated instances on your infrastructure.
Data
Over 800 fields. The full balance sheet and the full income statement.
Most vendors stop at a dozen or so line items. We parse the entire statement and map it onto one canonical model: the balance sheet and the income statement in their full statutory layout, in both variants, the cash flow statement, dedicated layouts for banks, credit unions, insurers and brokerage houses, and the narrative from the notes.
| Typical vendor | kwerenda | |
|---|---|---|
| Fields in the data model | ~15 | 800+ |
| Balance sheet | condensed | full |
| Income statement (both variants) | a few items | full |
| Cash flow statement | rarely | yes |
| Banks, credit unions, insurers, brokers | no | yes |
| Notes to the statements | no | parsed |
| Ownership structure | yes | yes |
| Exports in any format | Excel only | yes |
| Access over MCP | no | yes |
One schema, whatever the company happened to file
Statements reach the KRS registry in several dozen XML variants, in two income statement layouts, under separate schemas for banks, credit unions, insurers, brokerage houses and funds. What comes out on our side is a single record with the same structure for every company and year.
- Year-over-year comparison
- Every record carries the current and the previous year in an identical structure. You compute trends from a single document, without stitching filings together.
- Full layout, line by line
- We map the balance sheet and the income statement down to the deepest sub-items, in both the comparative and the calculatory variant. Every line item has its own named field.
- Sector layouts in the same record
- Banks, credit unions, insurers, brokerage houses, funds, non-profits and corporate groups have their own line items. They land in the same record, so one query covers the whole market.
- Not only numbers
- Valuation methods, how the result was determined, the going-concern assumption and the merger accounting stay with the record.
- Source documents
- Every record links back to its source document. You can pull the original XML in a few seconds through the API or the MCP server.
{
"report_type": "JednostkaInnaWZlotych",
"schema_version": "1.2",
"is_consolidated": false,
"period_start": "2024-01-01",
"period_end": "2024-12-31",
"currency": "PLN",
"pnl_variant": "POROWNAWCZY",
"is_going_concern": true,
"average_annual_employment": "143.50",
"current_year": {
"assets": "48231000.00",
"assets_fixed_tangible_machinery": "9140000.00",
"assets_current_inventory_finished_goods": "2310000.00",
"assets_current_receivables_related_trade": "1275000.00",
"equity": "21044000.00",
"liabilities_short_term_trade_up_to_12m": "8317000.00",
"pnl_revenue_net_sales": "87412000.00",
"pnl_comp_amortization": "3180000.00",
"cash_flow_operating_net": "9903000.00",
"…": "more than 800 fields"
},
"previous_year": { "…": "same structure" }
}
Review the whole model before we talk
The complete field list with the line item reference from the statement, the column name and the statement types each field appears in. Searchable and filterable.
Assets and liabilities in the full layout, with sub-items and maturity splits.
Comparative and calculatory variants: revenue, costs and result at every level.
Operating, investing and financing cash flows, plus opening equity.
Consolidated statement line items: minority interests, goodwill, write-offs.
Statutory and commercial activity of foundations, associations and public benefit organisations.
Receivables and liabilities by sector, net interest and fee income.
Cooperative savings and credit unions (SKOK): financial assets by valuation category, interest, provisions.
Investments, technical provisions, reinsurers' share, investment income.
Financial instruments by category, brokerage revenue, market and clearing fees.
Net assets, investment income and the fund's operating result.
Missing a field you need?
We parse full documents, not a selection of line items. If something is in the statement but not in the model, we add it. Usually within days.
Coverage
Not only financial statements
A statement tells you what a company earned. The registers tell you who stands behind it. We take both from the same public sources and join them on the KRS number, so you query financials and owners together instead of stitching databases on company names.
Ownership structure
Shareholders and members recorded in the KRS, with the number and value of their shares. Where the holder is another company, we link it by KRS number to its own record, so an ownership chain can be walked upwards in a query rather than by hand.
Representatives
Management board, commercial proxies and supervisory board: who represents the company, in what role, and under what rules of representation. The same people can be found across every company they sit on.
Beneficial owners (UBO)
Filings from the Central Register of Beneficial Owners: the natural persons who actually control the company, including when they do so through a chain of other entities.
Same channels as the statements: MCP, SQL, REST API and exports in any format.
Export
Data exports in any format
You do not have to integrate anything to work with the full data set. You tell us the companies, years and fields, and we deliver a file with exactly that scope, once or on a schedule.
- Any criteria
- NACE code, region, legal form, size, statement type, years and thresholds on any financial line item. Combine criteria without limits.
- Only the columns you need
- Pick the fields you need out of more than 800, together with registry data and statement metadata.
- A format for your tools
- CSV, Excel, JSON or Parquet. Amounts in PLN and one naming convention, so the file loads straight into BI, a spreadsheet or a notebook.
- One-off or recurring
- A single snapshot for an analysis or a regular delivery with new statements, without redefining the criteria.
- NACE
- 25.* (fabricated metal products)
- regions
- Silesia, Lesser Poland, Opole
- revenue 2024
- PLN 20–200 m
- statement type
- standard and small entities
- years
- 2019–2024
- columns
- 146 fields: balance sheet, comparative P&L, cash flow, registry data
- format
- Parquet + field dictionary (CSV)
- delivery
- monthly, with new statements
Methodology
Where the data comes from and why you can trust it
Four steps from a document in the register to a record in your query.
Source
Financial statements from public sources: the Financial Document Repository (RDF), the KRS registry, CRBR.
Parsing
Statements reach the register as XML in dozens of schema variants: standard, small and micro entities, banks, credit unions, insurers, brokerage houses, funds, consolidated statements, each in several versions. Every balance sheet and income statement line item maps to its own field; if the model lacks something, we add it.
Normalisation
Different statement layouts (comparative, simplified, full) are mapped onto one common schema. Line items from different years and different reporting formats are comparable, with no manual mapping.
Coverage and updates
The database covers hundreds of thousands of Polish companies and millions of statements. New statements usually reach the database within a few hours of publication; on a standard contract it can occasionally take longer than a day. For clients who need speed we bring that down to an hour. We check for updates on monitored companies every day.
Sample
Download a data sample
Download the CSV and see what our model looks like before you connect full access.
kwerenda_probka_1000_sprawozdan.csv
1,000 reports, 1.1 MB
Before you open the file
- Amounts in PLN; "in thousands" reports converted to PLN
- Empty cell: the field is not in that report type's schema. 0.00 is a reported zero
- Average fill rate 41%, depending on the reporting obligation
- No contact data or accounting-policy descriptions (both in the full database)
- One, most recent report per company; full history since 2018 in the database
| name | main_pkd_code | period_end | pnl_revenue_net_sales_cy | equity_cy |
|---|---|---|---|---|
| TERG SPÓŁKA AKCYJNA | 4754Z | 2025-03-31 | 20281953846.00 | 2026869599.28 |
| ARCELORMITTAL POLAND S.A. | 2410Z | 2025-12-31 | 19117435000 | 4739461000 |
| W.EG Polska Sp. zo.o. | 4690Z | 2025-12-31 | 1229551798.23 | 8682522.49 |
| Gdańskie Wodociągi Sp. z o.o. | 3600Z | 2025-12-31 | 391307663.11 | 38369278.13 |
| CELMA INDUKTA SPÓŁKA AKCYJNA | 2711Z | 2025-12-31 | 293574000 | 140274000 |
215 columns: registry and address data, statement metadata, and financial line items for the current (_cy) and previous (_py) year.
Use cases
What our clients use it for
Investment screening
Filter thousands of companies on any combination of more than 800 fields and their trends, not on the three metrics you happen to have.
Due diligence
A target's full financial history, ownership structure and personal connections in a single query.
Sector analysis and benchmarking
Compare a target against the full population of companies in a NACE code, not against a sample. You can also take the whole sector as a single file.
Portfolio monitoring
Automatic detection of new statements and changes at the companies you track.
“It works, it is current, and we do not have to count queries. That is all we need.”
Pionier Broker Sp. z o.o.
Pricing
You pay for access, not per query
A flat monthly fee, agreed individually. No credits, no counting, no overage charges.
Monthly subscription
Custom quote
We set the fee after the demo, once we know which data you need and in what form.
Included in every subscription
- MCP, SQL and REST API
- exports in any format
- unlimited queries
- the full data model: more than 800 fields
- history back to 2018
- new fields on request
- source data (XML) for every record
On request
- dedicated instance
- SLA and updates within the hour
- onboarding support
- scheduled exports to your infrastructure
- full database dumps as files
Unlimited queries under fair use.
FAQ
Frequently asked questions
The questions we hear most often before a contract is signed.
Ask your own questionThe data comes from public sources: the Financial Document Repository, the KRS registry, CRBR. A commercial licence is part of the engagement: you may use the data in client reports and in your own products.
Usually within a few hours of publication; on a standard contract it can occasionally take longer than a day. If speed matters to you, the contract can bring that down to an hour. We scan the sources daily.
Every statement carries its filing date and reporting-period dates, so a missing year is visible at once. We never interpolate or synthesise data: you see exactly what the company filed, and what it did not.
Data on people holding positions in company bodies comes from the public KRS registry. Processing it for statistical purposes is fully permitted. Sensitive data such as PESEL numbers is cryptographically anonymised.
We can tailor the contract to each client. Get in touch and we'll work through the details of the arrangement together.
We parse full documents, not a selection of line items. If a field exists in the statement but not in the database, we add it, usually within days.
No. The scope depends on the layout the company filed: a micro entity reports fewer line items than one with a full balance sheet, and a bank has different line items from an insurer. On the data model page every field shows which statement types it appears in. An empty field means the line item does not exist in that layout; zero means a reported zero.
Yes. We prepare exports in any format: you choose the companies (for example by NACE code, region, size or financial line items), the years and the columns, and receive a CSV, Excel, JSON or Parquet file. An export can be a one-off or recurring.
Setting up MCP means entering the right details into the configuration of Claude, ChatGPT, or another AI tool. From receiving your access credentials to your first query takes about 5 minutes. No code, no infrastructure, no ETL.