Provenance
Data, sources and known gaps
Kuramap is only worth using if you can check it. This page says where every number on the site comes from, how it is put together, what we already know is wrong with it, and what you are free to do with it.
Coverage
What's in it
Kuramap covers the 2022 electoral cycle (2022 General Election): every county, constituency and ward, and the elected seat or seats attached to each. Boundaries are versioned by cycle, so a future delimitation is added alongside these rather than overwriting them.
- Counties
- 47
- Constituencies
- 290
- Wards
- 1,450
- Elected seats
- 1,881
Data as of 18 July 2026, fetched from the public API.
Sources
Where it comes from
Two things are needed to map a leader to a place: the shape of the place and its official identity. No single published dataset carries both, so Kuramap takes geometry from one place and codes and names from another.
| Source | What we take from it | Licence |
|---|---|---|
| IEBC - Registered Voters per County Assembly Ward, 2022 General Election | The official county / constituency / ward codes and names for the 2022 cycle - the register we treat as authoritative for identity. | Kenyan government publication; we take facts (codes and names). |
| geoBoundaries / COD-AB-KEN - Kenya Subnational Administrative Boundaries (HDX) | County and constituency geometry, with OCHA P-codes. It carries no IEBC electoral codes. | CC BY, as shipped on HDX. |
| Administrative Wards in Kenya (HDX) | Ward geometry. COD-AB-KEN has no admin3 layer for Kenya, so the wards come from a separate dataset keyed on DHIS2 UIDs. | As published on HDX. |
| Representatives - published sources, compiled offline and reviewed by hand | Names, roles and terms for the people holding each seat. Governors come from the Council of Governors; senators, woman representatives and MPs from Wikipedia's listings for the 13th Parliament and the Senate; MCAs from Kenya Gazette notices. Every row records the source URLs it came from. | Facts from published sources; our compilation is CC BY 4.0. |
Methodology
How it's built
Boundary files are downloaded from their publishers, normalised to EPSG:4326 with a fixed set of properties, and loaded into PostGIS. The ward layer carries no link to its parent constituency, so each ward is attached to the constituency whose polygon it overlaps most - a spatial join between two layers of different provenance. That step is the origin of one of the defects listed below.
Because neither boundary source carries IEBC electoral codes, a crosswalk matches our regions to the IEBC register by published name, not by slicing identifiers apart. That is deliberate: our constituency P-codes look like they embed the electoral code, and for a handful of constituencies they disagree with the register - a bug that would seat a real MP on a neighbouring constituency while every count still looked complete.
Representatives are not scraped live. The site never updates itself: rows were compiled offline from the published sources in the table above, triaged by a person, and imported in reviewed batches, with the source URLs kept alongside each row. That means a seat can be out of date between imports - a by-election or a death may not be reflected yet - and it means the underlying source matters. Where a name came from Wikipedia rather than an official register, treat it as a pointer to the official record, not a substitute for it.
Terms are stored with dates, so "who represents this ward" is a question about a point in time rather than a field someone overwrote. A seat counts as filled only when a named person holds an open term on it; placeholders count as vacant, on the same definition the coverage view on the representatives pages uses.
Live figures
Seat coverage today
These figures are fetched from the public API when the site is built, so they move as the data does - they are never typed into the page. They were computed on 18 July 2026.
| Role | Level | Seats | Named | Vacant |
|---|---|---|---|---|
| Governor | County | 47 | 47 | 0 |
| Senator | County | 47 | 47 | 0 |
| Woman Representative | County | 47 | 47 | 0 |
| Member of Parliament | Constituency | 290 | 282 | 8 |
| Member of County Assembly | Ward | 1,450 | 0 | 1,450 |
| Total | 1,881 | 423 | 1,458 | |
A seat is counted as named only when a real person holds an open term on it. The same figures, broken down by region, are on the representatives page.
Known issues
What we know is wrong
This section is maintained by hand. The figures above come from the API and refresh whenever the site is published; the findings below are reconciliation problems that no endpoint can report, so they are written down, reviewed against their tracking issues, and dated. Last reviewed . The issues themselves are the live record.
Some constituency seats can't be matched to their representative
Our boundary layer predates the 2022 delimitation in places and carries no IEBC codes, so a small number of constituencies whose official 2022 names differ from the ones in the boundary file cannot be matched to the person elected in them. Those seats show as vacant in the table above even though the constituency has a sitting MP - the gap is ours, not Parliament's. The crosswalk that fixes this is tracked in issue #153.
Some wards are listed under the wrong constituency
Because ward polygons and constituency polygons come from different sources and don't nest cleanly, the largest-overlap join described above files a number of border wards under a neighbouring constituency. The ward itself, its geometry and its seat are right; the constituency shown for it is not, and it may appear in the wrong constituency's ward list. The IEBC register is authoritative on which constituency a ward belongs to, and correcting our records from it is tracked in issue #162.
The ward tier has no representatives yet
Members of County Assembly are the largest gap on the site: the entire ward tier is unfilled, which is why the vacant count above is dominated by one role. It is a sourcing gap, not a modelling one - the seats, wards and roles all exist and are counted. Filling them is tracked in issue #154.
Found something else wrong? Tell us - corrections are the most useful thing you can send.
Cadence
How often it updates
Every page on this site is prerendered, including the figures above. They are refreshed when a release is published - which happens on every change to the site, and on demand after a data import. There is no automatic nightly rebuild, so a correction entered by an editor appears once the next release goes out, not the moment it is saved. The Data as of date above is when the API computed the numbers this build used, so you can always tell how old the page you are reading is.
Reuse
Licence and attribution
Kuramap's published data is licensed Creative Commons Attribution 4.0 International (CC BY 4.0). You may copy, redistribute, remix and build on it, including commercially, as long as you credit it. If you use it, attribute like this:
Kuramap (kuramap.euxven.com), licensed under CC BY 4.0.
Two caveats worth stating plainly. The underlying facts - that a place exists, its official code and name, who was elected to it - are not ours to license and are not copyrightable; the licence covers our compilation of them. And the boundary geometry is derived from the sources in the table above under their own terms, so redistributing it means honouring their attribution too.
The site's code licence is a separate question and is not settled by this page.
API
Get it programmatically
Everything on this page is readable from the public JSON API - including the coverage figures above, which the build fetches from it like any other client. The machine-readable contract is published at /openapi.yaml (OpenAPI 3.1); the boundary geometry is also downloadable as a single PMTiles archive.
Read the API docs to get started.
Operator
Who runs this, and how to reach us
Kuramap is an independent, unincorporated civic project - not a company, and not affiliated with the IEBC, Parliament, or any government body. Nothing here is an official record, and where Kuramap disagrees with the IEBC, the IEBC is right.
Corrections, questions and takedown requests all go to the same place: [email protected]. If you are reporting a data error, telling us the region and what the correct value should be - ideally with a source - is enough; you don't need an account, and there isn't one to make.