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

3.1M
financial statements
800+
fields in the data model
since 2018
of history
daily
updates

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.

Billing model
Typical data vendor

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 query
kwerenda

You 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 fee
Data depth
Typical data vendor

You 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 items
kwerenda

You 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+ fields
Integration
Typical data vendor

You 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 export
kwerenda

You 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 · export

Access

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.

claude_desktop_config.json
{
  "mcpServers": {
    "kwerenda": {
      "command": "npx",
      "args": ["-y", "@kwerenda/mcp-server"],
      "env": {
        "KWERENDA_API_KEY": "pk_live_••••••••"
      }
    }
  }
}
AI agent kwerenda MCP connected

Find the bottom percentile of companies by pension reserves, among those with a reserve above zero, headcount above 4, and revenue above one million.

1 kwerenda call · 1.4 s
  1. kwerenda.screen 14,198 companies
    metric="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.

Tell us what you work in

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.
financial_report.json
{
  "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" }
}

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.

Tell us what is missing

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.
export_metal_manufacturers.yaml
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
1,284 companies · 7,213 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

Download the CSV sample

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
kwerenda_probka_1000_sprawozdan.csv preview: 5 of 1,000 rows
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

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 question

The 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.