How Kenya Power’s planned-cut notices become the numbers on the map. Notices remain © Kenya Power; we publish the extracted facts with links to the source.
The map uses three words throughout: a notice is Kenya Power’s announcement, a planned cut is one scheduled interruption it lists, and hours cut is the measure.
Every scheduled hour of planned outage, added up. Big, busy places rise to the top. A 09:00–17:00 cut counts 8 hours, once for each place it touches.
Hours per 100,000 residents. The fair way to compare a big county with a small one. “2.3× Kenya” means 2.3 times the national rate. Places under 5,000 residents aren’t rated per resident: a few notices would make them look extreme.
How often Kenya Power named the place in a planned-outage notice, whatever the length. Good for “how often”, not “how long”.
Every planned cut links to its original notice. Found a wrong placement? Tell us; corrections re-apply archive-wide. About the project.
Kenya Power publishes planned-cut notices as images on X (@KenyaPower_Care) and as weekly PDFs on kplc.co.ke. PawaSwitch has every X notice since March 2023 and the weekly PDFs since August 2026. Notices follow a stable grammar: region/county headers → AREA: blocks → date/time → a free-text locality list ending “& adjacent customers”. Planned only: absence of a notice never means the power stayed on.
Each post’s images are processed together by a vision language model bound to a strict JSON schema, so text that flows across images is reassembled. Extraction is verbatim: KPLC’s wording, including their errors, is preserved, with the source text kept on every planned cut. A hand-labelled golden set gates any bulk run at ≥98% event recall and ≥99% exact date+time accuracy; failures go to a human review queue, not into the dataset.
The notice header is the ground truth. Each place is searched only inside the county the notice prints (or, for a region-only notice, that region’s counties), never nationwide. Names are normalised (Mkt→market, S/Centre→shopping centre, T/Fact→tea factory…) and matched against a gazetteer built from OpenStreetMap, GeoNames, the 2017 school census and the Kenya Master Health Facility List.
A match must agree on the distinctive part of the name, its numbers and its kind of place: “Soin Hospital” never matches a bare “Hospital”, “Ibis Farm” is not “Ibis Hotel”, and a road is not the town it is named after. Places named alike are told apart by proximity to the notice’s other places, and a match far from the rest of its notice is rejected. A separate model then re-checks every placement. and counted in ward figures; the rest stay as text under the notice’s county.
County: the one printed on the notice. Only notices without a county get one inferred, on a clear majority of mapped places. When KPLC’s printed county contradicts the places listed (verified: “Maungu Town” filed under Tana River; Maungu is in Taita-Taveta), the planned cut is flagged and both are kept, never silently fixed. County rankings depend on the notice headers, not on mapping: counting each notice once for its printed county gives the same leading counties.
Random samples of what the site publishes (mapped places and county listings) are reviewed one by one against the source notice. Every error found is fixed across the whole archive and becomes a permanent test, then a fresh sample is drawn. Since the last fix: 600 of 600 correct, so at least 99.5% of published placements are right at 95% confidence.
Notices: planned cuts touching the geography (each counted once on roll-up). Hours cut: scheduled duration summed over the planned cuts touching the geography, meaning scheduled time without power somewhere in it, not homes-without-power hours. Hours cut per resident: hours cut per 100,000 residents; places under 5,000 residents aren’t rated. Customer-hours (est.): Σ duration × population of touched wards, an upper-bound exposure index. PawaScore (0 to 100, higher = more reliable): within a level and period, over places with at least one planned cut, burden = 0.5·z(hours/100k) + 0.3·z(notices) + 0.2·z(avg duration), score = 100·(1−percentile rank).
“× the national rate” compares like with like. A planned cut that touches wards in two counties counts in both counties’ figures, so the national rate for counties is built the same way (all county hours cut ÷ Kenya’s population) and averages 1× across counties. The national totals on the Story and the map’s time bar count each planned cut once.
Measured from each post’s exact time to the outage’s start. This is the X channel only: KPLC’s weekly PDFs on kplc.co.ke can come earlier, so it is not “how much warning anyone had”.
| Year | Median lead | Posted <12 h ahead | Posted after start |
|---|---|---|---|
| 2023 | 12.3 h | 28% | 2.5% |
| 2024 | 12.4 h | 25.3% | 2% |
| 2025 | 14.2 h | 6.2% | 1.5% |
| 2026 | 14.3 h | 2.8% | 0% |
314 screenshots of notices from January 2022 to February 2023 survive without their posts, mostly one image per post where the notice had several. Each day’s notice is rebuilt from its pages, and its placements were checked like the rest (S3-ARCHIVE-300). But the archive is incomplete and uneven by county (counties listed on later pages are under-represented), so its 1,133 planned cuts appear in histories and search(flagged partial_archive), and never in totals, rankings, trends or rates.
Counties carry the KNBS 2019 census count. A constituency carries its census count when a KNBS sub-county is the same territory (same name, land area within 25%): 138 of 290. The other constituencies in a county share what is left of the county’s count, split by WorldPop 100 m (2020, constrained). No ward census table exists, so every ward is its constituency’s figure split by the same raster. Each profile says which kind its population is; treat modelled per-capita figures as estimates.
Planned cuts only, so evening load-shedding and unplanned faults never appear, and a place can look fine here and still have poor supply · “adjacent customers” is inherently fuzzy (areas are matched places and hulls, never exact service polygons) · ward figures are minimums, and fuller in well-mapped cities than in rural counties · 151 planned cuts name no county and no mappable place, so they count nationally but in no county · the grid layer is indicative (KPLC’s 2014–17 network snapshot + OSM), so no planned cut is tied to a feeder · KPLC typos are preserved verbatim and flagged when contradicted · boundaries are the 2013 IEBC delimitation.