Nordic Statistics: Sweden, Norway, Denmark, Finland (SCB, SSB) avatar

Nordic Statistics: Sweden, Norway, Denmark, Finland (SCB, SSB)

Pricing

$1.00 / 1,000 data points

Go to Apify Store
Nordic Statistics: Sweden, Norway, Denmark, Finland (SCB, SSB)

Nordic Statistics: Sweden, Norway, Denmark, Finland (SCB, SSB)

Returns official statistics (population, prices, labour market and any other table) from Statistics Sweden (SCB), Statistics Norway (SSB), Statistics Denmark and Statistics Finland, one row per value with region, measure and period. Find tables by keyword or id. Supports onlyNew for scheduled runs.

Pricing

$1.00 / 1,000 data points

Rating

0.0

(0)

Developer

Viktor Wiberg

Viktor Wiberg

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Official statistics from the four Nordic statistics agencies through their open APIs: Statistics Sweden (SCB), Statistics Norway (SSB), Statistics Denmark (Danmarks Statistik, StatBank) and Statistics Finland (Tilastokeskus, StatFin). Any table in their databases: population, prices, wages, labour market, housing, energy, trade, business and more. Every value comes back as one row in the same long format, whichever agency it comes from.

  • Find a table by keyword (searchText) or give its id (tableId). The run log lists other matching tables with their ids.
  • Choose values by code or by label: "Region": ["Stockholm", "Göteborg"] works as well as ["0180", "1480"].
  • Sensible defaults: the latest period, every region, the first measure and the total for other variables. A run with empty input returns population per municipality in Sweden.
  • onlyNew turns the actor into a monitor: a scheduled run returns only values published since the last run.
  • Labels in English, Swedish, Norwegian, Danish or Finnish.

Input

FieldTypeDefaultDescription
agencystringscbscb (Sweden), ssb (Norway), dst (Denmark) or statfin (Finland).
tableIdstringThe agency's table id, for example TAB628, 07459, FOLK1A or vaerak/11ra.
searchTextstringKeywords to find a table, used when tableId is empty.
selectionobjectsee belowVariable -> values. Codes or labels, "*" for all, "top(3)" for the latest three periods, "from(2020)" for every period from 2020.
languagestringenen, sv, no, da or fi. Falls back to English if the agency does not publish in that language.
onlyNewbooleanfalseReturn only values that earlier runs with the same input did not deliver.
maxResultsinteger50Maximum number of data points (rows). 1 to 100 000.

Without tableId and searchText the actor uses a population-by-region table: TAB628 (SCB), 07459 (SSB), FOLK1A (Statistics Denmark) or vaerak/11ra (Statistics Finland).

Selection defaults

Every statistics table is a cube of variables (region, sex, age, measure, time and so on). For each variable you do not set in selection:

  • Time: the latest period.
  • Region: all regions (country, counties or regions and municipalities, as the table has them).
  • Measure (ContentsCode, Tiedot, Indhold): the first measure in the table.
  • Other variables: left out, so the agency returns the total. When a variable cannot be left out, its first value is used and the log says so.

Variables are matched by code (Tid, Region, Kon) or label (year, region, sex). time and region always find the table's time and region variables.

Table ids

AgencyId formatWhere to find ids
Statistics SwedenTAB628searchText, or the Statistical Database. Older names such as BefolkningNy are looked up by search.
Statistics Norway07459searchText, or the number in a StatBank table title
Statistics DenmarkFOLK1AsearchText, or StatBank Denmark
Statistics Finlandvaerak/11ra or 11rasearchText, or the code at the start of a StatFin table title

Example input:

{
"agency": "dst",
"searchText": "unemployment",
"selection": { "time": ["top(3)"] },
"maxResults": 50
}

Output

