# Estonia Company Registry: Revenue and Activity Search (`mrslm_data/estonia-company-registry`) Actor

Search Estonian register records by name, location or activity and review latest available annual-report revenue.

- **URL**: https://apify.com/mrslm_data/estonia-company-registry.md
- **Developed by:** [MRSLM Data](https://apify.com/mrslm_data) (community)
- **Categories:** Business, Lead generation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.60 / 1,000 companies

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 Registry Scraper: Revenue & NACE

Get a clean, filterable list of **Estonian companies straight from the official e-Business Register (Äriregister)**, and see in the same row how big each company really is: the **revenue from its latest annual report**, its **size class** (micro, small, medium, large), whether the report was **audited**, and its **main activity code (EMTAK, the Estonian version of NACE)**. Search by company name, registry code, city, county, legal form, VAT status, registration date, revenue or industry code, then download the result as JSON, CSV, Excel or through the API.

The data comes from the open data service of the Centre of Registers and Information Systems (RIK), the state agency that runs the Estonian business register. RIK publishes the register and the annual-report summaries as daily open data files under the CC BY 4.0 licence. This Actor downloads those files on every run, so you always get the register as it was published this morning, with no login, no API key, no captcha and no scraping of company pages.

**Full guide: How to Get a List of Estonian Companies with Revenue and NACE Codes from the e-Business Register (Real Run: IT Companies in Tartu)**

### What the Estonia Company Registry Scraper does

On every run the Actor downloads RIK's public open data files from avaandmed.ariregister.rik.ee:

1. **Basic company data** (ettevõtja rekvisiidid, lihtandmed), refreshed daily: name, registry code, legal form, VAT number, status, first registration date and address.
2. **General annual report data** (aruannete üldandmed): for each report, the year, reporting period, filing date, whether it is consolidated, whether it was audited and the size class.
3. **Sales revenue by EMTAK code** (EMTAK müügitulu): the revenue in each report split by activity code.

It filters the register by your criteria, picks each matching company's latest annual report (the newest year; within a year, the company's own report before a consolidated one), and joins the revenue and activity codes. One row per company.

Rows include the 8-digit registry code, name, legal form in Estonian and English, VAT number, status in Estonian and English, first registration date, full address, postal code, city, county and location name, the EHAK administrative code, the address ID, a link to the company page on ariregister.rik.ee, and the licence credit. With financials on, each row also has the latest report year, period and filing date, the consolidated and audited flags, size class, revenue in euros, main activity code (EMTAK), its NACE class, the classification version and up to 10 activity codes.

What it does **not** include: sole proprietors (FIE), who are private persons and are always excluded; board members, shareholders and beneficial owners, which the Actor does not read; e-mail addresses and phone numbers, which are not in the open data; and deleted companies, which are not in the source file.

### Who it is for

- **B2B sales and marketing teams** that sell into Estonia and want a target list by region, sector and size, not just a list of names.
- **Investors, M\&A advisers and analysts** who screen companies by revenue and industry.
- **Recruiters** who look for the largest employers of a skill in a city, for example software companies in Tartu.
- **Researchers and public bodies** who study regional economies with official data.
- **Data teams** who enrich a CRM with registry codes, VAT numbers and NACE codes.

### Real example: IT companies in Tartu with revenue over €1 million

Tartu is Estonia's second city and home to its oldest university and a strong software sector. The goal: list the 25 largest IT companies in Tartu by revenue.

#### Step 1: Enter the input

