Spend tracking · what the phone will allow
Reading the customer's texts
works on one phone, and is banned on the other.

Bank alerts look like free, complete, instant spending data sitting on the phone already. On Android reading them is possible and explicitly permitted — but hard to actually get approved. On iPhone it is not possible at all. And the UAE central bank appears to have ruled against the whole approach, which would settle it regardless.

THE GOOD NEWS

Budgeting is on Google's allow-list

"SMS-based money management" is a named exception, verified on Google's own policy page. No need to become the default messaging app.

THE BAD NEWS

iPhone has no such door

No API exists, so there is no permission to grant. Roughly half our market, and the higher-spending half.

THE TRAP

The regulator got there first

CBUAE's Open Finance rules are reported to forbid "data extraction" — pending counsel reading the primary text.

The question asked

"With permission, can the app read their bank texts?"

UAE banks are widely reported to alert on essentially every card swipe, so the raw signal looks richer here than in most markets. We have not verified the per-bank behaviour against live accounts. Three separate authorities get a say in whether we may use it.

02 / 16
Android says

Yes, technically. Google's rulebook names budgeting apps as an allowed exception — but grants it case by case, and reviewers routinely refuse this exact use.

Apple says

No. Not with permission, not ever. Apple has never built a way for an app to read messages. There is no prompt to grant because there is nothing to grant.

The central bank says

Its Open Finance regulation is reported to forbid data scraping, defined broadly enough to cover copying transactions out of a customer's messages. Primary text unread — see slide 06.

! An SMS-first plan strands every iPhone customer on a visibly worse product — and that is the half of the market that spends more.
The iPhone wall

This is not a policy problem. It is an absence.

Policies can be argued and exceptions can be requested. There is nothing here to appeal against — the capability was never built.

03 / 16
The one thing that sees message text

Apple lets an app plug into SMS spam filtering. That extension is handed the sender and the message body for texts from unknown numbers.

UAE bank alerts arrive from named senders — ENBD, ADCB, FAB — which can never be saved as a contact, so they always count as unknown and always pass through it.

Why it is still a dead end

That extension runs in a sealed box. Apple forbids it from reaching the network and from writing anything the app can later read.

The text is visible for an instant, in a room with no doors. It cannot reach our app and it cannot be stored. The technicality that it sees the message changes nothing.

i Apple's guideline 2.5.12 closes it a second time: data from that filter may not be used for "any purpose not directly related to operating or improving your app". Building a spending profile is squarely outside that. Two locks, one door.
Android · the rulebook

Google allows this by name — and grants it grudgingly.

Most write-ups get this wrong in both directions. The policy is friendlier than its reputation — it loosened after the 2019 purge that the folklore still describes. The review desk is harsher — though the only public first-person account we could verify is a single paraphrased rejection, so the base rate is genuinely unknown.

04 / 16
What is written

The exceptions table carries a literal row — "SMS-based money management · apps that track and manage budget" — and it does not require becoming the phone's default messaging app.

The clause that kills it

The exception applies only where "there's currently no alternative method" to deliver the feature. Reviewers hold that typing expenses in by hand is an alternative.

Why applicants fail

Usually they declare the wrong thing. FinVantage argued "SMS is our core feature" generically and was told manual entry is an alternative. The recurring rejection string is "store listing information does not match the core functionality for your declared use case" — about proving the declaration, not about the feature itself.

Who ships it here

Obba and FinArt both publish that they parse bank messages in MENA — read from their own sites. We could not verify any app's live Play permissions or approval: store listings resisted automated reading, so treat "competitors have it" as indicated, not established.

! Every release then passes through that gate. A pending permissions review holds the whole app in the queue — including urgent fixes that have nothing to do with spending.
Found during this research

Android itself now delays messages by three hours.

This is not a store rule. It is built into the operating system, so distributing outside Google does not escape it. It began shipping in December 2025.

05 / 16
Already live

Android 16 QPR2 withholds any message carrying a verification-code signature from other apps for three hours — and hides it from the message database too, not just the live alert.

Coming next

Android 17 widens this to any message that appears to contain a one-time code, for apps built against the newest tools.

Why it may not touch us

A spending alert is not a one-time code. "AED 240 spent at Carrefour" should pass straight through — on the documented behaviour.

! Google has not published how it decides a message "appears to contain" a code. A bank alert quoting a reference number could be caught by mistake — silently, and three hours late. Test this against real UAE bank messages on an Android 17 beta before committing to this path.
The rule that settles it

The central bank may have already banned the shortcut.

While we were asking whether the phone permits it, the regulator was answering whether we may. If this reading holds, it outranks everything on the previous five slides.

06 / 16
“Scraping is strictly forbidden — the extraction of user data onto a locally saved spreadsheet or database file.”

Pinsent Masons, summarising the CBUAE Open Finance Regulation · Circular 7 of 2023, amended by Circular 3 of 2025

What that means for us

