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
- Open Government Licence Romania v1.0 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-ro-sample
| Field | Type | Description | Constraints | Title |
|---|---|---|---|---|
| country_code | string | ISO 3166-1 alpha-2 -- always RO | Country Code | |
| postal_code | string | Romanian postal code (6 digits) | { "pattern": "^\\d{6}$" } | Postal Code |
| place_name | string | Street name (Bucuresti and cities >50,000 population) or locality name (elsewhere) -- the finest named place this row identifies | Place Name | |
| admin_name1 | string | County (Judet), or Bucuresti | Administrative Name 1 | |
| admin_code1 | string | ISO 3166-2:RO code | Administrative Code 1 | |
| admin_name2 | string | Locality (comuna/oras) or Bucuresti sector | Administrative Name 2 | |
| admin_code2 | string | Official SIRUTA code (Romania's INS administrative-unit registry) | Administrative Code 2 | |
| admin_name3 | string | Not used in this release -- the real hierarchy here is two levels (judet -> localitate/sector) | Administrative Name 3 | |
| admin_code3 | string | SIRSUP (SIRUTA superior-unit code), where the source provides one | Administrative Code 3 | |
| latitude | number | Not available -- source carries no coordinates | Latitude | |
| longitude | number | Not available -- source carries no coordinates | Longitude | |
| accuracy | string | Not applicable -- no coordinates in this release | Accuracy | |
| alternative_city_name | string | Not populated in this release | Alternative City Name |
Download
Download sample CSVAbout
- Last updated
- 2 October 2026
- Total rows
- 100
- Format
- CSV
- File size
- 7.8 kB
About this dataset
Romania (RO): 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.48 (closed 2026-10-02)
- Commit:
cae46e1(worktree commit391bf6b), landed in batch 3; plus83fe026(xlrd inrequirements-producers.txt, by the orchestrator) - Parity verdict:
format-only(gate passes) - Producer:
custom, refresh disabled
Sources
| Input | URL | Notes |
|---|---|---|
Poșta Română postal-code workbook infocod-cu-siruta-mai-2016.xls | https://data.gov.ro/dataset/3eb7dc31-e53e-4c09-b2e2-87c909e68fb6/resource/4f83414b-d697-4768-845d-c31bd9173734/download/infocod-cu-siruta-mai-2016.xls | The CKAN resource the old builder used. OGL-ROU-1.0 |
- The CKAN
package_showAPI (checked 2026-10-02) lists nothing newer than September 2016, so there is no "latest" to resolve. The catalogue has a second resource with the same file name (29a5c89e-…, dated 2016-09-06); the producer keeps the old builder's4f83414b-…. - GeoNames is not fetched. The orchestrator's prompt said ro also used the GeoNames export and dump, but
build_geonames_alternative.pywas a fallback that never shipped (its docstring and the "Final decision" in.licensing-notes.md, 2026-08-28). The live zip matches the data.gov.ro build exactly. - Reading
.xlsneedsxlrd(2.0.1), imported lazily so tests run without it.
Parity against the live zip (2026-10-02)
Rows: 54,096 live and 54,096 fresh, none only on one side, 0 changed cells. With CRs stripped, the fresh CSV is byte-identical to live (cmp). The only difference is CRLF→LF.
The informational sample check reported unexplained against postal.datahub.io/ro/ro.csv. It doesn't feed the gate, and the cause was not traced.
Decisions
| Decision | By | Basis |
|---|---|---|
| Accept CRLF→LF | Standing rule (line-ending-only, user, 2026-10-02) | format-only passes the gate |
Don't fetch GeoNames; drop build_geonames_alternative.py | Agent; landed by the orchestrator without change | It never shipped; the live data comes only from the data.gov.ro workbook |
Add xlrd==2.0.1 to requirements-producers.txt | Orchestrator (commit 83fe026) | The agent couldn't edit outside datasets/ro/. A re-run from the main venv reproduced ro exactly, and the build was a no-op |
Remove row counts from README and description; replace the licence_status.decision sentence with "Cleared for commercial sale." | Orchestrator instruction (README counts rule, plan §4 P5); the wording is the agent's | Counts drift |
Transforms carried over
From build_postal_codes_product.py (now removed, with build_geonames_alternative.py and publish_r2.py):
- Three sheets, three shapes: "Bucuresti" and "Localitati peste 50.000 loc" at street level, "Localitati sub 50.000 loc" at locality level.
place_name= "Tip artera" + "Denumire artera", with only the ends stripped (inner double spaces are kept, as shipped);Localitateon the locality sheet.admin_code1= ISO 3166-2:RO code without the "RO-" prefix, from an ASCII-folded crosswalk of the 41 județe (cedilla and comma-below both match); București =B. An unmapped județ is an error.- București rows get "Sector N" in
admin_name2. SIRUTA / SIRUTA SECTOR →admin_code2, SIRSUP →admin_code3, as plain integers (never "179141.0"). Postal codes zero-padded to 6 digits. - The house-number column has no place in the schema; rows that become exact duplicates without it collapse to the first.
- No coordinates, accuracy or alternative names: the source has none.
- The old asserts are now
ProducerErrors: known județ, 6-digit postal code, unique (postal_code, place_name), every județ plus București present, expected sheets and columns. No row-count assert.
Open questions
- Resolved (user, 2026-10-05, pc-28e.7.59): dropping GeoNames and building from the data.gov.ro workbook only is accepted.
- The source is dated 2016 and has no newer release; staleness is disclosed in the README and
ATTRIBUTION.txt. If it becomes unacceptable, the.licensing-notes.mdfallback (GeoNames) would be a source switch and needs your decision. .licensing-notes.mdstill contains counts (e.g. "37,915 rows", "55,407 rows"); it is left for the end-of-epic sweep (pc-hfz).
Provenance
Reconstructed 2026-10-05 from the agent transcript 2479b1c9-c4dd-47e5-be82-34ccf8d49a80/subagents/agent-ae7e06c045a1334d0.jsonl (the run was cut off by a rate limit and resumed), the orchestrator session 2479b1c9-…, the commit messages (cae46e1, 83fe026), docs/parity/p5.md and the bd close reason.