Mundx Analytics does not count votes. It re-reads the EC8A forms INEC publishes on IReV and adds up only the ones that reconcile.
We poll IReV on a fixed interval through election night. As each polling unit's EC8A is uploaded, we download the image, record its file size and a SHA-256 fingerprint, and read the vote figures using a large language model. We never originate a number — we only re-read what INEC has already made public.
From every EC8A summary box we read registered voters, accredited voters, rejected ballots, and total valid votes. From the party rows we read each party's votes in figures and in words. Reading both lets us cross-check the two against each other on the same form.
sum_mismatch) is flagged on the form, but the party votes are still counted — a one-vote arithmetic slip shouldn't erase a whole polling unit.figures_words_mismatch). Catches model misreads and altered forms alike.accredited_mismatch) is flagged as ballots unaccounted for, but the votes still count.extraction_failed).SHA-256 changes — we re-read it and flag loudly if the leader changed.We count the party votes from every readable EC8A. A form is excluded from the totals only when it is genuinely unusable — unreadable, the wrong document, or an over-vote that voids the unit under the Electoral Act. Reconciliation flags (vote-sum, accreditation gap) are shown on each form but do not remove its votes. Forms render green when clean, amber when counted-but-flagged, and coral when excluded or still awaiting upload. This is deliberately close to INEC's own collation, which counts every valid unit — it keeps the provisional total within a few points of the final figure rather than under-counting the leader.
We back-tested this against two fully-declared LGAs — Nnewi North and Orumba North (Anambra, 2025) — and our provisional party totals landed at roughly 95–99% of the official figures, with the winner always clearly identified. Expect a working margin of about ±2–3% per party at full coverage. Registered-voter and accredited fields are read less reliably and are shown only as context. Machine reading can err, which is exactly why every figure links back to its source form, and we never declare a winner — only INEC does that.
We can't deep-link into IReV, but anyone can confirm a figure: go to inecelectionresults.ng, choose the election, pick the State → LGA → Ward → Polling Unit shown here, open the uploaded EC8A, and compare it to our extracted numbers. If they differ, report it to us with the PU code.