Open data
Add the leak we missed.
The whole dataset is one CSV file with 111 rows. There is no database, no login and no submission portal — just a file you can edit in the browser.
Three ways in, easiest first
Open an issue — no code needed
Paste the link and whatever you know. Use the new incident form — it asks for the fields in order and someone will transcribe it into the CSV. This is a completely legitimate way to contribute and it is how most rows should arrive.
Edit the CSV in GitHub's web editor
Click here, add your row at the bottom, and GitHub will open a pull request for you. No git, no local setup.
Clone and run it locally
Useful if you are adding several rows and want to see them render before you push.
git clone https://github.com/quantavil/examleaks.git
cd examleaks
bun install
bun run devWhat makes a row acceptable
- One citable public source. A named news report, a court order, an official notice, a commission finding or an RTI reply. Not a forum post, not a WhatsApp forward, not a YouTube claim, not an anonymous tip.
- A public examination. Government recruitment, entrance, eligibility or school-board tests. Private and corporate testing is out of scope.
- Organised failure. A leak, an answer-key sale, marks or OMR manipulation, impersonation rackets, remote access to exam terminals. One student copying is not an incident.
- No named individuals. Record the institution, the counts and the outcome. Do not add the names of accused people, even when the source prints them.
The most valuable contribution is not a new row. It is a verdict added to an old one. Most entries here were sourced from articles written days after the leak, so convictions handed down years later are missing across the board. If you can point to a judgment for a case from 2013 or 2017, that materially improves the dataset in a way a new 2026 row does not.
Filling in the fields
The full column dictionary is on the method page. The rules that actually trip people up:
- Blank beats a guess. An empty
arrestscell means "the source does not say". Never write0unless the source explicitly reports none. - Pick the status honestly.
Confirmedrequires an official finding — a cancellation citing a leak, a court order, a police confirmation. A newspaper reporting that an opposition party alleged a leak isAlleged. If officials investigated and rejected it, that isDenied, and the row still belongs in the file. - Say so when the date is fuzzy. If the source gives only a year, use
YYYY-01-01and write “Only year of exam known, Jan placeholder.” in the note. The site reads that sentence and renders the date as≈ YYYYinstead of pretending to a precision nobody established. - Any death figure needs its caveat.
linked_deathsmay never be filled in without adeaths_noteexplaining whose deaths, how contested the link is, and what the number does not mean. - Use the next free ID. Sequential, zero-padded, never reused.
A worked example
One row, wrapped here for readability — in the file it is a single line:
PL-0111,2026-08-14,NDA (May2014-now),Example State Clerk Recruitment Exam 2026,Example Staff Selection Commission (ESSC),State,Example State (Capital City),Confirmed,Exam cancelled + Arrests-FIR,"Question paper circulated on Telegram 40 minutes before the shift began; the board cancelled that shift the same evening and police arrested 4. Day known.",4,,52000,,,The Example Herald,https://example.com/article,High Note the quoting: the free-text note contains commas, so it is wrapped in double
quotes. A literal quote inside a quoted field is doubled ("").
What happens to your pull request
- A preview build parses the CSV and rebuilds the site — a malformed row fails immediately, before anyone reviews it.
- A maintainer opens your source and checks it says what the row says. Rows are rejected for overstating the source far more often than for anything else.
- Once merged, your incident gets a permanent page at
/incident/PL-XXXX, a share card, and a place in every chart and download on the site.
Gaps we know about
If you are looking for somewhere useful to start:
- Pre-2015 state recruitment exams. The record thins out badly before the mid-2010s and the drop is far too steep to be real.
- Regional-language reporting. Sources here skew to English national dailies. Incidents covered only in Hindi, Marathi, Telugu, Tamil, Bengali or Odia press are systematically missing.
- States with no entries at all. See the bottom of the states page. Empty almost certainly means unfound, not clean.
- Outcomes after 2023. Convictions, acquittals, quashed recruitments, exam boards dissolved.
Reporting a problem with the site itself
Broken charts, a link that 404s, an accessibility failure, a bad translation of a figure — open an issue. The code is GPL-3.0-licensed and the data is CC BY 4.0; fork either freely.