Neobank treasury and reconciliation: matching the ledger, the bank, and the wallet every day

How a neobank reconciles its ledger with bank and wallet balances every day, why breaks happen, and how funding payouts at send time changes cash flow.

A neobank reconciles daily by checking that three numbers agree: the sum of user balances in its ledger, the cash in bank accounts held for customers, and the stablecoins in wallets held for customers. After adjusting for money in flight, any gap is a break. With BlindPay, payouts are funded at send time, so no provider balance joins that list.

Treasury in a neobank is mostly bookkeeping that has to be right every single day. The money is spread across a partner bank, wallets, and providers. Your ledger is the only place it adds up. This guide shows how to structure the accounts, run the daily check, and what changes when payouts don't need pre-funding. For the full build path, start with how to build a neobank in 2026.

Key takeaways

  • Keep four kinds of balances apart: customer cash, customer stablecoins, operating funds, and fees earned.
  • Reconcile at one fixed cut-off, every day, against the bank statement and on-chain balances.
  • Most breaks are timing. Track in-flight payins and payouts by status so they explain themselves.
  • Pre-funding adds a fourth place money can hide. Funding payouts at send time removes it.

Which accounts does a neobank treasury need?

Four buckets, kept separate from day one. Mixing them is the fastest way to lose track of whose money is whose.

BucketHoldsTypical locationReconciled against
Customer cashUser dollar balances not yet convertedFBO account at a partner bankBank statement
Customer stablecoinsUser balances held as USDC or USDTCustodial walletsOn-chain balances
Operating floatCompany money used to fund payouts and timing gapsCompany wallet or bank accountStatement or chain
RevenueFees and spreads the neobank earnedCompany operating accountFee reports

If you're still deciding where customer money should sit at all, where neobanks hold customer funds compares FBO accounts, custodial wallets, and customer-controlled wallets.

What is three-way reconciliation?

It's the daily proof that the ledger matches reality on both sides. The check:

Ledger total = bank balance + wallet balance + money in flight + fees accrued − items not yet booked

Each term needs a source:

  • Ledger total: the sum of every user's balance at the cut-off.
  • Bank balance: the FBO statement at the same cut-off. Bank cut-offs are fixed by the bank, so align yours to them.
  • Wallet balance: read directly from the chain for every customer wallet. Don't trust a cached number.
  • Money in flight: payins that hit the bank but haven't converted, payouts that left a wallet but haven't completed.
  • Fees accrued: fees owed but not yet charged, such as virtual account deposit fees that bill at month end.

Under 12 CFR 330.5, the FDIC presumes deposited funds are owned as shown in the bank's account records. For an FBO account, your ledger is what gives those records meaning. A wrong ledger is a compliance problem, not just an accounting one.

How do you run the daily check?

Six steps, at the same time every day.

  1. Close the ledger at the cut-off. One time, one time zone. Sum balances by currency and asset.
  2. Pull bank and wallet balances for the same moment. Statement export for the bank, on-chain reads for wallets.
  3. List in-flight items. Query your provider for every payin and payout not in a final state. Final states are completed, failed, and refunded.
  4. Compute the expected difference. Adjust for in-flight items and accrued fees.
  5. Classify every break. Timing, fee, FX, duplicate, or unknown. Give each one an owner.
  6. Clear or escalate within a business day. Timing breaks should vanish on the next run. Older breaks go to finance and compliance.

The webhook side matters here. Process each event once, keyed by its ID, and store the full status history. Stablecoin API webhooks: signature checks, duplicate events, and reconciliation covers the patterns.

Why do breaks happen?

Mostly because money and records move at different speeds.