Copying a customer's transactions out of their messages into our database is the activity being described. Reading it otherwise takes an optimistic lawyer.

Read this caveat before quoting it

That wording is a law firm's summary, not the rulebook itself — the CBUAE site blocks automated access, so we have not read the primary text. It is the most load-bearing claim in this document and counsel must confirm it against the rulebook before it decides anything.

Every route, side by side

Four ways to learn what someone spent.

Judged on coverage, on whether they survive store review, and on whether they work at all on an iPhone.

07 / 16
RouteBoth phonesPast spendingSurvives reviewRegulator
Read the textsAndroid onlyYesOften refusedLikely prohibited
Read the notificationsAndroid onlyFrom today onward onlyUsually passesSame prohibition may apply
Upload the statementBothMonths at onceNo permission neededClean
Open FinanceBothAuthoritativeNo permission neededThe sanctioned route
i Only two routes work on an iPhone — and both are ones we can build without asking Google or Apple for anything. We have already built one of them.
If uploading a file is too much to ask

Four ways in, without the customer lifting a finger.

Only the first is automated, cross-platform and sanctioned all at once. The rest are supplements, not a spine.

08 / 16
Open Finance · Lean

Categorised data straight from the bank, on both platforms — RN and Flutter SDKs both refreshed June 2026. Consent expires within a year, history caps near 12 months, their store purges at 30 days: we own the database regardless. Needs mTLS, so never mobile-only.

Notification listener

Near-real-time, Android only. Store bar genuinely lower — no approved-use list, no declaration form. Flutter tooling is healthy; React Native's has been stale since 2023. Carries the same CBUAE question as SMS.

On-device receipt scanning

Apple Vision and Android ML Kit ship with the OS and run entirely on the device. Not a ledger — but it closes the hole every automated route leaves open: cash.

Email · Outlook only

Gmail is a trap — read access needs an annual paid security assessment and personal finance is not on its approved list. Microsoft Graph has no such gate. Thin signal regardless: only Citibank was confirmed to email every transaction.

! Mastercard's transaction feed is the one credible card-network route — full linked-card spend, no PCI burden — but North America and EU only. Visa is issuer-banks-only; Fidel sees only participating merchants.
The design that earns its place

Nothing counts until the customer says so.

Parsing is 70–90% accurate at best. A confirmation step is the human half of the reconciliation gate — and it changes how the whole feature reads, to the user and possibly to a regulator.

09 / 16
The rule

A captured transaction is a proposal, not a record. It shows the amount, merchant and category we read, and it does not touch a total until the customer confirms, edits or discards it.

An inbox, not a popup

UAE banks alert on essentially every swipe. A prompt per transaction is dozens of interruptions a day and will be switched off within a week. Captured items queue in a review inbox with a badge — same consent, same preview, no fatigue.

Interrupt only when unsure

High confidence files quietly and stays reversible. Reserve the actual prompt for low confidence — unrecognised merchant, anomalous amount, failed currency detection. Asking about everything teaches people to dismiss without reading.

What it does not unlock

It does not open the SMS route. We still need the permission to read the message before we can preview it — and a manual confirm step is evidence that an alternative method exists, which is the exact clause reviewers reject on. Android's own permissionless version of this idea, SMS User Consent, only matches OTP-shaped messages, so it cannot see transaction alerts.

i Worth putting to counsel: the prohibition targets extraction. A flow where nothing is stored until the customer adds each item looks less like harvesting and more like assisted manual entry — which may change the analysis for notifications.
Where we already are

The hard part is already done.

The statement pipeline is in the codebase today, and it was built with the privacy posture the regulator asks for — before we knew the regulator asked for it.

10 / 16
Statements land

A PDF or CSV becomes dated rows with an amount, a merchant and a category — refunds netted off, card repayments ignored, so paying the bill never counts as spending.

Names are encrypted

Merchant and description are encrypted in the database, not merely access-controlled. They cannot be searched or sorted in SQL — a trade-off taken deliberately.

Only totals sync

What leaves the device for the card engine is a monthly total per category — never the individual transactions — and consent is recorded with a timestamp.

i So a new source is a new feeder into an existing pipe, not a new system. Anything we add — notifications, Open Finance — lands in the same shape and inherits the same protections.
Requirement 1 · architecture

One pipe, many taps.

The single most important decision here: nothing downstream may know or care where a transaction came from.

11 / 16
R1.1 · Source is a label, and a switch

Every transaction records how it arrived, and everything downstream behaves identically whichever it says. Each feeder sits behind its own flag, so a refused permission or a changed rule disables a source in config — not a release.

R1.2 · The same purchase never lands twice

A coffee arrives as a notification today and on the statement next month. Match on amount, date and merchant; keep the more authoritative one.

R1.3 · Confidence travels with the row

A parsed alert is a guess; a statement line is a record. Each row carries how sure we are, and the screen must never present a guess as a fact.

R1.4 · Prove the arithmetic

