kiira

Your statement,
without the squint.

Drop a bank CSV or PDF on the page. Kiira parses it, dedupes the rows, and matches every line to an existing invoice, expense, or daily sales summary. The unreconciled pile gets smaller every week, not bigger.

OCBC · Maybank · Hong Leong CSV + PDF · re-upload safe Nothing posts without your nod
OCBC · 1234 · Mar 2026
e-Statement CSV · 24 KB
Parsed · 169 rows
↳ 12s ago
  • Auto-matched
    142 84%
    128 exact · 14 close match
  • Pattern-drafted
    11 Needs review
    Facebook Ads · Grab · Stripe
  • Needs decision
    16 In queue
    Transfers, one-offs, fees
Re-uploaded → 0 new · 169 duplicates
no double-count.

Four passes,
then it asks you.

Matching cheap before matching clever. We try the fast, certain checks first — and only fall back to AI for the rows nothing else can place. Costs stay low, trust stays high.

  • 01
    Exact match

    Same amount, within three days, same supplier or payer name. 60–70% of OCBC rows land here on the first upload. No AI. Under a second per statement.

  • 02
    Close match

    When dates don't quite line up — say you sent an invoice on the 10th and the bank dates it the 13th — Kiira looks 14 days either way and pairs them by amount and supplier. Catches the late payments and the rows the bank put out of order.

  • 03
    Pattern recall

    Every manual match teaches Kiira. Third time you tag "FACEBK ADS" as Marketing, the fourth statement auto-drafts it — with your category, ready to review.

  • 04
    AI catch-all

    The last 5–10%, the ones that never repeat. Kiira asks the model for a category and supplier suggestion — only if you're not over the month's AI spend cap, and never as a silent post.

Your bank's format —
or we'll figure it out.

Three banks have purpose-built parsers today. Every other Malaysian bank's PDF goes through a document-extraction model that reads prose tables and image-only scans. Either way, the rows come out the same shape.

Direct

OCBC

CSV · e-Statement CSV · PDF

Verified against 5 monthly statements · balance chain reconciles.

Direct

Hong Leong

CSV · PrimeBiz PDF

Verified against 6 monthly statements · current + business accounts.

Direct

Maybank

Text-layer PDF

Current + savings account statements. Scanned PDFs route to AI extract.

AI catch-all

CIMB · Public Bank

PDF

Document-extraction model. Sample CSVs welcome — we'll write a direct parser.

AI catch-all

RHB · HSBC · UOB

PDF

Same model path. Drop a statement and we'll tell you if it parses.

AI catch-all

Wise · Aspire · Revolut

PDF · multi-currency

Prose-layout statements read by the fallback. MYR rows book normally.

Don't see yours? Email a sample statement to [email protected] — we'll add the parser if there's enough of a pattern to be worth it.

Upload the same file twice.
Upload the quarterly on top of the monthly.

Kiira works out which rows it has already seen, so overlapping uploads sort themselves out. You can't accidentally double-count a transaction. You can't accidentally skip one either.

Whole file

Same file = same import. Re-uploading shows "already imported" with a link to the original statement — no second row gets written.

Each row

Kiira fingerprints each row from its date, amount, description, balance, and position in the statement. Stack overlapping months and only genuinely new rows get added.

Real duplicates still book

Two RM 9.72 Facebook Ads charges on the same day? They sit on different lines of the statement, so both book and both show up for review — neither gets dropped as a "duplicate".

Original kept on file

We keep a copy of every row exactly as the bank sent it. If a parser ever reads a column wrong later, we can replay the import without asking you for the file again.

Review queue

The queue, not
the spreadsheet.