Break typeExampleHow it clears
Timing, depositACH credit posted at the bank after your ledger closedNext day's run
Timing, payoutUSDC left the wallet, payout still processingStatus reaches completed or refunded
FeeDeposit fee accrued to the monthly invoice, not deductedMonth-end invoice
FXLedger booked at a different rate than the locked quoteRebook at the quote rate
DuplicateSame webhook processed twiceReverse the second entry
RefundFailed payout refunded after the cut-offNext run, with the refund reference
UnknownNo matching record anywhereSame-day escalation

US ACH is the main timing source. The Federal Reserve's FedACH service settles in batches on business days, and Same Day ACH runs in windows within the business day. Stablecoin balances, by contrast, change at any hour. Pick a cut-off that both sides can live with.

For the journal entries behind each line, how to book a stablecoin payout has worked examples.

How does pre-funding change treasury?

Pre-funding means parking money with a payout provider in advance so it can pay out on your instruction. It adds a fifth balance, one you don't control, that has to be reconciled from the provider's reports.

The working capital formula:

Capital tied up = average daily payout volume × days of cover the provider requires

If the provider wants a separate balance per corridor, run the formula once per corridor and add them up.

Annual cost = capital tied up × your annual cost of capital

How much does pre-funding cost? breaks this into five cost lines.

What does the cash flow look like with and without pre-funding?

Illustrative example. A neobank sends 100 payouts a day averaging US$500, so US$50,000 a day. All numbers are invented to show the formula.

Pre-funded providerFunded at send time
Days of cover the provider asks for3None
Balance parked with the providerUS$150,000US$0
Operating float you keep in your own walletSmallUS$50,000 (one day of volume)
Who controls the floatProvider holds the parked balanceYou do
Balances to reconcileLedger, bank, wallet, providerLedger, bank, wallet
Annual cost at 8% cost of capitalUS$12,000 on the parked balance, plus your own floatUS$4,000 on your float

The float doesn't go away when pre-funding does. You still need stablecoins ready to fund payouts. The difference is where they sit: in a wallet you control, counted in your own reconciliation, instead of with a provider. How much USDC should you hold to fund payouts? shows how to size it.

What should go on a treasury checklist?

  • Customer cash, customer stablecoins, operating float, and revenue in separate accounts or wallets.
  • One daily cut-off, written down, aligned to the bank.
  • On-chain balance reads for every wallet, not cached numbers.
  • In-flight items pulled by status from your provider every run.
  • Every quote's locked rate and fees stored with the payout.
  • A break log with owner, age, and resolution.
  • A written escalation rule for breaks older than one business day.
  • A float target and a refill trigger.
  • A monthly review of fees accrued vs invoiced.

What are the common mistakes?

  • Reconciling weekly. Breaks pile up and lose their context.
  • Booking FX at a market rate. Book at the quote rate you executed. That's the rate your user saw.
  • Counting a payout as done when it leaves the wallet. It's done when it reaches a final status.
  • Ignoring accrued fees. Small deposit fees that bill monthly show up as a steady drift.
  • Letting the float live in a customer wallet. Company money and customer money stay apart.

How BlindPay fits

BlindPay keeps the provider side of your reconciliation short. Payouts fund at send time: the quote locks the rate and fees for 5 minutes, and when the payout executes, the quoted stablecoin amount is pulled from the funding wallet. There's no balance parked with BlindPay in advance. See what "no pre-funding" means in a stablecoin API.

Each payout moves through processing to completed, failed, or refunded, and each status change arrives as a signed webhook. On virtual accounts, each deposit creates a payin with its fee shown in one of two fields: deposits below US$100.00 accrue the fee to your monthly invoice, and deposits of US$100.00 or more have it deducted at the time of the transaction. That split is exactly the kind of line your fee reconciliation needs to know about.

BlindPay operates as a non-custodial payment processor for payout flows from customer-controlled wallets. Optional managed wallets (beta) are custodial when you choose that path.

What to do next

Write down your cut-off time and your four treasury buckets this week, then run one manual three-way reconciliation against a development instance. The webhooks events reference lists every payin and payout status you'll need to track money in flight.

FAQ