Work sample 09 / 14Payments + accounting

Stripe payouts, fees and refunds reconciled to the bank feed in Xero

How I'd approach card payouts for a premium service group on Stripe and Xero, so each payout is checked to its charges, fees and refunds, then to the bank deposit, and the clearing account returns to zero.

Worked example on representative data.

Area
Payments + accounting
Tools
Stripe · Xero · Bank feed
Typical scope
US$1,500–3,000
Timeline
About 3 weeks · 4 fixed milestones

01Context

An established premium service group takes deposits and invoice payments by card through Stripe, and keeps its books in Xero. The bookkeeper reconciles the bank feed once a month.

The systems in play

In the example the group has several branches that share one Stripe account and one Xero organization. A separate company in the group has its own Stripe account and its own Xero organization, and is handled the same way.

Table 1Who uses what
SystemWhat it does for the business
StripeTakes the card payment, deducts its fee, handles refunds and disputes, and pays out a net amount to the bank.
XeroThe ledger: invoices, payments, the bank feed and the reports the accountant relies on.
BankReceives one deposit per payout. The deposit matches no single invoice.
BookkeeperTicks off the bank feed by hand against the Stripe dashboard at month-end.

02Problem

What the owner sees

  1. Invoices marked paid, but bank deposits that match nothing
  2. Fees that never appear as a cost
  3. Refunds that leave an invoice showing as paid
  4. A month-end reconciliation that takes days

A Stripe payout is the sum of many charges, less fees, refunds and disputes. The bank shows one number, so the match has to be rebuilt from the Stripe report every time.

Table 2Where the drift starts
Everyday situationWhat goes wrong
Net depositsThe bank line is lower than the invoices it covers, because fees come off before the deposit
RefundsA refund reduces a later payout, so the deposit matches neither the invoice nor the refund
DisputesA lost dispute takes the amount and a dispute fee out of a payout, with no entry in Xero
Payments with no referenceA charge that carries no invoice number cannot be matched to an invoice
Deposits paid before an invoice existsThe money arrives first and has nothing to attach to
TimingA payout in transit at month-end looks like a missing deposit

03Approach

Four steps, in this order. Each one ends with a result that is checked.

  1. LookA read-only review of the Stripe payout reports, the Xero bank feed and last month’s reconciliation. Nothing is changed.
  2. Agree the rulesThe accounts, the matching key and the treatment of fees, refunds and disputes are written down.
  3. Set upA Stripe clearing account in Xero, payments recorded against invoices, and a payout entry for every deposit.
  4. CheckEach payout is checked to its charges, then to the bank line, and the clearing account must return to zero.
Table 3Accounting rules agreed in writing (example settings)
ItemExample treatment
Customer paymentRecorded against the invoice, into the Stripe clearing account
Stripe feeRecorded as a cost from the payout report, out of the clearing account
RefundRecorded as a credit note and refund against the original invoice, out of the clearing account
Dispute lostThe payment is reversed, the invoice reopens, and the dispute fee goes to the fees account
PayoutA transfer from the clearing account to the bank account, for the exact deposit amount
Matching keyThe Xero invoice number carried on the Stripe charge, with a second check on customer and amount
Small differencesWritten off only up to an agreed limit; anything above needs approval and is logged

04What the setup includes

What the setup includes, and why each piece is there. The detail of how it is configured is agreed in the scoping call.

Show the setup, layer by layer
Table 4The setup, layer by layer
LayerWhat is set up and why
Clearing accountA Stripe clearing account in Xero, so money in transit has a home and the balance is a check in itself.
Invoice referenceThe invoice number travels with each charge, so a payment can be matched without guessing.
Payout reportOne payout report per deposit, listing its charges, fees, refunds and disputes. This is the source for the entry.
Payout entryEach deposit is booked as a transfer from the clearing account to the bank, so the bank-feed line reconciles to a single entry.
Fees and disputesFee and dispute-fee accounts, so the cost of taking cards is a figure in the reports.
Exceptions listA weekly list of duplicates, short payments, refunds still marked paid, and timing differences.
Opening positionBalances left from earlier months are cleared and listed so the first month starts from zero.

How the data moves

  1. Customer pays by card
  2. Payment recorded against the invoice
  3. Fees and refunds recorded from the payout report
  4. Payout transferred to the bank
  5. Bank feed line reconciled
  6. Clearing account at zero

05Edge cases

These are agreed in advance and tested on a past month before go-live.

