orakel
Docs navigation

Canonical

Doffin

Norwegian public procurement notices — tenders and contract awards.

Updated 2026-04-23

Source: Doffin (Database for offentlige innkjøp — Digitaliseringsdirektoratet) Data: Public procurement notices (tenders and contract awards) for Norwegian government and public-sector buyers License: NLOD 2.0 (Norwegian Licence for Open Government Data) Attribution required: Yes — credit "Doffin" or "Database for offentlige innkjøp" Link: https://www.doffin.no Update cadence: Daily incremental sync

What it is

Doffin is Norway's central database for public-sector procurement. Every notice published by a Norwegian buyer above the relevant threshold — and many below it — appears here, from initial tender through contract award. Larger procurements also cross-publish to TED (the EU's Tenders Electronic Daily).

Orakel ingests notices daily and links each one to the buyer's company record by orgNumber where possible. Each notice keeps its full upstream payload in rawData so downstream consumers can look up fields Orakel hasn't modelled natively.

Fields provided

Field Type Notes
noticeId string Doffin's stable identifier. Unique.
orgNumber string Buyer's 9-digit org number when Doffin supplied it in matchable form; null otherwise. See gotchas.
contractingAuthority string Buyer name as published
title string Notice heading
description string Long-form notice text
cpvCodes string[] CPV (Common Procurement Vocabulary) codes describing the goods or services
noticeType string e.g. tender notice, contract award, prior information notice
estimatedValue float Estimated contract value as published
currency string Currency of estimatedValue
publishedDate date When Doffin first published
issueDate date When the buyer issued the notice
deadline date Submission deadline for tenders
locationIds string[] NUTS or municipality codes for the place of performance
status string Upstream status (active, awarded, cancelled, etc.)
rawData json Full upstream payload for anything not modelled above
syncedAt datetime Last time Orakel refreshed the notice
url string Direct link to the notice on doffin.no. Derived from noticeId (pattern: https://www.doffin.no/notices/{noticeId}), not stored. Present on API responses, not on the DB row.

Note: procurement notices are not keyed on (country, orgNumber) in the Orakel schema — they have their own noticeId primary identifier and reference the buyer's orgNumber as a plain string column.

Endpoints that surface this data

  • GET /api/procurement — cursor-paginated search over all notices. Supported filters: orgNumber, q (free-text in title), cpvCode, noticeType, status, minValue, maxValue, deadlineAfter. Sort and order configurable.

Limitations

  • Buyer matching is best-effort. Doffin publishes buyer org numbers in a range of formats; Orakel normalises spaces and validates the 9-digit shape, but notices that fail validation keep orgNumber = null.
  • Supplier-side matching (who won a contract award) isn't modelled as a relation on the notice. Where the information exists it sits inside rawData.
  • Historical depth depends on Doffin's own archival. Expect reliable coverage for roughly the last three to five years.
  • Notices and awards are separate records. A single procurement typically produces a tender notice and, later, one or more award notices — join them via rawData or the buyer and title if you need the full arc.

Gotchas

  • Doffin org IDs sometimes arrive with embedded spaces — "940 101 808" — which Orakel strips at import. If you're comparing raw Doffin exports to Orakel records, normalise spaces first.
  • Larger procurements also appear in TED (the EU-wide procurement database). The TED identifier is typically available inside rawData; Orakel doesn't expose it as a first-class field.
  • estimatedValue reflects the buyer's estimate at publication time. The actual contract value in the eventual award notice can differ substantially — don't treat the estimate as a forecast.
  • status values come straight from Doffin. They aren't a closed enum; new statuses can appear without a schema change.