Canonical
PRH / YTJ (Finland)
Finnish business register — companies from PRH and best-effort XBRL financials.
Source: PRH (Patentti- ja rekisterihallitus / Finnish Patent and Registration Office) and Tilastokeskus (Statistics Finland, for XBRL financial filings) Data: Finnish companies (YTJ / Business Information System) and annual financial statements (XBRL) License: Finnish open data — PRH releases its datasets under a liberal open-data licence. Check https://www.prh.fi/en/kaupparekisteri/avoindata.html for the exact wording. Attribution is typically required. Attribution required: Yes — credit "Patentti- ja rekisterihallitus" (PRH) for companies and "Tilastokeskus" for statistics Link: https://www.prh.fi/en/kaupparekisteri/avoindata.html (PRH open data), https://stat.fi/en (Tilastokeskus) Update cadence:
fi-companiesruns weekly (0 3 * * 1, Mondays 03:00 UTC).fi-financialsruns daily (0 4 * * *, 04:00 UTC) and chunks across the FI universe, oldest-updated first.
What it is
YTJ (Yritys- ja yhteisötietojärjestelmä) is Finland's Business Information System, operated jointly by PRH and the Tax Administration. Every Finnish legal entity is keyed by a Y-tunnus (business ID) in the form NNNNNNN-N.
Orakel ingests company records from PRH's open-data API and annual financial filings from the XBRL feed hosted by Tilastokeskus. Finland is Phase 1 — best-effort coverage, shipped on free public data only. Known gaps are documented below rather than filled with paid access.
Fields provided
Company fields
Sourced from PRH's /companies?businessId= endpoint. Rows are stored under country = "FI" in the Company model and populated by lib/ytj/companies.ts.
| Field | Type | Notes |
|---|---|---|
orgNumber |
string | Y-tunnus (e.g. 0112038-9). Part of the composite key (country, orgNumber). |
country |
string | Always "FI" for PRH rows. |
name |
string | Current active registered name (selects the record with type = "1" and no end date). |
orgFormCode / orgFormDescription |
string | Current company form (Oyj, Oy, Ky, Tmi, etc.). English description preferred when available. |
naceCode1 / naceDescription1 |
string | Primary industry from PRH mainBusinessLine. Only one NACE code is exposed. |
businessAddressStreet / businessAddressZip / businessAddressCity / businessAddressMuni / businessAddressMuniNo |
string | Visit address. City is taken from the English post-office record, then Finnish, then first available. |
postalAddressStreet / postalAddressZip / postalAddressCity |
string | Postal address where separately registered. |
website |
string | Normalised to https://… when PRH returns a bare host. |
foundingDate / registrationDate |
date | Taken from businessId.registrationDate. |
registeredInVat |
bool | True if an open registeredEntries row exists with register = "6". |
registeredInBiz |
bool | True if tradeRegisterStatus = "1". |
Fields not populated for FI rows (set to null / default): naceCode2, naceCode3, employeeCount, hasRegisteredEmployees, phone, isBankrupt, isBeingDissolved, isInGroup, parentOrgNumber, sectorCode, sectorDescription. These are either not exposed by the free PRH API or require paid Virre.
Financial fields
Sourced from the Tilastokeskus XBRL endpoints (/financials?businessId=… to list periods, /financial?businessId=…&financialDate=… to fetch each XBRL document). Rows are stored under country = "FI" in the Financial model and populated by lib/ytj/financials.ts.
| Field | Type | Notes |
|---|---|---|
orgNumber |
string | Y-tunnus of the filer. |
country |
string | Always "FI". |
regnskapstype |
string | Always "SELSKAP" for FI filings. |
periodFrom / periodTo |
date | Fiscal period. Taken from the XBRL startDate/endDate, or derived from instant minus one year when only a balance-sheet date is present. |
currency |
string | From the XBRL unit, defaulting to "EUR". |
totalAssets |
float | Mapped from the dimensional concept fi_MC:x360 (Vastaavaa loppusumma / balance-sheet total). |
Other Financial columns — revenue, operatingCosts, operatingResult, netFinancials, preTaxProfit, netResult, totalEquity, totalDebt — are part of the schema but are not yet mapped for FI filings. See Limitations.
Endpoints that surface this data
GET /api/companies/:orgNumber?country=FI— full company record for a Finnish Y-tunnus.GET /api/companies?country=FI— search / list Finnish companies.
Limitations
The KNOWN_GAPS.FI entries from lib/countries.ts, verbatim:
roles — not exposed by free PRH APIs (paid Virre only)financial field decoding — dimensional XBRL taxonomy; only totalAssets reliably mapped from one fixture, expand incrementallyfinancials coverage — ~30K digital filers; paper filings require paid Virre
Gotchas
- Seed list, not full universe. The FI sync is driven by a built-in seed list (Nokia, KONE, Fazer, plus a known iXBRL verification case). The full Finnish company universe is not ingested in Phase 1 — contact
hello@orakel.cloudto have a specific company added. - Name and form resolution. PRH returns full history for names and company forms. The transform picks the record with
type = "1"and noendDate(current active), falling back to the first available entry. - City field picks English first. PRH post-office names come in multiple languages (
1= Finnish,3= English). The transform prefers English, then Finnish, then whatever is first in the list. - XBRL is dimensional, not flat. PRH/Tilastokeskus XBRL filings key every monetary fact on a
fi_dim:MCYdimension member (e.g.fi_MC:x360). Mapping fromfi_MC:x…codes to semantic fields is not published in a stable form —MC_TO_FIELDinlib/ytj/financials.tsis an incremental decode table. Unmapped concepts become null. When you observe a new filing where a field you expect remains null, add the correspondingfi_MC:x…code to the map. - Prior-year comparatives are skipped. XBRL contexts carrying a
fi_dim:REFdimension represent prior-year comparison values within a current-year filing. The transform skips these to avoid overwriting the current-period value.