FieldDescription
agencyscb, ssb, dst or statfin
agencyNameStatistics Sweden, Statistics Norway, Statistics Denmark or Statistics Finland
tableIdTable id at the agency
tableTitleTable title
region, regionCodeRegion label and code, null if the table has no region variable
measure, measureCodeWhat is measured (the table's contents variable)
period2025, 2026-08 (monthly), 2026-Q3 (quarterly), 2026-W12 (weekly)
periodCodeThe agency's own period code, for example 2026K3 or 2026M08
frequencyannual, quarterly, monthly, weekly, daily or other
valueThe number
unitUnit as given by the agency, for example number, Per cent, index point
statusThe agency's status symbol for the value (provisional, confidential), otherwise null
dimensionsEvery variable of the row as label -> value label, for example {"sex": "total"}
dimensionCodesEvery variable of the row as code -> value code
lastUpdatedWhen the agency last updated the table (ISO 8601)
source, licenseSource credit and license to use when you publish the data
tableUrlLink to the table at the agency

Rows come newest period first. Empty cells are left out and never charged.

Extract from a cloud run on 3 October 2026 with empty input (312 rows, population per region in Sweden for 2025):

{
"agency": "scb",
"agencyName": "Statistics Sweden",
"tableId": "TAB628",
"tableTitle": "Population density per sq. km, population and land area by region and sex. Year 1991-2025",
"region": "Stockholm county",
"regionCode": "01",
"measure": "Population",
"measureCode": "BE0101U2",
"period": "2025",
"periodCode": "2025",
"frequency": "annual",
"value": 2486251,
"unit": "number",
"status": null,
"dimensions": { "region": "Stockholm county", "sex": "total", "observations": "Population", "year": "2025" },
"dimensionCodes": { "Region": "01", "Kon": "1+2", "ContentsCode": "BE0101U2", "Tid": "2025" },
"lastUpdated": "2026-02-24T07:00:00Z",
"source": "Source: Statistics Sweden",
"license": "CC0 1.0 (Statistics Sweden)",
"tableUrl": "https://statistikdatabasen.scb.se/api/v2/tables/TAB628/metadata?lang=en"
}

From {"agency": "ssb"} (Norway, population per county and municipality for 2026):

{
"agency": "ssb",
"tableId": "07459",
"tableTitle": "07459: Population, by sex and one-year age groups (M) 1986-2026",
"region": "Østfold",
"regionCode": "31",
"measure": "Persons",
"period": "2026",
"value": 316448,
"unit": "number",
"license": "CC BY 4.0 (Statistics Norway), source must be acknowledged"
}

From the Danish example input above, the actor chose table AUP01 and returned the unemployment rate per region for the latest three months; the first row is "region": "All Denmark", "period": "2026-08", "value": 3.1, "unit": "Per cent".

Example from a real run

Input:

{
"searchText": "population",
"maxResults": 5
}

Output (first 3 of 5 rows, values unchanged):

[
{
"agency": "scb",
"agencyName": "Statistics Sweden",
"tableId": "TAB6473",
"tableTitle": "Population statistics by region and sex. Month 2025M01-2026M07",
"region": "Sweden",
"regionCode": "00",
"measure": "Population",
"measureCode": "000007SR",
"period": "2026-07",
"periodCode": "2026M07",
"frequency": "monthly",
"value": 10613531,
"unit": "number",
"status": null,
"dimensions": {
"region": "Sweden",
"population changes": "population",
"observations": "Population",
"month": "2026M07"
},
"dimensionCodes": {
"Region": "00",
"Forandringar": "100",
"ContentsCode": "000007SR",
"Tid": "2026M07"
},
"lastUpdated": "2026-09-07T06:00:00Z",
"source": "Source: Statistics Sweden",
"license": "CC0 1.0 (Statistics Sweden)",
"tableUrl": "https://statistikdatabasen.scb.se/api/v2/tables/TAB6473/metadata?lang=en"
},
{
"agency": "scb",
"agencyName": "Statistics Sweden",
"tableId": "TAB6473",
"tableTitle": "Population statistics by region and sex. Month 2025M01-2026M07",
"region": "Stockholm county",
"regionCode": "01",
"measure": "Population",
"measureCode": "000007SR",
"period": "2026-07",
"periodCode": "2026M07",
"frequency": "monthly",
"value": 2496136,
"unit": "number",
"status": null,
"dimensions": {
"region": "Stockholm county",
"population changes": "population",
"observations": "Population",
"month": "2026M07"
},
"dimensionCodes": {
"Region": "01",
"Forandringar": "100",
"ContentsCode": "000007SR",
"Tid": "2026M07"
},
"lastUpdated": "2026-09-07T06:00:00Z",
"source": "Source: Statistics Sweden",
"license": "CC0 1.0 (Statistics Sweden)",
"tableUrl": "https://statistikdatabasen.scb.se/api/v2/tables/TAB6473/metadata?lang=en"
},
{
"agency": "scb",
"agencyName": "Statistics Sweden",
"tableId": "TAB6473",
"tableTitle": "Population statistics by region and sex. Month 2025M01-2026M07",
"region": "Upplands Väsby",
"regionCode": "0114",
"measure": "Population",
"measureCode": "000007SR",
"period": "2026-07",
"periodCode": "2026M07",
"frequency": "monthly",
"value": 50829,
"unit": "number",
"status": null,
"dimensions": {
"region": "Upplands Väsby",
"population changes": "population",
"observations": "Population",
"month": "2026M07"
},
"dimensionCodes": {
"Region": "0114",
"Forandringar": "100",
"ContentsCode": "000007SR",
"Tid": "2026M07"
},
"lastUpdated": "2026-09-07T06:00:00Z",
"source": "Source: Statistics Sweden",
"license": "CC0 1.0 (Statistics Sweden)",
"tableUrl": "https://statistikdatabasen.scb.se/api/v2/tables/TAB6473/metadata?lang=en"
}
]

Run M7rEaIzhH4ob294jR on 2026-10-04, 5 rows, 6 seconds.

Use cases

  • Municipality and regional data for market analysis, site selection and sales territories in the Nordics.
  • Comparing Sweden, Norway, Denmark and Finland in one dataset: run the actor once per agency with the same output schema.
  • Feeding official statistics to an AI agent through the Apify MCP server: search by keyword, small default results, stable field names.
  • Watching for new releases: a scheduled run with onlyNew tells you when a new month or year has been published.

Monitoring and scheduling

Set onlyNew to true to use the actor for recurring monitoring. The actor then remembers which values it has delivered for the same input, in a named key-value store in your Apify account (nightwave-state-nordic-statistics, one record per input). Each run returns and charges only values that earlier runs did not deliver. The first run returns everything in the selection. A run without news finishes successfully with 0 rows. In our cloud test, the first run with the input below returned 4 rows and the second returned 0.

A value is identified by agency, table and the codes of all its variables. A revised value for a period you already have is not delivered again; run without onlyNew to get the current values. onlyNew and maxResults are not part of the remembered input, so you can change them without starting over.

Example: a daily run at 07:00 that tells you when Statistics Norway publishes new population figures for Oslo and the whole country. In Apify Console, open Schedules, create a schedule with the cron expression 0 7 * * * and add this actor with the input below. Use top(n) for time so the window follows new releases.

{
"agency": "ssb",
"tableId": "07459",
"selection": { "Region": ["0", "0301"], "Tid": ["top(2)"] },
"onlyNew": true
}

The same schedule through the Apify API:

curl -X POST "https://api.apify.com/v2/schedules?token=<YOUR_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"name": "daily-nordic-statistics", "cronExpression": "0 7 * * *", "timezone": "Europe/Stockholm", "isEnabled": true, "isExclusive": true,
"actions": [{"type": "RUN_ACTOR", "actorId": "nightwave-owner~nordic-statistics",
"runInput": {"contentType": "application/json; charset=utf-8", "body": "<the input above as a JSON string>"}}]}'

