India’s public data is extensive but exists in silos, and often in non-machine-readable formats. Census tables, NFHS health surveys, electoral rolls, and poverty estimates are all often published as PDF reports. As a data enthusiast or a policy maker, turning these reports into actionable insights for India becomes a classic last-mile delivery problem – how to make sense of this data?
BharatViz (https://bharatviz.org/, http://github.com/saketlab/bharatviz) fixes the last-mile problem by providing a dashboard for getting a publication-quality choropleth given a CSV of state/district/regions. It supports various input formats, including CSV and spreadsheets, and produces a visualisation in under five seconds.
Under the hood, Bharatviz is a static React + D3 app that renders every choropleth client-side as SVG, a thin Express/TypeScript API for PNG/PDF export and the MCP layer, and a geospatial corpus served as flat GeoJSON and GeoParquet via a CDN. Bharatviz hosts geojsons for more than 3,000 cities, as well as admin and subadmin boundaries from different rounds of the census (1872-2011), including the latest district boundaries, with a crosswalk dictionary. BharatViz comes with R and Python development kits for easy integration with Jupyter and R notebooks. BharatViz allows you to generate choropleths with just a call to its API. The MCP server provides an interface for coding agents to make sense of the Indian boundaries, and demography to enable queries like “How many hospitals are there in my pin code 400071” or "Which 20 districts have the lowest literacy rates — and what do they have in common?" or "Does the Meta wealth index predict literacy across districts? And are tribal districts poorer?".
In this lightning talk, I will introduce BharatViz, outline its core architecture, and walk through some case studies using the API. One such use case is the district-level pollution tracker. I will also demonstrate the MCP and some use cases around it.