Live register. The councillors on record for Lagos State’s 57 councils — LASIEC’s published results and the Forum’s own returns. Records are added and corrected as the Forum supplies them.
Serving Councillors for Renewed Hope — the APC Renewed Hope seal
Serving Councillors for Renewed Hope Record a supporter for your ward. The details land in the data bank the moment you send them.

Registration

Live. Registrations land in the data bank the moment they are sent.
1Ward 2Details 3VIN optional 4Consent 5SMS code
1Ward Not set
Every one of the 376 wards, grouped by council. Choosing one derives everything above it and attributes the record to that ward's councillor.
The INEC polling-unit register has not been loaded into the platform yet, so this is written as the supporter knows it and matched to the official register later. It never blocks a record, and a supporter who does not know it can leave it blank.

A councillor's registration link fills this in automatically. Without one, the ward is chosen here — and everything above it is derived and locked, never typed.

2Details In progress
Normalised to E.164. Verified by a one-time code before it counts.
Bracket, not date of birth. Data minimisation.
Special-category data. Never combined with VIN in any export.
3Voters Identification Number Required
Required: it is how a supporter is identified on the roll, and it is what stops the same person being registered twice. The number is turned into a one-way hash the moment it arrives — the original is never stored, so it cannot be read back, not even by an administrator.
4Consent

Consent version and a hash of this exact text are stored with the record. The box is never pre-ticked, and a record without it is not written.

Queued on the device if the network drops. Never lost, never duplicated.

No signal?

Records queue on the device, encrypted, and replay when the network returns. Each carries a client-generated id, so a retry after a dropped response returns the existing record instead of creating a second one.

Duplicate found?

The record is quarantined and flagged, never silently dropped and never auto-rejected. A named human reviews it. The supporter is a real voter, and a machine does not get to decide they do not exist.

How it works

What a field agent records

One screen, designed for a low-end Android in bright sunlight. The agent picks the ward and the district, division, LGA and LCDA are derived and locked, so a record can never be misattributed to the wrong place.

Grassroots Voting DataBank Module C · register, then collate

Register, then collate

Field agents capture supporters ward by ward, on phones, often with no signal. Every record lands against one of the 376 councillorship wards and one of the 57 local councils, and the collation below counts them live.

0RegistrationsNo records captured yet
0Phone-verifiedAwaiting first OTP
0QuarantinedDuplicate review queue
376Wards covered150 LGA-tier + 226 LCDA-tier
57Local councils20 LGA + 37 LCDA
The register is empty. That is the honest state, not an error. No supporter has been registered, so every count below is zero. Nothing on this page is simulated: the counters, filters and breakdowns are indexed by the real ward register, so the moment a real record arrives it appears here without any change to the structure.
Voters database

The register each councillor builds

Registration is done by councillors, ward by ward. Each councillor is the registrar for their own ward, and every voter record is attributed to the councillor who captured it, so nobody can register a voter into somebody else's ward and no voter can be claimed twice.

0Voters registeredThe register is empty
0Cllrs who have registeredof 376 wards
8Cllrs on recordroster retrieved

Voters database

Masked view. NIN and VIN are never rendered in full, in any export.
Name of councillor Ward Local Government Voter’s name NIN VIN Sex
No voter has been registered yet. Nothing is simulated here. This table has no rows because no councillor has captured a voter, and a platform that invents a register is worse than one that shows an empty one. The columns above are the real schema.

How each column is handled

ColumnSourceHandling
Name of councillorDerived from the wardAttribution only. Set from the ward, never typed, so it cannot be spoofed.
WardChosen by the registrarDrives the whole hierarchy. Locked once the record is written.
Local GovernmentDerived from the wardNever entered by hand.
Voter’s nameAs written on the voter cardStored in clear. Normalised for duplicate matching, never for display.
NINVoterEnvelope-encrypted under its own key. Hashed for de-duplication. Shown as the last four digits only. Unmasking needs a named permission and is written to the audit log.
VINVoterRequired on every supporter record (Forum decision, 14 Sep 2026), under its own key. Only a one-way hash is ever written, so the number cannot be read back — not by an administrator, and not by us.
SexVoterStored as declared. Reportable in aggregate only.
Two identifiers, two different registries, and one new legal gate. VIN identifies a voter on the electoral roll. NIN identifies a citizen with NIMC. Holding both concentrates risk and does not add a second way to find a voter, so the purpose for NIN has to be stated and recorded. Processing NIN requires NIMC authorisation, which is a separate gate from the NDPA DPIA — neither substitutes for the other. Until both are in place, NIN capture stays off and the column renders masked and empty.
Module D · Collation

Registers collation

