PRH YTJ logo

Leads & companies · Coming soon

Finnish company register lookup with PRH YTJ open data

Check Finnish companies by Business ID (Y-tunnus), or search by name and town. You get the official name, name history, form, status and addresses. The data comes from PRH open data.

Built and tested. Prices will be shown after release.

Coming soon to the Apify StoreFollow us on Apify

What you get, for example

inputBusinessId0112038-9
businessId0112038-9
nameNokia Oyj

How it will work: 3 steps

  1. Follow us on ApifyThe tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run.
  2. Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example: 0112038-9 in Business IDs (Y-tunnus). Each start is one run.
  3. Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.

What it does

Finland Company Register (PRH YTJ) looks up Finnish companies in the official YTJ open data register of the Finnish Patent and Registration Office (PRH) and the Finnish Tax Administration. Add Finnish Business IDs (Y-tunnus), or search by company name, town, company form, business line, postcode or registration date. You get one clean row per company: name and full name history, company form, main business line, register entries, addresses, website and a clear status: active, ceased, bankrupt or not found.

  • Business ID lookup. Each Business ID is an exact match. The Actor checks the check digit first. A wrong ID gives an invalid_input row, and a valid ID that is not in the register gives a not_found row, so no input is lost. The same ID written twice is looked up once.
  • Search. Filters by company name, town, company form, main business line, postcode and registration dates. The source decides the order of results.

Good for

  • Check that a Finnish supplier or customer exists and is still active (KYB, onboarding).
  • See all names of a company: current, previous, parallel (Swedish or English) and auxiliary names, with dates.
  • Fill CRM records with the official name, company form, TOL 2008 business line, address and website.
  • Build a list of companies by town, form, business line or registration date.

Not a good fit

  • Email addresses and phone numbers. The register does not publish them, and the Actor does not add them.
  • Directors, owners, beneficial owners or financial statements. They are not in this open data.
  • Proof that a VAT number is valid on a date. inVatRegister shows a VAT register entry in YTJ. For a VAT check, use the EU VIES service.
  • Private traders (sole proprietors). The open data covers companies registered or pending in the Trade Register, not private traders.
  • Norwegian, Swedish or other Nordic companies. This Actor covers Finland only.

Who uses it

KYB and onboarding teams

Check that a Finnish supplier exists and is still active.

Finance teams

Match old invoices to a company through its earlier names.

Sales teams

Build lists of companies by town, form or business line.

Price

Prices will be shown after release.

Questions

Do I need an API key for YTJ?

No. The open data is free. You only need an Apify account.

Does it show emails, phones or directors?

No. The open data does not include them.

Can I use the data for business?

Yes. It is under CC BY 4.0, which allows commercial reuse with attribution.

Does it prove a VAT number is valid?

No. Use the EU VIES service for a VAT check on a date.

Do I need an API key or a Finnish account?

No. The source is open and free. You only need your Apify account.

Does a VAT register entry mean the VAT number is valid today?

No. inVatRegister shows that YTJ has a current VAT register entry for the company. To check a VAT number on a date, use the EU VIES service.

Why are there no emails or phone numbers?

PRH open data does not publish them. The Actor gives only what the register publishes.

How fresh is the data?

Each run reads the source live. The source updates once a day. Each row has fetchedAt (our read time) and lastModified (when the source last changed the record).

Details

Step by step on Apify
  1. Open the Input tab. The form already has three Business IDs: Nokia Oyj (active), Nokia Networks Oy (ceased) and Primera Holidays Oy (bankrupt).
  2. Click Start.
  3. Open the Companies view in the Output tab. Check name, isActive, tradeRegisterStatus and currentSituations.
  4. Replace the IDs with your own list (up to 100), or clear the list and use the search filters.
Use cases
TaskInputKey fields
Verify a company (KYB)businessIdsstatus, isActive, tradeRegisterStatus, currentSituations, endDate
Match old invoices or contracts to a companybusinessIds or namenames, previousNames, parallelNames, auxiliaryNames
Clean CRM recordsbusinessIdsname, companyForm, mainBusinessLine, streetAddress, website
Prospect list by town and activitylocation + mainBusinessLinebusinessId, name, registrationDate, postalAddress
New companies in a periodregistrationDateFrom / registrationDateTo + filtersregistrationDate, companyForm, streetAddress
Tips for better results
  • You can paste IDs with or without the dash, or as FI VAT numbers.
  • Add filters to a search. Helsinki alone has about 90,000 companies.
  • New companies can be missing until the next daily update.
Limits and good to know
  • Up to 100 Business IDs per run, or up to 5,000 companies per search. A town like Helsinki has about 90,000 companies, so add filters to narrow a search
  • The Actor sends about one request per second, because the source blocks fast clients for a while. 100 Business IDs take about 100 seconds; a 5,000-company search took about 90 seconds in our test
  • The source updates once a day. A company registered today can be not_found until the next update
  • The internal time budget is 240 seconds and 700 requests. When a run reaches it, the run stops with CAPPED and the rows found so far are kept
  • If the source fails or blocks the run, the Actor stops after two failed requests in a row. The rest of the IDs get free error rows and the run is PARTIAL or ERROR. Run those IDs again later
  • Search pages can hold fewer than 100 companies. If the source serves fewer unique companies than it reports, RUN_SUMMARY.warnings says so

Troubleshooting

