NaijaAccessAccessibility Scorecard
Language: English

How this works

What is measured, and how the number is produced

A scorecard that names institutions has to show its working. Every weight, threshold and limitation is set out below, so any operator can recompute their own score and challenge it.

The limit worth stating first

Automated testing detects roughly a third of the barriers a real person meets. It reliably finds a button with no accessible name. It cannot tell you whether the reading order makes sense, whether an error message is understandable, or whether somebody can actually finish paying a bill.

A score here is a floor, not a certificate. A service scoring 100 has passed the checks a machine can run, nothing more. A service scoring 20 has problems so basic that no manual testing is needed to confirm them.

This is why every service examined closely is also tested by hand by a screen reader user, and why those results sit alongside the automated ones.

What each failure costs

Every failing element deducts from a starting score of 100, weighted by how much it blocks a person. An unlabelled button is silent to a screen reader, so the user cannot know it exists. Redundant link text is friction. Weighting them equally would flatter a service with many small problems and punish one with a single blocking failure.

  • 10

    Critical

    Blocks the task outright

  • 5

    Serious

    Task possible but obstructed

  • 2

    Moderate

    Confusing or slow

  • 0.5

    Minor

    Friction

Try the formula

Adjust the counts to see how a score is built. Four critical failures is enough to take a service below half marks on their own.

2 × 10 = 20.0
4 × 5 = 20.0
3 × 2 = 6.0
2 × 0.5 = 1.0

Score

53

grade D

100 − (2×10 + 4×5 + 3×2 + 2×0.5) = 53

Grade bands

98grade A
Airtel Nigeria
Score 98 out of 100, grade A
44grade D
Average, all services
Score 44 out of 100, grade D
0grade F
NCC, GTBank, Access Bank
Score 0 out of 100, grade F
Grade bands and their meaning
GradeScoreMeans
A90 and aboveFew barriers found
B75 to 89Usable, with friction
C60 to 74Significant barriers
D40 to 59Largely unusable
F0 to 39Blocked

What is tested

Each service is loaded in a headless Chromium browser at 1366 by 900 pixels. Once the page settles, axe-core runs against WCAG 2.0 and 2.1 at levels A and AA, plus WCAG 2.2 at AA.

Only the public landing page is scanned. Pages behind a login are not covered, which means the real picture for authenticated banking is likely worse than what is shown here, not better.

What fixing this actually involves

Every example below is a violation type found on Nigerian services in this scan, with the counts from the committed results. Switch between the version as found and the corrected one to see both the markup change and what a screen reader announces.

Almost all of them are a single attribute.

criticalimage-alt43 found in this scan

An image carrying information, with nothing to announce

When an image is the only thing conveying something, and it has no text alternative, a screen reader has nothing to say. A logo, a promotional banner, a phone number set as an image: all silent.

One attribute to fix

Markup

<img src="/customer-care.png">

What a screen reader announces

image

WCAG 2.0 A · 1.1.1 Non-text Content

seriouslink-name71 found in this scan

A link with no readable name

Links made only of an icon, or wrapped around an image with no alternative text, are announced as nothing. People who navigate by pulling up a list of links on the page get a list of blanks.

One attribute to fix

Markup

<a href="/transfer">
  <svg class="icon-arrow"></svg>
</a>

What a screen reader announces

link

WCAG 2.0 A · 2.4.4 Link Purpose

criticalbutton-name3 found in this scan

A button the screen reader cannot name

This is the failure people mean when they say an app is unusable. Moving through the page, every control announces as the single word "button". There is no way to know which one submits the form.

One attribute to fix

Markup

<button class="btn-primary">
  <i class="fa fa-search"></i>
</button>

What a screen reader announces

button. button. button.

WCAG 2.0 A · 4.1.2 Name, Role, Value

seriouscolor-contrast74 found in this scan

Text too faint to read

Light grey on white looks refined on a designer’s monitor. On a phone in Nigerian daylight, or to anyone with reduced vision, it disappears. This was the single most common failure in the scan.

One colour value to fix

Markup

.help-text {
  color: #9ca3af;   /* 2.5:1 on white */
  background: #ffffff;
}

What a screen reader announces

Text is announced, but cannot be read by sight

WCAG 2.0 AA · 1.4.3 Contrast Minimum

criticallabel0 found in this scan

A form field with only a placeholder

A placeholder disappears the moment somebody starts typing, and many screen readers never announce it at all. The person is left in a field with no idea what belongs there.

One element to fix

Markup

<input type="text" placeholder="Account number">

What a screen reader announces

edit, blank

WCAG 2.0 A · 3.3.2 Labels or Instructions

serioustarget-size10 found in this scan

Controls too small to hit

A control under 24 pixels is hard to hit for anyone with a tremor, limited dexterity, or simply large hands on a small phone. Missing repeatedly is not a minor irritation when the control transfers money.

Two CSS values to fix

Markup

.icon-btn {
  width: 16px;
  height: 16px;
}

What a screen reader announces

Announced correctly, but difficult to activate

WCAG 2.2 AA · 2.5.8 Target Size

Manual testing

For each service examined in depth, a screen reader user attempts a short set of ordinary tasks: find the customer service number, locate the branch finder, begin an account opening. Each is recorded as completed or not completed. There is no partial credit, because from the user’s side there is no partial credit either.

Environment and date are recorded with every finding so results can be reproduced or challenged.

Before publication

The purpose is repair, not exposure. Operators are notified of findings before results are published and given a window to respond. Where a service improves, the score improves with it, because scans run continuously rather than once.

Nigerian institutions have already shown this is achievable. UBA published a formal commitment to WCAG 2.1 Level AA in June 2025. OPay supports independent account setup for blind users. Airtel scores 98 in this scan with no critical or serious failures. The gap is not technical difficulty.

What is not covered

  • Pages requiring authentication
  • Native mobile applications, which need separate tooling
  • USSD menus, which no automated tool can currently audit
  • Content quality, plain language and cognitive load
  • Whether a person can complete a transaction end to end

Reproducing these results

The scanner, the target list, the scoring code and the raw output are all in the project repository. Anyone can clone it and rerun the scan. Findings that cannot be reproduced should not be trusted, and that applies to ours.

Engine: axe-core 4.10 via @axe-core/playwright
Last run: 10 August 2026

Back to the scorecard