A reserve is the part of a payout that never arrives. The processor keeps a slice of your sales to cover future refunds and chargebacks, and pays it back weeks or months later. In the meantime it is still your money, which means it belongs on your balance sheet, and it has to be provable at every month-end.
Most bookkeepers handle a reserve once, in the payout where it appears. The harder job is the balance that builds up over time: holds going in every payout, releases coming out on a schedule set months ago, and the occasional early release that rewrites the schedule. This guide covers how Shopify Payments and Stripe record reserves, how to book them, and the roll-forward that ties your ledger to the processor.
How Shopify Payments records a reserve
Shopify's help page on reserves describes two kinds. A fixed amount reserve holds a set sum for a period; Shopify's example is $1,000 reserved for 120 days. A percentage-based reserve holds a share of each transaction, with the example of a 10% reserve held for 120 days.
Both show up inside payouts as individual transactions:
- Reserve funds are negative entries that reduce a payout by the amount held.
- Released funds are positive entries that return held money once the reserve period ends.
Shopify groups both under Reserved funds in the payout breakdown, and the same page explains how to export all reserve transactions to a CSV file from the Payouts area. It also defines the balance: your total balance is the sum of your Pending and Reserve amounts, so $2,000 pending and $8,000 reserved is a $10,000 total. Only the pending part is heading to your bank soon.
Two details matter for reconciliation. Before a reserve expires, Shopify runs a risk review and may lift, keep, reduce or increase it. And if a reserve is released early, Shopify says you might receive a bulk positive reserve transaction, after which, at the original expiry dates, "the original positive reserve transactions are paid out with equal negative reserve transactions". Those later pairs net to zero. If only one half of a pair is booked, the ledger drifts away from Shopify by exactly that amount.
How Stripe records a reserve
Stripe's reserves support topic describes a fixed reserve, where a percentage of each new transaction is held until a set release date, and a rolling reserve, where the percentage is held on a rolling basis, such as a 30-day window. Stripe may also transfer a portion of your existing balance into reserve. It says reserve periods are normally 30 to 90 days, and you can see the status of any reserve in the Dashboard.
For anyone reconciling from the API, Stripe's 2026-01-28 changelog entry added two balance transaction types, `reserve_hold` and `reserve_release`, and a `risk_reserved` balance type "to reconcile Risk Reserved balance changes". If you already rebuild payouts from balance transactions, as in our Stripe payout reconciliation guide, filtering on those types gives you the reserve movements for any period.
Booking reserves in Xero
The reserve is an asset: a receivable from the processor. Give it its own balance sheet account, one per processor, such as Shopify Payments reserve and Stripe reserve. Do not leave it inside your clearing account, where it hides among timing differences, and never expense it.
Each payout journal then carries two extra lines alongside sales, GST, fees and refunds. A hold debits the reserve account; a release credits it. The GST belongs to the underlying sale, which you have already recorded at gross. The reserve line is only a movement between two of your own assets, so it carries no tax.
Take a Shopify payout where, for illustration, the reserve is 10% of each charge:
| Component | Amount |
|---|---|
| Gross charges | $10,000.00 |
| Shopify Payments fees | −$175.00 |
| Reserve held (10%) | −$1,000.00 |
| Reserve released (from earlier charges) | +$800.00 |
| Deposit to bank | $9,625.00 |
- Gross charges
- Amount
- $10,000.00
- Shopify Payments fees
- Amount
- −$175.00
- Reserve held (10%)
- Amount
- −$1,000.00
- Reserve released (from earlier charges)
- Amount
- +$800.00
- Deposit to bank
- Amount
- $9,625.00
The parts sum to the deposit: 10,000.00 − 175.00 − 1,000.00 + 800.00 = 9,625.00. The journal debits bank clearing $9,625.00, fees $175.00 and the reserve account $200.00 (the net of $1,000.00 held and $800.00 released), and credits sales and GST for the $10,000.00 gross. Some teams prefer separate hold and release lines so the journal mirrors the payout. Either way, the net change in the reserve account must equal the net of the reserve transactions in that payout. The clearing-account method covers the rest of the entry.
The month-end reserve roll-forward
A payout-by-payout entry proves each deposit. It does not prove the balance. For that you need a roll-forward, built from the reserve transactions dated in the month:
| Shopify Payments reserve, October | Amount |
|---|---|
| Opening balance, 1 October | $36,400.00 |
| Add: reserve holds in October | $12,180.00 |
| Less: reserve releases in October | −$9,640.00 |
| Closing balance, 31 October | $38,940.00 |
- Opening balance, 1 October
- Amount
- $36,400.00
- Add: reserve holds in October
- Amount
- $12,180.00
- Less: reserve releases in October
- Amount
- −$9,640.00
- Closing balance, 31 October
- Amount
- $38,940.00
Then tie that closing figure to two places:
- The processor. The Reserve amount Shopify shows at period end, or Stripe's reserved balance, should equal $38,940.00. Record the figure as close to the cut-off as you can, and note any reserve transactions dated after it.
- The ledger. The reserve account in Xero at 31 October should also equal $38,940.00.
If all three agree, the reserve is proven. If the ledger shows $37,940.00, the $1,000.00 gap is your starting point: look for a payout whose reserve lines were netted into fees or clearing, a release booked twice, or one half of an early-release pair journalled without the other. Because the roll-forward is built from the processor's own transaction list, every difference traces to a specific transaction rather than a plug.
Checks worth adding to the close
- Release schedule. For a percentage reserve, this month's releases should broadly match holds placed one reserve period earlier. With a 120-day term, October's releases relate to June's holds. A month with holds but no releases is worth a question.
- Terms changes. A risk review can extend or resize a reserve. Keep the processor's reserve emails with the workpapers so the reviewer can see why the schedule moved.
- Zero-net pairs. After an early release, expect matching positive and negative entries at the original expiry dates. Book both or neither.
- Classification. A reserve due within twelve months is normally a current asset. A 120-day hold fits that, but check any reserve with a long or open-ended term.
- Open disputes. Both processors describe reserves as cover for refunds and chargebacks, so review open disputes alongside the reserve balance. Our chargebacks guide covers how to book them.
Why this matters for your close
A reserve is easy to lose because it never reaches the bank. Netted into fees it overstates costs; left in clearing it becomes an unexplained balance that grows every month. A separate account and a one-page roll-forward, tied to the processor's transaction export, turn it into a number you can sign off in a few minutes.
This is the kind of payout decomposition Vert is built for: each payout split into sales, fees, refunds, chargebacks, reserves and GST, and proven to sum to the deposit before a journal is drafted for your approval. If you would like to see it on your own payouts, you can join the pilot.
