Skip to main content

Enhetsregisteret — oppdateringer (endringsfeed)

Brønnøysundregistrene logo
BetaNLODPowers 8 viewsNo fixed time range· daily · last ingested 2026-09-23

Enhetsregisteret — oppdateringer (endringsfeed)

Brønnøysundregistrene · brreg-oppdateringer

Brønnøysundregistrene publishes every change to Enhetsregisteret as an ordered feed: one record per change, carrying the organisation number, a change type and a monotonic `oppdateringsid`. Atlas walks it forward daily from a durable watermark, recording each change in `raw.brreg_oppdateringer` and the organisation's document at that moment in `raw.brreg_enheter_versions`. This is what keeps the bulk snapshot (`brreg-enheter-alle`) from going stale. The snapshot is a point in time; a bulk file cannot express a deletion, because absence from a 1.17M-record file is indistinguishable from a truncated download. Deletions arrive here, as `Sletting` and `Fjernet` change types. The feed has no retention window — it reaches back to `oppdateringsid` 1 in April 2018 — so a missed day, week or month catches up completely on the next run. Cadence is a freshness choice, not a correctness one.

Provenance​

PublisherBrønnøysundregistrene
Upstream IDenhetsregisteret-oppdateringer
LicenseNLOD
PeriodicityP1D
EU Data ThemeGOVE
AttributionInneholder data under norsk lisens for offentlige data (NLOD) tilgjengeliggjort av Brønnøysundregistrene
Last ingested2026-09-23T03:01:02.579103+00:00 · 0 rows · 414 runs
Methodology
🔴 The feed is walked by CURSOR ONLY — `?oppdateringsid=<last+1>&size=10000`. `page` is capped at 20, and Brreg's HAL `_links.next` is built with `page=`, so following the next link — the idiomatic, careful thing to do — returns HTTP 400 after 20 hops having seen only the oldest 10,000 changes, every one of them `Ukjent`, and not a single deletion. It would look perfectly healthy. A source-text test asserts the module contains neither `page=` nor `_links.next`. Termination is an ABSENT `_embedded` key, not an empty array: a caught-up response is `{_links, page}` with `totalElements: 0`. A poller spelled `body._embedded.oppdaterteEnheter` throws at exactly the moment it catches up. The watermark lives in `raw.brreg_feed_watermark`, not in a Dagster cursor. A cursor lives in the Dagster instance database, which has a different lifecycle; if it is rebuilt, a cursor-based feed restarts from nowhere and silently stops applying deletions. A run is capped at 50,000 changes (`BRREG_FEED_MAX_CHANGES`). Each change costs one entity fetch, and a watermark of 1 would mean 16.4M requests against a public-sector API Atlas depends on staying welcome at.

Used in Atlas views​

These Atlas views (api_v1.* PostgREST endpoints) include this dataset in their input. Click through for the sample query, column list, and lineage.

Joined with​

Datasets that co-occur with this one inside Atlas's dbt models — the datasets you'd typically combine with this one in a real query.

🏛️ Organisations register
Enhetsregisteret — alle registrerte enheter
Brønnøysundregistrene · brreg-enheter-alle
Joined in 12 models: dim_brreg_enhetindicators__lottstift_momskompensasjonint_ngo_chapter_registry_match + 9 more
🤝 NGO supply
Frivillighetsregisteret — frivillige organisasjoner
Brønnøysundregistrene · brreg-frivillige
Joined in 12 models: dim_brreg_enhetindicators__lottstift_momskompensasjonint_ngo_chapter_registry_match + 9 more
🗺️ Reference geographies
Standard for kommuneinndeling
Statistisk sentralbyrå · ssb-klass-kommuner
Joined in 4 models: mart_atlas_inventorymart_kommune_ngo_summarymart_kommune_ngo_totals + 1 more
🏛️ Organisations register
Enhetsregisteret — underenheter (alle)
Brønnøysundregistrene · brreg-underenheter
Joined in 3 models: int_ngo_chapter_subunitsmart_atlas_inventorymart_ngo_chapter_subunits
🤝 NGO supply
Momskompensasjon for frivillige organisasjoner — oversikt over tildelinger
Lotteri- og stiftelsestilsynet · lottstift-momskompensasjon
Joined in 3 models: indicators__lottstift_momskompensasjonmart_atlas_inventorymart_indicators__lottstift_momskompensasjon
🏥 Health
Alkohol_Ungdata_KH
Folkehelseinstituttet · fhi-alkohol
Joined in 2 models: mart_atlas_inventorymart_unattributed_totals
👥 Demographics
Befolkningssammensetning_antall_andel
Folkehelseinstituttet · fhi-befolkning
Joined in 2 models: mart_atlas_inventorymart_unattributed_totals
👥 Demographics
Befolkningsvekst
Folkehelseinstituttet · fhi-befolkningsvekst
Joined in 2 models: mart_atlas_inventorymart_unattributed_totals