Table 5Edge cases and how each is handled
SituationHow it is handled
Partial refundRecorded as a credit note for the refunded part. The invoice shows the remaining amount as paid.
Refund of a payment from an earlier monthRecorded in the month it is refunded, against the original invoice, and listed on the exceptions list
Fee on a refunded chargeStripe may not return the fee. It stays as a cost and is not netted against the refund.
Lost disputePayment reversed, invoice reopened and dispute fee recorded. The customer balance is followed up by a person.
Customer deposit before an invoiceHeld as a prepayment and applied when the invoice is raised
Payout in another currencyThe converted deposit is the bank amount. The difference to the charge total goes to an exchange account.
Failed or returned payoutThe transfer to the bank is reversed, and the amount stays in the clearing account until it is paid again
Charge with no invoice referenceMatched on customer and amount. If that is not possible, it goes to the exceptions list.
Duplicate chargeA second charge for the same invoice is flagged and refunded after approval
Short paymentThe invoice stays open for the difference. A write-off above the limit needs approval.
Company with its own Stripe accountPosted to that company’s own Xero organization, with a clearing account of its own
Who changed whatEach entry carries a user and a date in Xero, and the payout report used is saved with the month

06Worked example

The tables below use two payouts on representative data, at an example fee of 2.9% plus US$0.30 per card charge. They show the shape of the checks, not a client result.

Table 6Payout P-1042: charges (sample data, US$)
InvoiceGrossFeeNetXero status
INV-31011,200.0035.101,164.90Paid
INV-3102450.0013.35436.65Paid, US$100.00 refunded
INV-31033,000.0087.302,912.70Paid
INV-3104250.007.55242.45Paid
Deposit D-882600.0017.70582.30Prepayment held
Total5,500.00161.005,339.00
Table 7Payout P-1042 tied to the bank (sample data, US$)
LineAmount
Charges5,500.00
Fees-161.00
Refund on INV-3102-100.00
Expected payout5,239.00
Bank line5,239.00
Difference0.00
Table 8Payout P-1043 with a lost dispute (sample data, US$)
LineAmount
Charge, INV-31052,000.00
Fee on the charge-58.30
Dispute lost, INV-3098 (earlier month)-800.00
Dispute fee-15.00
Expected payout1,126.70
Bank line1,126.70
Difference0.00
INV-3098Payment reversed, invoice reopened
Table 9Clearing account at month-end (sample data, US$)
LineAmount
Payments recorded against invoices (P-1042, P-1043, P-1044)8,400.00
Fees and dispute fee-260.70
Refunds and lost dispute-900.00
Payouts transferred to the bank (P-1042 and P-1043)-6,365.70
Clearing balance in Xero873.60
Payout P-1044 in transit per Stripe873.60
Difference0.00

07How the result is checked

The clearing account is the main check. If it does not equal the payouts still in transit, something has been missed.

Table 10Checks and pass conditions
CheckHowPass condition
Payout to its chargesThe payout report is compared to the entries made for itCharges, fees and refunds add up to the deposit
Payout to the bankEach bank-feed line is reconciled to one payout entryNo unmatched deposits
Clearing accountBalance compared to payouts in transit at month-endDifference is zero
FeesFees booked compared to the fee total on the Stripe reportEqual
Invoices marked paidEach paid invoice compared to a Stripe charge or another recorded paymentNo paid invoice without a payment
Exceptions listDuplicates, short payments, open refunds and timing itemsEach has an owner and a reason

08Scope and milestones

A fixed scope agreed in writing before anything starts. Each milestone is paid when you sign off its deliverable.

Table 11Scope: what a project like this covers
AreaIncluded
Health CheckRead-only review of Stripe reports, the Xero bank feed and the last reconciliation, a 45-minute call, written findings and a fixed quote
Accounting rulesAccounts, matching key and the treatment of fees, refunds and disputes, in writing
Xero set-upClearing, fees, dispute and exchange accounts, plus the payout entry method
First monthOne past month reconciled end to end, with opening differences cleared and listed
Exceptions listA weekly list with owners, and a month-end clearing check
Second companyThe same set-up for a company with its own Stripe account and Xero organization, where there is one
HandoverWritten SOPs, a recorded walkthrough and files you own, plus 14 days of fixes after go-live
Not includedTax filing or payroll.
Also outside the scopeChanges to Stripe pricing or contracts. Moving to different accounting software. Software subscriptions (billed to you by the vendors).
Table 12Fixed milestones
MilestoneDeliverableTimingShare
M1 Health Check and rulesFindings, a fixed quote and the accounting rules in writingWeek 120%
M2 Xero set-upAccounts and the payout entry method working on a test monthWeeks 1 to 230%
M3 First month reconciledA past month reconciled end to end, clearing at zeroWeeks 2 to 335%
M4 HandoverExceptions list, SOPs, walkthrough, 14 days of fixesWeek 315%

Typical scope for this kind of project: US$1,500–3,000

About 3 weeks across 4 fixed milestones. The Systems Health Check (US$300, fixed) comes first and confirms the scope.

Describe what is going wrong between your job system and your books, and I'll say where I'd look first.

Send a short note through the form on the home page. I will reply with where I would start, and whether the US$300 Systems Health Check is the right first step.