⛓How it works

The model reads.
Arithmetic decides.

AI is good at reading messy text from forty different banks. It is not something you should trust with your money. So Alertproof splits the job in three.

1 · Read

Gemma reads the alert

Every bank words its alerts differently and changes them often. Gemma, an open-weight model, turns any alert into the same fields: credit or debit, amount, balance, account digits, reference, time.

2 · Ground

Code checks what Gemma read

Every number must be written in the alert itself. So must the bank name and the credit/debit word. Anything Gemma made up is thrown away, and Gemma is asked once more, told what was wrong.

3 · Decide

Your balance chain decides

Last balance + amount must equal the new balance, to the kobo. The account must be yours. The reference must be new. Only then: PAID.

Then · Learn

Gemma once, then instant

Your alerts come from the same one or two banks, in the same layout every time. After Gemma reads an alert and every value passes grounding, Alertproof remembers the words that sit before each value, like Avail Bal: NGN. The next alert in that layout is read in under a millisecond, through the same grounding and chain. It only keeps a learned format if re-reading the alerts it learned from gives exactly what Gemma read. Anything that doesn’t fit goes back to Gemma.

The chain

Why a fake can’t pass

A fake-alert app lets a fraudster type any sender, amount and wording. To pass Alertproof, it would also need your exact balance after your last alert, which only you and your bank know.

The rules

Every check, in plain words

CheckPasses whenIf it fails
DirectionIt’s a credit, and the alert’s own words say soNO RELEASE: money went out, not in
AccountThe visible account digits match yoursNO RELEASE: paid to someone else
ReplayYou’ve never received this alert or reference before, and it isn’t more than a day oldNO RELEASE: an old alert sent again
BalanceLast balance + amount = new balance, exactlyNO RELEASE, or CAN’T TELL if it’s a small shortfall like a bank charge
FormatIt looks like your real alerts from this bankA warning only. Banks do change formats.

Tested, not promised

70 alerts. 10 formats. Real and fake.

We ran Gemma 3 4B on a laptop with no graphics card over SMS, push and email formats from GTBank, Access, Zenith, UBA, First Bank, OPay, Moniepoint and PalmPay. Every format got real credits, a debit, a fake with an invented balance, a fake with a round balance, an alert for someone else’s account, and an old alert sent again.

0 / 20invented-balance fakes released
10 / 10old alerts sent again, stopped
20 / 20genuine payments proven PAID
0.06 msper alert once a format is learned, 56 of 60 with no model

What we got wrong, and fixed

The first run released 4 fakes. All four were alerts for someone else’s account that also carried the trader’s exact balance, the worst case. Two were in formats that show only two account digits (Zenith’s 01**876**32, Access emails). Our grounding check demanded three, so the account check was skipped. We now accept two digits when they come straight after a mask, and only the digits the alert actually shows. Then we re-ran those formats: both fakes are now stopped, with no new false alarms.

The other two are a true limit. OPay and PalmPay notifications show no account at all. If such an alert also carries your exact balance to the kobo, nothing in it can tell it apart from a real one. In practice that means someone has already seen your latest alert, so keep your alerts private.

Full case-by-case results, including every value Gemma got wrong and the grounding check threw away: eval/EVAL.md.

Watch the chain work.

Five customers, one demo shop, every rule above in action.