No 200-line reconciliation sheet. Kiira surfaces the rows that need a call — auto-matches for spot-checking at the top, decisions in the middle, ignored at the bottom. One row at a time.

  • 14 Mar FACEBK *ADS · meta.com −RM 847.00 Draft · Marketing Pattern · 7×
  • 18 Mar DUITNOW · Aisyah Boutique +RM 1,250.00 INV-2026-0142 Exact · 0.99
  • 22 Mar IBG · OCBC 5691 −RM 5,000.00 Mark as transfer? Between your accounts
  • 25 Mar SERVICE FEE · MEPS −RM 1.10 Needs decision No match
Actions · Match to… Create expense Mark as transfer Ignore

Nothing posts
without your nod.

Every auto-draft waits in the review queue until you approve it. Every AI call has a spend cap and gets logged. The cheap matching does the heavy lifting; AI stays on a short leash — your books stay your books.

  • Every auto-draft is reviewable

    Auto-drafts attach to the bank row as a link — they don't quietly turn into an expense behind your back. One click unlinks the draft and rolls it back cleanly.

  • AI is rare, logged, capped

    Pattern memory eats most of the "unknown" rows by month two. The fallback only fires on genuine first-encounters, and every call counts against your AI spend budget.

  • High-confidence only for auto-draft

    Pattern seen 3+ times, or AI confidence ≥0.85. Anything below that sits in the queue — we'd rather leave a row unmatched than guess wrong.

  • No bank connect, no OAuth

    Malaysia doesn\'t have a usable bank-connect API for SMEs yet. Upload is slower, but your credentials never leave your bank.

Questions we keep getting asked.

What if I upload the same month twice?

+
Nothing breaks. Same file = the upload is rejected with a link to the original statement. Overlapping periods (you uploaded March, now you upload Jan–Mar) = the January and February rows ingest, the March rows silently dedupe at the row level. The statement record says 0 new · 90 duplicates so you see what happened.

Which banks have direct parsers today?

+
OCBC (CSV + PDF), Hong Leong (CSV + PrimeBiz PDF), Maybank (text-layer PDF). Every other Malaysian bank's PDF goes through a document-extraction model that reads table layouts — CIMB, Public Bank, RHB, HSBC, UOB, Wise, Aspire, Revolut. The AI path is spend-capped and file-size-capped, and its output is the same shape as any direct parser.

Can I use this if I don\'t have a CSV export?

+
Yes. Drop the PDF. Our text-layer parsers handle OCBC, Hong Leong, and Maybank directly; everything else routes through the AI fallback — including image-only scans, which get read as images. Quality varies with the scan; we'll tell you if a row's math doesn't close.

What happens to a transaction we can\'t match?

+
It lands in the review queue with Needs decision. You can match it to an existing invoice/expense, create a new expense inline, mark it as a transfer between your own accounts, or ignore it (bank fee already booked, internal rebalance). Kiira never invents a match.

Does the AI see my whole statement?

+
No. The matching AI gets one row at a time — the description, amount, date, and a short shortlist of your top categories and recent suppliers. The PDF-extract AI (for unknown banks) does see the full document, but only to turn it into rows; no categorisation runs at that stage. Every call is logged with the prompt and token count, so you (or your accountant) can audit what it cost.

Can I teach Kiira that "FACEBK ADS" is always Marketing?

+
You already do, implicitly. The third time you manually categorise a row with that normalised description, the fourth statement auto-drafts it with your category pre-filled. The draft is still yours to approve — we don't silently post — but the typing disappears.

What about transfers between my own accounts?

+
If both accounts are configured in Kiira, the review queue suggests Mark as transfer when a debit on one account matches a credit on the other. Confirming creates a reciprocal link so neither side counts as income or expense.

How long do you keep my statement files?

+
The parsed rows stay (they are your books). The original file is kept on our object storage for 90 days for support and replay, then purged. On PDPA request, we'll purge it sooner. See the privacy page for specifics.
Bank import · free tier

Drop a statement.
See the matches.

Import, dedup, algorithmic matching, pattern memory, and review queue all ship on the free tier. AI fallback counts against your shared monthly spend budget — same one WhatsApp capture uses.