# Bengaluru BBMP Road Contracts — Dataset

A snapshot of awarded BBMP road, drain, and asphalting contracts, mapped to wards,
with the winning contractor named where the public record publishes one.

## Files

- **dataset.csv** — flat, one row per ward-placement (see "Row counts" below).
- **dataset.json** — the same data, keyed by ward number, preserving structure.

## Where this comes from

- **Contract records:** Karnataka Public Procurement Portal (KPPP), awarded works.
- **Ward boundaries & locality schedule:** BBMP's 2023 final 225-ward delimitation,
  obtained from OpenCity's public-domain ward-delimitation dataset.
- **Scraped:** 30 June 2026. **Covers:** contracts published 21 August 2023 –
  1 April 2026.

This is a one-time snapshot, not a live feed. It is not updated.

## Why it says BBMP, not GBA

BBMP (Bruhat Bengaluru Mahanagara Palike) awarded these contracts. It was
dissolved when the Greater Bengaluru Authority (GBA) became operational on
2 September 2025. The wards here are the old BBMP 225, which is what the contracts
were filed under — not the new GBA ward structure.

## Row counts

- **1,877 rows** in the CSV.
- **1,734 unique contracts.** A contract that names several wards appears once per
  ward, so the row count is higher than the unique-contract count. Deduplicate by
  `tender_id` to get unique contracts.
- **131 contracts** were filed by BBMP with no ward number; these carry a blank
  `ward_number`.

## Known gaps (read before drawing conclusions)

- **~35% name no winner.** 610 of the 1,734 contracts publish no winning
  contractor and no winning bid in the public record. `winner_name` and
  `winning_bid_value` are coupled — where one is blank, so is the other. This is a
  gap in the source record, not in the export.
- **At least one impossible figure.** Tender 206291 records a ₹842.31 crore bid
  against a ₹25.4 lakh estimate — a likely data-entry error, left in the data
  rather than deleted. Treat outliers with suspicion and check against KPPP.
- **A low bid vs. estimate is not proof of anything.** The figures show what was
  awarded against the government's estimate; they don't establish wrongdoing.

## Fields

| Field | Meaning |
|---|---|
| `ward_number` | BBMP ward (1–225); blank if BBMP filed it untagged |
| `tender_id` | KPPP tender ID — the stable key; dedup on this |
| `tender_number` | KPPP tender reference number (human-lookup key) |
| `title` | Work description as filed |
| `dept_code` | Department code |
| `location` | Location text as filed |
| `work_category` | Work category as filed |
| `status` | Tender status (all "Awarded" in this set) |
| `ecv_estimated_value` | Government's estimated cost, in rupees |
| `winner_name` | Winning contractor; blank if not published |
| `winning_bid_value` | Winning bid, in rupees; blank if not published |
| `published_date` | Publication date as filed |

Amounts are in rupees. 1 lakh = ₹1,00,000; 1 crore = ₹1,00,00,000.

## Licence

Public domain. The underlying government records are already public; this
compiled dataset adds no restrictions. No permission or attribution required,
though a link back helps others find the originals.

## Verify anything

Any contract can be looked up on KPPP by its `tender_number` (free, no account).
Found an error? Write to transparency.foundation@proton.me with the tender ID and
what looks wrong.
