Short answer
A Shopify Payments payout is a net bank transfer that bundles many charges, refunds, fees, chargebacks, and adjustments, so it will never match a day of sales. Reconcile it the way banks and processors expect — record customer payments into a clearing account, then, for each payout, read its balance transactions through the Admin GraphQL API, post one deposit that clears those payments, books fees and other movements to their own accounts, and lands the net amount in the bank. The clearing account should return to roughly zero after every payout; a growing balance is your alarm.
- Shopify order Customer pays
- Clearing account Payments wait here
- Payout deposit Fees
- Bank Net amount
“The Shopify deposit doesn’t match” is one of the most common complaints finance teams have about an ecommerce integration, and it’s almost never a bug in Shopify. Payouts are net amounts that bundle many movements, and books that only record gross sales will never tie out to the bank. This guide explains the accounting pattern and how to automate it. It’s integration guidance, not accounting advice — agree the account structure with your accountant. As on every page, documented marks statements from Shopify documentation, and recommendation marks our guidance.
What a payout actually contains
Documented: through the Admin GraphQL API, the Shopify Payments account exposes payouts — transfers between the Shopify Payments balance and your bank, each with a net amount, issue date, status, and a summary — and balance transactions, each recording a money movement such as a charge, refund, adjustment, or payout, with its gross amount, fee, and net, a type, and the payout it’s associated with. Reading this data requires the read_shopify_payments or read_shopify_payments_accounts access scope.
That means a single payout can contain:
| Movement | Effect on payout |
|---|---|
| Card charges from several days | + gross amount, − processing fee |
| Refunds | − refunded amount (fees may or may not be returned) |
| Chargebacks and dispute fees | − disputed amount, − dispute fee |
| Won disputes | + reversed amount |
| Adjustments and reserves | + or − |
| Other gateways (PayPal, manual payments) | Not included at all |
The accounting pattern
Recommendation: three steps.
- At sale: post the payment to a Shopify Payments clearing account, not to the bank. (Other gateways get their own clearing accounts.)
- At payout: post one deposit per payout:
- debit Bank for the payout net,
- debit Merchant fees expense for processing fees,
- debit or credit chargebacks, adjustments, and refunds to their own accounts as appropriate,
- credit the clearing account for the gross payments the payout settles.
- Check: after each payout, the clearing account balance should return to roughly zero (plus payments not yet paid out). A growing balance is the signal that a payment, refund, or adjustment wasn’t posted.
Automating it with the Admin API
Recommendation: run a scheduled job (see scheduled synchronization) that:
- Lists payouts issued since the last checkpoint, with their status.
- For each payout that has reached its final status, fetches the balance transactions associated with it.
- Groups transactions by
typeand sums gross, fees, and net. - Verifies that the sum of nets equals the payout’s net. If not, stop and alert — don’t post a partial deposit.
- Posts the deposit to the ERP with the payout ID as the external reference, so a rerun can’t post it twice.
query PayoutsSince($after: String) {
shopifyPaymentsAccount {
payouts(first: 20, after: $after) {
nodes {
id
issuedAt
status
net { amount currencyCode }
}
pageInfo { hasNextPage endCursor }
}
}
}
Illustrative only. Filtering options, the balance transaction query arguments, and status values depend on your API version — check the Shopify Payments objects in the GraphQL Admin reference for the version you pin. Don’t assume every balance transaction is available the moment a payout appears: design the job to retry a payout whose transactions don’t add up yet, rather than failing permanently or posting a partial deposit.
Refunds and chargebacks
Recommendation:
- Refunds have two sides: the sales/tax reversal in your books (posted when the refund happens — see refunds and cancellations) and the cash movement in the payout. Keep both linked through the order reference.
- Chargebacks are their own events. Book the disputed amount and dispute fee when they hit the balance, and reverse them if the dispute is won. Don’t edit the original sale.
Multiple currencies and stores
Recommendation: reconcile per Shopify store and per payout currency, each with its own clearing account. If you sell in several currencies, decide with your accountant where currency conversion is recognized — at sale, at payout, or both — and record the exchange difference explicitly instead of letting it hide in the clearing balance.
Other channels
The same pattern works for marketplaces: Amazon and Walmart settlements net sales against their fees over a period, and you reconcile the settlement, not individual orders. See Amazon and Walmart marketplace integration. For accounting-system specifics, see Shopify + QuickBooks Online and Shopify + NetSuite.
Common pitfalls
- Payments posted straight to the bank, so deposits never match.
- Fees never recorded, overstating revenue and cash.
- Posting a payout before all its balance transactions are available.
- No external reference on the deposit, so a rerun posts it twice.
- Ignoring other gateways, leaving PayPal or manual payments in the Shopify clearing account forever.
Frequently asked questions
Why doesn't my Shopify payout match my sales for the day?
Because a payout is a net transfer of everything that settled in a period — charges from several days, minus refunds, processing fees, chargebacks, and adjustments. It also excludes payments made through other gateways such as PayPal. Match the payout to its balance transactions, not to a day of orders.
What is a clearing account and why do I need one?
A clearing account (sometimes called an undeposited funds or Shopify clearing account) holds customer payments between the time of sale and the time the money reaches your bank. Each payout clears the payments it contains. If the account doesn't return to near zero after payouts, something wasn't posted.
Which Shopify API gives payout details?
The Admin GraphQL API exposes the Shopify Payments account, its payouts, and balance transactions. Each balance transaction has a type, gross amount, fee, and net, and is associated with the payout that settled it. Access requires the read_shopify_payments or read_shopify_payments_accounts scope.
How should chargebacks be recorded?
As their own movement — the disputed amount and any dispute fee — when they appear in balance transactions, not by editing the original sale. If the dispute is won and the funds are returned, that is another balance movement. Keep the order reference so finance can see the full history.
Should I post every order's payment or a daily summary?
Either works if the clearing account logic is right. High-volume D2C stores often post daily summaries of payments by gateway; B2B or low-volume stores may post per-order payments. What matters is that every payment that will appear in a payout is posted to the clearing account before the payout is reconciled.
Sources and further reading
Platform-specific statements on this page were checked against these sources on . Vendor APIs change; confirm details in the current documentation before you build.
- [1] ShopifyPaymentsAccount (GraphQL Admin API) — Shopify
- [2] ShopifyPaymentsPayout (GraphQL Admin API) — Shopify
- [3] ShopifyPaymentsBalanceTransaction (GraphQL Admin API) — Shopify
Related reading
- ERP integrations Shopify QuickBooks Online Integration: Orders, Payouts, and Inventory How to connect Shopify to QuickBooks Online — per-order vs. daily summary posting, Shopify Payments payout reconciliation, inventory limits, API throttles, and webhooks.
- ERP integrations Shopify NetSuite Integration: Architecture, APIs, and Pitfalls How to integrate Shopify with Oracle NetSuite — REST web services, OAuth 2.0, external-ID upserts, concurrency limits, order and inventory flows, and connector options.
- Guides How to Handle Refunds and Cancellations in an ERP Integration Model ecommerce refunds, cancellations, and returns in an ERP — credit notes, restocking, partial refunds, shipping refunds, and which system initiates each action.
- Guides Amazon and Walmart Marketplace ERP Integration: Orders, Inventory, and Settlements How to connect Amazon Seller Central (SP-API) and Walmart Marketplace to your ERP — order notifications, strict rate limits, PII tokens, inventory, FBA, and settlements.
- Guides Sales Tax in Ecommerce ERP Integrations: Nexus, Tax Engines, and Data Flow How US sales tax should flow between Shopify, a tax engine, and your ERP — nexus after Wayfair, marketplace orders, exemptions, refunds, and reconciliation.
- Concepts What Is Scheduled Synchronization? How scheduled, batch-based synchronization works in integrations, how to design checkpoints and windows, and where it fits alongside event-driven updates.