An M-Pesa feed that brings in the paybill and till money AWRA moves every 30 minutes, and a private inbox per bank account that reads the statement your bank already emails you. Every line is fingerprinted on the way in, so an overlapping statement never counts a line twice.
M-Pesa every 30 minutes · CSV, OFX and MT940 by email · Allowed-sender list · Address you can rotate · Premium and Enterprise
M-Pesa feedevery 30 min · paybill and till
Statement inboxstatements+k7q2…@inbound
UploadCSV · OFX · MT940
one gate
M-Pesa · KESstatement lines
27 SepM-Pesa received from 2547…318 new+4,850.00
28 SepM-Pesa received from 2547…904 new+12,300.00
28 SepM-Pesa received from 2547…904skipped already there
28 SepM-Pesa paid to 400200 new−38,000.00
29 SepM-Pesa receipt reversed new−1,200.00
30 minbetween M-Pesa checks, plus a Check now button
3 formatsCSV, OFX (and QFX) and SWIFT MT940, read the same by email or upload
24 charsof randomness in each account’s private statement address
10 × 5 MBattachments read per email; logos and PDF copies are passed over
1 gateevery source writes through the same fingerprint check
The month-end problem
Reconciling is quick. Getting the statement in is what takes the week.
Somebody logs in to internet banking, downloads a file, works out which columns the bank used this month, and uploads it. Somebody else does the same for the paybill. By the time both are in, the first is a week old and the second overlaps it by three days — so half the lines are already there and nobody is sure which half.
A bank feed removes the fetching, and the fingerprint removes the doubt. The M-Pesa money AWRA moved for you is already in AWRA, so it is turned into statement lines on a schedule. Bank statements come to an address you give the bank once. Whichever way a line arrives, it is checked against the lines already on that account, and a line that is already there is counted as skipped rather than added again.
The M-Pesa feed
Built from the M-Pesa money your workspace moves through AWRA, so it needs no contract with anyone and no file from Safaricom.
Money in: successful customer payments by M-Pesa prompt and by paybill or till, each as a line on the date it was made, carrying the M-Pesa receipt code and the payer’s number.
Reversals: a receipt reversed after it succeeded becomes its own line in the other direction, so the original stays on the statement and the reversal sits beside it.
Money out: supplier and payroll payouts sent from AWRA over M-Pesa, to a phone number or a paybill or till number.
Its own account: connecting creates an M-Pesa bank account on the M-Pesa ledger account that those same payments post to, so the two sides can be matched.
A start date you choose, checked every 30 minutes after that, with a Check now button and a pause switch. A failed check is shown on the account rather than silently skipped.
Statements by email
Most banks will send a scheduled statement by email. Give them an address that belongs to one account in your workspace and the attachment is read when it lands.
statements+k7q2…m9xw@your-inbound-domain
One address per bank account, 24 random characters long, naming exactly one account.
Allowed senders: optionally accept statements only from listed addresses or a whole domain. A refused statement is recorded on the account so you can see it was sent.
New address at any time. The old one stops working the moment the new one is made, which is the right answer when an address has been forwarded somewhere it should not be.
Up to ten attachments per email, five megabytes each. A statement file is read; a bank logo, a signature image or a PDF copy of the same statement is passed over.
A CSV uses the column mapping you saved the first time you uploaded that bank’s CSV by hand. OFX and MT940 need no mapping at all.
Anatomy of an emailed statement
Eight checks between the bank’s email and your statement.
The inbox is a public endpoint that writes to your books, so it is built to refuse first. Each step below either passes the statement on or stops it with a reason you can read.
The bank sends its scheduled statement
To the account’s private address. Nothing on your side has to be awake for it.
The mail provider’s signature is verified
A Mailgun delivery must carry a valid signature made within the last fifteen minutes; a Postmark delivery must arrive on a URL carrying a secret. With no secret configured, the endpoint refuses everything rather than accepting anything.
The address picks the account
The 24-character part of the address names one account in one workspace. An unknown or paused address is ignored.
The sender is checked
If you listed allowed senders, a statement from anyone else is refused and the refusal is written on the account.
Each attachment is identified
By its extension and by its contents: OFX and QFX, MT940, or CSV. Anything else is passed over without fuss.
The file is read into lines
Date, description, reference, signed amount and, where the bank supplies it, the running balance. A CSV with no saved mapping stops here with a note telling you to upload one by hand first.
Every line is fingerprinted
And compared with the lines already on that account. A line that is already there is counted as skipped.
New lines wait to be matched
As unmatched lines on the reconciliation screen, with the time of the last statement and how many lines it added shown on the account.
What gets read
Three formats, read the same way however they arrive.
Upload and email use the same format detection, so a file that imports by hand imports by email too. The rows marked as an offer are ones we can add to your workspace.
Format
How it is recognised
What makes a line unique
Set-up needed
By email
OFX / QFX
The file extension, or an OFX header in the contents. Both the older SGML form and the XML form.
The bank’s own transaction ID on each line.
None
Yes
SWIFT MT940
The extension, or the statement and transaction tags in the contents. The format many Kenyan banks use for a scheduled statement.
Account, value date, signed amount and reference, counted in order.
None. The closing balance lands on the last line.
Yes
CSV
The extension. Comma, semicolon, tab and pipe separators are detected from the header row.
Date, amount, description and reference, plus how many identical rows came before it in the file.
One upload by hand, to map the columns. AWRA guesses them from the headers.
Yes, once mapped
PDF statement
Passed over today, including the M-Pesa statement Safaricom emails.
—
—
We can add
Excel workbook
Passed over today; save it as CSV first.
—
—
We can add
Dedupe
Two airtime charges are two lines. The same file twice is still two lines.
A fingerprint that only looked at date and amount would merge two genuine KES 30 charges on the same day. One that included the row number would add a re-sent file all over again. So a CSV line’s fingerprint is its content plus how many identical lines came before it in that file — the second airtime charge is the second one, every time the file is read.
Inside one CSV file
2026-09-29 · −30.00 · AIRTIME · #1line A
2026-09-29 · −30.00 · AIRTIME · #2line B
2026-09-29 · +125,000.00 · RTGS JUA KALI LTD · #1line C
Same date, same amount, same narrative — still two charges, because they are the first and second of their kind in the file.
The bank re-sends Monday with Tuesday
Mon lines 1–38already there
Tue lines 39–71added
71lines in the file
33added
38skipped
A worked week
A hardware distributor on Mombasa Road, 21–25 September.
Illustrative figures. One M-Pesa paybill collecting from customers and paying suppliers, and one current account whose bank emails an MT940 statement each morning.
Mon 21 M-Pesa feed
Paybill and prompt collections arrive through the day as the 30-minute checks run: 96 receipts.
+418,640
Tue 22 Inbox
The bank’s MT940 for Monday lands at 06:10: 38 lines, including an RTGS from a contractor and the ledger fee.
38 added
Wed 23 Inbox
The bank re-sends Monday together with Tuesday after a delay at its end. 33 new lines are added and 38 are skipped.
33 added
Thu 24 M-Pesa feed
Nine supplier payouts sent from AWRA over M-Pesa, and one customer receipt reversed after a wrong-number complaint.
−212,400
Fri 25 Upload
The accountant uploads the same Monday file by hand to be sure. Nothing is added: every line is already there.
0 added
By Friday the statement is complete without anyone opening internet banking, and the matching work on bank reconciliation starts from lines rather than from files.
Switching it on
What each feed needs before it runs.
Both feeds sit on the bank reconciliation screen, behind the reconcile permission, on the Premium and Enterprise plans. The same switches are on the API the AWRA mobile app uses.
M-Pesa
Collect and pay over M-Pesa through AWRA, so there is money for the feed to see.
Choose the date to reconcile from. The screen suggests the first of the month.
Connect. Lines since that date come in at once; new ones every 30 minutes.
Statement inbox
Set up the inbox on the bank account, with allowed senders if you want them.
Copy the address shown and ask the bank to send its scheduled statement there.
For a CSV bank, upload one statement by hand first so the columns are mapped.
Inbound mail on the server
An inbound mail domain with its MX record pointed at the mail provider.
A Mailgun signing key or a Postmark inbound secret.
Until both are set, the screen says the inbox is not set up rather than showing an address that goes nowhere.
Capabilities
Everything a feed does, in one place.
M-Pesa in and out
Customer receipts, reversals and supplier or payroll payouts that AWRA moved, as signed statement lines.
Every 30 minutes
A scheduled check across every active M-Pesa feed, one at a time inside its own workspace, plus Check now.
A private inbox per account
One address per bank account, made of 24 random characters, that you can replace at any time.
Allowed senders
Specific addresses or a whole bank domain. Anything else is refused and the refusal is shown.
Fails closed
The inbound endpoints refuse every delivery until the provider’s signing secret is configured.
One dedupe for all sources
Feed, email and upload write through the same check, so the same statement read twice adds nothing.
Saved CSV mapping
Map a bank’s columns once — signed amount or money in and out, date format, decimal comma — and reuse it.
Pause and resume
Stop a feed without losing its address or its history, and pick it up again later.
Errors you can see
An unreadable attachment, a refused sender or a failed M-Pesa check is written on the account with its reason.
Bank feeds — what arrives on its own today
What AWRA OpsHub does today
An M-Pesa feed every 30 minutes of the paybill and till money moved through AWRA: customer receipts, reversals as their own line, and supplier and payroll payouts.
A dedicated M-Pesa account to reconcile, created on the same ledger account those M-Pesa payments post to, from a start date you choose.
A private statement address per bank account, replaceable at any time, with the old address stopping at once.
An allowed-senders list of addresses or whole domains, with refused statements recorded on the account.
CSV, OFX, QFX and SWIFT MT940 read from an email attachment or an upload by the same detection, up to ten attachments of five megabytes each per email.
One fingerprint check for every source, so an overlapping or re-sent statement adds only the lines that are new.
Safaricom’s own statement recognised against the M-Pesa feed by receipt code and amount, so the full paybill history, including money moved outside AWRA, sits on one account without a line counted twice.
Signed inbound delivery from Mailgun or Postmark, refusing every delivery until a secret is configured.
More we can add to your workspace
A direct connection to your bank, where the bank offers one, so lines arrive without waiting for a scheduled email.
PDF statements read into lines, including the M-Pesa statement Safaricom emails as a protected PDF.
Excel statement workbooks read directly, without saving them as CSV first.
Card settlement from your payment gateway as its own feed, net of fees, so card collections reconcile the way M-Pesa does.
An alert when a scheduled statement is late, so a bank that stops sending is noticed the next morning rather than at month end.
ISO 20022 statement files, for the banks moving from MT940 to the newer standard.
Where we point you to a specialist
We will not ask for your internet banking login. A feed that works by signing in as you holds the one credential that can move your money, and we would decline to store it even on request.
We read what the bank sends and do not correct it. A line that looks wrong on the statement is a question for the bank, and the reconciliation screen is where you record what you decided about it.
Each row in the middle column is scoped work on a pipeline that already has the inbox, the parsers and the fingerprint check to build on. Tell us which bank or which file format your finance team is still keying in.
The M-Pesa money your workspace moves through AWRA: successful customer payments by M-Pesa prompt and by paybill or till, receipts reversed after they succeeded (as their own line in the other direction), and supplier and payroll payouts sent from AWRA to a phone number, paybill or till. Money moved on the till outside AWRA, such as a send made from the M-Pesa business portal, is outside what the feed can see.
How often does the M-Pesa feed update?
Every 30 minutes, for every active M-Pesa feed. You can also press Check now on the account, and pause or resume the feed at any time. When you first connect, every transaction since the start date you chose comes in at once.
Which statement formats can the inbox read?
CSV, OFX (including QFX, in both the older SGML form and the XML form) and SWIFT MT940, which is what many Kenyan banks send as a scheduled statement. A file is recognised by its extension and by its contents, exactly as an upload is. PDF statements and Excel workbooks are passed over today; reading them is something we can add to your workspace.
Why does a CSV statement need one upload by hand first?
Because every bank lays out its CSV differently, and an email gives nobody the chance to say which column is the date and which is the amount. The first time you upload a bank’s CSV, AWRA guesses the columns from the header row and you confirm them — a signed amount or a money-in and money-out pair, the date format, and whether the bank writes decimals with a comma. That mapping is saved on the account and every emailed CSV after that uses it.
What stops the same line being added twice?
Every line gets a fingerprint before it is written, and a line whose fingerprint is already on that account is skipped. An OFX line uses the bank’s own transaction ID. A CSV or MT940 line uses its date, amount and reference, plus how many identical lines came before it in the same file — so two genuine KES 30 charges on one day stay two lines, and a re-sent file adds only what is new. Feed, email and upload all write through the same check, and an M-Pesa transaction that arrives both from the feed and on Safaricom’s statement is recognised by its receipt code and amount and kept once.
Who can send statements to the inbox address?
Anyone who has the address, unless you list allowed senders — specific addresses, or a whole domain such as the bank’s. A statement from anyone else is refused and the refusal is recorded on the account. The address itself carries 24 random characters, and you can replace it at any time; the old one stops working at once.
What has to be configured before the statement inbox works?
An inbound mail domain with its MX record pointed at the mail provider, and either a Mailgun signing key or a Postmark inbound secret. The inbound endpoints refuse every delivery until that secret is set, and the bank account screen says the inbox is not set up rather than showing an address that would go nowhere.
Which plans include bank feeds?
Bank feeds live on the bank reconciliation screen, so they come with bank reconciliation on the Premium and Enterprise plans, and need the permission to reconcile transactions. Adding a new bank account to reconcile also needs the permission to manage accounts.
Help Center
Need a quick answer while you read?
Run inventory, procurement, assets, sales, and field work with approved AWRA guidance for setup, migration, integrations, security, pricing, and support.
Demo booking
Book a focused AWRA demo
Share a few details so we can send the confirmation email and route your request to the right AWRA team.
1
Request received AWRA has your demo context and contact details.
2
Check your email We send confirmation and follow-up from the AWRA team.
3
Book calendar slot Pick a time for a focused workflow walkthrough.
We use necessary cookies for secure sessions. With your permission, we also use cookies and browser storage for preferences, analytics, and demo engagement. Privacy Policy
AWRA OpsHub
Cookie settings
Cookie Consent Manager
Necessary cookies stay on for login, CSRF protection, and security. You can choose the optional categories below.
Overview
General Information
AWRA uses cookies and browser storage to keep public pages secure, remember selected preferences, measure website performance, and manage demo engagement prompts.
You can choose whether functional and marketing engagement storage apply. Analytics measurement is always active in this AWRA setup.
These settings apply to AWRA public website experiences such as the homepage, feature pages, pricing calculator, blog, help center, and request-demo page. Authenticated dashboard and vendor portal sessions still rely on required security cookies.
Required
Always active
Functional
Optional
Analytics
Always active
Marketing
Optional
For more context on privacy handling, open the Privacy Policy.
Required Cookies
Required Cookies
Always Active
Required cookies and storage support basic website delivery, secure sessions, request protection, and remembering the consent choice itself.
These cannot be switched off from this manager because disabling them would break login/session behavior, form protection, or the ability to remember the privacy choice you save.
Cookie details
Session security: keeps secure server sessions working while browsing AWRA.
CSRF protection: helps verify form submissions and protect requests.
Consent record: stores the preference decision so the banner does not keep asking after a choice is saved.
Examples: Laravel session cookies, CSRF tokens, and the AWRA consent preference record.
Duration: session security can expire with the browser/session; saved consent can last longer so the same browser remembers the choice.
Functional Cookies
Functional Cookies
Functional storage improves the public website experience by remembering interface choices, helper states, dismissed notices, and short-lived interaction preferences.
Turning this off does not stop secure required cookies or analytics. It only limits optional convenience memory.
If disabled, AWRA may show some helper prompts again or forget non-essential display choices. Core public pages, contact forms, and request-demo forms still work.
Cookie details
UI preferences: remembered display choices and helper states where available.
Dismissed notices: session-level or preference-level memory for notices the visitor has closed.
Frequency helpers: optional browser storage that prevents repeated prompts when allowed.
Examples: localStorage or sessionStorage values for dismissed banners, guide/helper states, and lightweight public-page preferences.
Effect when off: AWRA avoids optional convenience memory unless it is also allowed through marketing and engagement preferences.
Analytics Cookies
Analytics Cookies
Always Active
Analytics helps AWRA understand public page performance, traffic patterns, and content usefulness so we can improve the marketing website.
This category does not by itself enable demo popups, exit-intent prompts, or advertising pixels. Those are controlled by Marketing & engagement.
In this AWRA setup, Google Analytics and Google Tag Manager measurement are treated as mandatory website measurement and remain active.
Cookie details
Google Analytics / GTM: measures aggregate traffic and page activity.
Performance insight: helps identify which public pages, docs, and demo paths visitors use.
Operational signal: supports website quality decisions without enabling demo popups by itself.
Examples: Google measurement identifiers such as GA/GTM tags and related browser identifiers set by Google scripts.
Use: page views, source/referrer trends, public content performance, and product education page effectiveness.
Marketing & engagement
Marketing & engagement
Marketing and engagement storage supports demo prompts, exit-intent prompts, campaign attribution, and future advertising pixels.
When disabled, AWRA will not auto-open demo or exit-intent popups. CTA buttons can still open a form because that is a direct visitor action.
When enabled, AWRA can remember that a visitor already saw, dismissed, or submitted a demo prompt so the same popup is not repeated aggressively.
Cookie details
Demo prompt memory: tracks whether an auto prompt or exit prompt was recently dismissed.
Demo submission memory: avoids asking again after a visitor submits a demo request.
Campaign context: keeps source page, referrer, and UTM context available for demo requests.
Examples: popup frequency caps, demo-submitted flags, engagement source fields, and UTM/referrer context.
Effect when off: auto demo prompts and exit-intent prompts stay blocked; normal navigation and manually clicked CTA buttons still work.