Postal Codes Dataset for India, IN

520
Updated:
Files:1
Size:11.9 MB
Rows:157,087
Formats:csv

Postal Codes Dataset for India, IN 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
  • Government Open Data License - India 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-in/
https://datahub.io/logistics/postal-codes-in/_r/-/.licensing-notes.md
https://datahub.io/logistics/postal-codes-in/_r/-/.migration-notes.md
https://datahub.io/logistics/postal-codes-in/_r/-/ATTRIBUTION.txt
https://datahub.io/logistics/postal-codes-in/_r/-/README.md
https://datahub.io/logistics/postal-codes-in/_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-in/_r/-/datapackage.yaml
README.md— documentation
https://datahub.io/logistics/postal-codes-in/_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-in-sample


About this dataset

India (IN) — internal licensing notes

Tier-1 official source lead, 2026-09-03 — promising, not yet verified in full

A likely-better source exists and needs a follow-up fetch pass before committing to GeoNames. The Open Government Data (OGD) Platform India (data.gov.in) publishes "All India Pincode Directory" and "All India Pincode Directory (Till Last Month)" — official datasets covering circle, region, division, post office name/type, and location per PIN code. Direct page fetches were blocked (403) in this pass; content/schema/currency (critically, whether it reflects the 2019 Ladakh split GeoNames misses) was not independently confirmed and must be checked before switching.

Licence confirmed clean, independent of the content question: OGD Platform India datasets are published under the Government Open Data License – India (GODL-India), under the National Data Sharing and Accessibility Policy. Verified terms: worldwide, royalty-free, non-exclusive licence covering commercial and non-commercial use, adaptation, and derivative works, conditioned on a specified attribution statement (data provider, year, dataset name, repository, version/date, URL, licence name+URL). No SPDX id exists for this licence — would be recorded as custom:godl-india-1.0 per this project's convention (same pattern as Singapore's ODL).

Build — 2026-09-03, official source confirmed and used

Fetched dropdevrahul/pincodes-india's pincode.csv directly. Verified its schema matches the exact known official structure byte-for-byte (CircleName, RegionName, DivisionName, OfficeName, Pincode, OfficeType, Delivery, District, StateName, Latitude, Longitude) — a faithful, unmodified republish of the government file, used only as a fetch convenience; licence attributed to the true rightsholder (GODL-India), not to that repository's own self-declared MIT claim, which cannot grant rights over data it does not own. Confirmed decisive: 36 states/UTs including Ladakh (112 rows) — exactly the gap GeoNames has. Switched to this source; GeoNames is not used for IN at all in this build.

Real data-quality issues found and fixed, not silently shipped:

  • 9,260 rows have unusable coordinates in the source ("NA" on one or both sides, or the exact sentinel pair 1.0000000/1.0000000) — blanked (both fields), not guessed at.
  • ~150 rows had a trailing-minus sign instead of a leading one ("38.0621050-"), and a handful had a trailing hemisphere letter ("21.9161 N") — both are recoverable, real coordinates, normalized rather than discarded (no S/W values exist in this source, so no sign-flip cases apply).
  • 12 exact full-row duplicates dropped; 12 further (Pincode, OfficeName, District) groups had conflicting rows for the same office (one with a real coordinate, one with a placeholder, or two different real coordinates) — resolved by preferring the valid coordinate, and the 12 cases with two genuinely different valid coordinates are disclosed in ATTRIBUTION.txt rather than silently picked as certain.
  • Bug caught during Frictionless validation: the dedup grouping key initially used DivisionName (a postal-routing tier not shipped in the output), while the declared primary key uses District (admin_name2, which IS shipped) — different fields, so grouping on the wrong one left 3 real duplicate rows on the actual shipped key. Frictionless caught this immediately (valid: False, 3 primary-key violations); fixed by grouping on District to match the shipped key exactly, plus added a hard assertion in the build script so this class of mismatch can't silently reappear.
value
Final rows157,087
States/UTs covered36/36 (Ladakh: 112 rows)
Districts732
Distinct PIN codes19,300
Rows with blanked coordinates9,260
Exact duplicates dropped12
Conflicting-coordinate groups disclosed12

Frictionless validation: valid: True (after the dedup-key fix above). Zero literal "nan" strings, zero malformed postal codes, zero unparseable coordinate strings remaining.

Status: built and validated locally only. Nothing published to R2, nothing committed to git yet.

GeoNames research, 2026-09-03 (superseded — kept for record, NOT used)

GO, with a real coverage-currency gap flagged before any build. GeoNames' postal export has a genuine 3-tier structure and is clean at the row level, but its state/UT coverage is missing a 2019 administrative change, and its own admin1 codes are internal numbers with no relationship to ISO 3166-2:IN.

The source — GeoNames IN

https://download.geonames.org/export/zip/IN.zip      # 155,570 rows

Licence CC-BY-4.0, verified against export/zip/readme.txt on 2026-09-03 — India carries no per-country caveat (the readme's only restricted countries are GB, CL, CN, IE, MT, AR, BR).

Verified directly against the raw source file:

  • admin_name1/admin_code1 — State/UT, 35 distinct values, not the real current 36 (28 states + 8 union territories). Zero rows mention Ladakh anywhere — confirmed by direct search of the raw file. Ladakh split from Jammu & Kashmir into its own union territory in October 2019 and has its own ISO code (IN-LA, verified against Wikipedia's ISO_3166-2:IN page 2026-09-03); GeoNames' postal export has not been updated to reflect this, six years on. This is a real, disclosable currency gap, not a coverage hole we introduce — the source itself is stale here.
  • GeoNames' own admin_code1 is an internal numeric id with gaps (01, 02, 03, 05, 07, 09...), completely unrelated to ISO 3166-2:IN, which uses 2-letter alpha codes (IN-AP, IN-MH, IN-DL…). Same hazard class as JP/CZ in this batch: a naive numeric-prepend build would produce nonsense codes, not just wrong ones. Requires a full name-based crosswalk (35 rows).
  • admin_name2 — District, 658 distinct values.
  • admin_name3 — populated on 100% of rows (155,570/155,570) — genuinely complete 3-tier data, better than JP's partial admin3 coverage. admin_code3 is always empty — no official third-tier code exists in this source, name-only.
  • 12 exact full-row duplicates in the raw source (dedupe fixes them). Real primary key verified as (postal_code, place_name, admin_code2, admin_name3) — 0 collisions after dropping the 12 exact duplicates.
  • Row-level data is clean at the source: 0 literal "nan" strings, 0 float-formatted numeric fields. The "nan"/float corruption visible in the currently-live bare in.csv was introduced downstream of GeoNames, same as every other untouched legacy country here — not present upstream.

licence_status (as shipped — GODL-India source, not GeoNames)

{
  "channel": "postal-codes-r2",
  "source_url": "https://www.data.gov.in/catalog/all-india-pincode-directory",
  "licence_id": "custom:godl-india-1.0",
  "collected_at": "2026-09-03",
  "decision": "compatible",
  "decided_by": "claude-session-2026-09-03",
  "decided_at": "2026-09-03"
}

Tier

B ($49). Official government source with real, disclosed data-quality work (coordinate normalization, dedup-key correction caught by validation), not a trivial pass-through — same shape as AT/LU/BE in this catalogue's GeoNames-only tier B builds, but the source here is stronger (tier-1 official, not a third-party gazetteer).

Verdict

Built and shipped using the GODL-India source, not GeoNames. The GeoNames path documented below is retained for the record only — it was not used, since the official source resolved the Ladakh gap that made GeoNames unusable in the first place.