Open dataset of Indonesia's complete administrative hierarchy — from provinces (provinsi) down to villages (desa/kelurahan). This repository provides structured, bilingual (Indonesian + English) reference data for all four levels of Indonesian administrative divisions, including postal codes and geographic coordinates at every level. Designed for developers, researchers, government agencies, and AI agents.
Licensed under CC-BY-4.0. Browse the hierarchy through GitHub's folder navigation, download aggregate files in JSON/CSV/NDJSON, or integrate directly via raw URLs.
| Item | Details |
|---|---|
| Province | 34 |
| Regency/City | 514 |
| District | 7,215 |
| Village | 80,534 |
| Coordinates | ✅ Included (all levels) |
| Postal Codes | ✅ Included (village level) |
| Formats | JSON, NDJSON, CSV |
| License | CC-BY-4.0 |
| Last Updated | 2026-05-27 |
| Website | openadmindata.org/id |
| API | openadmindata.org/api/id |
| # | Province | Regency/Citys | Districts | Villages | Link |
|---|---|---|---|---|---|
| 1 | Aceh | 23 | 289 | 6,509 | Browse |
| 2 | Sumatera Utara (North Sumatra) | 33 | 448 | 6,102 | Browse |
| 3 | Sumatera Barat (West Sumatra) | 19 | 179 | 1,160 | Browse |
| 4 | Riau | 12 | 169 | 1,876 | Browse |
| 5 | Jambi | 11 | 141 | 1,562 | Browse |
| 6 | Sumatera Selatan (South Sumatra) | 17 | 236 | 3,263 | Browse |
| 7 | Bengkulu | 10 | 128 | 1,515 | Browse |
| 8 | Lampung | 15 | 228 | 2,642 | Browse |
| 9 | Kepulauan Bangka Belitung (Bangka Belitung Islands) | 7 | 47 | 366 | Browse |
| 10 | Kepulauan Riau (Riau Islands) | 7 | 70 | 395 | Browse |
| 11 | Dki Jakarta (Jakarta) | 6 | 44 | 254 | Browse |
| 12 | Jawa Barat (West Java) | 27 | 627 | 5,832 | Browse |
| 13 | Jawa Tengah (Central Java) | 35 | 573 | 8,008 | Browse |
| 14 | Di Yogyakarta (Yogyakarta) | 5 | 78 | 414 | Browse |
| 15 | Jawa Timur (East Java) | 38 | 666 | 7,856 | Browse |
| 16 | Banten | 8 | 155 | 1,501 | Browse |
| 17 | Bali | 9 | 57 | 653 | Browse |
| 18 | Nusa Tenggara Barat (West Nusa Tenggara) | 10 | 116 | 1,062 | Browse |
| 19 | Nusa Tenggara Timur (East Nusa Tenggara) | 22 | 307 | 3,202 | Browse |
| 20 | Kalimantan Barat (West Kalimantan) | 14 | 174 | 2,073 | Browse |
| 21 | Kalimantan Tengah (Central Kalimantan) | 14 | 136 | 1,537 | Browse |
| 22 | Kalimantan Selatan (South Kalimantan) | 13 | 152 | 1,971 | Browse |
| 23 | Kalimantan Timur (East Kalimantan) | 10 | 103 | 1,002 | Browse |
| 24 | Kalimantan Utara (North Kalimantan) | 5 | 53 | 466 | Browse |
| 25 | Sulawesi Utara (North Sulawesi) | 15 | 171 | 1,790 | Browse |
| 26 | Sulawesi Tengah (Central Sulawesi) | 13 | 175 | 1,953 | Browse |
| 27 | Sulawesi Selatan (South Sulawesi) | 24 | 307 | 2,975 | Browse |
| 28 | Sulawesi Tenggara (Southeast Sulawesi) | 17 | 222 | 2,301 | Browse |
| 29 | Gorontalo | 6 | 77 | 722 | Browse |
| 30 | Sulawesi Barat (West Sulawesi) | 6 | 69 | 639 | Browse |
| 31 | Maluku | 11 | 118 | 1,180 | Browse |
| 32 | Maluku Utara (North Maluku) | 10 | 116 | 1,155 | Browse |
| 33 | Papua Barat (West Papua) | 13 | 217 | 1,732 | Browse |
| 34 | Papua | 29 | 567 | 4,866 | Browse |
| File | Format | Description |
|---|---|---|
| all-province.json | JSON | All 34 province records |
| all-regency.json | JSON | All 514 regency/city records |
| all-district.json | JSON | All 7,215 district records |
| village-by-province/ | JSON | 80,534 villages split by province |
| all-flat.json | JSON | Levels 1-3 flat array |
| all-flat.ndjson | NDJSON | Streaming format |
| all-flat.csv | CSV | Spreadsheet format |
| hierarchy.json | JSON | Nested tree |
| schema.json | JSON Schema | Data schema |
import json
with open("data/all-province.json", "r", encoding="utf-8") as f:
data = json.load(f)
for r in data:
print(f"{r['name']['local']} ({r['name']['en']}) — {r['children_count']['regency']} regency/citys")import { readFileSync } from "fs";
const data = JSON.parse(readFileSync("data/all-province.json", "utf-8"));
console.log(`Total: ${data.length} provinces`);| Field | Type | Description |
|---|---|---|
id |
string | Unique identifier |
level |
integer | 1=province, 2=regency/city, 3=district, 4=village |
level_name |
object | Level label (local + English) |
name.local |
string | Name in local script |
name.en |
string | English name |
name.slug |
string | URL-safe slug |
parent |
object/null | Parent division reference |
ancestors |
array | Full ancestor chain |
children_count |
object | Count of children per level |
zip_codes |
array | Postal codes (where available) |
geo.lat |
string | Latitude (WGS84) |
geo.lon |
string | Longitude (WGS84) |
Full schema: data/schema.json
divisions/{province-slug}/
divisions/{province-slug}/{regency-slug}/
divisions/{province-slug}/{regency-slug}/{district-slug}/
Villages are listed inline in each district's README.
- llms.txt — Quick reference for AI agents
- llms-full.txt — Summary with per-province links
- Per-province data — Full data by province
Indonesia Administrative Divisions Dataset (CC-BY-4.0)
URL: https://github.com/open-admin-data/indonesia-administrative-divisions
See CITATION.cff for machine-readable citation.
- Data: CC-BY-4.0
- Open Admin Data — Browse, search and explore administrative divisions for every country
- open-admin-data — GitHub organization with all country repos
- ListBase — Structured reference data for every country