Open the [Estonia Company Registry Scraper](https://apify.com/mrslm_data/estonia-company-registry) in Apify Console, switch the input form to **JSON** and paste the exact input used:

```json
{
    "locations": [
        "Tartu"
    ],
    "activityCodes": [
        "62"
    ],
    "minRevenueEur": 1000000,
    "includeFinancials": true,
    "sortBy": "revenue",
    "maxResults": 25
}
```

What each setting does:

- `locations`: text that must appear in the registered address or its administrative unit. Matching ignores case and accents. `Tartu` matches Tartu city, Tartu county and Tartu parish, and, as you will see, any street named after Tartu.
- `activityCodes`: EMTAK / NACE code prefixes without dots. `62` is computer programming, consultancy and related activities; `6210` would be programming only. A company matches when **any** activity in its latest annual report starts with the prefix.
- `minRevenueEur`: `1000000` keeps companies with at least €1 million revenue in their latest report. Companies without a report are dropped when this is set.
- `includeFinancials`: `true` (the default) joins the latest annual report. It is turned on automatically when you filter or sort by revenue or activity.
- `sortBy`: `revenue` sorts by revenue, largest first. The other options are `newest` (the default, by registration date), `oldest` and `name`. Sorting is applied before the limits, so `maxResults` keeps the top of the sorted list.
- `maxResults`: `25` saves at most 25 companies, which also caps the cost.

The other inputs:

- `searchTerms`: words the company name must contain, for example `software`, `logistika` or `Bolt`. Case and accents are ignored.
- `regCodes`: exact 8-digit registry codes. These are always returned, whatever the other filters say.
- `legalForms`: limit to forms by code, such as `OU` (private limited company, OÜ) or `AS` (public limited company). By default all commercial forms are included.
- `includeNonProfits`: also include non-profit associations, foundations, apartment associations and public bodies when no legal form is picked.
- `activeOnly`: `true` (the default) skips companies in liquidation or bankruptcy.
- `registeredWithinDays`: only companies first entered in the register in the last N days, for a new-company list.
- `vatRegisteredOnly`: only companies with an Estonian VAT number (KMKR).
- `maxResultsPerSearch`: a cap per name search term.

#### Step 2: Run it

Press **Start**. The run finished with status `SUCCEEDED` and saved 25 companies, charged as 25 `company` events plus the start event: $0.0501 on the Free/Bronze tier. It took about 114 seconds, most of it downloading the register file and the two annual report files (the report files alone are about 33 MB of ZIPs), including one download that RIK refused at first and that succeeded on retry. Download time does not affect the price.

#### Step 3: Read the output

All 25 rows, cut to the most useful columns:

| name | city | revenueEur | sizeCategory | audited | latestReportYear | mainActivityCode | registeredDate |
|---|---|---|---|---|---|---|---|
| osaühing Playtech Estonia | Tartu linn | €54,477,200 | Large | true | 2025 | 62101 | 2001-02-15 |
| Rush Street Interactive Development Esto | Tartu linn | €19,238,544 | Medium | true | 2025 | 62101 | 2021-02-22 |
| Burfa Tech OÜ | Tallinn | €15,992,889 | Medium | true | 2021 | 62091 | 2013-06-13 |
| SaleMove OÜ | Tartu linn | €14,579,810 | Medium | true | 2025 | 62101 | 2016-01-14 |
| Concise Systems OÜ | Elva vald | €14,457,676 | Medium | true | 2025 | 62101 | 2008-03-12 |
| Merit Tarkvara AS | Tartu linn | €11,833,097 | Medium | true | 2025 | 62101 | 1997-08-26 |
| Estneti Osaühing | Tallinn | €10,767,771 | Small | true | 2025 | 62101 | 2002-04-02 |
| Askend Estonia OÜ | Tallinn | €10,003,100 | Small | true | 2025 | 62101 | 2016-10-13 |
| SoftwareOne Estonia OÜ | Tallinn | €9,185,628 | Small | true | 2025 | 62202 | 2023-07-19 |
| Finnair Business Services OÜ | Tartu linn | €8,418,290 | Small | true | 2025 | 69202 | 2001-08-06 |
| FINEST AS | Tallinn | €8,289,316 | Small | true | 2025 | 62101 | 2000-12-11 |
| Turnit OÜ | Tartu linn | €8,150,754 | Medium | true | 2025 | 62101 | 2015-05-18 |
| HANZA SSC Tartu OÜ | Tartu vald | €7,582,000 | Small | true | 2025 | 62202 | 2014-12-30 |
| Evocon OÜ | Tartu linn | €6,868,355 | Small | true | 2025 | 62101 | 2016-01-13 |
| Titanium Systems OÜ | Tartu linn | €6,850,970 | Small | true | 2025 | 62101 | 2003-06-19 |
| Raintree Systems OÜ | Tartu linn | €6,485,930 | Small | true | 2025 | 62101 | 2021-11-15 |
| Astro Baltics osaühing | Tartu linn | €5,859,923 | Small | true | 2024 | 62201 | 1998-03-11 |
| osaühing VideoB | Tartu linn | €5,735,597 | Small | true | 2025 | 62101 | 2004-10-08 |
| Apteekide Infotehnoloogia OÜ | Tartu linn | €5,120,562 | Small | true | 2025 | 63102 | 2000-07-19 |
| CryptoCompany OÜ | Tartu linn | €4,925,903 | Small | false | 2024 | 62901 | 2018-03-14 |
| AS LHV Paytech | Tallinn | €4,603,401 | Small | true | 2025 | 64991 | 2012-05-08 |
| OÜ Plausible Insights | Tartu linn | €4,332,427 | Small | false | 2025 | 62101 | 2019-04-22 |
| Rulta OÜ | Tallinn | €4,317,793 | Small | false | 2025 | 62201 | 2019-01-11 |
| BURFA MEDIA OÜ | Tallinn | €4,191,661 | Medium | true | 2021 | 62091 | 2013-06-27 |
| AS Reach-U | Tartu linn | €4,140,865 | Small | true | 2025 | 62101 | 1997-11-03 |

One full row as JSON:

```json
{
    "regCode": "10736593",
    "name": "osaühing Playtech Estonia",
    "legalFormCode": "OU",
    "legalForm": "Osaühing",
    "legalFormEn": "Private limited company (OÜ)",
    "legalFormSubtype": null,
    "vatNumber": "EE100677825",
    "status": "Registrisse kantud",
    "statusEn": "Registered",
    "registeredDate": "2001-02-15",
    "address": "Tartu maakond, Tartu linn, Tartu linn, Ülikooli tn 1a",
    "postalCode": "51001",
    "city": "Tartu linn",
    "county": "Tartu maakond",
    "locationName": "Tartu linn, Tartu linn, Tartu maakond",
    "ehakCode": "8151",
    "adsAddressId": "3824813",
    "registryUrl": "https://ariregister.rik.ee/est/company/10736593",
    "openDataLicence": "CC BY 4.0, Estonian e-Business Register (RIK)",
    "latestReportYear": 2025,
    "reportPeriodStart": "2025-01-01",
    "reportPeriodEnd": "2025-12-31",
    "reportFiledDate": "2026-06-30",
    "consolidated": false,
    "audited": true,
    "sizeCategory": "Large",
    "revenueEur": 54477200,
    "mainActivityCode": "62101",
    "mainActivityNace": "62.10",
    "activityClassification": "EMTAK 2025",
    "activityCodes": [
        "62101"
    ]
}
```

What the 25 real rows show:

- **Playtech Estonia leads by far**, with €54.5 million revenue in 2025 and the only `Large` size class in the list. Rush Street Interactive Development Estonia (€19.2 million), SaleMove (€14.6 million), Concise Systems in Elva (€14.5 million) and Merit Tarkvara (€11.8 million) follow. Several of the largest are development centres of foreign groups, which is a useful signal for recruiters.
- **The 25 companies reported €256.4 million revenue in total.**
- **"Tartu" also matched a street.** 8 of the 25 rows are in Tallinn, not Tartu: their address is on **Tartu mnt** (Tartu road), a main street in central Tallinn. Burfa Tech (Tartu mnt 83), Estneti, Askend, FINEST and AS LHV Paytech are examples. 15 rows are in Tartu city itself (`city` = Tartu linn), and the others are elsewhere in Tartu county (Elva vald, Tartu vald). To get only the city, use `locations: ["Tartu linn"]`, or filter on `city` or `county` afterwards.
- **Reports can be old.** Most rows are from the 2025 annual report, filed in 2026. But Burfa Tech's and Burfa Media's latest reports are from 2021, and Astro Baltics' and CryptoCompany's from 2024. Always check `latestReportYear` before you compare revenues.
- **Not all are audited.** CryptoCompany, Plausible Insights and Rulta have `audited: false`; smaller companies are not always required to have an audit.
- **Some reports are consolidated.** Rush Street Interactive Development Estonia and Titanium Systems have `consolidated: true`: their latest report is a group report, so the revenue may include subsidiaries.
- **Activity matching uses all codes.** Finnair Business Services' main activity is 69202 (accounting), but its report also lists 62202 (IT consultancy), so it matched `62`. AS LHV Paytech's main code is 64991 (financial services), with 62201 as a second activity. Look at `mainActivityCode` when you need the main business only.
- **Revenue is the sum across activities.** `revenueEur` adds up the revenue the report splits by activity code. For Merit Tarkvara that covers four codes, including software (62101) and wholesale (46501).
- **Long-established companies.** Merit Tarkvara and AS Reach-U were registered in 1997 and Playtech Estonia in 2001, while Raintree Systems (2021) is among the youngest.

### Output fields

| Field | What it means | Example from this run |
|---|---|---|
| `regCode` | 8-digit registry code (registrikood). | 10736593 |
| `name` | Company name as registered. | osaühing Playtech Estonia |
| `legalFormCode / legalForm / legalFormEn` | Legal form code and its Estonian and English name. | OU / Osaühing / Private limited company (OÜ) |
| `legalFormSubtype` | Subtype, when the register has one. | null |
| `vatNumber` | Estonian VAT number (KMKR), when registered. | EE100677825 |
| `status / statusEn` | Register status in Estonian and English. | Registrisse kantud / Registered |
| `registeredDate` | First entry in the register. | 2001-02-15 |
| `address / postalCode` | Full registered address and postal code. | Tartu maakond, Tartu linn, Tartu linn, Ülikooli tn 1a / 51001 |
| `city / county / locationName` | Municipality, county and full administrative unit. | Tartu linn / Tartu maakond |
| `ehakCode / adsAddressId` | Estonian administrative unit code and address ID. | 8151 / 3824813 |
| `registryUrl` | Company page on ariregister.rik.ee. | https://ariregister.rik.ee/est/company/10736593 |
| `openDataLicence` | Credit line for the CC BY 4.0 licence. | CC BY 4.0, Estonian e-Business Register (RIK) |
| `latestReportYear` | Year of the latest annual report. | 2025 |
| `reportPeriodStart / reportPeriodEnd / reportFiledDate` | Report period and filing date. | 2025-01-01 / 2025-12-31 / 2026-06-30 |
| `consolidated / audited` | Group report flag and audit flag. | false / true |
| `sizeCategory` | Micro, Small, Medium or Large, as stated in the report. | Large |
| `revenueEur` | Sum of revenue by activity in the report, in euros. | 54477200 |
| `mainActivityCode / mainActivityNace` | Main EMTAK code and its NACE class. | 62101 / 62.10 |
| `activityClassification` | EMTAK version used in the report. | EMTAK 2025 |
| `activityCodes` | Up to 10 activity codes in the report, main first. | \["62101"] |
| `scrapedAt` | When the row was built. | 2026-10-30T23:17:02.601Z |

### Export Estonian companies to CSV, Excel or Google Sheets

Every run saves its rows to a dataset, and a dataset can be downloaded in any common format without code.

**From Apify Console.** Open the run, go to the **Output** tab and click **Export**. Pick CSV, Excel (XLSX), JSON, XML, HTML or RSS, and tick only the columns you want. Nested values such as lists and objects are flattened into columns like `name/0` or `object/field` in CSV and Excel.

**From a URL.** The same export is a plain HTTPS link. Replace `<DATASET_ID>` with the dataset ID shown on the run's **Storage** tab:

```bash
## CSV with just the columns you need
curl -H "Authorization: Bearer $APIFY_TOKEN" \
  "https://api.apify.com/v2/datasets/<DATASET_ID>/items?format=csv&clean=1&fields=regCode,name,legalFormEn,vatNumber,city,county,registeredDate,latestReportYear,sizeCategory,audited,revenueEur,mainActivityCode,registryUrl" -o estonia-companies.csv

## Excel
curl -H "Authorization: Bearer $APIFY_TOKEN" \
  "https://api.apify.com/v2/datasets/<DATASET_ID>/items?format=xlsx&clean=1" -o estonia-companies.xlsx
```

**Into Google Sheets.** Three options, from simplest to most automatic:

1. **One-off:** download the CSV and use **File > Import > Upload** in Google Sheets. Choose "Replace current sheet" to refresh an existing tab.
2. **Automatic, no code:** use Make, Zapier or n8n as described in the next section, ending in a Google Sheets "Add row" step.
3. **Formula:** `=IMPORTDATA("https://api.apify.com/v2/actor-tasks/<USERNAME>~<TASK_NAME>/runs/last/dataset/items?status=SUCCEEDED&format=csv&token=<YOUR_TOKEN>")` always pulls the latest successful run of a saved task. The token sits in the formula, so anyone who can open the sheet can see it. Only use this in a private sheet.

### Use it from Make, Zapier or n8n

All three automation tools have an official Apify app, so you can run this Actor and pass its rows on without writing code.

1. **Trigger.** Use a schedule in the automation tool, or Apify's "Watch Actor runs" / "Watch task runs" trigger if you already schedule the task in Apify.
2. **Run.** Add the Apify "Run Actor" (or "Run task") action, choose `mrslm_data/estonia-company-registry` and paste the JSON input from Step 1. Turn on "wait for finish" so the next step gets the data.
3. **Get the rows.** Add "Get dataset items" and map the run's default dataset ID from the previous step.
4. **Send them on.** Add a Google Sheets "Add row" step for a target list, a HubSpot or Pipedrive step that creates a company with its registry code, VAT number and revenue, or a Slack message for each new company in your sector.

Each module only moves data; the Actor's pricing is the same as when you run it in Console.

### Schedule a weekly new-company list

New Estonian companies are registered every day. A weekly run with `registeredWithinDays: 7` and your locations or name words returns the companies first registered in that week. New companies have no annual report yet, so leave `minRevenueEur` and `activityCodes` empty for this list.

1. In the Actor's input form, set up the input from Step 1 and click **Save as new task**. Give it a clear name such as `estonia-new-companies-weekly`.
2. Go to **Schedules > Create new**, set the cron expression to `0 8 * * 1` and pick your timezone, so it runs at 8 AM every Monday.
3. Add the task to the schedule and save. Each run gets its own fresh dataset.
4. Optional: on the task's **Integrations** tab, add a webhook, Slack or email notification for "Run succeeded", or connect Make, Zapier or n8n, so the new rows go where you need them.

To fetch the newest results without looking up a run ID, use the task's last-run link: `https://api.apify.com/v2/actor-tasks/<USERNAME>~estonia-new-companies-weekly/runs/last/dataset/items?status=SUCCEEDED&format=json`.

### Call it from the API (Python, JavaScript or curl)

Start the Actor from your own code with the official Apify clients. Put your API token (Console > Settings > API & Integrations) in an environment variable called `APIFY_TOKEN` rather than in the code.

**Python** (`pip install "apify-client>=3"`):

```python
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])
run_input = {
    "locations": [
        "Tartu"
    ],
    "activityCodes": [
        "62"
    ],
    "minRevenueEur": 1000000,
    "includeFinancials": true,
    "sortBy": "revenue",
    "maxResults": 25
}

run = client.actor("mrslm_data/estonia-company-registry").call(run_input=run_input)

## apify-client 3.x returns a Run object, so use run.default_dataset_id
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item["regCode"], item["name"], item["city"], item["revenueEur"])
```

In apify-client 3.x, `call()` returns a typed object. Older examples that use `run["defaultDatasetId"]` were written for 1.x and 2.x and fail in 3.x with `TypeError: 'Run' object is not subscriptable`.

**JavaScript / Node.js** (`npm install apify-client`):

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const input = {
    "locations": [
        "Tartu"
    ],
    "activityCodes": [
        "62"
    ],
    "minRevenueEur": 1000000,
    "includeFinancials": true,
    "sortBy": "revenue",
    "maxResults": 25
};

const run = await client.actor('mrslm_data/estonia-company-registry').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, items[0].name);
```

**curl**, one request that runs the Actor and returns the rows as CSV (it waits up to 5 minutes, so keep the input small):

```bash
curl -X POST "https://api.apify.com/v2/acts/mrslm_data~estonia-company-registry/run-sync-get-dataset-items?format=csv" \
  -H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \
  -d '{"locations": ["Tartu"], "activityCodes": ["62"], "minRevenueEur": 1000000, "includeFinancials": true, "sortBy": "revenue", "maxResults": 25}' -o estonia-companies.csv