Opening balance plus credits minus debits must equal the closing balance, or the import is rejected. Realistic extraction accuracy is 70–90%, not the 99% vendors advertise — this check is what turns silent corruption into a visible failure.

R1.5 · Two currencies from day one

UAE statements are bilingual and show foreign spend twice. Every row needs the dirham amount and the original amount and currency — retrofitting means re-parsing everything.

Requirement 2 · privacy

Read on the phone. Send only the answer.

This one rule resolves most of the legal exposure, and it is cheap to hold — provided we hold it from the first line of code rather than retrofitting it.

12 / 16
R2.1 · Raw text never leaves the device

Messages and notifications are parsed on the phone. What uploads is the amount, date, merchant and category — never the original text.

R2.2 · Non-financial messages die immediately

Google's policy bans budgeting apps from taking personal message history. Anything that is not a bank alert is dropped in memory — never written down, never counted, never sent.

R2.3 · Data stays in the UAE

The federal law has no approved-country list and no standard export contract for the mainland. Hosting onshore means the question is never asked.

R2.4 · Consent is a record, not a checkbox

Each source is consented separately, with what it reads stated plainly before the system prompt appears, and every grant and withdrawal written to the audit trail.

Requirement 3 · honesty

The rules we already hold ourselves to.

Carried over from the market-data brief unchanged, because the failure they prevent is exactly the same one.

13 / 16
Never invent a number

If a message cannot be parsed, the transaction is missing and the screen says so. A plausible guess presented as a reading is worse than a gap, because the customer cannot tell it is wrong.

Say how complete the picture is

Notification capture starts the day it is switched on. A month that began before then is partial, and its total is labelled partial — not quietly shown as though it were whole.

Say when it was last seen

Every total carries the age of its oldest input, exactly as the portfolio screen carries the age of its stalest price.

If we ever do read messages, copy Obba

From Obba's published privacy policy: allowlist bank sender IDs, exclude one-time codes, discard raw text once parsed, and ship the reader with no internet permission. Whether that design was ever approved by Google we do not know — but it is the most defensible posture we found written down.

Describe, never advise

An Open Finance licence explicitly does not permit advising or arranging. We say what happened to someone's money. We do not tell them what to do next.

The plan

Cheapest and safest first.

Each stage ships on its own, none blocks the next, and nothing built here is thrown away later.

14 / 16
Stage A

Statements as the front door

Already built. Reads months of history at once, works on both phones, needs nothing from Google or Apple, and is the only route unambiguously clean with the regulator.

Now · both phones · no permission
Stage B

Notification capture

Same bank alerts, and the store bar is far lower — no approved-use list, no declaration form. But the CBUAE wording reaches notification capture on its face, so this stage is gated on the same legal question as Stage D.

Android only · 3–5 weeks · needs counsel first
Stage C

Open Finance via a licensed partner

The only authoritative route. Coverage is identical across licensed partners — the UAE runs one central hub, so vendors compete on SDKs and price, not on bank reach.

Blocked on counsel · 4–8 weeks once cleared
Stage D

Reading the texts

Android only, an undocumented three-hour clock arriving, unmaintained libraries, and a regulator who may have written against it.

Not recommended
What each path costs

The expensive part is a licence, not code.

Engineering time is the small number in every row below.

15 / 16
PathBuildStanding costWhat gates it
StatementsAlready builtAI extraction per documentNothing
Notifications3–5 weeksNonePlay review · usually passes
Open Finance via partner4–8 weeksScheme calls free to 15 pages/customer/day, then 2.5 fils · plus partner marginThe re-sharing question
Open Finance, licensed ourselves16–28 weeksAED 20k–100k / year at scaleAED 1m capital + indemnity cover
Reading texts6–10 weeksMaintaining abandoned librariesRefusal · OS clock · regulator
! Every library that can read message history on either framework is unmaintained or single-maintainer. The most widely used one was last published in 2020 and its repository is dead. That maintenance would land on us permanently.
Before we commit
Three questions remain.
None of them are engineering.

The build is understood. The sequence is safe only as far as Stage A. What is unresolved is legal, and each answer is cheap to obtain and expensive to guess. Nothing in Stage A or B waits on them — but Stage C cannot start, and Stage D cannot be reconsidered, until they are settled. Two more sit alongside it: does per-item customer confirmation change the extraction analysis? — and one engineering test, do real UAE bank alerts survive Android 17's three-hour filter? A day on a beta device answers the second.

DECIDE

Statements first, notifications next

Both work today, both work on iPhone, neither needs anyone's permission.

VERIFY

Does the scraping ban reach notifications?

If it does, Stage B falls with Stage D and statements are the only route. Ask before building, not after.

CHECK

Get our partner's licence in writing

Lean's homepage says "fully licensed by CBUAE"; its own About page says in-principle approval, Aug 2025. Settle it before contracting — and note Apple requires finance apps to ship under a company, not an individual account.

Presenter notes · slide 01
press N to close