Voucher reconciliation is one of those month-end jobs that should take twenty minutes.
Done right, it is a quick check: voucher liability agrees to VoucherGrid, Stripe clearing agrees to payout timing, GST agrees to the BAS summary, and the month closes.
Done wrong, it turns into an afternoon of comparing bank deposits, Stripe payouts, voucher sales, fees, refunds, and redemption reports that were never measuring the same thing in the first place.
The difference is rarely Xero itself. It is usually the setup.
Most voucher reconciliation problems trace back to one of three decisions made at the start: voucher sales were posted to revenue instead of a liability account; Stripe net payouts were reconciled against gross voucher sales; or voucher liability, redemption revenue, and breakage were all mixed together in accounts that should have been separate.
Here is the cleaner setup.
This article is general information, not accounting advice. Your accountant should confirm the chart of accounts and treatment that suits your business.
Why reconciliation goes sideways
Two numbers look like they should match, but they do not.
VoucherGrid sees the gross voucher sale. A customer buys a $150 voucher, so the voucher ledger records $150 of value issued.
Stripe sees the card payment, deducts its fee, and pays out the net amount.
Xero sees the bank deposit.
Those are three different views of the same transaction. They should reconcile, but they should not be forced into one line.
If you try to reconcile the Stripe bank deposit directly against gross voucher sales, the numbers will never tie. The missing amount is not missing revenue. It is Stripe's fee.
The fix is simple: use a clearing account.
Gross voucher sale goes into the clearing account. Stripe fee comes out of the clearing account. Net Stripe payout moves from the clearing account to the bank.
Now every number has somewhere to live.
The four account types you need
A clean voucher setup in Xero needs four account types.
A Stripe clearing account. Where voucher sales land at the gross amount, where Stripe fees come out, and where the net payout moves on to your bank.
A voucher liability account. Where face value sits between sale and redemption. This is your "we owe the customer a meal, a haircut or a treatment" balance. It must be set up as a current liability in Xero - not a revenue account, not a clearing account. This is the single most important setup decision.
A revenue account, or several. Where value moves to when a voucher is redeemed. You may need separate revenue accounts depending on whether redemptions are GST-applicable, GST-free, or treated differently for product mix reasons.
A payment processing fees account. Where Stripe's transaction fees post as an expense.
Get the chart of accounts right on the day you open your voucher system, and every month-end after that is a checklist. Get it wrong, and you are re-litigating the same three errors every quarter.
The four journal shapes VoucherGrid emits
Voucher sale. Cash comes in (to the clearing account), liability goes up, no revenue recognised yet, no GST yet for a face value voucher. Debit Stripe clearing, credit voucher liability, both at face value, TaxType BAS Excluded on both lines. This is the AASB 15 rule working correctly.
Voucher redemption. Liability comes down, revenue is recognised, GST is attributed to the supply actually consumed. Debit voucher liability, credit revenue, at the redeemed amount. TaxType on the revenue line is whatever your product supply attracts - GST on Income for most retail and hospitality, GST Free Income for health services, etc. This is where your P&L finally moves.
Breakage recognition. Unredeemed balance is written off as revenue once your breakage policy threshold fires. Debit voucher liability, credit breakage revenue, at the unredeemed amount. For face value vouchers, this entry should also include the GST increasing adjustment of 1/11th of the unredeemed amount - see AASB 15 breakage, in four journal entries for the full reasoning.
Refund. Reverses the sale cleanly. Debit voucher liability, credit Stripe clearing, at the refunded amount. No GST adjustment for a refunded face value voucher where no supply took place.
Mapping VoucherGrid to Xero account codes
Here is a sample chart of accounts your bookkeeper can drop into Xero. Codes are illustrative - replace them with your own if you already have a COA.
| VoucherGrid category | Sample Xero code | Account name | Tax treatment |
|---|---|---|---|
| Stripe clearing | 090 | Stripe clearing account | BAS Excluded |
| Voucher liability | 860 | Unredeemed voucher liability | BAS Excluded |
| Redemption revenue - taxable | 200 | Sales - vouchers redeemed | GST on Income |
| Redemption revenue - GST-free | 201 | Sales - vouchers redeemed (GST-free) | GST Free Income |
| Breakage income | 260 | Breakage income | Per accountant policy |
| Payment processing fees | 404 | Payment processing fees | GST on Expenses, if GST applies |
| Refunds | 090 | Stripe clearing account | BAS Excluded |
The most important row is the voucher liability account. If you do not have a separate liability account for unredeemed vouchers, reconciliation will never be clean. Create it as a current liability. Do not use a revenue account. Do not use a generic clearing account. Do not bury it inside sales.
The second most important row is the Stripe clearing account. That is what lets gross voucher sales, Stripe fees, and net bank payouts all reconcile without pretending they are the same number.
The twenty-minute month-end checklist
01 · Pull the VoucherGrid Xero export or sync report
Start with VoucherGrid's month-end export, sync log, or Xero journal summary. The exact menu name may change, but the output you want is the same: sales, redemptions, refunds, fees, and breakage for the period.
02 · Compare closing voucher liability
Compare the closing balance of your Xero voucher liability account to VoucherGrid's outstanding voucher liability report.
These should match to the cent. If they do not, look for an unsynced redemption, refund, imported voucher, manual journal, or breakage event.
03 · Reconcile the Stripe clearing account
Your Stripe clearing account should be zero, or it should match known pending Stripe payouts at month-end.
If there is a residual balance, it is usually one of three things: a Stripe payout from the final one or two days of the month that has not landed yet; a Stripe fee that has not been posted; or a refund that has been processed in one system but not the other.
Do not force this against sales revenue. Clear it through the clearing account properly.
04 · Check Stripe fees
Stripe fees should appear as payment processing fees, not as missing voucher revenue.
If a $150 voucher sale results in a $145.92 bank deposit, the difference is not a voucher discount and not a redemption adjustment. It is a payment processing expense.
05 · Run the GST reconciliation
Use VoucherGrid's BAS Summary or GST reconciliation report and compare it to Xero's GST report for the same period.
For face value vouchers, GST should follow redemption and relevant expiry adjustments. For non-face value vouchers, GST generally follows the sale.
If the reports diverge, check product-level GST classification first. Most mismatches start there.
06 · Review breakage only when policy says so
Do not invent breakage monthly just to make the numbers look tidy.
For most small businesses, breakage recognition should follow a clear policy agreed with the accountant - commonly at expiry for face value vouchers, or on another defensible basis if the business has enough historical redemption data to support it.
The month-end task is not to guess breakage. It is to check whether a breakage event occurred under the policy.
07 · Attach the report pack
Attach the VoucherGrid report PDF, CSV, or sync summary to the relevant Xero journal or month-end workpaper.
The goal is simple: if your accountant opens the month six months later, they can see exactly why the voucher liability balance changed.
The one gotcha that costs people an afternoon
The most common reconciliation failure is treating Stripe's net payout as if it should equal VoucherGrid's gross voucher sales.
It will not.
VoucherGrid records the voucher value sold. Stripe deducts its fee. The bank receives the net amount. Those are three related numbers, not one number.
The fix
Use a Stripe clearing account.
Post gross voucher sales to the clearing account. Post Stripe fees out of the clearing account. Post Stripe payouts from the clearing account to the bank.
Once that structure is in place, Xero sees the full sale, the fee as a separate expense, and the bank deposit as the net payout. The reconciliation becomes obvious.
Set it up once. Stop fighting it every month.
Bottom line
A clean voucher chart of accounts is not complicated.
You need a clearing account, a liability account, revenue accounts, and a payment processing fees account.
That setup might take half an hour. It can save hours every year, and it prevents the bigger problem: voucher sales being treated as revenue before they are earned.
If your current reconciliation takes more than an hour each month, the issue is probably not Xero. It is probably that voucher liability, Stripe fees, and bank deposits are being forced through accounts that were never designed to hold them.
Fix the chart, and month-end becomes a checklist.