One honest picture of how India votes.
Every constituency, every election, both chambers — from the first general election of 1951–52 to today, on maps drawn the way the country was actually divided at the time.
In my own words
I’m not a political scientist, a cartographer or a working programmer. I’m a management graduate who works in B2B software sales, and I built this site because I wanted something that didn’t exist: a way to look at any Indian election, in any year, on the map as it actually was — not a spreadsheet, not a news-night dashboard that vanishes after the count, and not history flattened onto today’s boundaries.
India has a billion voters and one of the richest electoral records anywhere in the world, and most of it sits in PDFs. The people best placed to read that record — journalists, students, researchers, candidates, the merely curious — mostly can’t, because the tools are paywalled, frozen, or drawn on the wrong map. Billion Ballots is my attempt to change that: to make serious political analysis of India something anyone can do from a browser, for free.
What I brought to it wasn’t code. It was a set of questions, an insistence that every number be traceable to a primary source, and a refusal to trust anything I hadn’t seen rendered on screen. What I didn’t bring, I built with help — see the next section.
If you find something wrong, please tell me. Every correction makes the record better for the next person who looks.
— Nikunj Daga
What this is
Billion Ballots is a solo-built, open-data atlas of Indian elections: interactive constituency maps for every Lok Sabha and Vidhan Sabha election, seat-level dossiers, swing analysis between any two elections, party histories, a scenario builder, a written story for every election — and a playable timeline of 73 years of results, 713 assembly by-elections included.
Most election archives flatten history onto today’s map. This one doesn’t: results from 1957 appear under the states, seats and boundaries of 1957. That decision — era-true identity — runs through the whole dataset, from dissolved states like Bombay and Madras to seats renumbered by each delimitation.
Everything is built from the Election Commission of India’s own published record, cross-checked against the delimitation orders in the government gazette.
Every figure here is computed from the data the site ships, not typed — the same numbers the homepage quotes.
Built with Claude
This site was built by one person directing an AI. Nearly every line of code, every parsing script and every audit here was written by Claude, Anthropic’s AI model, working inside Claude Code — since May 2026, across 1,200+ commits and 460+ data scripts. I set the goals, made the judgment calls, reviewed what came back, and refused to ship what I couldn’t verify.
That division of labour shapes how you should read this site. Claude is very good at reading a 400-page Election Commission report and turning it into rows, and very good at writing a check that catches when two of those rows disagree. It is also capable of being confidently wrong. So the project’s real defence isn’t my expertise or the model’s — it is the automated checks: before every release, 23 independent audits run over the whole dataset (does each boundary’s own name agree with the result it is joined to? did a seat’s reservation change mid-delimitation, which it never legally can? does the shipped map file still match its master?), and the release is blocked if any of them finds something new. Where a check can’t be written, we render the page and look at it.
Where AI-written prose appears — the story card for each election — every number in it is a token computed from the data, not typed, and every historical event it mentions comes from a reviewed registry that has to be approved before it can be used. We say this plainly because we think people should know how the thing they’re reading was made.
Era-true identities
Every seat lives under the state, name and number of its own year. Madras stays Madras until 1969; Bihar keeps Jharkhand's seats until 2000. Nothing is back-projected onto modern lines.
Boundaries have a vintage
A constituency map is only right for the delimitation it was drawn under. Every year is served geometry of the correct vintage, and every layer's confidence grade is disclosed.
Flag, don't corrupt
Anomalies in the record — uncontested returns, deferred polls, disputed entries — are kept and labelled with provenance, never silently patched to look tidy.
How it’s made
Ingest the primary record
Election Commission of India statistical reports — every general and assembly election, plus bye-elections back to 1952 — parsed, cross-checked and loaded into a relational store.
Rebuild identities era-true
Results are keyed to the state and seat numbering of their own era, verified against the delimitation orders themselves — including reservation status, multi-member seats and renames.
Match geometry to vintage
Each of the six delimitation eras gets its own boundary layer, joined by stable ids and audited by an independent name-agreement oracle after every change.
Serve it static
Everything you see is pre-computed JSON and TopoJSON on a CDN — no database on any page load, which is why the whole atlas is fast and shareable by URL.
A gate that blocks the release
Before any change reaches the site, 23 independent audits run over the whole dataset, and the release is blocked if any of them finds a problem that is not already logged. The rule is “zero new”, never “zero”: known debt is listed openly and retired over time, not hidden behind a green light.
A name oracle the map never uses
Maps join results to boundaries by seat id only. Each boundary's own name is therefore free to act as an independent witness: after every boundary change, an audit checks that the name on the ground agrees with the name in the record for that id. Low agreement means a file of the wrong vintage — the defect that clicking around a map can never reveal.
Render it, then look
Where a check cannot be written, a real browser renders the page and a person reads the screenshot. A map can pass every data test and still paint one seat over the whole country.
Flag, don't corrupt
Anomalies — uncontested returns, deferred polls, disputed scans of a sixty-year-old order — are kept and labelled with their provenance rather than silently tidied away.
Every general election since 1951 has a map of its own vintage, including the 13 states that no longer exist. The same grades appear on every map and every seat-history drawer across the site, so you always know how much to trust the ground under a result.
Election results come from primary Government of India sources. Boundary geometry is assembled from the openly published datasets below, each used for the delimitation era it is correct for. The place behind each seat — its people, economy and heritage — comes from the public statistical and heritage registers listed last. Each entry names what it is used for and the terms it is used under.
- Election Commission of India — Statistical Reports — eci.gov.in; every general and assembly election since 1951 and bye-elections since 1952 — the source of every result, candidate, vote count, elector count and turnout on this site (© Election Commission of India, reproduced with acknowledgement)
- ECI results portal — results.eci.gov.in; 2019–2024 results and current constituency names (© Election Commission of India)
- OpenCity CKAN — data.opencity.in; machine-readable mirror of the ECI statistical reports (Public Domain)
- Delimitation Orders, 1951 · 1956 · 1962 · 1967 · 1976 · 2008 — Gazette of India notifications as published by the Election Commission of India; seat identity, numbering and reservation status for each era (Government of India)
- MyNeta, Association for Democratic Reforms — myneta.info; candidate affidavits from 2004 onward — assets, liabilities, criminal cases, education. Every candidate panel links to MyNeta’s own page for that candidate; no affidavit PDF is republished here (public affidavits filed with the ECI, compiled by ADR — credited on every use)
- ECI affidavit portal — affidavit.eci.gov.in; the original affidavits (© Election Commission of India)
- Constituency boundaries — NIC Mapserver via @planemad on GitHub (Public Domain)
- Original boundary digitisation — DataMeet community (CC-BY-SA 2.5 India)
- Assembly boundary detail — datta07/INDIAN-SHAPEFILES (MIT)
- Pre-2008 assembly boundaries — Sandip Sukhtankar, AC_All_Final (April 2012), corrected from Election Commission of India shapefiles; Uttarakhand data added by Manasa Patnam — used for the 1976-delimitation layers and for Goa and Delhi before the 2008 redraw
- Madhya Pradesh assembly boundaries — NIC BharatMaps, National Informatics Centre, Government of India (base data Survey of India 1:50,000)
- Gujarat assembly boundaries — Raphael Susewind (2014), Bielefeld University — GIS shapefiles for India’s parliamentary and assembly constituencies, derived from Election Commission polling-booth localities (CC-BY-NC-SA 4.0)
- Surat North assembly boundary — Surat Municipal Corporation GIS, assembly constituency layer (Surat Municipal Corporation, Government of Gujarat)
- Historical princely-state boundaries — India State Stories, FLAME Center for Legislative Education and Research, FLAME University (1941–2011 decadal digitised shapefiles, licence not formally cleared — used pre-commercially with credit pending written permission)
- Jammu & Kashmir 2022 boundaries — shijithpk/2024_maps_supplement (Unlicense)
- Census of India 2011 — censusindia.gov.in; Primary Census Abstract and House-listing tables at district level — population, literacy, religion, households, amenities (Government of India)
- NFHS-5 (2019–21) district factsheets — via data.gov.in; health and household indicators per district (Open Government Data Licence – India)
- NITI Aayog — Aspirational Districts — niti.gov.in; the 112-district list (2023) (Government of India)
- Reserve Bank of India — Handbook of Statistics on Indian States 2024-25 — rbi.org.in; about 320 state-level indicators across 15 domains, on the state pages and seat dossiers (Reserve Bank of India)
- National Crime Records Bureau — Crime in India 2024 — ncrb.gov.in; state-level figures, shown with NCRB’s own caveat that they count cases registered, not incidence (Government of India)
- Archaeological Survey of India — asi.nic.in, via data.gov.in; the list of centrally protected monuments (Government of India)
- Wikidata — wikidata.org; heritage sites and landmarks — coordinates and images. The data is CC0; each image carries its own Wikimedia Commons licence, shown beside it
- One District One Product (DPIIT) — odop.in; district specialities (Government of India)
- Geographical Indications Registry, IP India — ipindia.gov.in; registered GI products and their districts (Government of India)
- OpenStreetMap — “open in map” links only; no OpenStreetMap data is stored here (© OpenStreetMap contributors, ODbL)
Party symbols and flags on this site are original illustrations we drew ourselves, not the parties’ or the Election Commission’s own artwork. Whether Indian law actually permits a third party reproducing an official symbol’s specific artwork — as opposed to the generic idea of what it depicts — is a genuinely open question with no court ruling on point either way, so rather than resolve that ourselves we draw a likeness of each symbol from its public description or published form. If a party would like to confirm or provide its own artwork, we’d welcome hearing from them.
Known limitations
- Candidate affidavit details exist only from 2004, when affidavits became mandatory; earlier candidates carry name, party and votes only.
- Multi-member seats (1951, 1957 and a few later cases) list every member; margins are computed against the true runner-up.
- Deferred and countermanded polls are recorded separately from the main election they belong to.
- Assembly seats' reservation status is in the data but not yet shown as a badge (Lok Sabha seats have one).
- Party names are shown as the Election Commission recorded them for that election; mergers, splits and renames are not projected backwards.
- A handful of state-years with no usable boundary source render as a results table, with the reason stated on the page.
- The forecast applies swings you choose to the last result. It is a scenario builder, not a prediction.
What this site is not
Billion Ballots is not affiliated with, endorsed by or connected to the Election Commission of India, any government body, or any political party or candidate.
The party symbols shown are our own drawings, not official artwork. The Election Commission’s own publications remain the authoritative record; where this site and the Commission disagree, the Commission is right and we would like to hear about it.
Corrections & citation
Found an error?
Write to hello@billionballots.com. The page URL is enough — every seat has a permanent one — plus what you think is wrong; a source helps.
Citing this site
Billion Ballots, “Varanasi — Lok Sabha 2024”, billionballots.com/lok-sabha/2024/UP-77/, accessed <date>.
Reusing the data
Results come from public government sources and may be used with acknowledgement to the Election Commission of India. Some boundary layers carry research-only or non-commercial terms (marked above), so there are no bulk downloads yet — ask before reusing the maps.
A peacock whose fanned tail is a seat chart: India’s national bird, every feather a block of seats. When the tail opens — on the homepage, or when you hover the mark in the header — it plays a results night: seats declared one by one, blocs forming, the largest bloc taking the house, then everything settling back to the brand. It is a real vector, not an image: the same three colour variables the site’s light/dark toggle uses recolour it anywhere it is mounted.
Built to be read, corrected and reused.
Fraunces · Libre Franklin · IBM Plex Mono — Next.js, D3 and a very large pile of Election Commission PDFs.
Built with Claude Code · hosted on Vercel