Dimensions​

CodeMeaningValue formatNotes
oppdateringsidBrreg's monotonic change identifier, and the cursor the feed is walked bybigint, sparse🔴 Sparse, and that matters. The id space runs to ~25.18M against ~16.4M records, so the gap between two ids is NOT the number of changes between them — asking for id 16,417,000 returns a first record of 16,427,801. Never compute a backlog by subtracting ids; read `page.totalElements` at the cursor, which is a correct remaining-record count.
endringstypeWhat kind of change Brreg recordedNy, Endring, Sletting, Fjernet or UkjentAll five occur and all five are handled. `Sletting` is the deletion in current traffic; `Fjernet` is real but concentrated in older eras (23 of 500 at oppdateringsid 16,400,000, and absent from the 2026-09-11 daily sample); `Ukjent` is the entire pre-2018-08 history and must never delete anything. Stored verbatim and not constrained to an enum — a sixth value must land and be counted, not rejected at the door.
organisasjonsnummerThe organisation the change is about9 digits, leading zeros significant — always textJoins to raw.brreg_enheter_snapshot. Retained after deletion, which is what lets a tombstone address a row that no longer has a live entity behind it.
docThe organisation's document as it stood when the change was receivedjsonb, or null when the entity fetch failed⚠️ For a `Sletting` this is Brreg's SIX-KEY STUB, not a full record — a deleted organisation still answers HTTP 200 with `slettedato` set. Branch on endringstype; never assume doc is a complete Enhet, and never detect deletion from a status code.
process_statusWhat Atlas did with the changeapplied, tombstoned or skipped_unknownDerived from endringstype at load time. `skipped_unknown` covers both `Ukjent` and any future sixth value, deliberately — the run counts and surfaces them rather than guessing an action.

Sample query​

Live PostgREST query returning the first 5 rows this source publishes. It queries a published api_v1 relation — raw tables are not exposed through the public API.

https://api-atlas.urbalurba.com/brreg_enhet?limit=5

Citation​

Recommended citation
Brønnøysundregistrene. (n.d.). Enhetsregisteret — oppdateringer (endringsfeed). Retrieved from https://data.brreg.no/enhetsregisteret/api/dokumentasjon. Available in Atlas at https://atlas.sovereignsky.no/datasets/brreg-oppdateringer.
BibTeX
@misc{atlas_brreg_oppdateringer,
author = {Brønnøysundregistrene},
title = {Enhetsregisteret — oppdateringer (endringsfeed)},
year = {n.d.},
url = {https://data.brreg.no/enhetsregisteret/api/dokumentasjon},
note = {Available in Atlas at https://atlas.sovereignsky.no/datasets/brreg-oppdateringer}
}
Permalink
https://atlas.sovereignsky.no/datasets/brreg-oppdateringer

About this source​

Brønnøysundregistrene publishes every change to Enhetsregisteret as an ordered feed: one record per change, carrying the organisation number, a change type and a monotonic `oppdateringsid`. Atlas walks it forward daily from a durable watermark, recording each change in `raw.brreg_oppdateringer` and the organisation's document at that moment in `raw.brreg_enheter_versions`. This is what keeps the bulk snapshot (`brreg-enheter-alle`) from going stale. The snapshot is a point in time; a bulk file cannot express a deletion, because absence from a 1.17M-record file is indistinguishable from a truncated download. Deletions arrive here, as `Sletting` and `Fjernet` change types. The feed has no retention window — it reaches back to `oppdateringsid` 1 in April 2018 — so a missed day, week or month catches up completely on the next run. Cadence is a freshness choice, not a correctness one.