Postal Codes Dataset for Serbia, RS

163
Updated:
Files:1
Size:76 kB
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
10% off
$49.90$44.91
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/-/README.md
https://datahub.io/logistics/postal-codes-rs/_r/-/datapackage.yml
Key Files

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

datapackage.ymlmetadata & schema
https://datahub.io/logistics/postal-codes-rs/_r/-/datapackage.yml
README.mddocumentation
https://datahub.io/logistics/postal-codes-rs/_r/-/README.md
Typical Usage
  1. 1. Fetch datapackage.yml to inspect schema and resources
  2. 2. Download data resources listed in datapackage.yml
  3. 3. Read README.md for full context

Data Files

Postal Codes Data Resource for Serbia, RS


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.