Postal Codes Dataset for Indonesia, ID

401
Updated:
Files:1
Size:7.58 MB
Rows:81,044
Formats:csv

Postal Codes Dataset for Indonesia, ID 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 — postal layer (GeoNames) 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-id/
https://datahub.io/logistics/postal-codes-id/_r/-/.licensing-notes.md
https://datahub.io/logistics/postal-codes-id/_r/-/.migration-notes.md
https://datahub.io/logistics/postal-codes-id/_r/-/ATTRIBUTION.txt
https://datahub.io/logistics/postal-codes-id/_r/-/README.md
https://datahub.io/logistics/postal-codes-id/_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-id/_r/-/datapackage.yaml
README.md— documentation
https://datahub.io/logistics/postal-codes-id/_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-id-sample


About this dataset

Indonesia (ID): 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.25 (closed 2026-10-05)
  • Commit: 537bc2d, landed in batch 6
  • Parity verdict: unexplained (the gate blocks on any unclassified cell); accepted as upstream drift
  • Producer: custom, refresh disabled

Sources

InputURLNotes
GeoNames postal exporthttps://download.geonames.org/export/zip/ID.zip
Kepmendagri No. 300.2.2-2430/2025 admin codeshttps://raw.githubusercontent.com/cahyadsn/wilayah/master/db/wilayah.sqlNo versioned download, so master counts as the latest release

The old builder also downloaded cahyadsn/wilayah_kodepos (wilayah_kodepos.json). It is not fetched any more: it only fed the cross-check audit and never reached the product, and its licence chain is unverified.

Parity against the live zip (2026-10-03)

Rows: 81,044 live and 81,044 fresh, none only on one side. 1 row changed (3 cells). Apart from that row the only difference was line endings (CRLF→LF).

KeyColumnLiveFresh
22654 / 12.01.19 / Sialogolatitude1.8341.6714
longitude98.659698.9266
accuracy43

Cause: GeoNames reordered its file (upstream drift).

  • ID.txt has two rows for 22654 that resolve to the same village: "Sialogo" (1.834 / 98.6596 / 4) and "Sialogo (Sihalogo)" (1.6714 / 98.9266 / 3).
  • The merge keeps the coordinate of whichever row comes first. That rule is ported unchanged from build_postal.py.
  • In today's file "Sialogo (Sihalogo)" comes first (line 7412 vs 7417). The Wayback copy of ID.zip from 2025-10-07 has the opposite order (7406 vs 7410).
  • Once sorted, both files hold the same 81,058 lines; 76,192 lines changed position. The exact August 2026 build input wasn't saved, so the Wayback copy is the closest evidence available.

Decisions

DecisionByBasis
Accept the Sialogo changeStanding rule (upstream drift traced to source, user, 2026-10-03)Evidence above; recorded in the sign-off section of docs/parity/p5.md
Keep "first GeoNames row wins" in the mergeAgent: a faithful portChanging it is a logic change, which needs sign-off. See open questions
Drop the wilayah_kodepos.json inputAgentAudit-only input with an unverified licence
Don't port the audit side files (admin_coverage.csv, prefix_outliers.csv, crosscheck.csv) or run_qa.py / delivery_README_template.mdAgentQA and packaging only, no product data
Replace the placeholder sources ("Multiple sources") with the two real upstreamsOrchestrator instructionpc-dky

Transforms carried over (unchanged)

  • wilayah.sql tuples parsed and tiered by how many dots the code has; names title-cased (DKI/DI and short acronyms kept, Kab. → Kabupaten, Kota Adm. → Kota Administrasi).
  • GeoNames' own admin codes are discarded. Rows are tied to villages by folded name: unique name, then postal-code consensus, then 3-digit-prefix consensus (≥60%). There is no province step.
  • One row per (postal code, village), first GeoNames row wins; other spellings go to alternative_city_name.
  • ISO 3166-2:ID comes from the numeric province code, never the name.
  • Unresolved rows are shipped once each, with empty admin and accuracy columns.
  • Coordinates rounded to ≤5 dp; the original sort order is kept.
  • The old asserts are now ProducerErrors, plus new structural checks: every province has an ISO code and postal rows, admin codes nest, the primary key is unique.

Open questions

  • Resolved (user, 2026-10-05, pc-28e.7.59): the merge now takes coordinates and accuracy from the first GeoNames row spelled exactly as the official village name, else the first row. Sialogo now matches live again. Parity after the change: 3 rows differ from live, each now taking the exact-spelling twin's coordinates (1–5 km apart): 94765 Arga Kencana (was Argakencana's), 91854 Rindingallo (was Rinding Allo's), 97128 Batu Merah (was Batumerah's).
  • Resolved (user, 2026-10-05): the 3 changed rows are signed off.
  • .licensing-notes.md and ATTRIBUTION.txt still contain counts; they are left for the end-of-epic sweep (pc-hfz).

Provenance

Reconstructed 2026-10-05 from the agent transcript 7df0c5be-a523-4080-87f9-6045a6a41515/subagents/agent-a6be74abc20bcd918.jsonl, the orchestrator session 7df0c5be-…, the commit message and the bd close reason.