The same slice is available at every level: state, senatorial district, division, LGA, LCDA, ward, and down to a single councillor or a single agent. The filters below compose, and every view is exportable.

Slice the register

Filters narrow within your scope. They can never widen it.
No polling unit register loaded yet, so this filter is empty. See the note below.
Polling unit is a third delineation, and the register is not loaded. Polling units are INEC's unit below the registration area; the 376 councillorship wards are LASIEC's. The two do not map onto each other and are never summed. Lagos received 4,861 additional polling units in the 2021 national expansion, so a polling unit code is only meaningful with the vintage of the register it came from. Until that register is supplied the filter stays empty, because a filter populated with plausible-looking polling units would be worse than one that admits it has none.
Exports require a stated reason and are watermarked and audited.

Headline counts for this slice

0Total registeredEvery ward selected
0Phone verifiedOne-time code confirmed
0PendingAwaiting verification
0QuarantinedIn the review queue
0Duplicate attemptsBlocked by hash match
0WithdrawnConsent withdrawn, excluded

By senatorial district

DistrictLGAsCouncilsWardsRegistered
Lagos West 10 28 185 0
Lagos Central 5 13 93 0
Lagos East 5 16 98 0

Verification funnel

CapturedRecord written, offline or online0
Phone verifiedOne-time code confirmed0
VIN verifiedWhere a VIN was supplied0
Fully verifiedCounted in the clean register0
QuarantinedHeld for human review0

Demographic breakdown

These panels are the reason the collation exists. Nothing is charted until there is a sample worth reading: any cell below the minimum is suppressed, and small samples are labelled so nobody over-reads noise.

Gender

No data yet
Awaiting the first registration Female, male and undisclosed counts appear here, with a data table beneath the chart. A chart alone is never the only way to read a number.
Female0
Male0
Undisclosed0

Age bracket

No data yet
Awaiting the first registration Youth 18 to 35, middle-aged 36 to 50, and elders 51 and above.
Youth 18 to 350
Middle-aged 36 to 500
Elder 51 and above0

Religion

Special-category data, suppressed below the minimum cell size
Christianity0
Islam0
Traditional0
Others0

Per-council collation, Lagos West

Lagos West is shown because it is the largest district by voter population. Every council in the register is listed with its real ward count, so a coordinator can see exactly where a zero means "nothing captured" rather than "nothing planned".

Local councilTypeDivisionWardsRegisteredTarget
Agbado-Oke Odo LCDA Ikeja 7 0 –
Agege LGA Ikeja 7 0 –
Ajeromi-Ifelodun LGA Badagry 9 0 –
Alimosho LGA Ikeja 7 0 –
Amuwo-Odofin LGA Badagry 7 0 –
Ayobo-Ipaja LCDA Ikeja 5 0 –
Badagry LGA Badagry 10 0 –
Badagry West LCDA Badagry 5 0 –
Egbe-Idimu LCDA Ikeja 5 0 –
Ejigbo LCDA Ikeja 6 0 –
Iba LCDA Badagry 5 0 –
Ifako-Ijaiye LGA Ikeja 7 0 –
Ifelodun LCDA Badagry 7 0 –
Igando-Ikotun LCDA Ikeja 7 0 –
Ikeja LGA Ikeja 6 0 –
Isolo LCDA Ikeja 7 0 –
Mosan-Okunola LCDA Ikeja 5 0 –
Mushin LGA Ikeja 10 0 –
Odi-Olowo / Ojuwoye LCDA Ikeja 9 0 –
Ojo LGA Badagry 5 0 –
Ojodu LCDA Ikeja 6 0 –
Ojokoro LCDA Ikeja 7 0 –
Olorunda LCDA Badagry 5 0 –
Onigbongbo LCDA Ikeja 6 0 –
Oriade LCDA Badagry 7 0 –
Orile Agege LCDA Ikeja 6 0 –
Oshodi-Isolo LGA Ikeja 7 0 –
Oto-Awori LCDA Badagry 5 0 –
Lagos West total 185 0–
Data integrity

The rules that make the collation trustworthy

One supporter, one record

Phone and VIN are stored only as keyed HMAC values, so a repeat attempt is detected without the register ever holding a searchable phone number.

A human decides

Nothing is auto-rejected or auto-deleted. A flagged record goes to a review queue with the matched record shown beside it.

Every record attributed

Each registration carries the agent who captured it and the ward it belongs to, and the agent is taken from the session, never from the form.

Counts that reconcile

Rollups are maintained on write and recomputed nightly from source. A drift between the two raises an alert rather than being quietly tolerated.

Exports governed

Every export carries a stated reason, is watermarked with who requested it, expires, and is written to an append-only audit log.

Consent can be withdrawn

A withdrawal removes the record from every count and every export, and the withdrawal itself is audited.