SymptomCheckAction
invalid_input for an IDstatusReasonUsually a typo. The message shows the expected check digit.
not_found for a real companystatusReasonA private trader is not in this open data. A very new company appears after the next daily update.
isActive: false for a registered companycurrentSituations, situationsKONK (bankruptcy) or SELTILA (liquidation) is in progress.
Labels in Finnish with language: "en"the fieldThe source has no English text for that value.
error rows with RATE_LIMITEDRUN_SUMMARY.http.rateLimitedThe source blocked requests for a while. Run the failed IDs again later.
INVALID_INPUTRUN_SUMMARY.messageCommon causes: Business IDs and search filters in one run, no input at all, a name shorter than 2 characters, a bad postcode or date.

For developers

Sample result

One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.

one result · JSON
{
  "inputBusinessId": "0112038-9",
  "status": "complete",
  "businessId": "0112038-9",
  "name": "Nokia Oyj",
  "isActive": true,
  "tradeRegisterStatus": "Registered",
  "companyFormAbbreviation": "OYJ",
  "mainBusinessLineCode": "70100",
  "mainBusinessLine": "Activities of head offices",
  "website": "www.nokia.com",
  "registrationDate": "1896-12-19",
  "inVatRegister": true,
  "currentSituations": [],
  "streetAddress": { "formatted": "Karakaari 7, 02610 ESPOO", "postCode": "02610", "city": "ESPOO", "citySv": "ESBO" },
  "previousNames": ["Oy Nokia Ab"],
  "parallelNames": ["Nokia Abp", "Nokia Corporation"],
  "names": [
    { "name": "Oy Nokia Ab", "type": "Company name", "typeCode": "1", "registrationDate": "1966-06-10", "endDate": "1997-08-31", "current": false }
  ],
  "lastModified": "2026-08-19T10:04:06",
  "ytjUrl": "https://tietopalvelu.ytj.fi/yritys/0112038-9",
  "licence": "CC BY 4.0",
  "fetchedAt": "2026-10-12T09:21:05.000Z"
}
Data fields (40)
FieldTypeMeaning
inputBusinessIdstringYour input value as given (lookup mode); null for search rows.
statusstringRow result: complete (company found), not_found (valid Business ID not in YTJ open data), invalid_input (not a valid Business ID, not charged) or error (source problem, not charged).
statusReasonstringPlain-English reason for not_found, invalid_input and error rows; null when complete.
businessIdstringFinnish Business ID (Y-tunnus) as text with the leading zero, e.g. 0112038-9.
namestringCurrent official company name.
isActivebooleantrue = valid Business ID, not dissolved, not removed or ceased on the Trade Register and not in bankruptcy or liquidation. null when unknown.
businessIdStatusstringBusiness ID status label, e.g. Valid, Pending, Invalidated.
businessIdStatusCodestringBusiness ID status code from the source (1 pending, 2 valid, 5 invalidated).
tradeRegisterStatusstringTrade Register status label, e.g. Registered, Ceased, Removed, Start-up not registered.
tradeRegisterStatusCodestringTrade Register status code from the source.
companyFormstringCurrent company form, e.g. Limited company; for a dissolved company the last known form.
companyFormCodestringNumeric company form code from the source.
companyFormAbbreviationstringCompany form abbreviation, e.g. OY, OYJ, KY, AY, TMI.
mainBusinessLineCodestringMain business line code (TOL 2008), e.g. 70100.
mainBusinessLinestringMain business line description in the chosen language.
mainBusinessLineCodeSetstringCode set of the main business line (TOIMI…).
websitestringWebsite as registered (not verified).
registrationDatestringCompany registration date, YYYY-MM-DD.
endDatestringCompany end (dissolution) date, YYYY-MM-DD; null when not ended.
businessIdRegistrationDatestringDate the Business ID was granted, YYYY-MM-DD.
euIdstringEUID (European unique identifier) when published.
inTradeRegisterbooleanCurrently registered in the Trade Register.
inVatRegisterbooleanCurrently has a VAT register entry. This is the YTJ register entry, not a VIES check of VAT validity on a given date.
inEmployerRegisterbooleanCurrently in the employer register.
inPrepaymentRegisterbooleanCurrently in the prepayment (tax) register.
currentSituationsarrayCurrent special situations: KONK (bankrupt), SELTILA (liquidation), SANE (restructuring).
streetAddressobjectVisiting (street) address; city in the chosen language with Finnish and Swedish variants.
postalAddressobjectPostal address; city in the chosen language with Finnish and Swedish variants.
previousNamesarrayEarlier official names.
parallelNamesarrayCurrent parallel names (other language versions of the official name).
auxiliaryNamesarrayCurrent auxiliary (trade) names.
namesarrayAll names with type, registration and end dates (current and historical).
companyFormsarrayCompany form history with dates.
situationsarrayBankruptcy, liquidation and restructuring entries with dates.
registeredEntriesarrayRegister entries (Trade Register, VAT, employer, prepayment, foundations, associations…) with status and dates.
lastModifiedstringLast change of this company in the source (Finnish local time, as published).
ytjUrlstringPublic company page in the YTJ information service.
sourceUrlstringExact API request that produced this row.
providerstringData provider.
licencestringData licence (CC BY 4.0).
Input settings (10)

The main fields of the input form. With the API you send them as JSON.

SettingName in the APITypeExample value
Business IDs (Y-tunnus)businessIdsarray["0112038-9", "0101120-3", "0211270-0"]
Company namenamestring
Town or citylocationstring
Company formcompanyFormstring""
Main business linemainBusinessLinestring
PostcodepostCodestring
Registered fromregistrationDateFromstring
Registered toregistrationDateTostring
Max companies (search)maxResultsinteger100
Label languagelanguagestring"en"

Use cases with this tool

Each guide shows all the steps and the other tools.

Start on Apify

Make a free Apify account: you get $5 of free usage every month. Missing a tool? Suggest it. We read every idea, but we do not promise to build it.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure