orakel
Docs navigation

Canonical

Mattilsynet

Norwegian food-safety inspection ratings for restaurants, bars, and other food establishments.

Updated 2026-04-21

Source: Mattilsynet (Smilefjes) Data: Food-safety inspection ratings — happy/neutral/sad face grade + date License: NLOD 2.0 Attribution required: Yes — "Mattilsynet" Link: https://www.mattilsynet.no/mat/ekstra/smilefjes/ Update cadence: Weekly full refresh (Monday 05:00) from the public CSV dump

What it is

Mattilsynet inspects food establishments — restaurants, bars, cafés, canteens, takeaways, food shops — and publishes the result as a Smilefjes rating: a happy, neutral, or sad face based on compliance with food-safety regulation. Each inspection is one visit on one date to one venue.

Orakel ingests the full CSV dump once a week and upserts inspection records. Each record links to a company by orgNumber, so an establishment's inspection history sits alongside its firmographics.

Fields provided

Field Type Notes
tilsynId string Mattilsynet's inspection ID — unique per visit
orgNumber string (9 digits) Norwegian organisation number of the inspected entity
name string Venue name as filed by Mattilsynet
address / postnr / poststed string Venue address
date date Inspection date
totalRating int Overall Smilefjes score
rating1 / rating2 / rating3 / rating4 int Per-theme sub-scores (hygiene, handling, labelling, traceability — theme labels live in the source CSV)
inspectionType int Visit type code from Mattilsynet
syncedAt datetime Last time Orakel refreshed this record

Endpoints that surface this data

  • GET /api/inspections — search inspections; filter by orgNumber, postnr, rating range, or date range. Cursor-paginated.

Limitations

  • Only covers establishments that have been inspected. Companies in non-food sectors are absent by design; food companies inspected long ago may carry stale ratings until Mattilsynet re-visits.
  • Rating is per-visit, not per-company. A venue can have multiple inspections over time — aggregate across records if you want the latest.
  • Historical depth is whatever Mattilsynet publishes in the current CSV — older records may roll off upstream.

Gotchas

  • orgNumber points to the entity that was inspected, which is sometimes a sub-unit (an underenhet with its own org number) rather than the parent company. If a search-by-orgNumber returns nothing, check sub-units under the parent.
  • Theme labels (tema1_notema4_no in the upstream CSV) are not stored in the Inspection row — only the numeric ratings are. The per-theme meaning follows Mattilsynet's published scheme.
  • totalRating is stored as an integer code, not a percentage. Refer to Mattilsynet's Smilefjes documentation for the rating-code key.