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.
Plain CSV files, UTF-8, with a header row.
Hugging Face dataset →
| File | Holds | Rows | Size | SHA-256 |
|---|---|---|---|---|
| electoral_bonds.csv | One row per bond: date, number, value, purchaser as printed, the party that encashed it, and the company where matched | 18,871 | 3.3 MB | 13679d814ee831b32cdd1ac177afb9b4f7fec5b06d5bd99685ae98120c47815c |
| bond_buyers_by_company.csv | One row per matched company, with all its spellings folded together | 624 | 104 KB | b9650b1132a965cc212fa859ccb6aa42e113dc4140cfecaf2c7c75645138e062 |
| bond_flows_by_company_and_party.csv | Purchaser name × party, with bonds and rupees | 1,689 | 175 KB | 05527afcaabea48c6630b5fa00eebd72d7f4f1e5312294c0724c9b8691e944b0 |
| bond_purchaser_resolution.csv | Every purchaser name and what the matching did with it | 1,316 | 108 KB | c9438846a6c77f5699a95ee81f97a067c1b51d8b221be150c7d7507bed31d89a |
| mineral_block_auctions.csv | MSTC auction results, with the matched company | 280 | 73 KB | 37de03fe2c2d434eb7289bc5f07b01c31d48c09a0ec8a4c343a5924237db2183 |
| coal_block_allocations.csv | Coal mine allocations, with the matched company | 178 | 30 KB | e54d7ff4cf03eee24be71d2b8cf91a44a17c430aa264dc9ab34a175eed5a09da |
| odisha_mining_leases.csv | Odisha lessee register, with the matched company | 212 | 29 KB | 2fc8808787593b578acf07970a38dd2f6994b372ea37e8d125e6338386fdbf84 |
| mining_firm_resolution.csv | Every mining firm name and what the matching did with it | 414 | 30 KB | 894de00d2f89a96e94c2911a8676f91404f82522f845f45503cc1a09d95b3280 |
The full method, with every rule and every column, is in METHODOLOGY.md.
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()
| 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 them | 18,741 |
| Purchaser names as printed by SBI | 1,316 |
| Names matched to exactly one company or LLP | 688 |
| Distinct companies those names belong to | 624 |
| Value bought by matched companies | ₹10,057.9 crore (83%) |
| MSTC mineral auction results | 280 |
| Coal mine allocations | 178 |
| Odisha mining leases | 212 |
| Company | Spellings | Bonds | ₹ crore |
|---|---|---|---|
| FUTURE GAMING AND HOTEL SERVICES PRIVATE LIMITED | 3 | 1,368 | 1,368.0 |
| MEGHA ENGINEERING & INFRASTRUCTURES LIMITED | 3 | 966 | 966.0 |
| QWIK SUPPLY CHAIN PRIVATE LIMITED | 1 | 410 | 410.0 |
| VEDANTA LIMITED | 2 | 429 | 400.6 |
| HALDIA ENERGY LIMITED | 1 | 395 | 377.0 |
| ESSEL MINING & INDUSTRIES LTD. | 1 | 238 | 224.5 |
| WESTERN U. P. POWER TRANSMISSION COMPANY LIMITED | 1 | 220 | 220.0 |
| MKJ ENTERPRISES LTD | 2 | 324 | 192.4 |
| MADANLAL LTD | 1 | 199 | 185.5 |
| BHARTI AIRTEL LIMITED | 1 | 183 | 183.0 |
| UTKAL ALUMINA INTERNATIONAL LIMITED. | 2 | 148 | 145.3 |
| DLF COMMERCIAL DEVELOPERS LIMITED | 1 | 130 | 130.0 |
| JINDAL STEEL LIMITED | 1 | 123 | 123.0 |
| B. G. SHIRKE CONSTRUCTION TECHNOLOGY PRIVATE LIMITED | 2 | 123 | 118.5 |
| DHARIWAL INFRASTRUCTURE LIMITED | 1 | 115 | 115.0 |
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.
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.