# Estonia Company Financials — Annual Report Key Figures (`nexgensignal/estonia-company-financial-records`) Actor

Annual report key figures for every Estonian company from the e-Business Register's open data: revenue, profit, assets, equity, cash, staff costs, employees, audit details. 2019 onward. Part of NexGen Signal — official-source data products

- **URL**: https://apify.com/nexgensignal/estonia-company-financial-records.md
- **Developed by:** [NexGen Signal](https://apify.com/nexgensignal) (community)
- **Categories:** Lead generation, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $33.50 / 1,000 annual report records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Estonia Company Financials — Annual Report Key Figures

**Official source. No API key. Pay per record.**

This actor gives you the financial key figures from every annual report filed with the Estonian e-Business Register, read from the register's own open-data files published by RIK (the Centre of Registers and Information Systems). Each record is one company's annual report for one year: registry code, current name and legal form, reporting period, submission date, audit details, a ready-to-use set of key figures (revenue, profit, assets, equity, cash, liabilities, staff costs, employees) and every key-indicator line of the report as filed.

On 27 September 2026 the register's files held **1,672,556 annual reports for 2019–2025**, including **237,418 for financial year 2025** (reports filed up to 31 August 2026). In 2025, **9,187 reports showed revenue of €1 million or more**; the largest was Bolt Operations OÜ (€1.47 billion), followed by Selver AS, Coop Eesti Keskühistu, aktsiaselts Olerex and Rimi Eesti Food AS.

Use it to:

- **Build prospect and credit lists** — every Estonian company above a revenue, asset or headcount threshold.
- **Check a company's numbers** — send registry codes and get each year's report back.
- **Benchmark a sector or a peer group** — the same figures for thousands of companies in one pull.

### Who buys this and for what job

- **B2B sales and lead-generation teams** targeting Estonian and Baltic companies by size.
- **Credit, KYB and supplier-risk teams** checking revenue, equity, losses and auditor opinions from the official filings.
- **M\&A advisers, investors and private-equity analysts** screening the Estonian market.
- **Accountants, consultants and researchers** benchmarking companies and sectors.
- **Data teams** loading clean, keyed financials for a whole country.

### Sample output

![Sample output — Estonia Company Financials](https://api.apify.com/v2/key-value-stores/IXCaMKjxSmUTLHhmq/records/estonia-company-financial-records.png)

An abridged record (`key_figures` shows 14 of its 18 entries and `figures` two of its 20 lines):

```json
{
  "record_id": "EE-AR:3423341",
  "registry_code": "10000018",
  "company_name": "Amserv Auto Osaühing",
  "legal_form": "Osaühing",
  "legal_form_short": "OÜ",
  "company_status": "Registrisse kantud",
  "report_year": 2025,
  "period_start": "01.01.2025",
  "period_end": "31.12.2025",
  "period_start_iso": "2025-01-01",
  "period_end_iso": "2025-12-31",
  "submitted_on": "22.06.2026",
  "submitted_on_iso": "2026-06-22",
  "consolidated": "Ei",
  "audited": "Jah",
  "size_category_chosen": "Suurettevõtja",
  "size_category_by_data": "Suurettevõtja",
  "assurance_type": "Audit",
  "auditor_opinion": "Märkuseta",
  "emphasis_of_matter": null,
  "other_matter": null,
  "going_concern_matter": null,
  "key_figures": {"Revenue": 88083023, "TotalAnnualPeriodProfitLoss": 1315661, "TotalProfitLossBeforeTax": 1484893, "Assets": 27521799, "CurrentAssets": 13351354, "NonCurrentAssets": 14170445, "CashAndCashEquivalents": 98824, "Equity": 12354757, "IssuedCapital": 1181750, "RetainedEarningsLoss": 9822346, "CurrentLiabilities": 14121402, "NonCurrentLiabilities": 1045640, "LaborExpense": 10619685, "AverageNumberOfEmployeesInFullTimeEquivalentUnits": 233},
  "figures": [
    {"table": "Bilanss", "label": "Varad", "element": "Assets", "value": 27521799},
    {"table": "Kasumiaruanne skeem 1", "label": "Müügitulu", "element": "Revenue", "value": 88083023}
  ],
  "register_link": "https://ariregister.rik.ee/est/company/10000018",
  "source": "Estonian Centre of Registers and Information Systems (RIK) — e-Business Register open data: annual report general data and key indicators (downloaded from https://avaandmed.ariregister.rik.ee/en/downloading-open-data)",
  "licence": "Creative Commons Attribution 4.0 (CC BY 4.0) — the open data page's 'License information' link points to the CC BY 4.0 legal code, and the page states that downloading open data requires acceptance of the licence terms.",
  "attribution": "Source: Estonian e-Business Register (RIK) open data (CC BY 4.0); reformatted by NexGen Signal.",
  "observed_at": "2026-09-28T03:38:44Z"
}
```

### Pricing

| Apify plan | Price per record |
|---|---|
| Free | $0.05 |
| Bronze | $0.045 |
| Silver | $0.04 |
| Gold and above | $0.0335 |

You pay only for records delivered to your dataset — one record per annual report. `maxRecords` caps what a run can cost: 500 records cost $25 on the Free plan. Filtering is free.

### Input

| Field | What it does | Default |
|---|---|---|
| `years` | Financial years, e.g. `[2025, 2024]`; files exist from 2019 | the latest year |
| `registryCodes` | 8-digit registry codes (up to 20,000) | all |
| `nameContains` | Current company name contains this text | none |
| `legalForms` | As the report file abbreviates them: `OÜ`, `AS`, `MTÜ`, `SA`, `KÜ`, `TÜ`… | all |
| `minRevenue`, `minAssets` | Minimum revenue (or total revenue for non-profits) and total assets, in euros | none |
| `minEmployees` | Minimum average full-time-equivalent employees | none |
| `sortBy` | `submitted` (most recent first), `revenue` or `assets` (largest first), or `file` | submitted |
| `maxRecords` | Maximum records delivered and billed | 500 |

Example — the 200 largest Estonian companies by 2025 revenue:

```json
{"years": [2025], "minRevenue": 1000000, "sortBy": "revenue", "maxRecords": 200}
```

Example — two companies over two years:

```json
{"years": [2025, 2024], "registryCodes": ["14532901", "10000018"]}
```

(That returned four reports. A registry code with no report in the years read is listed in the run receipt.)

### Output

| Field | Meaning |
|---|---|
| `record_id` | `EE-AR:<report_id>` — unique per annual report |
| `registry_code`, `company_name`, `legal_form`, `legal_form_short`, `company_status` | The company (name and full legal form from the register's current basic data) |
| `report_year`, `period_*`, `submitted_on*` | Financial year, reporting period and filing date (as published and as YYYY-MM-DD) |
| `consolidated`, `audited`, `size_category_*` | As filed (Estonian values: Jah/Ei, Mikroettevõtja, Väikeettevõtja…) |
| `assurance_type`, `auditor_opinion`, `emphasis_of_matter`, `other_matter`, `going_concern_matter` | The auditor engagement and opinion details |
| `key_figures` | Element → value, taken from the balance sheet, income statement and staff-cost note first |
| `figures` | Every key-indicator line of the report: table, Estonian label, element name, value |
| `register_link`, `source`, `licence`, `attribution`, `observed_at` | Provenance on every record |

Values are the register's. The element names (`Revenue`, `Assets`, `TotalAnnualPeriodProfitLoss`…) are the register's own taxonomy names; nothing is recalculated.

### Cost guidance

A top-200 list costs $6.70 on Gold. All 9,187 companies above €1 million revenue in 2025 cost about $308 on Gold. A watch-list of 1,000 registry codes over two years is at most 2,000 records ($67 on Gold). A whole year (about 237,000 reports) is about $7,950 on Gold.

### Tips

- **League tables:** combine `minRevenue` with `sortBy: "revenue"` to get the largest companies first; add `legalForms: ["AS"]` for public limited companies only.
- **Year-on-year change:** pass two years with a registry-code list and compare `key_figures` for the same `registry_code`.
- **Loss makers and weak balance sheets:** look for negative `TotalAnnualPeriodProfitLoss` or `Equity` in `key_figures`.
- **Audit signals:** `auditor_opinion` and the `going_concern_matter` field flag reports where the auditor raised an issue.

### How a run works

The actor checks robots.txt, reads the open-data page to find the current files, and downloads the register's basic company data (for names and legal forms), the general annual-report data, and one key-indicator file for each year asked for (each about 20 MB compressed). It reads them row by row and applies your filters. When you filter or sort by revenue, assets or employees, it first reads those few numbers for every candidate report; it then reads the full figures only for the reports it will deliver. Records are pushed to your dataset first and charged only after they are delivered; if you set a maximum charge, the run stops cleanly when it is reached. Test runs took 4–76 seconds. Every run saves a receipt (`RUN_RECEIPT`) with the robots decision, the file links, rows read and matched, and registry codes with no report. If the site cannot be reached after several retries, the run ends with a clear message and nothing is charged.

### Honest limitations

- **Key figures, not full statements.** The register's open data carries the key indicators of each report (about 15 lines on average), not every note.
- **Names are today's.** Company names and legal forms come from the current register; a company that has since left the register keeps its figures but has no name (3 of 500 in one test).
- **The current year fills in over time.** Reports are due months after the year ends; the 2025 file held reports submitted up to 31 August 2026 when this was written, and more arrive later.
- **Estonian labels.** Table names, labels and categories are in Estonian as filed; element names are the register's English taxonomy names.
- **The auditor's identity is not included.** The file gives the audit firm's register code; it is left out because a sole-practitioner auditor can be a person. Opinion details are kept.
- **Legal persons only.** Sole traders (FIE) do not file these reports, and no files about people (board members, shareholders, beneficial owners) are read.

### Licence and attribution

The e-Business Register's open-data page says downloading open data "requires acceptance of the license terms", and its "License information" link points to the **Creative Commons Attribution 4.0 (CC BY 4.0)** legal code. Every record carries the credit *Source: Estonian e-Business Register (RIK) open data (CC BY 4.0); reformatted by NexGen Signal.* This actor is not affiliated with or endorsed by RIK or the Estonian state.

### Differentiation

Estonian register actors on the Store — such as crawlerbros/estonia-e-business-register-scraper, parseforge/estonia-business-register-scraper and jungle_synthesizer/ariregister-estonia-business-register-scraper — look companies up one at a time. This actor reads the register's own bulk files, so it returns the financial figures of every filing company at once, with revenue, asset and headcount filters, league-table sorting and multi-year watch-lists.

### The NexGen Signal family

Part of NexGen Signal — official-source data products, no API keys, pay per record. Related actors:

- [UK Company Accounts & Financials — Companies House Data](https://apify.com/nexgensignal/uk-companies-house-accounts-financial-records)
- [UK Company Status Records — Companies House](https://apify.com/nexgensignal/uk-company-status-records)
- [Domain to Legal Entity & LEI — GLEIF Company Identity Lookup](https://apify.com/nexgensignal/company-data-enrichment-api)
- [Organization Sanctions & LEI Risk — Screening Record](https://apify.com/nexgensignal/organization-sanctions-lei-risk)
- [US Business Entity Search & Status Check — 7 States](https://apify.com/nexgensignal/us-business-entity-status-check)

# Actor input Schema

## `years` (type: `array`):

Financial years to read, e.g. \[2025, 2024]. Files exist from 2019. Leave empty for the latest year.

## `registryCodes` (type: `array`):

Only these 8-digit Estonian registry codes (up to 20,000). Codes with no report in the years read are listed in the run receipt.

## `nameContains` (type: `string`):

Only companies whose current register name contains this text (not case-sensitive).

## `legalForms` (type: `array`):

Only these legal forms as the report file abbreviates them, e.g. OÜ (private limited), AS (public limited), MTÜ (non-profit), SA (foundation).

## `minRevenue` (type: `integer`):

Only reports with revenue (or total revenue, for non-profits) of at least this much.

## `minAssets` (type: `integer`):

Only reports with total assets of at least this much.

## `minEmployees` (type: `integer`):

Only reports with at least this many average full-time-equivalent employees.

## `sortBy` (type: `string`):

Which reports come first when more match than your maximum.

## `maxRecords` (type: `integer`):

Maximum records delivered and billed in this run. One record = one annual report. A year holds about 237,000 reports.

## Actor input object example

```json
{
  "years": [
    2025
  ],
  "registryCodes": [],
  "legalForms": [],
  "sortBy": "submitted",
  "maxRecords": 10
}
```

# Actor output Schema

## `results` (type: `string`):

The delivered records.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "years": [
        2025
    ],
    "maxRecords": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("nexgensignal/estonia-company-financial-records").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "years": [2025],
    "maxRecords": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("nexgensignal/estonia-company-financial-records").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "years": [
    2025
  ],
  "maxRecords": 10
}' |
apify call nexgensignal/estonia-company-financial-records --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nexgensignal/estonia-company-financial-records"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/4Fjs1YJbQe6ndGJDk/builds/DfeWFZWRSSZmFTBEv/openapi.json