```

### Use it from AI agents and chat assistants (MCP)

Apify runs a hosted Model Context Protocol (MCP) server, so assistants such as Claude Desktop, Cursor, VS Code or any other MCP client can call this Actor as a tool. Add this server URL to your MCP client and sign in with your Apify account (or send your API token as a Bearer header):

```
https://mcp.apify.com/?tools=mrslm_data/estonia-company-registry
```

The assistant then sees the Actor's input fields, can start a run with the input it builds from your request, and reads the dataset rows back. A prompt like this works well:

> Using the Estonian business register, list the 20 largest construction companies (activity code 41) in Pärnu by revenue, with their registry codes and report year.

Runs started through MCP are billed exactly like any other run, per row saved, so it is worth asking the assistant to set `maxResults`.

### What it costs

The Actor uses pay-per-event pricing: one `company` event per company saved, so charged events always equal the rows in your dataset. Downloading and filtering the register costs nothing extra.

#### Price per event

| Event (per 1,000) | Free / Bronze | Silver | Gold / Platinum / Diamond |
|---|---|---|---|
| Company saved (`company`) | $2.00 | $1.80 | $1.60 |
| Actor start (once per run at the default memory, not per 1,000) | $0.00005 | $0.00005 | $0.00005 |

You are charged only for the events in this table: nothing for compute, and nothing for searches that return no rows beyond the start fee.

| Scenario | Free / Bronze | Silver | Gold |
|---|---|---|---|
| The run in this guide (25 companies) | $0.0501 | $0.0451 | $0.0401 |
| Weekly new-company list, ~150 companies (4 runs a month) | $1.20 | $1.08 | $0.96 |
| All IT companies (code 62) in Estonia with any revenue, ~3,000 companies | $6.00 | $5.40 | $4.80 |

The last two rows are estimates; the real counts depend on your filters. Downloading every commercial company in the register would be several hundred thousand rows, so filter by place, sector, revenue or name first. To cap spending, set **Maximum cost per run** in the run options (or `maxTotalChargeUsd` in the API), or use `maxResults`.

### Tips

- **Use "Tartu linn", "Tallinn" or a county name** ("Harju maakond", "Ida-Viru maakond") to be precise. A bare town name can match street names, as "Tartu mnt" did here.
- **Use short activity prefixes** for a sector (`62`, `41`, `5610`) and check `mainActivityCode` if you need the main business only.
- **Combine revenue and sorting.** `sortBy: "revenue"` with `maxResults` gives you the top N in a sector or region.
- **Look up known companies** with `regCodes`. They are always returned, even when other filters would drop them.
- **Name search ignores case and accents**, so `sõidu` and `soidu` both work, and `bolt` also finds "Boltrex".
- **Read the run summary.** The `RUN_SUMMARY` record in the run's key-value store shows how many register rows were read, how many matched before the revenue and activity filters, and how many had an annual report. If a run returns nothing, it shows which filter was too narrow.

### Limits

- Revenue, size, audit and activity come from the latest annual report on file. New companies have none yet, and some companies file late, so their figures can be years old.
- Revenue is the total of sales by activity in the report. For holding companies it can be small even when the group is large.
- If RIK's annual report files cannot be downloaded in a run, the Actor logs a warning and returns register data only, without revenue or activity filters.
- No people data: no board members, shareholders, beneficial owners, e-mails or phone numbers.
- Deleted companies and sole proprietors (FIE) are not included.

### FAQ

**Where does the data come from?**
From the open data files of the Estonian e-Business Register, published by RIK under CC BY 4.0. The Actor downloads them on every run.

**Is this the official register?**
The data is official; the Actor is an independent tool and is not affiliated with RIK.

**How fresh is it?**
The company file is refreshed daily by RIK. The annual report files are cumulative quarterly snapshots; this run used the snapshot up to 30 September 2026.

**What is EMTAK?**
The Estonian version of the EU's NACE classification of economic activities. The first four digits match NACE, so `62101` is NACE class 62.10.

**Can I get e-mails or phone numbers?**
No. They are not in the open data, and the Actor does not scrape them.

**Can I list new companies only?**
Yes. Set `registeredWithinDays`, for example 7 for the last week.

**Why are some rows outside my city?**
Location matching looks for your text anywhere in the address and administrative unit, so a street named after a town also matches. Use a more precise name, such as "Tartu linn".

**Does it work with Make, Zapier or n8n?**
Yes. All three have an Apify app. Use "Run Actor" (or run a saved task), then "Get dataset items" to pass the rows on.

**Can AI agents use it?**
Yes, through Apify's MCP server at `https://mcp.apify.com/?tools=mrslm_data/estonia-company-registry`, as shown above.

