Financial statements of Polish companies, ready for analysis

Over 3 million full statements from the Polish company register (KRS), mapped onto one schema: 94 line items from the balance sheet, income statement and cash flow. Plug them into Claude, your BI stack or your own code. One flat monthly fee, unlimited queries.

Available via MCP SQL REST API file export

3.1M
financial statements
94
financial line items
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

We parse full documents, not selected fields: from the cash flow statement to the notes. Every line item ready to query, with no PDF reading.

94 line items
Integration
Typical data vendor

You cannot plug it into anything

A search box in a browser and an Excel export. Your AI assistant has no access to the data, so you end up copy-pasting anyway.

Excel export
kwerenda

You connect in five minutes

MCP for Claude and ChatGPT, SQL for your BI, REST API for your own code. One config entry and your agent queries the data itself.

MCP · SQL · API

Access

One database, any form of access

MCP for AI assistants, SQL for BI and notebooks, REST API for your own code. The same data set; switch whenever you like.

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

Prefer a file or your own instance? We also deliver full database dumps as files and dedicated instances on your infrastructure.

Tell us what you work in

Data

94 line items from every statement, not fifteen

Competitors give you the top of the balance sheet. We parse the full documents and reduce them to one canonical model: the balance sheet, both variants of the income statement, the cash flow statement, bank and fund fields, and the narrative from the notes.

Typical vendor kwerenda
Financial line items ~15 94
Cash flow statement rarely 13 fields
Liabilities by maturity no yes
Costs by nature no yes
Notes to the statements no parsed
Ownership structure yes yes
Connection graph yes 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 and funds. What comes out on our side is a single record, identical for every company and year.

Year-over-year comparison
Every record carries the current and the previous year in an identical structure. You can compute trends up front from a single document, without stitching filings together.
Both income statement variants
We support both the comparative and the calculatory layout. Our records carry both the shared line items and the ones specific to each variant.
Banks, funds, consolidations
Bank, investment fund and consolidated statements get extra fields in the same record, instead of a separate schema and a separate code path on your side.
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 specific source document, available through the API and the MCP server too. You can pull the source XML in a few seconds.
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_current_inventory":     "6120000.00",
    "equity":                      "21044000.00",
    "liabilities_short_term_trade": "8317000.00",
    "pnl_revenue_net_sales":       "87412000.00",
    "pnl_comp_amortization":        "3180000.00",
    "cash_flow_operating_net":      "9903000.00"
  },
  "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 file export.

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, funds, consolidated statements, each in several versions. Every variant has its own parser. If a document carries a field the model lacks, 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 financial metrics and trends, not on the three fields 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 the sample you can afford.

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
  • unlimited queries
  • 94 financial line items per statement
  • 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
  • integration with 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.

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.