An open archive of Indian public procurement, 2011–2026
Government tenders let us citizens know where our tax rupees get spent. Every tender in India must be published on an official e-procurement portal. The records are scattered over about forty portals, making scrutiny extremely inaccessible to the average citizen.
Diaphanum collects them into one place. This release holds 18.9 million tender notices and 8.8 million awards of contract from every Indian state and union territory, in open formats, open-sourced to make the rightful critique of the system of governance more accessible.
It builds on the archive of Sarthak Siddhant, which covers the central government well but is thin on the states. Diaphanum adds the states. When talking about open-sourcing public procurement data, it is impossible to do so without acknowledging the work of Sarthak Siddhant. My sincerest gratitudes to him for kickstarting a movement where citizens gather on digital platforms to collaborate actively on scrutiny of public data. Kudos.
This project initially began in June 2025, with the aim of gathering public procurement data from my home state, West Bengal. Since then, it has exceeded multiple versions of its scope, and I believe this is the right time to release the data gathered until now. In no way is Project Diaphanum complete: there are several more organisations to examine, and closer inspection is required in the tallies of some states, but what good is this data if it sits on a hard disk and is not used to gain insights into the proceedings that build and run our country.
Columnar, compressed (zstd), readable in Python, R, DuckDB, Spark and most other tools.
Same tables as the SQLite files below.
Hugging Face dataset →
combined/ – Sarthak's archive and ours stacked, with a source column (sarthak or netalink). Start here. MEGAours/ – only the rows added by Diaphanum. MEGAThe raw databases we built, one per kind of record, zipped. They hold the rows added by Diaphanum. Every file has a SHA-256 so you can check your download.
| File | Holds | Size | SHA-256 |
|---|---|---|---|
| AOC-mine.sqlite.zip | Awards: aoc_tenders, aoc_details, hitl_bidders, l1_bidders | 2.45 GB | ea3db67d2db082946885b8dc6a73fb33b7e9ff55bacf452a3f3e529e11e85db3 |
| tenders_vps-mine.sqlite.zip | Notices: tenders, tender_details, tender_details_extra | 5.19 GB | fbcb3ec11596abefd472227430acb3eb1a12dcf402270b7dc25f1c749c00cad3 |
Also on MEGA: SQLite folder.
The whole release (Parquet, SQLite, checksums, this overview) is also on MEGA, in case Hugging Face is unavailable: MEGA mirror, full release →
import duckdb
duckdb.sql("""
SELECT source, count(*)
FROM read_parquet('combined/aoc_tenders.parquet')
GROUP BY 1
""").show()
| Earlier archive | Added by Diaphanum | Combined | |
|---|---|---|---|
Award rows (aoc_tenders) | 4,921,960 | 3,850,760 | 8,772,720 |
Notice rows (tenders) | 3,952,191 | 14,987,241 | 18,939,432 |
| Bidder rows of published awards | – | 11,064,270 | 11,064,270 |
| Tenders with a bid list but no published award | – | 3,446,792 | 3,446,792 |
tenders, tender_details, tender_details_extra): what was put out to tender, by whom, when, for how much, where, in which category.aoc_tenders, aoc_details): published awards of contract, with organisation, value, date and winner.award_bidders): every bidder on those awards, with status and bid value where the portal shows it.bid_lists_no_published_award): tenders where the portal shows who bid but never published an award.inferred_awards, 2,928,577 rows): for those tenders, the likely winner, chosen by L1 rank (1,083,948), sole financial bidder (1,745,259) or lowest price (99,370). Kept in a separate table and never mixed with published awards. Each row is marked inferred from bid list; award not published. The lowest bidder does not always get the contract.Counts for the state portals. Earlier is what Sarthak's archive already had; Added is what Diaphanum added. “Bid lists” counts tenders with bidders listed but no published award. Notices are counted by the state named as the organisation.
| State / UT | Awards | Bid lists | Notices | ||||
|---|---|---|---|---|---|---|---|
| Earlier | Added | Total | Added | Earlier | Added | Total | |
| West Bengal | 785,197 | 676,422 | 1,461,619 | 474,539 | 4,438 | 2,443,670 | 2,448,108 |
| Maharashtra | 537,695 | 665,347 | 1,203,042 | 508,973 | 2,316 | 2,189,731 | 2,192,047 |
| Uttar Pradesh | 151,213 | 286,933 | 438,146 | 591,456 | 7,572 | 2,191,304 | 2,198,876 |
| Kerala | 358,799 | 484,020 | 842,819 | 77,346 | 2,210 | 1,417,842 | 1,420,052 |
| Rajasthan | 10,423 | 56,461 | 66,884 | 573,408 | 4,779 | 1,033,875 | 1,038,654 |
| Tamil Nadu | 139,936 | 137,664 | 277,600 | 127,347 | 2,459 | 824,095 | 826,554 |
| Jammu and Kashmir | 2,692 | 4,236 | 6,928 | 348,904 | 2,522 | 1,074,337 | 1,076,859 |
| Madhya Pradesh | 248,689 | 116,961 | 365,650 | 76,377 | 2,586 | 624,346 | 626,932 |
| Haryana | 162,327 | 127,095 | 289,422 | 98,100 | 2,060 | 622,037 | 624,097 |
| Odisha | 116,148 | 100,039 | 216,187 | 77,124 | 2,432 | 587,396 | 589,828 |
| Andhra Pradesh | 73,903 | 582,789 | 656,692 | 0 | 476 | 19,876 | 20,352 |
| Punjab | 133,675 | 61,035 | 194,710 | 30,519 | 2,781 | 350,392 | 353,173 |
| NCT of Delhi | 10,063 | 7,456 | 17,519 | 264,866 | 886 | 388,946 | 389,832 |
| Telangana | 2,566 | 322,034 | 324,600 | 0 | 1,058 | 25,388 | 26,446 |
| Himachal Pradesh | 41,366 | 40,120 | 81,486 | 61,551 | 892 | 208,430 | 209,322 |
| Bihar | 0 | 68,652 | 68,652 | 0 | 0 | 150,690 | 150,690 |
| Jharkhand | 17,263 | 21,535 | 38,798 | 19,197 | 427 | 155,094 | 155,521 |
| Chandigarh UT | 14,804 | 14,802 | 29,606 | 36,000 | 300 | 115,123 | 115,423 |
| Tripura | 39,546 | 25,370 | 64,916 | 3,182 | 237 | 76,696 | 76,933 |
| Uttarakhand | 15,452 | 11,493 | 26,945 | 22,433 | 549 | 112,593 | 113,142 |
| Chhattisgarh | 0 | 2 | 2 | 0 | 0 | 134,022 | 134,022 |
| Assam | 26,991 | 20,012 | 47,003 | 9,511 | 277 | 80,619 | 80,896 |
| Goa | 11,071 | 9,297 | 20,368 | 6,783 | 170 | 31,482 | 31,652 |
| Ladakh UT | 2,665 | 1,530 | 4,195 | 15,801 | 106 | 40,974 | 41,080 |
| Puducherry UT | 10,010 | 5,836 | 15,846 | 2,858 | 65 | 22,335 | 22,400 |
| Andaman and Nicobar Island | 1,753 | 982 | 2,735 | 14,075 | 132 | 24,927 | 25,059 |
| Gujarat | 0 | 440 | 440 | 0 | 0 | 16,766 | 16,766 |
| Dadra and Nagar Haveli (UT) | 998 | 819 | 1,817 | 1,444 | 10 | 8,007 | 8,017 |
| Daman and Diu | 476 | 212 | 688 | 1,356 | 25 | 4,827 | 4,852 |
| Arunachal Pradesh | 284 | 395 | 679 | 888 | 5 | 3,488 | 3,493 |
| Lakshadweep UT | 39 | 196 | 235 | 1,917 | 10 | 3,669 | 3,679 |
| Meghalaya | 215 | 183 | 398 | 206 | 22 | 1,957 | 1,979 |
| Sikkim | 93 | 76 | 169 | 317 | 6 | 845 | 851 |
| Nagaland | 139 | 134 | 273 | 221 | 4 | 741 | 745 |
| Mizoram | 54 | 55 | 109 | 93 | 2 | 475 | 477 |
| Manipur | 157 | 127 | 284 | 0 | 11 | 246 | 257 |
| Karnataka | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Total | 2,916,702 | 3,850,760 | 6,767,462 | 3,446,792 | 41,825 | 14,987,241 | 15,029,066 |
It is important to point out that Karnataka was not a part of the scrape because it already has an API key that allows citizens to access the data. It is very pleasant to see governments such Karnataka prioritizing open-data ventures in India.
Every record was read from an official government e-procurement portal, and every added row carries the URL of the page it came from, so any record can be checked against its source. Only publicly accessible pages were used. Nothing is login-only, paid or leaked.
The e-procurement system of the National Informatics Centre, used by about 30 states and union territories:
West Bengal, Maharashtra, Uttar Pradesh, Kerala, Tamil Nadu, Madhya Pradesh, Haryana, Odisha, Punjab, Rajasthan, Delhi,
Jammu & Kashmir, Himachal Pradesh, Jharkhand, Uttarakhand, Assam, Tripura, Goa, Chandigarh, Puducherry, Ladakh,
Andaman & Nicobar, Dadra & Nagar Haveli, Daman & Diu, Lakshadweep and the north-eastern states.
For example wbtenders.gov.in, mahatenders.gov.in, etender.up.nic.in,
etenders.kerala.gov.in, tntenders.gov.in.
| State | Portal |
|---|---|
| Telangana | tender.telangana.gov.in |
| Andhra Pradesh | tender.apeprocurement.gov.in |
| Chhattisgarh | eproc.cgstate.gov.in |
| Bihar | eproc2.bihar.gov.in |
| Gujarat | tender.nprocure.com |
| Rajasthan | sppp.rajasthan.gov.in |
The earlier archive was scraped from the Central Public Procurement Portal, eprocure.gov.in.
See its page for details.
TS_ Telangana, AP_ Andhra Pradesh, CG_ Chhattisgarh, GJNP_ Gujarat.eprocure.gov.in/eprocdashboard) at about 100% for every GePNIC state, except Manipur (7%) and Ladakh (97%).PRAGMA quick_check.The release cannot be deemed complete. There are clearly many gaps, as seen in the State-wise distribution table, with some states having much less tenders than expected. A closer look into these topics is necessary.
Licence: CC BY 4.0. Use it for anything, including commercial work, but credit Project Diaphanum and, for the earlier rows, Sarthak Siddhant.
Cite as: Project Diaphanum (2026). Indian public procurement, Release R1. https://project-diaphanum.shreyam.me/
Errors, questions, findings: shreyammandal001@gmail.com
Project Diaphanum · Release R1, 2026-11-09