Good to know

  • One table per run. Run the actor once per agency or table and append the datasets; the schema is the same.
  • Search takes the best match. searchText ranks tables by how many of your words the title contains, then by the most recent update. Check tableTitle and the run log, and set tableId once you know the table you want.
  • Size limits. The agencies cap how many cells one request may return (for example 150 000 at Statistics Sweden). Larger selections stop with a message asking for fewer values. maxResults limits the rows that are delivered and charged.
  • Rate limits are respected. Statistics Sweden allows 30 calls per 10 seconds and Statistics Finland 40 per minute; a run makes 2-4 calls. Failed requests are retried three times.
  • Historical regions. Some tables keep merged or abolished municipalities as rows; their values for recent years are 0 or empty. Empty cells are left out, zeros are kept because the agencies use them for real values too.
  • Statistics Sweden from 2025: SCB adds a small controlled random uncertainty to new figures to protect individuals, so totals may differ slightly from the sum of their parts (see the table note at SCB).
  • The actor fetches public statistics only, through the agencies' official APIs. No personal data, no login and no scraping of web pages.
  • This is statistical data, not investment advice.

Data sources and licenses

  • Statistics Sweden (SCB), PxWebApi 2.0 (statistikdatabasen.scb.se/api/v2). Open data under CC0 1.0, as stated in the API configuration. Credit "Source: Statistics Sweden" is appreciated.
  • Statistics Norway (SSB), PxWebApi 2.0 (data.ssb.no/api/pxwebapi/v2). CC BY 4.0: credit "Source: Statistics Norway" when you publish the data.
  • Statistics Denmark, StatBank API (api.statbank.dk/v1). Free to use, also commercially, with source reference, which corresponds to CC BY 4.0 (see Statistics Denmark source references). Credit "Source: Statistics Denmark".
  • Statistics Finland, PxWeb API (pxdata.stat.fi/PxWeb/api/v1). CC BY 4.0: credit "Source: Statistics Finland".