### Data source, freshness and licence

- **Source:** RIK e-Business Register open data, [avaandmed.ariregister.rik.ee](https://avaandmed.ariregister.rik.ee/en/downloading-open-data). Files used: basic company data (ettevõtja rekvisiidid), general annual-report data (aruannete üldandmed) and sales revenue by EMTAK code.
- **Freshness:** the basic data file is refreshed daily by RIK. The annual-report files are published as cumulative snapshots; the Actor always picks the newest one listed on the open data page.
- **Licence:** CC BY 4.0. If you republish the data, credit "Estonian e-Business Register (RIK)". The `openDataLicence` field carries that credit in every row.
- **Robots and access:** only the public download files are fetched, which the site's robots.txt allows. No company pages are crawled and no login is used.

### Privacy

This Actor returns business data only. **Sole proprietors (FIE, füüsilisest isikust ettevõtja)** are a business form of a private person, so they are always excluded, even if you ask for them by registry code. The Actor does not read the files on board members, shareholders or beneficial owners, and it outputs no names of people, personal ID codes, e-mails or phone numbers. Some company names contain a founder's name; that is how the company chose to register itself.

If you use the results for marketing, you are responsible for following the GDPR and the Estonian rules on direct marketing to businesses.

### Legal

The data is official open data published by the Estonian Centre of Registers and Information Systems under CC BY 4.0. This Actor only downloads files that the publisher offers for download. You are responsible for how you use the data, including compliance with the licence, the GDPR and marketing laws.

# Actor input Schema

## `searchTerms` (type: `array`):

Words or phrases the company name must contain (case and accents ignored), e.g. software, logistika, Bolt. One per line. Leave everything empty to run the example search (software, top 20 by revenue).

## `regCodes` (type: `array`):

Exact 8-digit Estonian registry codes (registrikood), e.g. 14532901. Always returned, whatever the other filters say.

## `locations` (type: `array`):

Text that must appear in the registered address or its administrative unit, e.g. Tallinn, Tartu linn, Pärnu, Ida-Viru maakond, Kesklinna linnaosa.

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

Default: all commercial forms (OÜ, AS, partnerships, cooperatives, branches, SE). Sole proprietors (FIE) are never returned.

## `includeNonProfits` (type: `boolean`):

When no legal form is picked, also return non-profit associations, foundations, apartment associations, unions, parties and public bodies.

## `activeOnly` (type: `boolean`):

Skip companies in liquidation or bankruptcy. Deleted companies are not in the source file.

## `registeredWithinDays` (type: `integer`):

Only companies first entered in the register in the last N days. 0 = any date. Use 30 for a monthly new-company list.

## `vatRegisteredOnly` (type: `boolean`):

Only companies with an Estonian VAT number (KMKR).

## `includeFinancials` (type: `boolean`):

Join the latest annual report: year, size class, audit flag, revenue and main activity (EMTAK / NACE). Adds about 15 seconds.

## `minRevenueEur` (type: `integer`):

Revenue in the latest annual report. 0 = no minimum. Companies without a report are dropped when this is set.

## `activityCodes` (type: `array`):

Code prefixes without dots, matched against the activities in the latest annual report, e.g. 62 (IT), 6210 (programming), 41 (construction), 5610 (restaurants).

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

Order of the results, applied before the limits.

## `maxResultsPerSearch` (type: `integer`):

Cap per company-name search term. 0 = no cap.

## `maxResults` (type: `integer`):

Total cap. You pay per company saved. 0 = no cap.

## Actor input object example

```json
{
  "searchTerms": [
    "software"
  ],
  "includeNonProfits": false,
  "activeOnly": true,
  "registeredWithinDays": 0,
  "vatRegisteredOnly": false,
  "includeFinancials": true,
  "minRevenueEur": 0,
  "sortBy": "revenue",
  "maxResultsPerSearch": 0,
  "maxResults": 20
}
```

# Actor output Schema

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

All companies as a dataset (JSON, CSV, Excel and more via the API or Console).

## `summary` (type: `string`):

Register rows read, matches per search, annual-report coverage, failures and the stop reason.

# 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 = {
    "searchTerms": [
        "software"
    ],
    "sortBy": "revenue",
    "maxResults": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("mrslm_data/estonia-company-registry").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 = {
    "searchTerms": ["software"],
    "sortBy": "revenue",
    "maxResults": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("mrslm_data/estonia-company-registry").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 '{
  "searchTerms": [
    "software"
  ],
  "sortBy": "revenue",
  "maxResults": 20
}' |
apify call mrslm_data/estonia-company-registry --silent --output-dataset

```

## MCP server setup

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

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/cpKk9PXx0zuSBFr32/builds/HAavi3cyWzBkkWa6m/openapi.json
