Part of a Data Solution
- Explore →
Postal Codes Solution
Every worldwide postal-code dataset in one bundle — the ultimate global reference for precise postal codes.
Premium
You're viewing a free sample
Get the complete dataset — all rows and files — delivered instantly after checkout, with lifetime access to the latest version.
- Secure checkout via Stripe
- Instant download after payment
- Lifetime access to the latest version
- Posti Postal Code Services terms of use (2015-01-01) license
API Access
Access dataset files directly from scripts, code, or AI agents.
Browse dataset files
API Access
Access dataset files directly from scripts, code, or AI agents.
Each file has a stable URL (r-link) that you can use directly in scripts, apps, or AI agents. These URLs are permanent and safe to hardcode.
Start with these files — they give you everything you need to understand and access the dataset.
- 1. Fetch datapackage.yaml to inspect schema and resources
- 2. Download data resources listed in datapackage.yaml
- 3. Read README.md for full context
Data Files
postal-codes-fi-sample
| Field | Type | Description | Constraints | Title |
|---|---|---|---|---|
| country_code | string | ISO 3166-1 alpha-2 -- always FI | Country Code | |
| postal_code | string | Finnish postal code (5 digits) | { "pattern": "^\\d{5}$" } | Postal Code |
| place_name | string | Postal code area name, Finnish | Place Name | |
| admin_name1 | string | Maakunta (region), official Finnish name -- 19/19 regions incl. Ahvenanmaa/Aland | Administrative Name 1 | |
| admin_code1 | string | NUTS3 region code | Administrative Code 1 | |
| admin_name2 | string | Seutukunta (sub-region) -- backfilled from GeoNames by municipality code; empty where GeoNames has no counterpart for the municipality | Administrative Name 2 | |
| admin_code2 | string | GeoNames seutukunta code, where backfilled | Administrative Code 2 | |
| admin_name3 | string | Kunta (municipality), official Finnish name -- 308 municipalities | Administrative Name 3 | |
| admin_code3 | string | Official Finnish municipality code | Administrative Code 3 | |
| latitude | number | From GeoNames by exact postal_code match, where available -- Posti's own file carries no coordinates | Latitude | |
| longitude | number | See latitude | Longitude | |
| accuracy | string | GeoNames accuracy of latitude/longitude. GeoNames documents 1=estimated, 4=geonameid, 6=centroid of addresses or shape; other values (e.g. 3) occur upstream without documentation. Empty where GeoNames gives none. | Accuracy | |
| alternative_city_name | string | Swedish-language name, where it differs from the Finnish name | Alternative City Name |
Download
Download sample CSVAbout
- Last updated
- 2 October 2026
- Total rows
- 100
- Format
- CSV
- File size
- 8.6 kB
About this dataset
Finland (FI): migration notes
Internal record of the P5 migration from the old scripts to the producer: the discrepancies found, their causes, and who decided what. This is a dated record, so the numbers are as of the migration and not kept current. It is not shipped in the zip.
- Issue: pc-28e.7.21 (closed 2026-10-03)
- Commit:
ef9825a(worktree commite9b2489, same content), landed in batch 3 - Parity verdict:
unexplained(1 row only in fresh); accepted by the user as upstream drift - Producer:
custom, refresh disabled
Sources
| Input | URL | Notes |
|---|---|---|
| Posti Postal Code File (PCF) | https://www.posti.fi/webpcode/ → PCF_YYYYMMDD.zip | Fixed-width ISO-8859-1, 220 chars per record, published daily; older days under webpcode/arch/ |
| GeoNames postal export | https://download.geonames.org/export/zip/FI.zip | Seutukunta tier and coordinates only |
- The old builder read a hand-downloaded
webpcode/unzip/PCF_20260828.dat. The file name is dated, so the producer reads the directory listing and takes the single top-levelPCF_*.zip(PCF_20261002.zipat migration time). The resolved URL is recorded infi.inputs.json;--no-fetchreuses it.
Parity against the live zip (2026-10-02)
Rows: 3,784 live and 3,785 fresh. 0 changed cells, 0 rows only in live, no row_order class.
| Rows | Change | Cause |
|---|---|---|
| 1 | Only in fresh: FI,96401,Rovaniemi,Lappi,FI1D7,Rovaniemi,191,Rovaniemi,698,,,, | Posti added this code after 2026-08-28 (3,784 records in PCF_20260828, 3,785 in PCF_20261002). GeoNames has no coordinates for it, so latitude/longitude/accuracy are empty |
Check of the transform: run on the archived webpcode/arch/PCF_20260828.zip (the snapshot the old builder used) with the current GeoNames file, the producer reproduces the live fi.csv line for line.
The informational sample check against https://postal.datahub.io/fi/fi.csv came back unexplained (leading_zero_restored 9, unclassified 6, float_suffix_dropped 3). It is outside the gate and was not traced.
Decisions
| Decision | By | Basis |
|---|---|---|
| Accept the +1 row (96401) and land | User, 2026-10-03 ("Accept both", for ch and fi, session 2479b1c9-…) | Upstream drift with verified logic; recorded in the sign-off section of docs/parity/p5.md |
| Generate the Posti download date into README/ATTRIBUTION at build time instead of the hardcoded 2026-08-28 | User, 2026-10-03 ("Generate at build", session 2479b1c9-…) | Posti's terms require the actual download date to go with the data; filed as pc-ypg, not done in this commit |
| Resolve the current PCF from the directory listing | Agent | The file name is dated; the old builder's URL was today's date |
Remove row and fill counts from README, descriptor and the admin_name2, latitude, alternative_city_name descriptions; keep 19 regions, 308 municipalities, 13 municipality codes without a GeoNames counterpart | Orchestrator instruction (user's README counts rule) | Also replaced the stale licence_status.decision sentence with plain words; standard accuracy wording |
Transforms carried over
From build_postal_codes_product.py (2026-08-28):
- Fixed-width ISO-8859-1 PCF parse. From Posti: postal_code, place_name (Finnish),
admin_name1/admin_code1(maakunta / NUTS3),admin_name3/admin_code3(kunta). - place_name,
admin_name3and the Swedish name title-cased; the Swedish name goes toalternative_city_nameonly where it differs. admin_name2/admin_code2(seutukunta) joined from GeoNames by municipality code; coordinates and accuracy by postal code. First GeoNames row wins; empty when absent.- A repeated (postal_code, place_name) keeps the first record. Rows keep Posti's file order.
- The old asserts are now
ProducerErrors: 220-char PONOT records, 5-digit postal codes, 3-digit municipality codes, known NUTS3 region codes, all 19 regions present, unique primary key. No row-count assert.
Open questions
- Download date (pc-ypg). ATTRIBUTION.txt and the README "Source snapshot date" still say 2026-08-28. pc-ypg must land before fi is published after the merge.
- README/ATTRIBUTION count sweep (pc-hfz), which waits on pc-ypg.
Provenance
Reconstructed 2026-10-05 from the agent transcript 2479b1c9-c4dd-47e5-be82-34ccf8d49a80/subagents/agent-abf97d099d430fba7.jsonl, the orchestrator session 2479b1c9-… (also checked 068ca403-…, d33e1b7e-…, 7df0c5be-…: no further fi decisions), the commit message, the bd close reason and pc-ypg.