Postal Codes Dataset for Romania, RO

316
Updated:
Files:1
Size:3.55 MB
Rows:54,096
Formats:csv
License:OGL-ROU-1.0

Postal Codes Dataset for Romania, RO including name of the city, town, or place, various administrative divisions and alternative city names.

Part of a Data Solution

  • Postal Codes Solution

    Every worldwide postal-code dataset in one bundle — the ultimate global reference for precise postal codes.

    Explore →

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
20% off
$99.90$79.92
one-time payment

API Access

Access dataset files directly from scripts, code, or AI agents.

Browse dataset files
Dataset Files

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.

/logistics/postal-codes-ro/
https://datahub.io/logistics/postal-codes-ro/_r/-/.licensing-notes.md
https://datahub.io/logistics/postal-codes-ro/_r/-/.migration-notes.md
https://datahub.io/logistics/postal-codes-ro/_r/-/ATTRIBUTION.txt
https://datahub.io/logistics/postal-codes-ro/_r/-/README.md
https://datahub.io/logistics/postal-codes-ro/_r/-/datapackage.yaml
Key Files

Start with these files — they give you everything you need to understand and access the dataset.

datapackage.yaml— metadata & schema
https://datahub.io/logistics/postal-codes-ro/_r/-/datapackage.yaml
README.md— documentation
https://datahub.io/logistics/postal-codes-ro/_r/-/README.md
Typical Usage
  1. 1. Fetch datapackage.yaml to inspect schema and resources
  2. 2. Download data resources listed in datapackage.yaml
  3. 3. Read README.md for full context

Data Files

postal-codes-ro-sample

About

Last updated
2 October 2026
Total rows
100
Format
CSV
File size
7.8 kB

About this dataset

Romania (RO) — internal licensing notes

Source research + sellability audit, 2026-08-28

RO is the same defect class as TH, but bigger, and has a stronger available upgrade than TH's did. What's live is a straight GeoNames re-export with the identical pandas NaN/float round-trip bug found and fixed for Thailand — and there is a genuinely official, cleanly-licensed, street-level replacement source sitting on Romania's own open data portal that nobody has evaluated yet.

What is currently sold — GeoNames RO, and it is broken the same way TH was

https://download.geonames.org/export/zip/RO.zip     37,915 rows

Licence CC-BY-4.0, verified against export/zip/readme.txt on 2026-08-28 — no per-country caveat for Romania (only UK/Royal Mail and Chile carry one). Legally sellable. The problem is the same content bug as TH, at much larger scale:

