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
- Creative Commons Attribution 4.0 International 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-be-sample
| Field | Type | Description | Constraints | Title |
|---|---|---|---|---|
| country_code | string | ISO 3166-1 alpha-2 -- always BE | Country Code | |
| postal_code | string | Belgian postal code (4 digits) | { "pattern": "^\\d{4}$" } | Postal Code |
| place_name | string | Commune/locality name | Place Name | |
| admin_name1 | string | Region (Bruxelles-Capitale/Vlaanderen/Wallonie) -- 3/3 covered | Administrative Name 1 | |
| admin_code1 | string | ISO 3166-2:BE region code | Administrative Code 1 | |
| admin_name2 | string | Province -- 11 distinct values (Brussels has no province, treated as province-equivalent) | Administrative Name 2 | |
| admin_code2 | string | ISO 3166-2:BE province code | Administrative Code 2 | |
| admin_name3 | string | Arrondissement -- 43 distinct values, globally unique code | Administrative Name 3 | |
| admin_code3 | string | GeoNames' own 2-digit arrondissement code (not an ISO code) | Administrative Code 3 | |
| latitude | number | GeoNames latitude (WGS84) | Latitude | |
| longitude | number | GeoNames longitude (WGS84) | 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 | Not populated in this release | Alternative City Name |
Download
Download sample CSVAbout
- Last updated
- 6 October 2026
- Total rows
- 100
- Format
- CSV
- File size
- 9.24 kB
About this dataset
Belgium (BE) — internal licensing notes
Source research, 2026-09-03 — sellability + reproducibility audit
Clean GO. GeoNames' postal export carries all three official admin tiers Belgium has above commune level (Region, Province, Arrondissement) – no gap to fill, no second source needed. Even cleaner than AT/LU: 0 (postal_code, place_name) collisions, and admin_code3 (arrondissement) is globally unique across all 43 values (no cross-province code reuse to disambiguate).
The source — GeoNames BE
https://download.geonames.org/export/zip/BE.zip # 2,781 rows
Licence CC-BY-4.0, verified against export/zip/readme.txt on
2026-09-03 — Belgium carries no per-country caveat (the readme's only
restricted countries are GB, CL, CN, IE, MT, AR, BR).
Verified directly against the raw source file:
admin_name1/admin_code1— Region, 3/3 covered (Bruxelles-Capitale, Vlaanderen, Wallonie), codesBRU/VLG/WAL.admin_name2/admin_code2— Province, 11 distinct values, codesVAN/VBR/WBR/BRU/VWV/VOV/WHT/VLI/WLG/WLX/WNA. Brussels' province-tier code duplicates its region code (BRU) – Brussels-Capital Region has no province subdivision, treated as province-equivalent.admin_name3/admin_code3— Arrondissement, 43 distinct values, code globally unique (no province shares a code with another).place_name— commune/locality (e.g. Bruxelles, Laeken, Schaerbeek — Brussels' 19 communes each get their own row under the same region/province/arrondissement).
ISO 3166-2:BE derivation verified 2026-09-03 against Wikipedia's
ISO_3166-2:BE page: GeoNames' own region AND province codes both map 1:1,
letter-for-letter, onto the ISO codes (just prepend BE-) — same
mechanism as LU's cantons, applied at two tiers here instead of one.
Cross-check against the independently-built FedEx-schema BEL dataset
fedex-agents-prototype/countries/BEL/data/Belgium.csv (1,189 rows, 1,185
distinct postal codes) was built independently from a different, official
source: bpost's own postal-codes-belgium dataset via the Wallonia open
data portal (ODWB), backfilled from a Tier-2 Wallonia source because Tier 1
alone only covered ~44% of expected codes. Its province code set
(BRU, VAN, VBR, VLI, VOV, VWV, WBR, WHT, WLG, WLX, WNA) is identical
to GeoNames' — an independent confirmation the province crosswalk here is
correct.
Coverage diff, computed directly: GeoNames (this build) has 1,146
distinct postal codes; the FedEx/bpost build has 1,185. Set difference:
40 codes exist in the bpost-sourced build but not in GeoNames (mostly
in the 1000–1199 Brussels range — EU institutions, NATO, government
bodies, and other single-address special-purpose codes bpost's research
explicitly flagged as special_code). Only 1 code exists in GeoNames but
not in the FedEx build.
Not fixed in this pass. The bpost/ODWB source's own licence was not verified in this audit — importing 40 rows from it without confirming that would repeat the "no licence check" failure this gate exists to prevent. Disclosed here as a known, quantified gap rather than silently shipped or silently ignored. If reclaiming those 40 institutional codes is wanted later, verify the ODWB dataset's licence first, then backfill by postal_code only (do not touch the other 2,781 GeoNames-sourced rows).
licence_status
{
"channel": "postal-codes-r2",
"source_url": "https://download.geonames.org/export/zip/BE.zip",
"licence_id": "CC-BY-4.0",
"collected_at": "2026-09-03",
"decision": "compatible",
"decided_by": "claude-session-2026-09-03",
"decided_at": "2026-09-03"
}
Proposed tier
B ($49). Single official-quality source (GeoNames) normalised in place, two ISO-code derivations (region + province) – real work but no second authoritative provider consolidated onto it. Same shape as AT/LU/ IT/PH. Not tier A/C: not a genuinely hard multi-source consolidation, and not a trivial pass-through either (the region/province ISO derivation and the coverage cross-check are real work).
What was already live before this rebuild
The prior be/be.csv on R2 (233,732 bytes, dated 2026-07-30) was already
structurally clean, unmodified GeoNames data — 0 "nan" strings, correct
regions, 0 duplicates. It was missing the packaging layer entirely: no
datapackage.json, no README.md, no ATTRIBUTION.txt, no licence_status,
no zip. This rebuild adds that packaging and the ISO code derivations; it
does not fix data corruption the way the AT/IE/LU rebuilds did, because
there wasn't any.
Verdict
Build it. No licensing obstacle, no coverage gap that isn't already disclosed and quantified above.
Build — 2026-09-03 (local only, not published)
Built via datasets/be/scripts/build_postal_codes_product.py.
| value | |
|---|---|
| Final rows | 2,781 |
| Regions covered | 3/3 |
| Provinces | 11 |
| Arrondissements | 43 |
| Distinct communes/localities | 2,726 |
| Distinct postal codes | 1,146 |
| (postal_code, place_name) collisions | 0 |
Frictionless validation: valid: True. Zero literal "nan" strings, zero
float-formatted accuracy values, zero duplicates on the primary key
(postal_code, place_name).
Status: built and validated locally only. Nothing published to R2,
nothing committed to git. datasets/be/README.md and datapackage.yml
updated in place (tier B, premium_source_key: be/be.zip, real
sources/licenses/licence_status).