Canonical
Field catalog
Every field Orakel exposes, its type, and its source.
Every field Orakel exposes, typed and attributed. Types use TypeScript-ish notation. Nullable fields reflect source gaps. Source names: Brreg, Regnskap, Aksjonær, Doffin, Mattilsynet, TBR, SSB, PRH, Tilastokeskus, Bolagsverket, SCB, Orakel (computed or enrichment-derived).
Composite key:
Companyand its child tables are keyed on(country, orgNumber).orgNumberis 9 digits for NO,NNNNNNN-Nfor FI, 10 digits for SE. Don't assume length.
_sources (response-level)
Every /api/companies/* response carries a _sources object alongside the data. It surfaces which upstream fed which field so consumers can render per-field attribution without re-inferring source mappings client-side. See Attribution → _sources response field for the full shape and a rendering snippet.
| Field | Type | Notes |
|---|---|---|
_sources.attribution |
string[] |
Deduplicated display list — paste into a "Data via …" footer |
_sources.fields |
Record<string, string | { source: string; computed: true }> |
Per-field source map; keys omitted when data is absent |
Common fields.* values: "Brønnøysundregistrene" (NO core), "Bolagsverket" (SE core + financials), "YTJ" (FI core), "Regnskapsregisteret" (NO financials), "Tilastokeskus" (FI financials), "SSB Klass" (industry/org-form/country/county labels), "SSB" (aggregate context when include=context), "Orakel enrichment pipeline" (domain, social handles, technologies — synthesized from multiple upstream signals).
_sources credits the source of what's returned; it does not imply coverage depth. For financial-year depth by country see Limitations → Financial-year depth.
Company
One row per legal entity.
| Field | Type | Source | Notes |
|---|---|---|---|
orgNumber |
string |
Brreg (NO) / PRH (FI) / Bolagsverket (SE) | 9 digits NO, NNNNNNN-N FI, 10 digits SE |
country |
CountryCode |
Orakel | "NO" | "FI" | "SE" |
name |
string |
Brreg / PRH / Bolagsverket | Current active registered name |
orgFormCode |
string |
Brreg / PRH / Bolagsverket | e.g. AS, ASA, Oy, AB |
orgFormDescription |
string | null |
Brreg / PRH / Bolagsverket (SE: SCB) | SE description comes from SCB jurForm |
naceCode1 |
string | null |
Brreg / PRH / SCB | SE NACE is from SCB, not Bolagsverket |
naceDescription1 |
string | null |
Brreg / PRH / Bolagsverket | SE uses free-text verksamhetsbeskrivning |
naceCode2 |
string | null |
Brreg / SCB | NO, SE only |
naceDescription2 |
string | null |
Brreg | NO only |
naceCode3 |
string | null |
Brreg / SCB | NO, SE only |
naceDescription3 |
string | null |
Brreg | NO only |
employeeCount |
number | null |
Brreg | NO only |
hasRegisteredEmployees |
boolean |
Brreg | NO only; defaults false elsewhere |
businessAddressStreet |
string | null |
Brreg / PRH / Bolagsverket | |
businessAddressZip |
string | null |
Brreg / PRH / Bolagsverket | |
businessAddressCity |
string | null |
Brreg / PRH / Bolagsverket | FI prefers English post-office name |
businessAddressMuni |
string | null |
Brreg / PRH | NO, FI only |
businessAddressMuniNo |
string | null |
Brreg / PRH | Joins to Municipality.code and ssb_municipality_stats.municipalityNo |
postalAddressStreet |
string | null |
Brreg / PRH | NO, FI only |
postalAddressZip |
string | null |
Brreg / PRH | NO, FI only |
postalAddressCity |
string | null |
Brreg / PRH | NO, FI only |
website |
string | null |
Brreg / PRH | Self-reported at registration; may be stale |
phone |
string | null |
Brreg | NO only |
enrichedDomains |
string[] |
Orakel | All verified domains for the company |
primaryDomain |
string | null |
Orakel | Best-match verified domain |
domainConfidence |
number | null |
Orakel | 0–100 composite score |
brregWebsiteValid |
boolean | null |
Orakel | Whether Brreg's registered website verified |
linkedinHandle |
string | null |
Orakel | Extracted from homepage |
facebookHandle |
string | null |
Orakel | Extracted from homepage |
instagramHandle |
string | null |
Orakel | Extracted from homepage |
twitterHandle |
string | null |
Orakel | Extracted from homepage |
parentOrgNumber |
string | null |
Brreg | Immediate parent in a corporate group |
technologies |
Json | null |
Orakel | Array of { name, category, confidence, detectedAt } — see Technology section |
techSyncedAt |
Date | null |
Orakel | Last technology scan |
sslSansSyncedAt |
Date | null |
Orakel | Last crt.sh SAN scan |
foundingDate |
Date | null |
Brreg / PRH / Bolagsverket | Stiftelsesdato (NO) |
registrationDate |
Date | null |
Brreg / PRH / Bolagsverket | |
registeredInVat |
boolean |
Brreg / PRH | NO, FI (Merverdiavgiftsregisteret / registeredEntries=6) |
registeredInBiz |
boolean |
Brreg / PRH | NO (Foretaksregisteret), FI (tradeRegisterStatus=1) |
isBankrupt |
boolean |
Brreg | NO only |
isBeingDissolved |
boolean |
Brreg / Bolagsverket | NO, SE (Bolagsverket avregistreringsdatum) |
isInGroup |
boolean |
Brreg | NO only |
sectorCode |
string | null |
Brreg | NO only; institusjonell sektorkode |
sectorDescription |
string | null |
Brreg | NO only |
description |
string | null |
Brreg (NO) / Bolagsverket (SE) / YTJ (FI) / CVR (DK) | Business activity description. Source text varies by country. |
descriptionKeywords |
string[] |
Orakel | Top-10 keywords extracted from description; stopwords removed |
trafficRank |
number | null |
Orakel (Tranco) | Tranco top-1M rank (1 = highest traffic). Updated weekly. Null if domain not in list. |
trafficRankUpdatedAt |
Date | null |
Orakel | When trafficRank was last refreshed |
employerRegisterDate |
Date | null |
YTJ | FI only. Date company first registered as a regular employer |
directMarketingDenied |
boolean | null |
CVR | DK only. Direct marketing protection flag (reklamebeskyttet) |
businessAddressLat |
number | null |
Orakel (Kartverket / DAWA / Nominatim) | Geocoded latitude. Populated by weekly job, not at ingest. |
businessAddressLng |
number | null |
Orakel (Kartverket / DAWA / Nominatim) | Geocoded longitude. Same source as businessAddressLat. |
digitalizationIndex |
number | null [computed] |
Orakel | Fraction of 12 tech categories covered (0–1). Null when technologies is null. |
socialIndex |
number | null [computed] |
Orakel | Fraction of 4 social platforms with a handle (0–1). |
sizeClass |
"micro" | "small" | "medium" | "large" | "enterprise" | null [computed] |
Orakel | From employeeCount: micro 0–10, small 11–50, medium 51–200, large 201–1000, enterprise 1001+. |
latestRevenueNOK |
bigint | null [computed] |
Orakel | Denormalized latest revenue from Financial; updated on financial sync |
Financial
Unique on (country, orgNumber, regnskapstype, periodFrom, periodTo). Ratios computed at read time.
| Field | Type | Source | Notes |
|---|---|---|---|
orgNumber |
string |
Regnskap (NO) / Tilastokeskus (FI) | FK to Company |
country |
CountryCode |
Orakel | |
regnskapstype |
string |
Regnskap / Tilastokeskus | SELSKAP (company) | KONSERN (consolidated). Always SELSKAP for FI |
periodFrom |
Date |
Regnskap / Tilastokeskus | Fiscal period start |
periodTo |
Date |
Regnskap / Tilastokeskus | Fiscal period end |
currency |
string |
Regnskap / Tilastokeskus | As filed; most NO filings NOK, FI defaults EUR |
revenue |
number | null |
Regnskap | Sum driftsinntekter; not yet mapped for FI |
operatingCosts |
number | null |
Regnskap | Sum driftskostnad; not yet mapped for FI |
operatingResult |
number | null |
Regnskap | Driftsresultat; not yet mapped for FI |
netFinancials |
number | null |
Regnskap | Netto finans; not yet mapped for FI |
preTaxProfit |
number | null |
Regnskap | Ordinært resultat før skattekostnad; not yet mapped for FI |
netResult |
number | null |
Regnskap | Årsresultat; not yet mapped for FI |
totalAssets |
number | null |
Regnskap / Tilastokeskus | FI maps from XBRL fi_MC:x360 |
totalEquity |
number | null |
Regnskap | Sum egenkapital; not yet mapped for FI |
totalDebt |
number | null |
Regnskap | Sum gjeld; not yet mapped for FI |
varekostnad |
number | null |
Regnskapsregisteret | Cost of goods sold (Varekostnad). NO only. Populated from multi-year history; null on filings where the figure isn't available. |
avskrivning |
number | null |
Regnskapsregisteret | Depreciation and amortisation (Avskrivning). NO only. Same coverage as varekostnad. |
syncedAt |
Date |
Orakel | Last time Orakel fetched this filing |
ratios.profitMargin |
number | null [computed] |
Orakel | netResult / revenue |
ratios.operatingMargin |
number | null [computed] |
Orakel | operatingResult / revenue |
ratios.returnOnAssets |
number | null [computed] |
Orakel | netResult / totalAssets |
ratios.returnOnEquity |
number | null [computed] |
Orakel | netResult / totalEquity |
ratios.equityRatio |
number | null [computed] |
Orakel | totalEquity / totalAssets |
ratios.debtToEquityRatio |
number | null [computed] |
Orakel | totalDebt / totalEquity |
ratios.grossMargin |
number | null [computed] |
Orakel | (revenue − varekostnad) / revenue. null when varekostnad is absent. |
ratios.ebitda |
number | null [computed] |
Orakel | operatingResult + avskrivning. null when either field is absent. |
revenueGrowthYoY |
number | null [computed] |
Orakel | (revenue_t − revenue_t-1) / abs(revenue_t-1) |
Role
Board, CEO, auditor, owners. NO and DK.
| Field | Type | Source | Notes |
|---|---|---|---|
orgNumber |
string |
Brreg | FK to Company |
country |
CountryCode |
Orakel | "NO" | "DK" |
roleGroupCode |
string |
Brreg | e.g. STYR (board) |
roleGroupDescription |
string | null |
Brreg | |
roleTypeCode |
string |
Brreg | e.g. LEDE (chair), DAGL (CEO), REVI (auditor) |
roleTypeDescription |
string | null |
Brreg | |
personFirstName |
string | null |
Brreg | Natural-person role holders |
personMiddleName |
string | null |
Brreg | |
personLastName |
string | null |
Brreg | |
personBirthDate |
Date | null |
Brreg | Full birth date as filed |
entityOrgNumber |
string | null |
Brreg | Entity role holders (auditor firms) |
entityName |
string | null |
Brreg | |
isResigned |
boolean |
Brreg | Fratraadt |
isDeregistered |
boolean |
Brreg | |
sortOrder |
number |
Brreg | Stable order within a role group |
ownershipPercent |
number | null |
Brreg (NO) / CVR (DK) | EIER/EJER roles only. NO: Brreg eierandel.prosent. DK: CVR EJERANDEL_PROCENT attribute. |
syncedAt |
Date |
Orakel |
SubUnit
Branch offices. Linked via parentOrgNumber. NO and DK (production units via penheder).
| Field | Type | Source | Notes |
|---|---|---|---|
orgNumber |
string |
Brreg | Sub-unit's own org number |
country |
CountryCode |
Orakel | Always "NO" |
parentOrgNumber |
string |
Brreg | FK to parent Company |
name |
string |
Brreg | |
orgFormCode |
string |
Brreg | |
orgFormDescription |
string | null |
Brreg | |
naceCode1 |
string | null |
Brreg | |
naceDescription1 |
string | null |
Brreg | |
employeeCount |
number | null |
Brreg | Sub-unit headcount |
hasRegisteredEmployees |
boolean |
Brreg | |
locationAddressStreet |
string | null |
Brreg | Physical location, not postal |
locationAddressZip |
string | null |
Brreg | |
locationAddressCity |
string | null |
Brreg | |
locationAddressMuni |
string | null |
Brreg | |
locationAddressMuniNo |
string | null |
Brreg | |
phone |
string | null |
Brreg | |
registrationDate |
Date | null |
Brreg | |
addressLat |
number | null |
Orakel (Kartverket / Nominatim) | Geocoded latitude of locationAddress. |
addressLng |
number | null |
Orakel | Geocoded longitude. |
Shareholder
One row per shareholder per share class per year. GDPR-sensitive; see aksjonaerregisteret. NO only.
| Field | Type | Source | Notes |
|---|---|---|---|
orgNumber |
string |
Aksjonær | Investee company; FK to Company |
country |
CountryCode |
Orakel | Always "NO" |
shareholderName |
string |
Aksjonær | Display name (person or entity) |
shareholderOrgNumber |
string | null |
Aksjonær | 9-digit when shareholder is Norwegian entity; null for persons and foreign |
shareholderType |
string | null |
Aksjonær | "person" | "company" | "foreign" |
postalCode |
string | null |
Aksjonær | Entity shareholders only |
location |
string | null |
Aksjonær | Entity shareholders only |
shareClass |
string | null |
Aksjonær | e.g. A, B, ORDINÆR |
shareCount |
bigint |
Aksjonær | Shares held in this class |
totalSharesInCompany |
bigint | null |
Aksjonær | Total shares in this class, when supplied |
year |
number |
Aksjonær | Snapshot year (fiscal year described) |
ownershipPct |
number | null [computed] |
Orakel | shareCount / totalSharesInCompany × 100, 2 decimals |
Inspection (Mattilsynet)
Food-safety visits. NO only.
| Field | Type | Source | Notes |
|---|---|---|---|
tilsynId |
string |
Mattilsynet | Unique per visit |
orgNumber |
string |
Mattilsynet | May reference a sub-unit rather than parent |
name |
string |
Mattilsynet | Venue name as filed |
address |
string | null |
Mattilsynet | |
postnr |
string | null |
Mattilsynet | |
poststed |
string | null |
Mattilsynet | |
date |
Date |
Mattilsynet | Inspection date |
totalRating |
number |
Mattilsynet | Smilefjes rating code (integer, not percentage) |
rating1 |
number | null |
Mattilsynet | Per-theme sub-score |
rating2 |
number | null |
Mattilsynet | |
rating3 |
number | null |
Mattilsynet | |
rating4 |
number | null |
Mattilsynet | |
inspectionType |
number |
Mattilsynet | Visit type code |
syncedAt |
Date |
Orakel |
License (TBR)
Alcohol and tobacco licenses, unique on (licenseNumber, registerType). NO only.
| Field | Type | Source | Notes |
|---|---|---|---|
licenseNumber |
number |
TBR | Bevillingsnummer or Registreringsnummer |
orgNumber |
string |
TBR | License holder |
holderName |
string | null |
TBR | Innehaver |
venueName |
string | null |
TBR | Sted |
venueOrgNumber |
string | null |
TBR | Sub-unit org number when different from holder |
registerType |
string |
TBR | Alkoholsbevilling | Tobakksbevilling |
licenseTypeCode |
string |
TBR | 01SKJE, 11ENGR, 18TBIM, 19TBEK |
licenseTypeDesc |
string | null |
TBR | |
productGroups |
string[] |
TBR | GRP1, GRP2, GRP3, TROY, TINN |
address |
string | null |
TBR | |
postnr |
string | null |
TBR | |
poststed |
string | null |
TBR | |
municipality |
string | null |
TBR | Issuing municipality name |
municipalityNo |
string | null |
TBR | SSB 4-digit code |
validFrom |
Date | null |
TBR | |
validTo |
Date | null |
TBR | |
syncedAt |
Date |
Orakel |
ProcurementNotice (Doffin)
Keyed on noticeId. Buyer orgNumber nullable when Doffin didn't supply a matchable ID. NO only.
| Field | Type | Source | Notes |
|---|---|---|---|
noticeId |
string |
Doffin | Stable upstream identifier |
orgNumber |
string | null |
Doffin | Buyer; null when upstream format didn't normalise |
contractingAuthority |
string | null |
Doffin | Buyer name |
title |
string |
Doffin | |
description |
string | null |
Doffin | Long-form text |
cpvCodes |
string[] |
Doffin | Common Procurement Vocabulary codes |
noticeType |
string | null |
Doffin | tender / award / prior information |
estimatedValue |
number | null |
Doffin | Buyer's estimate at publication |
currency |
string | null |
Doffin | |
publishedDate |
Date | null |
Doffin | |
issueDate |
Date | null |
Doffin | |
deadline |
Date | null |
Doffin | Submission deadline |
locationIds |
string[] |
Doffin | NUTS / municipality codes |
status |
string | null |
Doffin | Open enum — upstream can add values |
rawData |
Json | null |
Doffin | Full upstream payload for unmodelled fields |
syncedAt |
Date |
Orakel |
DomainEnrichment
Per-company enrichment pipeline state. NO live; FI and SE planned.
| Field | Type | Source | Notes |
|---|---|---|---|
orgNumber |
string |
Orakel | FK to Company |
country |
CountryCode |
Orakel | |
status |
string |
Orakel | pending | processing | confirmed | ambiguous | rejected |
confirmedDomains |
string[] |
Orakel | Result set |
primaryDomain |
string | null |
Orakel | Best-match verified domain |
confidence |
number |
Orakel | 0–100 composite score |
candidates |
Json | null |
Orakel | Per-candidate signal breakdown |
stage |
number |
Orakel | Pipeline stage 0–5 |
priority |
number |
Orakel | Higher = processed first |
brregWebsiteValid |
boolean | null |
Orakel | Signal: did Brreg's website verify |
homepageOrgNr |
string | null |
Orakel | Signal: org number found on candidate homepage |
rdapHolder |
string | null |
Orakel | Signal: NORID RDAP domain holder |
llmConfidence |
number | null |
Orakel | LLM adjudication score when used |
llmReasoning |
string | null |
Orakel | LLM reasoning text |
linkedinHandle |
string | null |
Orakel | Captured during scraping |
facebookHandle |
string | null |
Orakel | |
instagramHandle |
string | null |
Orakel | |
twitterHandle |
string | null |
Orakel | |
startedAt |
Date | null |
Orakel | |
completedAt |
Date | null |
Orakel |
Technology
Company.technologies is a JSON array. Each element:
| Field | Type | Source | Notes |
|---|---|---|---|
name |
string |
Orakel | e.g. WordPress, Google Analytics, Meta Pixel |
category |
string |
Orakel | cms | analytics | chat | marketing | ecommerce | framework | advertising |
confidence |
number |
Orakel | 0–100, per-signature weight |
detectedAt |
string (ISO date) |
Orakel | When this scan detected the signature |
Ad pixels
Company.technologies entries with category = "advertising": Meta Pixel, Google Tag Manager, Snap Pixel, TikTok Pixel, X Pixel, LinkedIn Insight Tag. Queryable via ?hasAnyAdPixel=true.
Social handles
Scalar columns on Company and DomainEnrichment.
| Field | Type | Source | Notes |
|---|---|---|---|
linkedinHandle |
string | null |
Orakel | LinkedIn company-page slug |
facebookHandle |
string | null |
Orakel | |
instagramHandle |
string | null |
Orakel | |
twitterHandle |
string | null |
Orakel | X/Twitter handle |
Municipality
From SSB Klass 131.
| Field | Type | Source | Notes |
|---|---|---|---|
code |
string (4 digits) |
SSB | e.g. 3905 (Tønsberg) |
name |
string |
SSB | |
countyCode |
string (2 digits) |
SSB | First two digits of code |
countyName |
string |
SSB | From classification 104 (fylker) |
SSB municipality stats
Keyed on (municipalityNo, year, metric).
| Field | Type | Source | Notes |
|---|---|---|---|
municipalityNo |
string |
SSB | Joins to Company.businessAddressMuniNo |
year |
number |
SSB | |
metric |
string |
SSB | Currently population |
value |
number |
SSB | |
sourceTable |
string |
SSB | SSB table ID, e.g. 07459 |
capturedAt |
Date |
Orakel |
SSB industry stats
Keyed on (naceSection, year, metric). Section mapped from Company.naceCode1.
| Field | Type | Source | Notes |
|---|---|---|---|
naceSection |
string |
SSB | Single letter, e.g. J for ICT |
year |
number |
SSB | |
metric |
string |
SSB | avgMonthlyWage | enterpriseCount |
value |
number |
SSB | |
sourceTable |
string |
SSB / Orakel | SSB table ID (11419, 14000) or brreg-derived |
capturedAt |
Date |
Orakel |
Country coverage
| Entity | NO | FI | SE | DK |
|---|---|---|---|---|
| Company | ✓ | ✓ (seed list) | ✓ | ✓ |
| Financial | ✓ | best-effort (totalAssets only) | — (Phase 3b) | ✓ |
| Role | ✓ | — | — | ✓ |
| SubUnit | ✓ | — | — | ✓ (production units via penheder) |
| Shareholder | ✓ | — | — | — |
| Inspection (Mattilsynet) | ✓ | — | — | — |
| License (TBR) | ✓ | — | — | — |
| ProcurementNotice (Doffin) | ✓ | — | — | — |
| DomainEnrichment | ✓ | planned | planned | — |
| Technology / Ad pixels / Social | ✓ | planned | planned | — |
| Municipality / SSB stats | ✓ | — | — | — |