Skip to content
Official and academic sources Verified

Official index of localities with postcodes

swisstopo-postcodes

Publisher
swisstopo
Access method
csv
Table id
ch.swisstopo-vd.ortschaftenverzeichnis_plz
Licence
swisstopo OGD terms of use (free geodata): free use, source reference mandatory ("©swisstopo"); opendata.swiss rights "terms_open"
Coverage
Geography all postcodes of Switzerland (and the Liechtenstein localities of the directory) · state current (STAC item updated 2026-10-01 on 2026-10-31)
Gaps
The address share per postcode and the perimeters are not kept (raw file has them). Liechtenstein localities (BFS numbers 7001–7011) have no canton.
Used on
STORY-09, PLAT-08
Known limits
Postcodes are a postal geography, not an administrative one; locality names are those of the directory (e.g. "Lausanne 25" for PO-box localities). Two rows point to communal-free areas, not political communes (1793 Jeuss → 2391 "Staatswald Galm", FR; 6809 Medeglia → 5391 "Comunanza Cadenazzo/Monteceneri", TI) and have no match in bfs-communes.
Verification
verification date: 2026-10-31 · method: Fetched from data.geo.admin.ch and cross-checked against the BFS commune register (agvchapp snapshot of 31.10.2026, a different publisher) — 5694 of the 5696 Swiss rows point to a commune of the register with the same canton (the other two point to communal-free areas, see knownLimits), and every one of the 2110 communes has at least one postcode. · checkedValue: 8001 Zürich → 261 (ZH); 3011 Bern → 351 (BE); 1003 Lausanne → 5586 (VD) · checkedAgainst: https://www.agvchapp.bfs.admin.ch/api/communes/snapshot?date=31-10-2026

How current is this data?

Freshness
Checks failing

The automatic checks could not read the source several times in a row, or have not succeeded for longer than planned. The data shown dates from the last successful check.

Period covered
Not a time series
Last change of the data
Last check of the source
Update rhythm
Continuous

Ledger note (in English): Continuous (swisstopo publishes the current state; the STAC item was updated on 2026-10-01).

Votara checks the source
Every day

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

Transformations

  1. Download the WGS84 CSV ZIP from the swisstopo STAC collection, read the single `;`-separated CSV (columns Ortschaftsname, PLZ4, Zusatzziffer, ZIP_ID, Gemeindename, BFS-Nr, Kantonskürzel, Adressenanteil, E, N, Sprache, Validity). Script: scripts/fetch/swisstopo-postcodes.ts
  2. postcode = PLZ4, locality = Ortschaftsname, bfs_number = BFS-Nr, canton = Kantonskürzel. Rows deduplicated on these four columns (the additional digit is dropped); sorted by postcode, locality (code-point order), commune.
  3. A postcode can belong to several communes (e.g. 9485 Nendeln → Eschen 7007 and Gamprin 7009); all are kept. To pick the main commune, use the address share in the raw file.