Party donations, read from Form 24A

Donations above ₹20,000 reported by political parties to the Election Commission, 2022–2026

Every political party in India has to tell the Election Commission about each donation above ₹20,000, on a form called 24A. The Commission puts these reports on its website. Most of them are scans of printed pages, often stamped and signed, sometimes slightly crooked, and you cannot search them or add them up.

This release reads those scans and turns the donation rows into a table. The hard part was not reading them but knowing when the reading is right. A misread digit or a name that runs into the next line could put the wrong amount next to a real person's name, so every row had to earn its place.

Only two kinds of rows are published. Either the rows of a page add up exactly to the total the party printed, or the same donation, with the same amount and a similar name, also appears in the transcription that ADR / MyNeta made by hand. Of 38,560 rows read, 22,822 passed. The other 15,738 are left out.

Nothing personal beyond the name goes out. PAN numbers were used only to tell a person from a company and were never saved, and addresses were dropped.

Download

Plain CSV files, UTF-8, with a header row.
Hugging Face dataset →

FileHoldsRowsSizeSHA-256
form24a_donations.csvOne row per verified donation: year, party, donor name as read, amount, mode, date, how it was verified, source PDF and page22,8224.5 MB4737b190aadb899c4ed6aeea02b38c9c0d178a07b7118d1f4e7a16762c169974
form24a_documents.csvOne row per Form 24A report: rows read, their sum, the total the party printed, and whether they match15118 KB52fa41bee8a90311328933ac390d6fd69e82ef963d9fb0044fb5f84d5c51a6a8
electoral_trust_documents.csvThe same check for electoral trust reports536 KBb2d1e8f98fe7cce2394d55da4961bd18ce32262f4166b1de4fdaac2810982e39
party_expenditure_documents.csvThe same check for party election expenditure statements28146 KB4066f3d73b4649d3fa33a06a4b049a53c5f50edf4035f8d1aca47d00a261b2a6

The full method, with every rule and every column, is in METHODOLOGY.md. The original PDFs are in the source documents release.

Quick start

import duckdb
duckdb.sql("""
  SELECT fy, party_from_filename, count(*) AS rows, sum(amount_rs) / 1e7 AS crore
  FROM read_csv('hf://datasets/shreyamm/party-donations-form24a/data/form24a_donations.csv')
  GROUP BY ALL ORDER BY crore DESC LIMIT 10
""").show()

What is in it

Count
Verified donation rows22,822
Their total₹5,539.7 crore
Form 24A reports they come from63
Rows where the whole page adds up to the printed total746
Rows that agree with the ADR / MyNeta transcription22,076
Rows whose name text should be checked before quoting6,166

By year

Financial yearRows₹ crore
2022-238,975863.8
2023-247,8271,648.2
2024-255,9182,701.1
2025-26102326.7

By party (verified rows only, so these are lower bounds)

PartyRows₹ crore
Bharatiya Janata13,1024,192.0
Dravida Munnetra Kazhagam530590.4
Indian National Congress2,710234.7
All India Trinamool Congress554189.9
Telugu Desam26786.9
All India Anna Dravida Munnetra Kazhagam5167.0
Aam Aadmi3,80363.7
Biju Janata Dal460.0
Yuvajana Sramika Rythu Congress416.0
Janasena7113.7
Indian Union Muslim League1,1777.8
Jannayak Janta1303.1

How it was read

  1. Each page was turned into an image at 200 dpi and read with Tesseract. Reports that were typed rather than scanned were read from their text directly.
  2. Words were grouped into rows by their position on the page. A row is kept when it has an amount of at least ₹1,000 in the amount column; the serial number, name, mode and date are read from the same line.
  3. Every total the party printed was collected, and the rows of each section were added up and compared with it.
  4. A report is only read once every one of its pages has been read. Half-read documents are skipped.

How it was checked

Limitations of this release