value
rows37,915
distinct postal codes37,914 (near-unique — RO's codes are already close to address-level)
literal "nan" string cells51,032 (admin_name2 × 25,516, admin_name3 × 25,516)
float-formatted numeric fieldsaccuracy ("4.0"/"1.0" on 30,246 rows), admin_code2/admin_code3 ("179132.0" instead of "179132" on 12,399 rows each)
county coverage42 / 42 — full national coverage (41 județe + București)
duplicates0 on (country_code, postal_code, place_name)
alternative_city_namepopulated on 7,426 rows — real content, do not drop it (see TH's mistake)

Root cause confirmed identical to TH: the raw GeoNames source has genuine integers (e.g. admin_code3 = 11055041) and genuine empty fields — a pandas read/to_csv round-trip is what turns the empty ones into the string "nan" and the integer ones into "179132.0". Rebuilding straight from the raw tab-delimited source with the csv module (no pandas), exactly as done for TH, fixes both defects without needing a new source at all. This alone is shippable today, same tier B, same "no decision needed" status as TH's cleanup.

Real upgrade candidate — Poșta Română via data.gov.ro (OGL-ROU-1.0)

This is the part TH did not have available: an official, street-level, cleanly-licensed replacement, not just a cleanup of the existing source.

  • Dataset: https://data.gov.ro/dataset/coduri-postale-romania, published by Poșta Română (the state postal operator) directly on Romania's national open data portal.

  • Licence: OGL-ROU-1.0 (Open Government Licence Romania v1.0), Open Definition-compliant. Verified verbatim from data.gov.ro/pages/licence on 2026-08-28: users may "refolosească informația în scop comercial sau necomercial" ("reuse the information for commercial or non-commercial purposes") — explicit commercial permission — subject to attribution ("declare sursa informației" / display "Conține informații publice în baza Licenței pentru Guvernare Deschisă v1.0"). This is a real, named, checkable licence — not an unsourced aggregator.

  • File: infocod-cu-siruta-mai-2016.xls (7.8 MB, downloaded and inspected directly on 2026-08-28, not just described secondhand). Three sheets:

    SheetRowsGranularity
    Bucuresti12,400Street-level — street type, street name, house-number range, sector, SIRUTA sector code
    Localitati peste 50.000 loc29,204Street-level for every city over 50,000 population — județ, locality, street, house-number range, SIRUTA code
    Localitati sub 50.000 loc13,803Locality-level (comună/oraș) — județ, locality, SIRUTA code

    55,407 rows total, and every row carries a real SIRUTA code — Romania's official administrative-unit registry maintained by the National Institute of Statistics (INS), the actual ISO-3166-2-equivalent backbone for this country, not a GeoNames-internal geonameid pretending to be one.

  • Caveat that must be disclosed, not buried: this file is dated 2016 — a Last-Saved timestamp of 2016-09-02, confirmed from the file's own OLE metadata. It is 10 years stale against today. Romania's street/postal grid does not churn as fast as, say, a fast-growing city's new subdivisions, but this is still a real currency gap and must be stated plainly in any README, not smoothed over as "official" implying "current."

Recommendation — two independent decisions, not one

  1. Ship the GeoNames-only cleanup now — same as TH: fix the 51,032 nan literals and the float-formatted accuracy/admin_code2/admin_code3 columns by rebuilding from the raw GeoNames source via csv, not pandas. 903-row-scale fix pattern, just bigger (37,915 rows). Tier B, licence unambiguous (compatible, CC BY 4.0), no human decision required, available today. This is the direct RO equivalent of the TH build already shipped in commit 0766502.
  2. Evaluate the Poșta Română/SIRUTA rebuild as a genuine tier-A upgrade — unlike TH's kongvut candidate, this one has a clean, verifiable, official licence and no Wikipedia-provenance problem. It would take RO from county-only granularity to street-level for every city over 50,000 people plus all of Bucharest, with real SIRUTA admin codes throughout. The only real cost is the 2016 staleness, which must be disclosed, and the build work itself (three sheets with different column shapes to reconcile, .xls parsing, SIRUTA cross-referencing against county names). This is a bigger build than the GeoNames cleanup and should be scoped and confirmed separately before starting.

licence_status (proposed — needs human sign-off before shipping either path)

{
  "channel": "postal-codes-r2",
  "components": [
    {
      "field_group": "GeoNames-only cleanup (available today)",
      "source_url": "https://download.geonames.org/export/zip/RO.zip",
      "licence_id": "CC-BY-4.0",
      "collected_at": "2026-08-28",
      "decision": "compatible",
      "decided_by": "claude-session-2026-08-28",
      "decided_at": "2026-08-28"
    },
    {
      "field_group": "PROPOSED Poșta Română / SIRUTA street-level rebuild",
      "source_url": "https://data.gov.ro/dataset/coduri-postale-romania",
      "licence_id": "custom:ogl-rou-1.0",
      "collected_at": "2026-08-28",
      "decision": "unresolved",
      "decided_by": null,
      "decided_at": null,
      "note": "Licence itself is clean and verified (commercial reuse explicitly permitted, attribution required). Marked unresolved only because the BUILD has not been scoped/confirmed yet, not because of any licensing doubt -- flip to compatible once a human confirms the rebuild should go ahead."
    }
  ]
}

Proposed tier

B ($49) for the GeoNames-only cleanup, matching TH. A ($99) if the Poșta Română/SIRUTA rebuild goes ahead — genuine multi-sheet, multi-granularity consolidation from an official source, a real step up from a single-source normalisation.


Final decision — 2026-08-28

Both candidates were built and validated locally (not published — see datasets/ro/scripts/, datasets/ro/data/). The Poșta Română/SIRUTA rebuild is the chosen product.

GeoNames cleanupPoșta Română / SIRUTA (chosen)
Scriptbuild_geonames_alternative.pybuild_postal_codes_product.py
Rows37,91554,096 (after removing 1,311 exact duplicates created by dropping the source's house-number-range field — see script docstring)
GranularityCounty only (42/42)Street-level for Bucureşti + every city >50,000 pop.; locality-level elsewhere
Admin codesGeoNames-internal geonameids reused as admin_code2/3Real SIRUTA codes (Romania's official INS registry)
LicenceCC BY 4.0 — cleanOGL-ROU-1.0 — clean, verified verbatim, explicit commercial permission
CoordinatesYes (GeoNames-estimated)No — source carries none
alternative_city_nameYes, 9,054/37,915 rowsNo — not populated
CurrencyMore current (GeoNames refreshes its export)2016 — confirmed from the source file's own OLE metadata, 10 years stale
TierBA

Reasoning. Granularity and official provenance won over currency and coordinate coverage. A customer buying a Romanian postal-code dataset is far more likely to need street-level resolution in the capital and every major city than they are to need a lat/lon column — and SIRUTA codes are the real, citable administrative backbone, not a GeoNames-internal ID standing in for one. The 2016 staleness is real and is disclosed prominently in data/README.md, data/ATTRIBUTION.txt, and the field-level schema notes — it is a genuine limitation, not something papered over by the word "official."

What was rejected, and why it's still kept: the GeoNames cleanup is not discarded — build_geonames_alternative.py remains a fully valid, working, clean-licence fallback. If the SIRUTA source's staleness turns out to be unacceptable in practice (e.g. a customer complaint about a specific street/code that has since changed), reverting to the GeoNames path is a same-day script run, not a re-research effort.

What was explicitly ruled out: merging the two sources onto one row (e.g. attaching GeoNames coordinates to SIRUTA rows) was considered and rejected — it would mix an OGL-sourced official register with a CC-BY aggregator re-export on the same row for a marginal benefit, adding attribution complexity without a clear customer need. Ship one clean source, not a patchwork.

Status: built and validated locally only. datasets/ro/data/{ro.csv, datapackage.json, README.md, ATTRIBUTION.txt, ro.zip} all exist and pass Frictionless validation (valid: True). Nothing has been published to R2 and nothing has been committed to git — this final decision was reached and recorded, but shipping it is a separate, not-yet-taken step.