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.
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
Explore with AIpostal-codes-sr
| Field | Type | Description | Title |
|---|---|---|---|
| country_code | string | ISO 3166-1 alpha-2 country code -- always SR | Country Code |
| postal_code | string | Always empty -- Suriname has no postal code system. Not a data gap. | Postal Code |
| place_name | string | Ressort name | Place Name |
| admin_name1 | string | District (10 districts) | Administrative Name 1 |
| admin_code1 | string | Official ISO 3166-2:SR district code, SR- prefix stripped | Administrative Code 1 |
| admin_name2 | string | Ressort (sub-district) | Administrative Name 2 |
| admin_code2 | string | Empty -- no official ressort code exists in the source; the source's own value is an internal identifier and is deliberately not published | Administrative Code 2 |
| admin_name3 | string | Reserved -- Suriname has no third administrative tier | Administrative Name 3 |
| admin_code3 | string | Reserved -- not populated | Administrative Code 3 |
| latitude | number | Latitude of the ressort, decimal degrees (WGS84) | Latitude |
| longitude | number | Longitude of the ressort, decimal degrees (WGS84) | Longitude |
| accuracy | string | Coordinate granularity -- always RESSORT (the ressort's own gazetteer point, not a street or building) | Accuracy |
| alternative_city_name | string | Alternate spellings, pipe-separated, where the source supplies any that differ from place_name | Alternative City Name |
Download
Download CSVAbout
- Last updated
- 6 October 2026
- Total rows
- 68
- Format
- CSV
- File size
- 5.12 kB
About this dataset
Suriname (SR): migration notes
Internal record of the P6 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.8.22
- Commit: see
git log -- datasets/sr/(P6 sr commit on feat/single-source-of-truth, basee797eb1) - Parity verdict:
format-only(gate: pass, exit 0); CRLF→LF only - Producer:
custom, refresh disabled
Sources
| Input | URL | Notes |
|---|---|---|
| GeoNames gazetteer dump | https://download.geonames.org/export/dump/SR.zip | SR.txt, filtered to feature code ADM2 (ressorten). Same URL as the old fetch_source.py |
| GeoNames admin1 table | https://download.geonames.org/export/dump/admin1CodesASCII.txt | Used only to check GeoNames' district codes and labels against the ISO crosswalk. Same URL as fetch_source.py |
- Both URLs are stable, unversioned GeoNames URLs. The fetch date and sha256 are recorded in
sr.inputs.json;--no-fetchreuses the cache. fetch_source.pyalso downloadedadmin2Codes.txt, but the builder never read it, so the producer doesn't fetch it.- Suriname has no postal code system and GeoNames has no postal export for SR (
export/zip/SR.zipis a 404), sopostal_codeis empty on every row.pipeline.postal_code_required: falsetells build.py this is intended.
Parity against the live public CSV (2026-10-05)
Rows: 68 live and 68 fresh, none only on one side, 0 changed cells, no cell classes. Once CRLF is normalised to LF the fresh sr.csv is byte-identical to the live CSV, including row order. Live sha256 84d7d929…, fresh 9626e125… (the only difference is line endings).
No discrepancies to explain.
Decisions
| Decision | By | Basis |
|---|---|---|
| Accept the CRLF→LF difference | Standing rule (P5 sign-off: row_order/CRLF-only pre-approved) | Equal rows, 0 changed cells |
Don't fetch admin2Codes.txt | Agent: port choice | The old builder never read it; admin_code2 is deliberately empty |
| Require 19 columns per dump row (old builder skipped rows with < 15) and a finite coordinate | Agent: port choice | A malformed dump should stop the build, not drop a ressort silently |
| Add check: every district has at least one ressort | Agent, per the brief | Structural check in place of the old builder's printed counts |
latitude/longitude typed number; accuracy stays string | Agent, per the brief | accuracy is the literal RESSORT, not GeoNames' numeric accuracy, so it doesn't get the GeoNames accuracy description |
primaryKey: [admin_name1, admin_name2] | Agent, from the produced CSV | Unique in the produced CSV; the old builder's own PK and duplicate check. place_name alone isn't unique (Centrum is in both Brokopondo and Paramaribo) |
pipeline.postal_code_required: false | Agent, per the brief (bj precedent) | postal_code is empty on every row |
Descriptor sources now list the two fetched URLs; field descriptions taken from the old builder's datapackage.json | Agent | The P3 generic descriptions ("Postal code for the location") are wrong for sr |
| README.md rewritten from the old builder's README template | Orchestrator instruction (P6 brief stale-README rule) | It was the generic "We don't have postal code data for Suriname yet" stub, contradicting the published CSV. No counts (the "62 or 63" external ressort figures are kept, the dataset's own count is not), no file tables, no licence_status line; licence caveats kept. README text confirmed by the user (2026-10-05) |
Transforms carried over
From fetch_source.py + build_postal_codes_product.py:
- ADM2 features only;
place_name=admin_name2= stripped dumpname. admin_code1→ ISO 3166-2:SR (prefix stripped) via GeoNames admin1 10–19 crosswalk;admin_name1is the ISO name. The SR admin1 set must equal the crosswalk and every GeoNames label must contain the ISO name (GeoNames says e.g. "Paramaribo District").admin_code2empty (GeoNames' value is an internal geonameId); admin tier 3 empty.- Coordinates formatted to 5 decimals;
accuracy=RESSORT. alternative_city_name: alternatenames stripped, de-duplicated in order, minus the name (case-insensitive), joined with|.- Duplicate (district, ressort) pair stops the build. Sorted by (admin_code1, admin_name2).
- Not ported: the old builder's own datapackage.json, README, ATTRIBUTION and zip writing (build.py / committed docs handle those), its
licence_statusblock, andpublish_r2.py.
Open questions
- Resolved (user, 2026-10-05): README.md rewrite confirmed.
.licensing-notes.mdstill carries dated counts (68 rows, etc.); left for pc-hfz. There is no committedATTRIBUTION.txtfor sr; the old builder generated one intodata/only. Left for pc-hfz.