Finance & accountingPattern: routing

    Cash application agent

    We design, build and deploy an AI agent that reads your bank feed, POS settlements and emailed remittances, fuzzy-matches each receipt to the open invoices it pays — including part-payments and one lump sum covering several invoices — and clears the matched items in your ledger, surfacing only the receipts it genuinely can't place to your finance team.

    Cash application agent — documents read, cross-checked and verified by an AI agent

    At a glance

    Business valueHigh

    Cash is applied the same day it lands instead of days later, so receivables clear faster (lower DSO), the unapplied cash sitting in a suspense account shrinks, and month-end stops being a scramble.

    Build complexityMedium–High

    Fuzzy many-to-one matching across bank, POS and remittance formats, multi-currency (RM/SGD) and part-payments — and it writes the clearing entry into your ledger, so idempotency and the eval bar matter more than for a read-only flagger.

    Time to live~a few weeks (one bank account / entity, shadow mode first)
    Best fitFinance teams clearing high volumes of customer receipts against open invoices every day

    What changes when it works

    Cash recovered faster — receipts applied the day they land, so receivables clear and DSO drops
    Unapplied cash in the suspense account shrinks — fewer 'who paid this?' receipts sitting for days
    Every receipt matched consistently — including lump-sums covering several invoices and part-payments
    Month-end close stops being a scramble; the team works the exceptions, not the whole book

    Time per application

    Clearing a receipt by hand

    ~3–6 min

    With the agent

    ~15–30 sec review (exceptions only)

    Time saved

    ≈ 80–90% of receipts cleared without a human touch — roughly 40–70 hours a month at 1,000–1,500 receipts. And faster application means cash is recognised days sooner: shaving even 2–3 days off DSO frees working capital that dwarfs the monthly AI cost.

    Indicative; the actual match rate and time saved depend on receipt volume, how clean your payment references are, and how many payments are part-payments or lump-sums.

    Our agentic development process

    Every use case follows the same seven stages — from framing the problem to production.

    Our process, built on Anthropic's agent guidance and the Agent GPA eval framework: Building Effective Agents · Agent GPA

    1. 1Frame
    2. 2Map
    3. 3Design
    4. 4Build
    5. 5Architect
    6. 6Evaluate
    7. 7Deliver

    Stage 1 · Frame

    The business problem

    A finance team in the region downloads the day's bank statement and POS settlement file, then has to work out which customer paid, and which invoice each receipt clears. Most of it is detective work, not judgement — a statement line reads 'PYMT-4471' with no invoice number, a customer sends one round RM 4,300 that actually covers three invoices, another pays RM 500 short because of bank charges. The clerk hunts the open-invoice ledger, reasons out the split, posts the allocation in the ERP — and parks anything they can't identify in a suspense account. It's slow, it backs up, and when it backs up receipts sit unapplied, so DSO looks worse than the business actually is and month-end becomes a scramble to clear the pile.

    Stage 2 · Map

    The manual workflow today

    1. 01Download the bank statement / POS settlement file and open the AR ledger
    2. 02Read each receipt's amount, date and payment reference
    3. 03Search the open invoices for the customer and the matching amount(s)
    4. 04Work out part-payments and lump-sums covering several invoices
    5. 05Post the allocation and clear the invoice(s) in the ERP
    6. 06Park whatever can't be identified in a suspense / unapplied account

    Where it breaks: The slow part is the detective work — a vague reference or a round lump sum has to be reasoned back to the right open invoices — and when it backs up, receipts get parked as unapplied, so DSO looks worse than the business really is.

    Stage 3 · Design

    The agentic workflow

    We build it as a routing workflow: every receipt is first classified — a clean 1:1 match, a lump-sum across several invoices, a part-payment, or an unidentifiable one — and dispatched down the right path. Clean matches run a short chain and auto-clear; anything ambiguous is verified and, if it still can't be placed confidently, routed to your finance team with the agent's best candidate matches attached.

    A receipt lands
    1Read & normalise the receipt (bank feed, POS, remittance)
    2Classify: clean match, lump-sum, part-payment or unidentified
    3Fuzzy-match against the live open-invoice ledger
    4Verify the allocation reconciles before clearing

    Re-checks the candidate allocation — does the maths reconcile to the cent? — and re-matches before it clears anything; if confidence stays low it routes to a human instead of forcing a match.

    5Clear the matched items; route the rest to a human
    Your finance team resolves the exceptions the agent couldn't place

    Watch a case flow through the agent — it does the reading and matching; a human still makes the decision.

    See it in action

    In the bank feed

    Credit RM 4,300.00 · 14 Mar · Ref: 'SUNRISE ENT PYMT MAR'. Customer 'Sunrise Enterprise' has 3 open invoices: INV-1021 RM 1,800, INV-1044 RM 2,000, INV-1050 RM 1,200.

    How the agent applies it

    • Matched to customer 'Sunrise Enterprise' from the reference and prior payment pattern
    • RM 4,300 = INV-1021 (RM 1,800) + INV-1044 (RM 2,000) + RM 500 part-payment of INV-1050
    • INV-1021 and INV-1044 cleared in full; INV-1050 part-paid, RM 700 still open
    • Nothing left unapplied — the full RM 4,300 is allocated
    3 invoices updated, 2 cleared · auto-posted to the ledger · RM 0 left unapplied

    Every allocation traces to the receipt and invoice IDs · reversible in one step if a human overrides · ~RM 0.05–0.15 per receipt in AI cost.

    Step by step

    1. 1

      Read & normalise the receipt

      The agent ingests the day's receipts from wherever they land — a bank feed (CAMT/MT940), a CSV, a POS settlement file, or an emailed remittance advice — and normalises each into a common shape: amount, currency, value date, payer and whatever reference text came with it, reading PDFs and images with vision where needed.

    2. 2

      Classify the receipt

      It routes each receipt by type — a clean single-invoice match, one lump sum covering several invoices, a part-payment, or one it can't yet identify — because each needs different handling. This is the routing step that keeps the common case fast and the hard cases careful.

    3. 3

      Fuzzy-match against the open ledger

      Using the customer's live open invoices and their prior payment pattern, it matches the receipt to the invoice(s) it pays — reasoning past a cryptic reference, a name that doesn't quite match, or a round sum that has to be split across several open items.

    4. 4

      Verify and re-check (the loop)

      Before clearing anything it re-checks that the allocation reconciles exactly — the picked invoices sum to the receipt, the currency and open status are right — and re-matches if not. Where it still can't reconcile confidently, it stops rather than force a match.

    5. 5

      Clear the matched items

      For confident, reconciled matches it posts the allocation to your ledger and clears the invoice(s) — with an idempotency key so a replayed statement can't double-apply, and as a reversible entry so your team can override it in one step.

    6. 6

      Hand exceptions to a human

      Whatever it can't place — an unknown payer, a mismatch, a reference that leads nowhere — is routed to your finance team with the candidates it considered, so the detective work is already done. Nothing is cleared on a guess.

    Stage 4 · Build

    How we build it with Claude

    Gather contextthe receipt + your live open-invoice ledger & this payer's history
    Take actionclassify, fuzzy-match & allocate (MCP tools)
    Verify workre-check the allocation reconciles to the cent before it clears

    It works from your live open-invoice ledger, so it matches against what is actually outstanding right now — an invoice already paid or credited can't be matched twice. When it clears an item it writes a structured allocation through a connected tool carrying an idempotency key, so a re-run or a duplicated bank line can't double-apply a receipt, and every allocation is a reversible journal your team can undo in one step. It never moves money — it only allocates receipts you have already banked against the invoices they pay, and it starts in shadow mode, proposing matches for a human to confirm until its accuracy on your real receipts has earned the auto-clear.

    Integrations

    • Bank feed / statement import (CAMT / MT940, CSV or PDF remittance)
    • POS settlement / payment-gateway payout files
    • ERP / accounting ledger (AR open items, cash posting)

    Under the hood

    • Pattern: a routing front-end on the Claude Agent SDK dispatches each receipt (clean 1:1 · lump-sum · part-payment · unidentified) into a short per-type chain; each tool is exposed via an in-process MCP server.
    • Context: the customer's live open-invoice ledger and their recent payment history are loaded per receipt, so matching is against what is outstanding now and informed by how this payer usually pays — their references, rounding, and which entity they settle to.
    • Tools: read-only open-AR and payment-history lookups, a normaliser for bank/POS/remittance formats, a deterministic allocation solver (which open invoices sum to this receipt), and one write tool that posts an allocation to the ledger — no tool can move money or create, edit or delete an invoice.
    • Idempotency & reversibility: every posting carries an idempotency key (bank-line ID + amount + value date) so a replayed statement or duplicated feed can't double-apply, and each allocation is a single-step reversible journal, never a silent overwrite.
    • Guardrails & gate: auto-clear fires only above a confidence threshold and only when the allocation reconciles to the cent; part-payments, over-payments, FX rounding beyond tolerance and anything below threshold route to a human queue with candidate matches attached — never a forced match.
    • Untrusted input & PDPA/PDPC: statement narratives and remittance emails are treated as untrusted text (a crafted reference can't steer a match), and bank details, customer names and amounts are handled PDPA/PDPC-aligned across the MY and SG entities.
    • Multi-currency: RM and SGD receipts are matched in each invoice's currency using the booked FX, with a tolerance for bank charges and rounding, so a receipt short by a few cents of fees still clears cleanly.
    • Observability & audit: every match decision, the candidates considered, and each posting or reversal are logged and traceable to the bank-line and invoice IDs — a machine-readable audit trail suited to Finance controls and an external audit.
    • Eval harness: a golden set of real historical receipts — clean, lump-sum, part-paid, mis-referenced and unidentifiable — with deterministic reconciliation checks plus an LLM-as-judge on the fuzzy calls, regression-tested before any change touches live posting.

    Stage 5 · Architect

    Single model or multi-agent?

    Single model, tiered by taskOur pick here

    Applying a receipt shares one context — the receipt and the customer's open items — so a single well-instrumented model runs the judgement, with cheaper Haiku on the many clean matches and Opus reserved only for the tangled ones. Reliable, cheap per receipt, and easy to audit.

    We reserve multi-agent designs (≈15× the tokens) for genuinely parallel, breadth-first work — not for a single receipt-to-invoice reconciliation.

    Which model does what

    Classify & fuzzy-match receipts to invoices

    Reads messy references and reasons out lump-sums and part-payments — the core judgement, at moderate cost.

    Claude Sonnet

    High-volume clean 1:1 matches

    Most receipts are a clean single-invoice match; cheapest and fastest for the bulk of the volume.

    Claude Haiku

    Normalise varied statement / remittance formats

    Structured extraction from CSV / MT940 / PDF lines — a light, high-frequency task.

    Claude Haiku

    Resolve tangled or disputed allocations

    Invoked only for the hardest lump-sums and disputes Sonnet flags — a small fraction of receipts.

    Claude Opus

    What it costs — an estimate

    AI usage — per receipt

    normalise + match + verify + posting, mostly at Claude Haiku/Sonnet token rates

    ~RM 0.05–0.15

    AI usage — at 1,500 receipts/month

    lower again with the Batch API for end-of-day, non-urgent runs

    ~RM 75–225 / month

    Build (one-off)

    connecting your bank feed, POS payouts and ERP posting is a few weeks; we quote fixed after a short discovery

    scoped per integration

    Ongoing

    small next to the working capital freed by even a couple of days lower DSO

    monitoring + support

    Indicative only, shown in Ringgit at roughly RM 4.70 to the USD; per-token rates follow Anthropic's published pricing (confirm current figures). Actual AI usage depends on receipt volume, how many are part-payments or lump-sums, and how clean your references are. You can model the same figures in SGD or your currency with our Claude cost calculator.

    Stage 6 · Evaluate

    How we measure success

    • Deterministic checks first — does the allocation sum exactly to the receipt, is the invoice actually open, is the currency right
    • Self-verification — the agent re-checks the maths and re-matches before it clears, and queues rather than force a match
    • Business KPIs — auto-match rate, cash-application time, unapplied-cash balance, DSO

    We score the agent with the Agent GPA framework — Goal, Plan, Action, a current standard for agent reliability — on top of the human baseline. (reference)

    Setting the baseline

    First we measure your current cash application on a sample — time per receipt, what share you match automatically today, how much sits unapplied at month-end, and how often two clerks allocate a tricky receipt the same way. That human baseline is what every agent metric is measured against, so the lift is provable rather than assumed.

    What we test — Goal · Plan · Action

    GoalDid it apply the cash correctly?

    Allocation vs a senior AR clerk

    Its cleared/queued decision and the invoices it picks agree with an expert's on held-out receipts

    ≥ 98%
    PlanWas the matching sound and complete?

    Required checks executed

    Every candidate check is run — customer, amount, reference, open status, currency — nothing skipped

    100%

    No forced matches

    It queues rather than guess when candidates don't reconcile to the receipt

    monitored
    ActionWere the individual steps correct?

    Allocation accuracy

    The invoices and amounts it clears are exactly right, to the cent

    ≥ 99%

    Auto-match rate

    Share of receipts cleared without a human, at the accuracy bar

    ≥ 80% (target)

    Mis-application rate

    How often it clears the wrong invoice

    0 tolerated

    No unapplied leakage

    Every cleared receipt is fully allocated to the cent — no stray balance

    100%

    The go-live gate

    The agent does not post to a live ledger until it beats the human baseline and clears these GPA targets on a golden set of historical receipts — clean, lump-sum, part-paid and mis-referenced. Auto-clear starts in shadow mode (it proposes, a human confirms) and only goes live per receipt-type once its accuracy holds. Every change is regression-tested against the same set before it ships.

    Stage 7 · Deliver

    How we'd deliver it

    We start with a proof-of-concept on your real historical bank statements and open-invoice ledger — including the lump-sums and mis-referenced payments — running in shadow mode so you can see its matches before it clears anything. A focused single-account rollout is a matter of weeks.

    Free consultation

    Is your team clearing bank receipts by hand?

    Tell us your receipt volume, banks and ERP, and we'll tell you honestly whether a cash application agent is worth building — and what auto-match rate to expect.

    Talk to us about this

    Frequently asked questions

    Does the agent move or touch our money?
    No. It never initiates a payment or transfer. It only allocates receipts you have already banked against the open invoices they pay, and posts that allocation in your ledger — every posting is reversible in one step, and money movement is never in scope.
    How does it handle one payment covering several invoices, or a part-payment?
    That's the core of it. It reasons a lump sum back to the invoices that sum to it, splits a part-payment against the right invoice and leaves the balance open, and where the maths doesn't reconcile it queues the receipt with its best candidates rather than forcing a match.
    What about receipts it can't identify?
    They don't get guessed. Anything below the confidence bar — a cryptic reference, a mismatch, an unknown payer — is routed to your finance team with the candidates the agent considered: the same ones that would have sat in unapplied cash anyway, but with the detective work already done.
    Does it work across Malaysia and Singapore and multiple currencies?
    Yes. It matches RM and SGD receipts in each invoice's currency using the booked FX with a tolerance for bank charges, and it handles both entities' ledgers. Treat tax and audit specifics as a starting point for your finance team, not accounting advice.
    How long does it take to deploy?
    A proof-of-concept on one bank account or entity is usually a matter of weeks, running in shadow mode first; a full rollout takes longer — mostly ERP posting integration and your team getting comfortable letting it auto-clear, not the AI.

    Examples are based on real, anonymised engagements; details are generalised. Anchor Sprint is a member of the Anthropic Claude Partner Network — a deployment and rollout partner, not a reseller. This is general information, not legal or compliance advice.