Methodology
Where the figures come from
Results come from the Election Commission of India. ECI takes past results pages offline, so the pipeline retrieves ECI's own pages from the Internet Archive's copies and records both addresses for every file. Every number on the site traces back to one of those files.
Provisional and final figures
Figures from the ECI results website are ECI's provisional figures, marked as such. Older results pages print no 'declared' status, so a copy archived after counting day is treated as declared. Provisional figures are replaced by the final figures from ECI's statistical reports when those are loaded, and any difference is logged publicly.
Elections with total votes only
For the Medak (2014), Warangal (2015), Narayankhed (2016), Palair (2016) and Jubilee Hills (2025) by-elections, the surviving ECI records give each candidate's total votes but not the split between EVM and postal votes. Those columns are left empty rather than estimated.
Copies of official files
ECI's website refuses automated downloads, so files are taken from unmodified archived copies. For Assembly 2023, ECI's statistical report is taken from OpenCity's public copy of ECI's file and checked seat by seat against every ECI results page the Internet Archive kept: in all 54 seats that can be compared, every candidate's total matches.
One page per person
Contests are linked to one person when the names match closely in overlapping seats, or when a distinctive full name and party match exactly elsewhere (a leader standing in two seats, or an MLA later standing for the Lok Sabha). Uncertain links wait for a person to check them. When two records are merged, the older address redirects to the person's page.
Definitions
Total votes are the votes for all candidates plus NOTA, EVM and postal combined. A candidate's vote share is their votes divided by total votes, NOTA included, which matches ECI's printed percentages. The margin is the winner's votes minus the runner-up's. Turnout is votes polled divided by electors, shown only where elector counts are loaded.
Checks before publishing
A result is published only after automated checks pass: the right number of contests; EVM plus postal votes equal each total; candidates plus NOTA equal the constituency total; ranks follow votes; party seat totals match the published tallies; computed vote shares match ECI's printed shares within 0.01 points; and every constituency has exactly one map shape. Elections that fail any check stay off the site.
Parties
Parties are identified by a stable ID across renames: the Telangana Rashtra Samithi, renamed Bharat Rashtra Samithi, is one party throughout, and each result keeps the name used at the time. Party colours follow convention and every chart also names the party, so colour is never the only cue.
Boundaries and districts
Constituency shapes come from DataMeet's boundary data, scraped from ECI's polling-station site, with each name checked against ECI's list. Parts of the 2008 shapes that are now in Andhra Pradesh are clipped off, Lok Sabha constituencies are built from their Assembly segments, and current districts are matched by area using OpenStreetMap boundaries. Boundaries are approximate.
Telugu names
Constituency, district and party names in Telugu come from Wikidata and OpenStreetMap and are being checked by a Telugu reviewer. Candidate names are shown as ECI printed them in English until verified Telugu names are available.
The next election: countdown and head to head
The countdown runs to the end of the Assembly's term: under Article 172(1) of the Constitution an Assembly lasts five years from the date appointed for its first meeting, so the election is due before then. When the Election Commission of India announces the schedule, the clock counts to the first poll day. Contenders are chosen by one rule: a party that won at least 5 seats in the latest Assembly election, or polled at least 10% of the vote in the latest Assembly or Lok Sabha election. Straight fights are seats where two parties finished first and second; close seats are those lost by less than 5% of the votes cast. Every figure comes from published results. Leaders are each party's head in Telangana and its leader in the Assembly, with a source for each role; photos are openly licensed Wikimedia Commons files, shown in greyscale for everyone alike, and leaders without such a photo show initials.
The public pulse on X
Every morning a scheduled job reads the previous day's public posts on X about the three parties with the largest vote share in the latest Assembly election, through X's API. Each party's search is built from one template: its names and listed leaders, together with Telangana, Hyderabad or a Telangana leader, leaving out reposts, promoted posts and the parties' and government's own accounts. Share of conversation is each party's share of the posts the three searches match. For sentiment, up to 100 posts per party are read, cut to one post per account with copied text collapsed, so organised campaigns count less; an open-source AI model (mDeBERTa, MIT licence) running on our own server judges whether each post praises or criticises the party, and counts it as neutral when it is not at least 70% sure. Net sentiment is positive minus negative posts as a share of those scored, from -100 to +100, withheld below 30 posts. No post text, account or individual label is stored: only each day's totals. The mood word uses the same cut-offs for every party: Warm (+25 or more), Slightly warm (+8 to +25), Neutral (between -8 and +8), Slightly critical (-8 to -25), Critical (below -25). Top posts are the most engaged original posts, one per account, shown through X's embeds. Separately, each listed party leader with an X account has their three most engaged original posts of the past week shown, by the same rule for every leader; their posts are not counted in the pulse. People's issues are counted from the same public posts with a published word list per issue (in English, Telugu and romanised Telugu), and trending hashtags by the number of accounts using them, each account once a day; only shares and ranks are published. This is the conversation on X, not a poll. It pauses during the 48-hour silence before polling and while exit polls are banned.