# Finland Company Search - Y-tunnus Lookup & B2B Leads (YTJ/PRH) (`tinyrex/finland-company-search`) Actor

Finnish company data from the official PRH/YTJ open data API: business ID (Y-tunnus) or name lookup, or B2B lead lists by industry, city, postal code, company form and new registrations, with website, address, VAT and employer status. $1 per 1,000 companies; not found free.

- **URL**: https://apify.com/tinyrex/finland-company-search.md
- **Developed by:** [TinyRex](https://apify.com/tinyrex) (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 $0.80 / 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

## Finland Company Search - Y-tunnus Lookup & B2B Leads (YTJ/PRH)

Get Finnish company data straight from the **official YTJ open data API** run by the Finnish Patent and Registration Office (PRH) and the Tax Administration. Look up companies by **business ID (Y-tunnus) or name**, or build **B2B lead lists** by industry code, city, postal code, company form and registration date. Each company comes with its **website**, visiting and postal address, industry, company form, EU VAT number and status flags: **VAT register, employer register, prepayment register, bankruptcy, liquidation and re-organisation**.

**$1 per 1,000 companies.** Invalid business IDs, names or searches with no match, duplicates and rows skipped by your filters are **free**.

### What you can do with it

- **Enrich a CRM list** of Finnish business IDs (`0112038-9`, `01120389` or the VAT form `FI01120389` all work) with name, address, industry, website and status.
- **Build lead lists**: all IT companies (`industryCodes: ["62"]`) in Tampere and Oulu that are VAT-registered employers with a website.
- **Fresh-company leads**: every new limited company (`OY`) registered since the start of the month (`registeredFrom`), ideal for accountants, banks, insurers and SaaS sales.
- **KYC and supplier checks**: confirm a business ID is valid, the company is in the VAT and employer registers, and not bankrupt or in liquidation.
- **Market sizing**: count companies per industry and city (`matchTotal` shows the full count for a search).

### Input examples

Lookup by business ID or name:

```json
{ "companies": ["0112038-9", "FI23365096", "Kone", "Wärtsilä"] }
```

IT companies in Tampere and Oulu that are VAT-registered employers with a website:

```json
{ "industryCodes": ["62"], "cities": ["Tampere", "Oulu"], "vatRegisteredOnly": true, "employerOnly": true, "withWebsiteOnly": true, "maxResults": 500 }
```

New limited companies registered since a date:

```json
{ "companyForms": ["OY"], "registeredFrom": "2026-10-01", "maxResults": 1000 }
```

### Output

One row per company. Example (shortened):

```json
{
  "query": "0112038-9",
  "queryType": "businessId",
  "found": true,
  "businessId": "0112038-9",
  "vatNumber": "FI01120389",
  "name": "Nokia Oyj",
  "parallelNames": ["Nokia Abp", "Nokia Corporation"],
  "companyForm": "Public limited company",
  "industryCode": "70100",
  "industry": "Activities of head offices",
  "website": "https://www.nokia.com",
  "visitingAddress": { "street": "Karakaari 7", "postalCode": "02610", "city": "ESPOO", "municipalityCode": "049" },
  "registrationDate": "1896-12-19",
  "status": "Valid",
  "active": true,
  "bankrupt": false,
  "vatRegistered": true,
  "employerRegistered": true,
  "prepaymentRegistered": true,
  "sourceUrl": "https://avoindata.prh.fi/opendata-ytj-api/v3/companies?businessId=0112038-9"
}
```

Other fields: `euId`, `auxiliaryNames`, `previousNames`, `companyFormFi`, `industryFi`, `postalAddress`, `businessIdDate`, `endDate`, `inLiquidation`, `inReorganisation`, `tradeRegister`, `vatRegistrations`, `lastModified` and `matchTotal`. Not-found and invalid inputs get a free row with `found: false` and an `error` explaining why. Run totals are saved in the `SUMMARY` record.

### Pricing

Pay per event: **$0.001 per company returned** ($1 per 1,000), with automatic Bronze/Silver/Gold discounts. A company found by several inputs is charged once. Not charged: invalid business IDs (the check digit is validated), names or searches with no match, duplicates, and rows skipped by `activeOnly`, `vatRegisteredOnly`, `employerOnly`, `withWebsiteOnly` or the industry check. Set a maximum charge per run in Apify and the actor stops cleanly at it, saving everything it got.

### Tips and limits

- Industry codes follow the Finnish TOL classification (based on NACE); a prefix such as `62` matches every code below it, and only the company's main line of business counts.
- Cities are post office names in Finnish (`Helsinki`, not `Helsingfors`).
- The register API takes one city, postal code, industry and form per request, so the actor combines your lists (keep the combinations under 300).
- Name lookups rank exact matches first, ignoring legal suffixes such as Oy, Oyj and Ab, so `Kone` returns KONE Oyj.
- The public register has no email, phone, employee counts or financial statements. Use the website with a contact extractor to get emails.
- The actor stops gracefully before the run timeout and keeps the results it already has.

### Data source and licence

Data: [YTJ open data API](https://avoindata.prh.fi/en/ytj/swagger-ui) by the Finnish Patent and Registration Office (PRH) and the Finnish Tax Administration, licensed under [Creative Commons Attribution 4.0](https://creativecommons.org/licenses/by/4.0/), which allows commercial reuse with attribution. This actor is not affiliated with or endorsed by PRH or the Tax Administration. Trade names of sole traders can contain people's names; if you process the data for marketing, you are the data controller under GDPR, so check your legal basis and honour opt-outs.

### Related actors

- [Norway Company Search](https://apify.com/tinyrex/norway-company-search): Norwegian companies by org number or name, and B2B lists from Brreg.
- [France Company Search](https://apify.com/tinyrex/france-company-search): French companies by SIREN, SIRET or name, and B2B lists from Sirene.
- [UK Companies House Lookup](https://apify.com/tinyrex/uk-companies-house-lookup): UK company profiles and officers.
- [GLEIF LEI Lookup](https://apify.com/tinyrex/gleif-lei-lookup): Legal Entity Identifiers worldwide.
- [Contact Details Extractor](https://apify.com/tinyrex/contact-details-extractor): emails and phones from company websites.

# Actor input Schema

## `companies` (type: `array`):

One per line: a Finnish business ID (Y-tunnus, e.g. 0112038-9; FI01120389 VAT format and missing dash are fine) for an exact lookup, or a company name for the best match. Invalid IDs and names with no match are free.

## `maxResultsPerName` (type: `integer`):

How many matches to return for each company name. Exact name matches (ignoring Oy/Oyj/Ab) come first. Business ID lookups always return one company.

## `searchName` (type: `string`):

Optional word the company name must contain. Combine with the filters below, or use the filters alone.

## `industryCodes` (type: `array`):

Finnish TOL industry codes or prefixes for the main line of business, e.g. 62 (IT services), 56 (restaurants), 43 (construction trades), 69 (legal and accounting).

## `cities` (type: `array`):

Post office names in Finnish, e.g. Helsinki, Espoo, Tampere, Oulu, Turku.

## `postalCodes` (type: `array`):

5-digit Finnish postal codes of the visiting or postal address, e.g. 00100.

## `companyForms` (type: `array`):

Form codes: OY (limited company), OYJ (public limited), KY (limited partnership), AY (general partnership), OK (cooperative), SÄÄ (foundation), ASY (association), VOJ, KOY, AOY and others.

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

Only companies registered on or after this date, e.g. 2026-10-01. Great for fresh-company leads.

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

Only companies registered on or before this date.

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

Skip companies that have ceased or are bankrupt, in liquidation or in re-organisation (skipped rows are free). Business ID lookups are always returned.

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

Only companies in the VAT register.

## `employerOnly` (type: `boolean`):

Only companies in the employer register (they pay salaries regularly, a good proxy for having staff).

## `withWebsiteOnly` (type: `boolean`):

Only companies with a website in the register.

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

Upper limit for the filter search (lookups above are not counted).

## Actor input object example

```json
{
  "companies": [
    "0112038-9",
    "Supercell"
  ],
  "maxResultsPerName": 1,
  "activeOnly": true,
  "vatRegisteredOnly": false,
  "employerOnly": false,
  "withWebsiteOnly": false,
  "maxResults": 100
}
```

# Actor output Schema

## `companies` (type: `string`):

Finnish companies with business ID, industry, address, website, VAT and employer status.

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

Totals for the run.

# 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 = {
    "companies": [
        "0112038-9",
        "Supercell"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("tinyrex/finland-company-search").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 = { "companies": [
        "0112038-9",
        "Supercell",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("tinyrex/finland-company-search").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 '{
  "companies": [
    "0112038-9",
    "Supercell"
  ]
}' |
apify call tinyrex/finland-company-search --silent --output-dataset

```

## MCP server setup

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

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/eQdjXeEc3QaQUSKcz/builds/ffws8cV5LuomBF23X/openapi.json
