Docs/Place Data Format
Place Data Format
The JSON schema behind every entry in data/places/<type>.json. For the GitHub issue/PR process itself, see Contributing Places instead - this page is only about the data shape.
| File | Type key | Label |
|---|---|---|
| library.json | library | Library |
| other_places.json | other_places | Other places |
| airport.json | airport | Airport |
| sat_centre.json | sat_centre | SAT centre |
| foreign_lang_exam_centre.json | foreign_lang_exam_centre | Foreign lang exam centre |
| gov_offices.json | gov_offices | Government offices |
scripts/validate-places.mjs validates every record againstidstringrequired<city-prefix>-<type>-<number>, unique within the file, e.g. mum-library-07namestringrequiredtypestringrequiredMust match the filename it lives in, e.g. data/places/library.json -> "library"citystringrequiredLowercase, underscore-separated slug, e.g. "mumbai", "navi_mumbai". Any city worldwide is welcome, not a fixed enum.latnumberrequiredRange: -90 to 90.lngnumberrequiredRange: -180 to 180.addressstringoptionalOptional, short, human-readablegmaps_linkstringrequiredA Google Maps link (maps.google.com, maps.app.goo.gl, or a full google.com/maps URL).added_bystringrequiredGitHub username of the contributorexamstringoptionalOptional. Only for sat_centre / foreign_lang_exam_centre, e.g. "SAT", "IELTS", "Goethe-Zertifikat (A1-C2)"valid_tillstringoptionalOptional. Only for sat_centre / foreign_lang_exam_centre. ISO date (YYYY-MM-DD) the entry should be reconfirmed by.Nothing outside this list is allowed on a committed record - proof of quality (source, rating, review count, verified date) goes in the pull request only.
{ "id": "mum-library-07", "name": "City Library, Dadar branch", "type": "library", "city": "mumbai", "lat": 19.0176, "lng": 72.8562, "address": "Gate 2, Gokhale Road, Dadar West", "gmaps_link": "https://maps.app.goo.gl/xxxx", "added_by": "your-github-handle"}The prefix is a short slug for the city (e.g. mum, thane, jkt), and the number increments from the highest one already used for that prefix in the same file - never reuse an ID.
A handful of older bulk-imported entries don't follow this exact format (see Data Sources & Provenance), but every new place should.
If a place type ever needs a new field, add it to data/places.schema.json first. This page and scripts/validate-places.mjs read that file directly, so they update automatically - only data/CONTRIBUTING.md needs a manual edit to match.