SCB Statistik-API utan cellgräns

Publicerad · 4 min läsning

SCB har statistiken många svenska dashboards till slut behöver: befolkning, branscher, kommunala nyckeltal, priser, migration och mer. Datan är värdefull. Det råa API:t kräver tålamod.

Du behöver hitta rätt tabell, bygga en POST-kropp, välja dimensioner och hålla dig under 100 000 celler per fråga.

Problemet med SCB:s råa API

Med SCB:s PxWeb-API börjar jobbet innan själva anropet:

  1. Hitta tabellen — bläddra genom nästlade mappar tills du hittar rätt tabell-ID
  2. Bygga POST-kroppar — välja exakta dimensioner, filtervärden och svarsformat i JSON
  3. Håller dig under cellgränsen — frågor som överskrider 100 000 celler avvisas. Du måste dela upp stora förfrågningar manuellt.
  4. Parsa px-web-svar — svaret använder SCB:s egen struktur med separata nyckel/värde-listor

Rått SCB API-anrop

Förfrågan (POST med frågekropp)
curl -X POST "https://api.scb.se/OV0104/v1/doris/en/ssd/BE/BE0101/BE0101A/BesijpSNpunktAr" \
  -H "Content-Type: application/json" \
  -d '{
    "query": [
      {
        "code": "Region",
        "selection": { "filter": "item", "values": ["00"] }
      },
      {
        "code": "ContentsCode",
        "selection": { "filter": "item", "values": ["BE0101N1"] }
      }
    ],
    "response": { "format": "json" }
  }'

Tabell-ID:t är inget du gissar dig till. Du letar upp det i SCB:s webbplats eller dokumentation, och hoppas sedan att valet av regioner, år och variabler håller sig under gränsen.

Apiverket-sättet

SCB direkt (POST)

// 1. Hitta rätt tabell-ID
// 2. Bygg POST-kropp med dimensioner
const res = await fetch(
  "https://api.scb.se/OV0104" +
  "/v1/doris/en/ssd/BE/BE0101" +
  "/BE0101A/BefolkningNy",
  {
    method: "POST",
    headers: { "Content-Type":
      "application/json" },
    body: JSON.stringify({
      query: [{ code: "Region",
        selection: { filter: "item",
          values: ["00"] }}],
      response: { format: "json" }
    })
  }
);

Apiverket (GET)

const res = await fetch(
  "https://apiverket.se" +
  "/v1/population",
  {
    headers: {
      Authorization:
        "Bearer sk_live_YOUR_KEY"
    }
  }
);

const { data } = await res.json();
// data.population = 10_551_707
// data.year = 2025
// data.by_region = [...]

GET istället för POST. Apiverket mappar användbara SCB-tabeller till REST-endpoints och hanterar paginering för större dataset. Du behöver inte bygga in tabell-ID:n i din app.

Hitta SCB-tabellen bakom en endpoint

Du ska inte behöva gissa vilken PxWeb-tabell, vilket filter eller vilken period en endpoint använder. SCB-registret visar de utvalda tabeller som Apiverket bygger på, inklusive tabell-ID, dimensioner, standardfilter och körbara exempel.

# Lista utvalda SCB/PxWeb-tabeller
curl -H "Authorization: Bearer sk_test_demo" \
  https://apiverket.se/v1/open-data/scb/tables

# Inspektera en tabell med dimensioner och exempel
curl -H "Authorization: Bearer sk_test_demo" \
  https://apiverket.se/v1/open-data/scb/tables/TAB638

SCB-baserade svar kan innehålla extra metadata i meta.sources, till exempel table_id, table_title och period. Det gör det enklare att spåra det rena REST-svaret tillbaka till den officiella tabellen.

Tillgängliga statistikendpoints

Endpoint Beskrivning
/v1/open-data/scb/tablesRegister över utvalda SCB/PxWeb-tabeller
/v1/populationBefolkningsdata per region och år
/v1/statistics/industry/{sniCode}Bransch- och företagsstatistik per SNI-kod
/v1/prices/cpiKonsumentprisindex
/v1/gdpBNP-data
/v1/wagesLönestatistik

Testa nu

curl -H "Authorization: Bearer sk_test_demo" \
  https://apiverket.se/v1/population

Lägg till svensk statistik i din app

Använd ren JSON och paginerade resultat. Börja med testnyckeln.

Öppna API-dokumentationen

Se prisplaner — gratisplanen inkluderar 200 anrop/dag