Expert guide
E-commerce Order Reconciliation in Excel
Orders to payouts to bank deposits, with every fee, refund and missing dollar explained
Call us at +1 (385) 386-3860
Short answer: import three files each week, the store order export, the payment processor or marketplace transaction-level payout report, and the bank statement, into Excel Tables with Power Query. Match orders to transactions by order number or transaction ID, sum matched transactions by payout ID, and match payouts to bank deposits by amount and date. Exception lists then show unpaid orders, unmatched transactions, payouts not in the bank, and unusual fees. For direct API feeds instead of exports, see Excel API integration.
For an online store, "sales" means three different numbers: what the store platform says you sold, what the payment processor says it paid you, and what actually landed in the bank. They never match exactly, because fees, refunds, chargebacks, reserves and timing sit between them. Most small sellers accept the difference without explaining it, which is how missing payouts, double refunds and lost chargeback disputes go unnoticed.
The Three Sources
| Source | What it contains | Key for matching |
|---|---|---|
| Store order export | Order number, date, customer, gross, discounts, shipping, tax, payment gateway, refunds | Order number |
| Processor / marketplace payout report | Transaction ID, order reference, type (charge, refund, fee, chargeback, adjustment), gross, fee, net, payout ID, payout date | Order reference and payout ID |
| Bank statement | Date, description, amount | Payout amount and date (and payout reference in the description, if present) |
Always use the transaction-level payout report, not the payout summary. The summary tells you a deposit happened; the detail tells you which orders, fees and refunds make it up.
Step 1: Import With Power Query
Save each week's exports into three folders: Orders, Payouts, Bank.
Build one query per folder that appends all files and standardises column names and types.
Remove duplicates on the natural key (order number, transaction ID, bank line), since exports often overlap.
Load as tblOrders, tblTxns and tblBank.
Step 2: Orders to Transactions
On tblOrders:
Charged (processor gross):
=SUMIFS(tblTxns[Gross], tblTxns[OrderRef], [@OrderNo], tblTxns[Type], "charge")
Refunded:
=-SUMIFS(tblTxns[Gross], tblTxns[OrderRef], [@OrderNo], tblTxns[Type], "refund")
Fees:
=-SUMIFS(tblTxns[Fee], tblTxns[OrderRef], [@OrderNo])
Difference (store total vs charged):
=[@Total] - [@Charged]
Status:
=IFS([@Charged] = 0, "Not paid",
ABS([@Difference]) > 0.01, "Amount differs",
TRUE, "Matched")Orders paid by gift card, manual payment or a different gateway will show Not paid against this processor; add the gateway column to the condition so only orders expected through this processor are checked.
Step 3: Transactions to Payouts
Payout summary table (one row per PayoutID, built with UNIQUE): Net from transactions: =SUMIFS(tblTxns[Net], tblTxns[PayoutID], [@PayoutID]) Reported payout amount: =XLOOKUP([@PayoutID], tblPayouts[PayoutID], tblPayouts[Amount]) Check: =ABS([@[Net from transactions]] - [@[Reported payout]]) < 0.01
Step 4: Payouts to Bank
Bank match (same amount within 5 days after payout date): =IFERROR(XLOOKUP(1, (tblBank[Amount] = [@[Reported payout]]) * (tblBank[Date] >= [@PayoutDate]) * (tblBank[Date] <= [@PayoutDate] + 5), tblBank[Date]), "NOT IN BANK")
If the bank description includes the payout reference, match on that instead; it is unambiguous even when two payouts have the same amount.
Exception Lists to Work Weekly
| Exception | Likely cause |
|---|---|
| Order not paid | Payment failed, manual payment, different gateway, or fraud cancellation not recorded |
| Amount differs | Partial refund, edited order, currency conversion |
| Transaction with no order | Test charge, manual invoice, order deleted in the store |
| Payout not in bank | Delayed, held in reserve, sent to an old bank account |
| Chargeback without response | Dispute deadline approaching |
| Fee % above normal | International cards, currency conversion, a pricing change |
Fee and Channel Analysis
Effective fee rate by channel and month: =SUMIFS(tblTxns[Fee], tblTxns[Channel], A2, tblTxns[Month], B$1) / SUMIFS(tblTxns[Gross], tblTxns[Channel], A2, tblTxns[Month], B$1, tblTxns[Type], "charge")
Seeing the true cost per channel, including marketplace commissions and payment fees, often changes pricing and promotion decisions.
Posting to Accounting
Once reconciled, each payout can be posted as gross sales, refunds, fees and net deposit, so revenue and costs are correct. With QuickBooks, that journal can be created automatically; see QuickBooks integration. The month-end process around it is in the month-end close checklist.
Where AI Helps
Categorising unusual transaction types and adjustments from processor descriptions.
Summarising the week's exceptions in plain language for the owner.
Drafting chargeback responses from order, shipping and communication records for review.
For selling more, not just reconciling better, see bulk product descriptions with AI. Sellers with several stores or marketplaces benefit most from automated consolidation of the exports.
FAQ
E-commerce reconciliation FAQ
Orders, payouts, fees and bank