A typical Singapore café will record S$120,000 of revenue on the POS in a given month. The bank will show roughly S$98,000 of card settlement deposits. GrabFood will pay out about S$14,000 from orders made two weeks earlier. A small wholesale catering invoice for S$5,200 might be raised but unpaid at period close. The owner asks: are the numbers right?

The honest answer most operators get from their bookkeeper: “I'll get back to you after the close.”

The reason the close takes 14 days when it should take 4 is almost always sitting inside sales reconciliation. The fix is a discipline, not a tool. This piece walks through the channel-by-channel pattern that works for Singapore F&B operators.

The principle: reconcile each channel separately

The single biggest reconciliation mistake is to attempt everything in one pass — POS total against bank total against platform total against cash count. That collapses four different timing patterns into one report, and the residual gap is impossible to investigate.

Reconcile each channel against its own settlement source, on its own cadence, with its own tolerance. Then aggregate. That's the rule.

Channel 1: cash

Source of truth

POS daily Z-report or cash drawer reading at end of shift.

Cadence

Daily. A cash drawer should be reconciled and counted on the shift it closes — not days later. Daily bank-in for cash is ideal where the volume justifies it.

What you reconcile against

Daily cash sales per POS → cash counted in drawer → cash deposited to bank. Each step should match within an agreed tolerance (small variances from rounding, tips, or float adjustments).

Where it breaks

Petty cash withdrawals from the till that aren't logged. Float not reset between shifts. Cash kept on-site for too long without a deposit (a control risk). If cash variances are persistent, that's a process problem, not an accounting one.

Channel 2: card / merchant settlement

Source of truth

POS card settlement report + the merchant's daily settlement report (NETS, Visa/Mastercard acquirer, AMEX).

Cadence

T+1 to T+2 typically. Most card settlement deposits reach the bank one to two business days after the transaction date. Reconcile on a 2-3 day rolling window.

What you reconcile against

POS card sales by date → merchant's daily settlement report → bank deposit. The merchant settlement report is the critical middle link — it's where MDR (merchant discount rate) is netted off, and where any chargebacks land.

Where it breaks

Merchant fees coded straight to a generic bank-charge account instead of being matched to the revenue they relate to. AMEX settling on a different cycle to Visa/Mastercard. Different terminal IDs across outlets feeding one bank account without a tracking category. Tip-on-card flows where the tip goes to staff but the gross card amount lands in the bank.

Channel 3: delivery platforms

Source of truth

The platform's merchant dashboard — GrabFood, Foodpanda, Deliveroo, Chope, etc. Each one has a payout report.

Cadence

Weekly payouts are typical, often on a fixed day. The lag between order and payout is meaningful — 10 to 14 days is not unusual.

What you reconcile against

POS platform orders (yes — orders should flow into the POS, even if accepted on the platform tablet) → platform settlement report → bank payout. Reconcile against the platform's own statement, not the bank deposit alone. The bank shows a net figure; the statement shows the gross-to-net workings.

For each payout, you need to see:

  • Gross order value
  • Platform commission (the 20-35% line)
  • Promotional discounts the platform absorbed vs the operator absorbed
  • Refunds and adjustments
  • Net payout

Each of these lines should hit its own account in Xero, not collapse into one “delivery revenue” line. Without that, your effective revenue per channel is hidden.

Where it breaks

Platform reports downloaded weeks late, so the period close can't reconcile against actual platform data. Promotional discounts misclassified (operator-absorbed promos are a real cost; platform-absorbed promos are not). Refunds posted as generic income reductions instead of against the original order's revenue line. Multiple outlets on one platform account without outlet-level breakdown.

Channel 4: wholesale / catering / B2B

Source of truth

Your own invoicing system (or Xero, if you raise invoices in Xero directly).

Cadence

Invoice-driven. Reconciliation happens at invoice raise, at payment, and at month-end against receivables aging.

What you reconcile against

Invoice raised → bank receipt → AR ledger closed. For B2B wholesale customers on credit terms, this is the channel where receivable slippage becomes a cash problem.

Where it breaks

Invoices raised but not entered in the accounting system (catering side-jobs that bypass the formal flow). Partial payments not allocated against specific invoices. Credit notes issued informally without going through Xero. Invoices marked “paid” that haven't actually been paid yet.

Bringing the four together

Once each channel is reconciled on its own cadence and against its own source of truth, the aggregate becomes obvious:

  • POS daily sales by channel → matches reconciliations
  • Bank account totals across the month → matches sum of reconciled deposits
  • Xero revenue by tracking category (channel × outlet) → matches the per-channel reconciliations

When discrepancies surface (and they will), you know exactly which channel to investigate — because each one is its own report. That's the discipline.

How AI agents help here

The reconciliation work itself is well-suited to automation once the channel boundaries are designed. The pattern we use at Acuitas:

  • Categoriser drafts the right Xero account and tracking category for incoming card settlement and platform payouts based on historical patterns.
  • Outlierflags any platform payout that arrives more than a tolerance variance off expected (based on the platform's own report).
  • Close Captain tracks which channel reconciliations are complete by close day and which are still blocked.

Humans still review and sign off. The agents handle the high-volume, pattern-matching middle layer; people handle the edge cases.

The fastest winFor most F&B operators we work with, just getting the four channels reconciled separately (rather than all-in-one) cuts close time by three to five days in the first month. The deeper benefits — outlet-level margin visibility, channel contribution analysis — compound from there.

If your close is dragging and you're not sure which channel is the problem, take our stack assessment — it identifies the dominant constraint in five minutes. Or read our worked example, the stack teardown for a 3-outlet café group, which walks through the full redesign.

Common questions about F&B sales reconciliation

How accurate is “close enough” for reconciliation tolerance?

We typically use 0.5% of channel revenue as the tolerance for unexplained variance. Below that, investigate only on a quarterly sample basis. Above that, investigate per period. Persistent variance above 1% on any channel is a structural problem (rates entered wrong, refunds being misclassified, etc.) rather than a normal timing difference.

What do I do when a delivery platform's payout is materially short?

Don't close the period until the variance is understood. Common causes: customer refunds the platform absorbed and netted off the payout, promotional rebates you signed up for and forgot about, fees changed by the platform without clear notification, technical reconciliation issues on the platform side. Open a ticket with the platform if the discrepancy isn't explained by their report.

How do I handle tips on card?

Two flows: tips that are pooled and distributed to staff, and tips that are paid to the individual server. Both should flow through a separate payable account, not be treated as revenue. The card payout from the merchant includes the tip amount gross; the corresponding outflow to staff is recorded against the payable. Net effect on the P&L should be zero for the tip portion.

What if I run multiple outlets on a single delivery platform account?

Many platforms allow outlet-level reporting within a single merchant account. Where they do, use it — your chart of accounts will have tracking categories for outlet, and the platform export should map cleanly. Where the platform doesn't provide outlet-level split (a few legacy or smaller platforms still don't), you'll need to estimate based on POS data per outlet, which introduces variance. The cleanest answer is to have separate platform accounts per outlet where the platform supports it.

How long should sales reconciliation take per channel per month?

With clean upstream data and reconciliation rules coded: 30-60 minutes per channel per month for review. Without those, multiply by three or four. The biggest gain from automation is on the data-flow side, not the reconciliation itself.

— The Acuitas team