Each row carries source and license, so the credit travels with the data. This actor is not affiliated with any of the agencies.

Pricing

Pay per event: you pay for each data point (row) in the dataset, event data-point. Empty cells are never charged, and with onlyNew you pay only for new rows. The price per data point is shown on the actor's Pricing tab in Apify Store. The empty-input example above is 312 data points with maxResults set to 400, or 50 with the default.

Rows are delivered only after they have been charged. If you set a maximum cost per run (maxTotalChargeUsd), the run stops there and its status message says how many rows were delivered.

Contact

Built and maintained by Nightwave AB. Questions, bugs and feature requests: kontakt@nightwave.se

På svenska

Actorn hämtar officiell statistik från SCB, Statistisk sentralbyrå i Norge (SSB), Danmarks Statistik och Statistikcentralen i Finland via deras öppna API:er. Alla tabeller i databaserna går att hämta, och varje värde blir en rad i samma format oavsett land.

Exempel från en verklig körning: input och de första raderna i outputen finns i avsnittet Example from a real run ovan (körning M7rEaIzhH4ob294jR, 2026-10-04, 5 rader, 6 sekunder).

  • Välj myndighet med agency (scb, ssb, dst eller statfin) och tabell med tableId, eller sök med searchText (till exempel "konsumentprisindex" med language: "sv").
  • selection anger vilka värden du vill ha, med koder eller namn: {"Region": ["Stockholm", "Göteborg"], "Tid": ["top(5)"]}. Utan urval får du senaste perioden, alla regioner, första måttet och totalen för övriga variabler.
  • Tom input ger folkmängd per kommun och län i Sverige för senaste året. maxResults är som standard 50.
  • Med onlyNew: true levereras bara värden som tidigare körningar med samma input inte har levererat, till exempel en ny månad. Det passar för schemalagda körningar (se "Monitoring and scheduling").
  • Licenser: SCB CC0, SSB, Danmarks Statistik och Statistikcentralen CC BY 4.0. Ange källan när du publicerar datan; den följer med i varje rad.
  • Pris per datapunkt (rad) i datasetet, händelsen data-point. Tomma celler debiteras aldrig.
  • Kontakt: kontakt@nightwave.se