Skip to content
Official and academic sources Verified

Permanent resident population aged 15 and over by migration status

bfs-migration-status

Publisher
OFS/BFS
Access method
api
Table id
su-d-01.05.03.01.01 + ds-x-01.05.03evo
Licence
BFS terms of use OPEN-BY: "Open use. Must provide the source."
Coverage
Geography national · population permanent resident population aged 15 and over (SAKE/ESPA, annual average) · categories total, without_migration_background, with_migration_background, first_generation, second_generation · from 2012 · to 2024
Gaps
Series starts in 2012 (first year of the current typology in this table). Older BFS graphics show 2003 and 2008 values but only as PDF charts (not machine-readable, not used). No canton series in this file (the BFS publishes one, su-d-01.05.03.01.04). No "migration status unknown" row is published in this table (it is part of "total").
Used on
STORY-06
Known limits
Switzerland does not measure ethnicity; these are the official BFS migration-status categories, defined by nationality (at birth and current), country of birth and the parents' country of birth. "With migration background" = foreign nationals and naturalised Swiss (except those born in Switzerland whose parents were both born in Switzerland) plus Swiss by birth whose parents were both born abroad (BFS press release 12.12.2022); persons of the 3rd or higher generation are counted as without migration background unless they are foreign nationals. Survey data (Swiss Labour Force Survey, SAKE): estimates with confidence intervals, population aged 15+ only. The structural survey (SE) gives different levels for the same year (2024: 3.17 million with migration background in T 40.02.01.05.01 vs 3.09 million here) — do not mix the two sources. Shares in the 2022 press release (+4.3 points 2012–2021) differ slightly from the current edition (+4.1), which reflects later revisions.
Verification
verification date: 2026-10-31 · method: Fetched su-d-01.05.03.01.01 and ds-x-01.05.03evo from the BFS DAM; shares agree with counts ÷ total. Compared with the BFS press release of 12.12.2022 "Die Bevölkerung mit Migrationshintergrund hat in der Schweiz seit 2012 um 4 Prozentpunkte zugenommen" (share 35 % in 2012 and 39 % in 2021; 2021 — 31 % first and 8 % second generation) — identical at the published precision. · checkedValue: with migration background 2012: 35.24 %, 2021: 39.38 % (1st gen 31.05 %, 2nd gen 8.33 %); 2024: 3 086 020 persons, 40.87 % · checkedAgainst: https://dam-api.bfs.admin.ch/hub/api/dam/assets/23647670/master

How current is this data?

Freshness
Up to date

According to its update rhythm, no newer edition is expected yet.

Period covered
2012–2024
Last change of the data
Last check of the source
Update rhythm
Yearly

Ledger note (in English): Yearly, in October (2024 data published on 09.10.2025).

Votara checks the source
Every week, and every day from 3 days before to 14 days after an announced publication date

The state is computed each time the site is built; this page shows it as of . Results of the accuracy checks

Transformations

  1. Counts: XLSX su-d-01.05.03.01.01, one sheet per year, row "Total"; columns located by their labels ("Total", "Bevölkerung ohne Migrationshintergrund", under "Bevölkerung mit Migrationshintergrund": "1. Generation", "2. Generation", "Total"). Values are published in thousands with three decimals and converted exactly to persons (× 1000). population_ci95_pct = the published 95 % confidence interval, ± in % of the value. Script: scripts/fetch/bfs-migration-status.ts
  2. Shares: JSON ds-x-01.05.03evo (data behind the BFS chart "Entwicklung der Bevölkerung nach Migrationsstatus"), keys nm / m / 1gen / 2gen, copied as published (2 decimals) — the share array is the one the JSON calls "absolute". share_pct of "total" = 100 as in the XLSX. The fetcher checks every share against count ÷ total (difference ≤ 0.01 points on 2026-10-31).
  3. Official category labels (BFS table T 40.02.01.05.01, 2024, in four languages): without_migration_background = DE "Bevölkerung ohne Migrationshintergrund", FR "Population non issue de la migration", IT "Popolazione senza passato migratorio", EN "Population without a migration background"; with_migration_background = DE "Bevölkerung mit Migrationshintergrund", FR "Population issue de la migration", IT "Popolazione con passato migratorio", EN "Population with a migration background"; first_generation = "1. Generation" / "1re génération" / "1a generazione" / "1st generation"; second_generation = "2. Generation" / "2e génération" / "2a generazione" / "2nd generation"; total = "Total" / "Total" / "Totale" / "Total" (incl. persons whose migration status cannot be determined).