Electoral bonds, matched to companies

Every bond SBI disclosed in March 2024, tied to the company that bought it and the party that cashed it

In March 2024, after the Supreme Court struck down the electoral bond scheme, the State Bank of India had to hand over the details of every bond it had sold and every bond a political party had cashed. The Election Commission put them up as two long PDFs. Because both lists carry the bond number, a purchase can be followed to the party that encashed it.

What the PDFs do not tell you is which company is behind a name. SBI printed the names as they sat in its system, and the printout cuts them off at about 35 characters. FUTURE GAMING AND HOTEL SERVICES PR and FUTURE GAMING AND HOTEL SERVICES PVT LTD are the same company, and so is a third spelling, but nothing in the PDF says so. Add the three up and you get ₹1,368 crore, the figure that was widely reported. Look at any one of them alone and you do not.

This release ties each purchaser name to a company registration number (CIN) from the Ministry of Corporate Affairs register, and it does so only when exactly one company fits. When two companies could fit, the name is left unmatched and the reason is written next to it. I would much rather leave a name blank than attach it to the wrong company.

The same matching was run on three small mining records: MSTC's mineral block auction results, the Ministry of Coal's list of coal mine allocations, and Odisha's register of mining leases. They are in this release too.

This is part of a larger effort of mine to make the money side of Indian public life easier to read, from tenders (Project Diaphanum) to party funding. The bonds were the natural place to test the matching, because the totals are already known and anything wrong would show.

Download

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

FileHoldsRowsSizeSHA-256
electoral_bonds.csvOne row per bond: date, number, value, purchaser as printed, the party that encashed it, and the company where matched18,8713.3 MB13679d814ee831b32cdd1ac177afb9b4f7fec5b06d5bd99685ae98120c47815c
bond_buyers_by_company.csvOne row per matched company, with all its spellings folded together624104 KBb9650b1132a965cc212fa859ccb6aa42e113dc4140cfecaf2c7c75645138e062
bond_flows_by_company_and_party.csvPurchaser name × party, with bonds and rupees1,689175 KB05527afcaabea48c6630b5fa00eebd72d7f4f1e5312294c0724c9b8691e944b0
bond_purchaser_resolution.csvEvery purchaser name and what the matching did with it1,316108 KBc9438846a6c77f5699a95ee81f97a067c1b51d8b221be150c7d7507bed31d89a
mineral_block_auctions.csvMSTC auction results, with the matched company28073 KB37de03fe2c2d434eb7289bc5f07b01c31d48c09a0ec8a4c343a5924237db2183
coal_block_allocations.csvCoal mine allocations, with the matched company17830 KBe54d7ff4cf03eee24be71d2b8cf91a44a17c430aa264dc9ab34a175eed5a09da
odisha_mining_leases.csvOdisha lessee register, with the matched company21229 KB2fc8808787593b578acf07970a38dd2f6994b372ea37e8d125e6338386fdbf84
mining_firm_resolution.csvEvery mining firm name and what the matching did with it41430 KB894de00d2f89a96e94c2911a8676f91404f82522f845f45503cc1a09d95b3280

The full method, with every rule and every column, is in METHODOLOGY.md.

Quick start

import duckdb
duckdb.sql("""
  SELECT registered_name, round(total_rs / 1e7, 1) AS crore
  FROM read_csv('hf://datasets/shreyamm/electoral-bonds-and-mining-resolved/data/bond_buyers_by_company.csv')
  ORDER BY total_rs DESC LIMIT 10
""").show()

What is in it

Count
Bonds bought (12 April 2019 to 11 January 2024)18,871
Value of those bonds₹12,155.5 crore
Bonds followed to the party that encashed them18,741
Purchaser names as printed by SBI1,316
Names matched to exactly one company or LLP688
Distinct companies those names belong to624
Value bought by matched companies₹10,057.9 crore (83%)
MSTC mineral auction results280
Coal mine allocations178
Odisha mining leases212

Largest buyers, all spellings counted together

CompanySpellingsBonds₹ crore
FUTURE GAMING AND HOTEL SERVICES PRIVATE LIMITED31,3681,368.0
MEGHA ENGINEERING & INFRASTRUCTURES LIMITED3966966.0
QWIK SUPPLY CHAIN PRIVATE LIMITED1410410.0
VEDANTA LIMITED2429400.6
HALDIA ENERGY LIMITED1395377.0
ESSEL MINING & INDUSTRIES LTD.1238224.5
WESTERN U. P. POWER TRANSMISSION COMPANY LIMITED1220220.0
MKJ ENTERPRISES LTD2324192.4
MADANLAL LTD1199185.5
BHARTI AIRTEL LIMITED1183183.0
UTKAL ALUMINA INTERNATIONAL LIMITED.2148145.3
DLF COMMERCIAL DEVELOPERS LIMITED1130130.0
JINDAL STEEL LIMITED1123123.0
B. G. SHIRKE CONSTRUCTION TECHNOLOGY PRIVATE LIMITED2123118.5
DHARIWAL INFRASTRUCTURE LIMITED1115115.0

How names were matched

Each name is cleaned up first: upper case, punctuation dropped, PRIVATE and LIMITED shortened to PVT and LTD, a leading M/S removed. A second, letters-only form takes care of SBI's line breaks, which turn LIMITED into LI MITED. Then the rules below are tried in order, and the first one that finds exactly one company wins.

  1. Same name as one registered company.
  2. Same name once spacing, punctuation and abbreviations are ignored. If this finds more than one company, the name is refused right here.
  3. A former name of one company, as recorded by GLEIF. This catches companies that bought bonds under an old name.
  4. Same name as one LLP.
  5. A name SBI cut short, if it is long enough and only one registered name starts with it.
  6. Same name with a different legal form (Ltd for Pvt Ltd), but only when the name has at least two words that are not generic like Industries or Infra.

A match is also thrown out if GLEIF shows that the name used to belong to a different company. “Tata Motors Ltd” is the old name of one company and the current name of another, so a name like that cannot be placed in time without more information.

Some large names stay unmatched for this reason. Torrent Power, Zydus Healthcare and Piramal Enterprises each have more than one record in the register under the same name. A reporter can settle these from the company's annual report in a few minutes, but a rule should not guess.

How it was checked

Limitations of this release