Postal Codes Dataset for Serbia, RS

313
Files:1
Formats:csv
License:CC-BY-4.0

Postal Codes Dataset for Serbia, RS 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
  • Creative Commons Attribution 4.0 International license
20% off
$49.90$39.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-rs/
https://datahub.io/logistics/postal-codes-rs/_r/-/.licensing-notes.md
https://datahub.io/logistics/postal-codes-rs/_r/-/.migration-notes.md
https://datahub.io/logistics/postal-codes-rs/_r/-/ATTRIBUTION.txt
https://datahub.io/logistics/postal-codes-rs/_r/-/README.md
https://datahub.io/logistics/postal-codes-rs/_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-rs/_r/-/datapackage.yaml
README.md— documentation
https://datahub.io/logistics/postal-codes-rs/_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-rs-sample


About this dataset

Serbia (RS) — internal licensing notes

Source research, 2026-08-31

Clean GO on GeoNames; no official bulk source exists.

What's currently live is corrupted

R2's rs/rs.csv (1,155 rows, matches _meta/catalog.json) is a pandas round-trip of GeoNames' raw postal export with every admin field written as the literal string "nan" instead of blank — confirmed directly by downloading and inspecting the live object. admin_name1/admin_name2/ admin_name3 are "nan" on all 1,155/1,155 rows. Same defect class already found and fixed in PL, AL, TH. datapackage.yml's declared resource size (5,011 bytes, dated 2024-11-07) doesn't even match the live object (65,967 bytes) — the storefront metadata is stale on top of the data defect.

Source 1 — GeoNames RS postal export (the base)

https://download.geonames.org/export/zip/RS.zip     # 1,155 rows

Licence CC BY 4.0, verified against export/zip/readme.txt on 2026-08-31 — no per-country caveat for Serbia. Carries place_name + coordinates only — zero admin fields on every row, verified directly (not a formatting artifact; the raw file itself has empty admin columns).

Source 2 — GeoNames RS gazetteer dump (admin enrichment, same publisher)

https://download.geonames.org/export/dump/RS.zip    # 24,543 entries

Same licence, same publisher, not a new source. Carries a genuine 2-tier admin hierarchy for 9,511 populated-place entries via GeoNames' own admin1 (SE = Serbia proper, VO = Vojvodina) and admin2 (a 0–24 numeric district code) fields.

Real finding: GeoNames' numeric admin2 codes map 1:1 onto the actual ISO 3166-2:RS district (okrug) codes — verified against en.wikipedia.org/wiki/ISO_3166-2:RS on 2026-08-31. E.g. VO.6 ("South Bačka") = RS-06. These are Serbia's real, citable subdivision codes, not GeoNames-internal ids standing in for them.

One name correction applied: GeoNames' own admin2Codes.txt labels district RS-17 "Morava"; the ISO register and every other source name it "Moravica" (Moravički okrug). Corrected on output, disclosed.

❌ Posta Srbije — no bulk source, not a licensing block

posta.rs exposes only a single-address postal-code lookup tool (/pak/pretraga-pak.aspx, confirmed 404/lookup-only on 2026-08-31) — there is no downloadable list, PDF, or API. This is a data-availability gap, not a licensing restriction like Poland's Poczta Polska or Serbia having a resale prohibition — there's simply nothing bulk to acquire.

What ships

rs.csv — 1,155 rows (1,149 distinct postal codes), 13-column postal-codes schema. admin_name1/admin_code1 = district/okrug (25/25 covered) via a same-source GeoNames-to-GeoNames coordinate join. admin_name2/admin_code2 = "Vojvodina"/RS-VO on the 393 rows in Vojvodina's 7 districts; genuinely empty on the other 762 rows (18 districts including Belgrade), because Serbia's real ISO structure gives those districts no parent province code — not a coverage gap. admin_name3/admin_code3 not populated (no opština/municipality-level source found).

Join quality measured directly before shipping: 1,088 rows matched by exact place name (median distance to the matched gazetteer point: 4 m — the two GeoNames exports evidently share coordinates for most places); 67 rows matched by coordinate-only fallback (median 1.1 km, max 4.9 km). Zero rows unresolved.

Known source defect, disclosed not corrected: postal code 14000's "Lipljan" row shares its exact coordinate with that code's genuine "Valjevo" row. Lipljan is a real town, but in Kosovo — ~230 km away. This is an upstream GeoNames error (this build doesn't alter source coordinates or drop rows), flagged in README.md/ATTRIBUTION.txt so a consumer doesn't trust that one row's district assignment.

licence_status

{
  "channel": "postal-codes-r2",
  "source_url": "https://download.geonames.org/export/zip/RS.zip",
  "licence_id": "CC-BY-4.0",
  "collected_at": "2026-08-31",
  "decision": "compatible",
  "decided_by": "claude-session-2026-08-31",
  "decided_at": "2026-08-31",
  "note": "No official bulk source exists to consolidate onto GeoNames; admin enrichment is same-publisher/same-licence GeoNames-to-GeoNames, not a second source with its own terms."
}

Proposed tier

B ($49). Single publisher (GeoNames, both exports), normalised in place with real derivation work — the same-source gazetteer join, verified ISO crosswalk, and the Morava→Moravica correction — but no independent second-source consolidation (Poland/Mexico/Finland-shaped), so this doesn't clear tier A's bar per docs/PRICING_TIERS.md.

Moat

Low. GeoNames is openly downloadable by anyone; the district-join technique (same-source dump-to-postal coordinate matching) is now a standard, documented pattern in this catalogue (first used for South Africa) rather than a one-off trick. A competitor with GeoNames access reproduces most of this in an afternoon. The genuine value-add — fixing the "nan" corruption, deriving verified ISO codes, and catching the Lipljan/Valjevo defect — is real but not structurally hard to redo.

Build — 2026-08-31 (local only, not published)

Built via datasets/rs/scripts/build_postal_codes_product.py. Frictionless validation: valid: True. Nothing published to R2 (still shows the stale "nan"-corrupted file), nothing committed to git.