Methodology

How Mumbai Roads Monitor turns BMC's public road data into the numbers on the site. Every rule here is implemented in code under src/lib/data/; the reasoning behind each choice is in decisions.md. Figures quoted are from the 19 October 2026 snapshot.

Where the data comes from

We download everything once a day at about 08:00 IST. We do not edit BMC's values. We only tidy contractor names (so "M/s N.C.C Ltd" and "M/s NCC Ltd. W-421" count as one company), standardise ward codes, and set aside dates that are obviously wrong (see Dates). "Today" always means today's date in India.

Dates

Road statuses

Each road gets one status, worked out from BMC's own status and dates every time the page loads.

Map colour Status Rule
Red Overdue BMC says In Progress, today is after the end date, and BMC's progress data does not show the road finished.
Blue Awaiting closeout BMC says In Progress and the end date has passed, but BMC's progress data shows the final concrete layer (PQC) at 100%, or records a PQC completion date that is not in the future while PQC is at least 95% or unreported. The work looks done; BMC has not marked it Completed.
Green Active BMC says In Progress and the end date has not passed. Roads with no end date at all (15 today, 10.9 km) are counted here because there is no deadline to be late against; their detail panel says so.
Orange Not Started BMC says Not Started. When the end date has also passed (49 roads today, 11.0 km) the road is flagged "deadline passed" but not counted as overdue — see below.
Cyan Completed BMC says Completed. BMC publishes no completion date, so we cannot say whether it finished on time.
Yellow On Hold BMC says On Hold.
— Deleted BMC says Deleted. Excluded from every map, count, and list, but kept in the history ledger and on the deleted roads page.

Why a progress photo does not count as finished. BMC uploaded its road photos in bulk, between July and August 2025. They appear on 67 of 185 active roads and even on a road BMC still lists as Not Started, so a photo shows a site visit, not completion. Photos are shown as "Progress photo (BMC)".

Why "Not Started, deadline passed" is not counted as overdue. End dates are season targets shared by batches of roads that are at very different stages, so a passed batch deadline does not show that this particular road was due. BMC's Not Started status is also often out of date: of the 9 past-deadline Not Started roads whose status later changed, 7 turned out to have start dates before their deadline (the other 2 were deleted). And BMC gives no reason when a road does not start (a pending permission, a utility shift). We show the flag on the map panel, in contractor dossiers, in the Not Started count's explanation, and in the CSV, but it does not raise anyone's overdue figures.

Why "overdue" is mostly "missed 31 May". 81 of today's 107 overdue roads had an end date of 30 or 31 May 2026, across 8 contractors. That is the deadline BMC set for those roads, so we report it as such; the site never claims it was the contractor's own contract date.

Numbers on the dashboard

Contractor dossiers

Monsoon deadline

The monsoon deadline is 31 May of the current year. After it passes, "Past monsoon deadline" lists overdue roads whose end date was on or before 31 May. From 1 January to 31 May the filter is empty until the new deadline passes; during that window the monsoon report lists roads due before the coming monsoon instead.

Map shapes

BMC's road layer is a separate dataset. We match each shape to a project by road name, ward, and start date. If that finds nothing, we try road name and ward alone, and accept it only when exactly one project fits (168 of 2,003 matched shapes today). Any ambiguous match is refused rather than guessed. 91% of listed projects (1,974 of 2,165) have a shape; the rest appear in lists and counts but not on the map. Identical repeated shapes are drawn once.

History ledger

public/data/ledger.json is the site's memory of BMC's records, started on 4 July 2026 and rebuilt from every daily snapshot since.

Records are matched across days using, in order: the same record and end date; the same road name, ward, and end date; the same record; the same road name and ward; and finally the same contractor, end date, and length with either the same ward or the same name (renames and ward corrections). Each step only pairs records that are unique on both sides.

Tenders

The Tenders tab lists open tenders from BMC's Roads & Traffic Department on mahatenders.gov.in. Ward-office works and the Traffic sub-department (parking, signals) are not included. Tenders are not linked to the roads on the map.

We read only the public listing and tender pages any visitor can open without logging in or solving a CAPTCHA: about ten requests a day, half a second apart, identifying the site by name. The portal's robots.txt asks automated clients not to crawl it; we treat a small daily read of public procurement notices as reasonable use and will stop if the portal asks.

The tab shows open tenders only. Tenders that closed since the last check are listed separately; a day with no open tenders says so; and if the tender data could not be loaded, the tab says it is unavailable rather than showing an empty list.

What this site cannot tell you

See bmc-data-gaps.md for the gaps in BMC's own reporting.