# Latvian Company Register Scraper (Uzņēmumu reģistrs) (`studio-amba/ur-gov-lv-scraper`) Actor

Search the Latvian Enterprise Register (ur.gov.lv open data) by company name, registration number, legal form, address or registration date. Returns status, legal form, registered address and optional board members. No API key, no login.

- **URL**: https://apify.com/studio-amba/ur-gov-lv-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** Business, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $7.00 / 1,000 result scrapeds

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

## Latvian Company Register Scraper (Uzņēmumu reģistrs)

Search the Latvian Enterprise Register by company name, registration number, legal form, address or registration date. The actor reads the official open data that the Register of Enterprises of the Republic of Latvia (Uzņēmumu reģistrs, ur.gov.lv) publishes at [dati.ur.gov.lv](https://dati.ur.gov.lv/). No API key, no login, no proxy.

The register file holds about 489,000 entities: limited liability companies (SIA), joint-stock companies (AS), individual merchants, farms, associations, foundations, representative offices, media outlets, religious organisations, political parties and trade unions. Active and removed entities are both included, so you can also check whether a counterparty still exists.

### How to scrape Latvian company register data

The register is published as a single CSV file that the registry refreshes every day. The actor downloads the current file at the start of each run, filters it with your input, and stops reading as soon as it has enough matches. A typical run finishes in under a minute.

#### Search by company name

Enter part of a name in **Company name contains**. Case and diacritics are ignored, so `riga` finds `Rīga`. The match is on the full registered name, including the legal form prefix (for example `Sabiedrība ar ierobežotu atbildību "TRIMINO"`).

#### Look up registration numbers

Paste one or more 11-digit registration numbers into **Registration numbers** to get exactly those entities. This is the fastest way to check a counterparty list.

#### Filter by legal form, register, address and date

- **Legal form code**: `SIA`, `AS`, `IK`, `IND`, `ZEM`, `BDR`, `NOD`, `KOP`, `FIL` and the other codes the registry uses.
- **Register code**: `K` for the Commercial register, `B` for associations and foundations, and ten more.
- **Address contains**: a city, municipality or street name.
- **Registered on or after / before**: a date range in `YYYY-MM-DD`, for example to list every company registered last month.

All filters you fill in must match at the same time.

#### Active entities only

Turn on **Active entities only** to drop entities that were liquidated or reorganised. It is off by default, so a plain search returns removed entities too, each marked `terminated`.

#### Board members and officers

Turn on **Include board members and officers** to add an `officers` list to each entity. The list comes from the register's officers file and has the person or entity name, position, governing body, representation rights and the date the entry was registered. Personal identity numbers and birth dates are not returned. The option adds about 30 seconds to a run.

### What data does the Latvian Company Register Scraper extract?

| Field | Type | Description |
|-------|------|-------------|
| **name** | String | Registered name (firma) |
| **registrationNumber** | String | Unified registration number |
| **legalForm** | String | Legal form label |
| **legalFormCode** | String | Legal form code, for example `SIA` |
| **register** | String | Register the entity is listed in |
| **registerCode** | String | One-letter register code |
| **status** | String | `active` or `terminated` |
| **registrationDate** | String | Registration date, `YYYY-MM-DD` |
| **terminationDate** | String or null | Date removed from the register, or the reorganisation date |
| **terminationReason** | String or null | `liquidation` or `reorganisation` |
| **address** | String | Registered (legal) address |
| **postalCode** | String | Postal index |
| **sepaCreditorId** | String | SEPA creditor identifier, when assigned |
| **officers** | Array | Only with the officers option on |
| **scrapedAt** | String | ISO timestamp of the run |

### Example input

```json
{
  "searchQuery": "rimi",
  "activeOnly": true,
  "includeOfficers": true,
  "maxResults": 20
}
```

### Example output

```json
{
  "name": "Sabiedrība ar ierobežotu atbildību \"TRIMINO\"",
  "registrationNumber": "40003621777",
  "legalForm": "Sabiedrība ar ierobežotu atbildību",
  "legalFormCode": "SIA",
  "register": "Komercreģistrs",
  "registerCode": "K",
  "status": "active",
  "registrationDate": "2003-03-07",
  "terminationDate": null,
  "terminationReason": null,
  "address": "Siguldas nov., Sigulda, Mālkalnu iela 11",
  "postalCode": "2150",
  "sepaCreditorId": "LV05ZZZ40003621777",
  "scrapedAt": "2026-10-13T19:32:37.065Z"
}
```

### Use cases

- **KYB and counterparty checks**: confirm that a Latvian company exists, which legal form it has and whether it was removed from the register.
- **New company lists**: filter by registration date to get every entity registered in a period.
- **Lead lists**: filter by legal form and address to build a list of companies in one city.
- **Data enrichment**: add registration date, legal form and address to a list of Latvian company names.

### Pricing and cost

The actor is billed per result. The source is a single file download, so a run costs a small amount of compute and no proxy traffic. Maximum results per run: 10,000 (set by **Max results**). Typical cost per run is about $0.002 of compute for 20 results, about $0.004 with officers. The usage cost of a run settles after the run has SUCCEEDED, so it does not show on a run that is still in progress.

### Data source and license

The data is the Uzņēmumu reģistrs open data set, published under the CC0 1.0 public domain dedication on data.gov.lv. The file is updated once a day, so an entity registered today may show up tomorrow.

### What this actor does not return

- Annual accounts and financial data. The registry publishes these in separate files.
- Beneficial owners, shareholders and members.
- Industry (NACE) codes, e-mail addresses, phone numbers and websites. The register file does not contain them.

### FAQ

**Does it need a proxy?** No. The open data server answers plain HTTP requests.

**Why does a name search return more than I expected?** The search matches any part of the registered name. `rimi` also matches `TRIMINO`. Use a longer text or the registration number for an exact lookup.

**How current is the data?** The registry regenerates the file daily. Each run downloads the current version.

**What happens when nothing matches?** The run fails with a clear message instead of finishing empty, so scheduled runs do not silently return nothing.

**Can I use this for other Baltic countries?** This actor covers Latvia only.

### Related actors

See the other European company register actors from Studio AMBA for Norway, Denmark, the Netherlands, Germany, France and the UK.

# Actor input Schema

## `searchQuery` (type: `string`):

Keep entries whose registered name contains this text. Case and diacritics are ignored, so 'riga' matches 'Rīga'. Example: 'rimi', 'latvijas balzams', 'sia'. Leave empty to search by the other filters.

## `registrationNumbers` (type: `array`):

Look up specific entities by their 11-digit unified registration number (reģistrācijas numurs). Example: 40003520643. Up to 1,000 numbers per run.

## `legalForm` (type: `string`):

Keep only this legal form. Common codes: SIA (limited liability company), AS (joint-stock company), IK (individual merchant), IND (individual enterprise), ZEM (farm), BDR (association), NOD (foundation), KOP (cooperative society), FIL (branch). Leave empty for all forms.

## `register` (type: `string`):

Keep only entries from one register. K = Commercial register, B = Associations and foundations, U = Enterprise register journal (historic), C = Representative offices, M = Media, S = Public organisations, R = Religious organisations, T = Arbitration courts, P = Political parties, O = Political organisations, A = Trade unions, E = EEIG. Leave empty for all registers.

## `addressContains` (type: `string`):

Keep entries whose registered address contains this text. Case and diacritics are ignored. Example: 'Daugavpils', 'Ventspils', 'Brīvības iela'.

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

Off by default. When on, entities that were liquidated or reorganised (removed from the register) are left out.

## `registeredFrom` (type: `string`):

Date in YYYY-MM-DD format. Keep only entities registered on or after this date. Useful for new-company lists.

## `registeredTo` (type: `string`):

Date in YYYY-MM-DD format. Keep only entities registered on or before this date.

## `includeOfficers` (type: `boolean`):

Off by default. When on, each entity gets an 'officers' list (name, position, governing body, representation rights, registration date) from the register's officers file. Adds about 30 seconds to the run. Personal identity numbers and birth dates are not returned.

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

Hard cap on the number of entities returned (1 to 10,000). The actor stops reading the register as soon as it has this many matches.

## `proxyConfiguration` (type: `object`):

Not used. The register open data is a plain file download and needs no proxy. The field is accepted so that saved inputs from other register actors keep working.

## Actor input object example

```json
{
  "searchQuery": "rimi",
  "activeOnly": false,
  "includeOfficers": false,
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

# 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 = {
    "searchQuery": "rimi",
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/ur-gov-lv-scraper").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 = {
    "searchQuery": "rimi",
    "maxResults": 20,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/ur-gov-lv-scraper").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 '{
  "searchQuery": "rimi",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call studio-amba/ur-gov-lv-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,studio-amba/ur-gov-lv-scraper"
        }
    }
}
```

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/GFdvwAEgIjGAJlv61/builds/M4qf9tGZwJZf0vZJT/openapi.json
