Software and accounting guide
Shopify: orders, refunds, payouts and accounting
Shopify is a commerce platform for running a store, taking orders and managing the work after a sale. Payment records depend on the provider used at checkout.
By Sam Yang · Updated
How Shopify, Payments and Balance supports the workflow
Who this guide is for: Store owners and operations teams, with finance staff who need to explain sales, refunds, inventory costs and bank deposits.
Everyday uses
- Manage store orders and the products sold.
- Follow payment, refund and fulfillment records.
- Review Shopify Payments payouts where that provider is used.
How it connects to accounting: Orders describe sales activity. Payouts show the money transferred after fees and other adjustments. Accounting needs the order and refund detail, the relevant payment-provider records and the deposit received by the bank.
How to connect it and get the records you need
A built-in connection transfers the records its vendor supports. An API lets software read or exchange specific records directly. Browser automation may use the screens and reports your role can access when a direct connection leaves a gap. Its coverage and reliability need checking for the specific workflow. Start with the options available in your account, then check what actually reaches your books.
Supported API
Use Shopify’s documented Admin API for the store records and payment records it makes available to your app. Confirm permissions and collect every page of results.
Native order and payout exports
Export order detail and the relevant payout transactions separately. Orders paid through another provider need that provider’s payout records.
Browser assistance
Inspect an order, refund or payout status when the files leave an exception. A payout marked deposited still needs the receiving bank record.
Start here: For an unexplained deposit, identify the payment provider and payout ID before trying to make the deposit equal the sales report.
Integration options and their limits
An API gives software direct access to supported records. Native reports are the files and reports available inside the product. Browser automation collects through the screens you can access. Choose the route that supplies the missing records, then check that it covers the accounts and dates you need. Reports may contain filters or omit rows. Browser work depends on permitted account access and can fail when screens change. Check record IDs, counts and dates whichever route you use.
Supported API
- What it supplies
- Shopify’s GraphQL API lets an approved app request records automatically. It documents ShopifyPaymentsBalanceTransaction, a record of activity affecting the payments balance. Check that your app can request these records and collect every page of results.
- What to check first
- Permission to read orders does not establish permission to read Shopify Payments or coverage of Shopify Balance. Check the app’s permissions, API version and available history.
Choose it when: You need recurring transaction downloads and approved access includes the payout and transaction IDs.
Native export
- What it supplies
- Shopify documents payout-transaction CSV exports and separate order exports. Order transaction history includes payments that were captured, meaning charged to the customer. It is not a complete history of payment authorizations, which approve a charge before the money is captured.
- What to check first
- An orders CSV does not supply the complete payout fee and net-amount records. Available ranges and file delivery depend on the export selected.
Choose it when: You are investigating one deposit or need the original report with a repeatable selection of records.
Permitted browser
- What it supplies
- Our saved collection observations show how to check report filters and obtain an authorized report or payout export when the existing connection does not provide it.
- What to check first
- Check the current account screen and export choice. A partial table or an export request does not prove that the complete file arrived.
Choose it when: You need to check the report definition, filters or file delivery without changing payments or settings.
What to automate and what an accountant should review
Good work for automation
- Download every page of records, keep original transaction IDs and check the payout arithmetic, including negative refunds.
Keep a person on these decisions
- Review when sales should be recorded, which payment providers are included, disputed adjustments and uncertain bank matches before changing the books.
Lessons from accounting and operations
Known problems and what to check
Are you measuring sales, payout cash or Balance movement?
Choose the records for the question. To explain sales, check the report’s definition and how it handles returns. To explain bank cash, follow the payout and transfer records. Store orders alone do not show the fees and adjustments that lead to the net payout.
Evidence basis: Saved store/report collection observations. Report availability and scopes must be checked for the current store.
Use the supported orders and payout APIs when they provide the required records for the correct store. If request limits slow a download, queue requests, wait before retrying and reuse saved results before switching to the browser.
The owner wants a sales-period comparison
Read back the report title and applied date range; export the complete set identified by Items shown and preserve adjustments.
The owner wants to explain a bank deposit
Use Payments payout detail and the actual bank transaction. Collect Balance transactions and statements separately when those movements are involved.
Start with an API, connection or built-in report that your account offers and you have confirmed. An authorized browser session may collect records those routes leave out; test its coverage for the workflow. Still check the totals against the books and confirm that all relevant costs are included.
Pitfalls and when to pause
Default Items shown can yield partial CSV; an incomplete page extraction can omit visible report values; date input can revert or shift. Orders payment CSV lacks payout/fee/net detail. Net payout is not sales; Balance transfer is not revenue.
How a plausible answer can go wrong
A complete orders payment CSV can still lack payout, fee and net details. A partial Items shown export or omitted visible report values can also make two apparently identical reports disagree.
Pause if you cannot confirm the account, permission, reporting dates or completeness of the records. Return the missing evidence for review. Do not fill the gap with an invented record, a balancing entry or an assumed zero.
When the result does not make sense
Sales and payout totals disagree
Check: Check the payment provider and the dates of orders, refunds and payouts. Then check fees, reserves and payments still waiting to be transferred before comparing totals.
Resolve the question: Explain the sales total and payout total separately. Carry payments still awaiting transfer forward; do not invent a revenue entry to force the totals to match.
Order count doubles after CSV import
Check: Inspect repeated order IDs caused by multiple line items.
Resolve the question: Count each order ID once when counting orders. Keep each item row to calculate units sold and item revenue.
Export seems complete but fee detail is missing
Check: Check whether the file is order transaction history rather than payout transactions.
Resolve the question: Collect the payout transaction export for the same identified payout and preserve both originals.
Collect the records and check nothing is missing
- Analytics and order records
- Verify store, report definition and applied dates after input; a date field can revert while looking populated.
- Payment and payout detail
- Keep fees, adjustments, payout IDs and transfer references. The amount paid out after deductions is not the same as gross sales.
- Balance CSV and monthly statement
- Treat transfers as movements between sources, not new revenue; do not assume an orders payment CSV contains these fields.
Verify current store and title of the report in the product; select dates and read back the applied range. Use complete native analytics export where available, retaining totals and the complete set of records. For source activity without export, capture the rendered report including values visible on screen that the page extractor may miss. Keep emailed transaction exports pending until received. Collect Balance Transactions CSV and monthly statements separately. Request an emailed export only when the collection authorization explicitly allows it; otherwise leave it pending for the account owner to obtain.
Checks before using the records
- Read back the applied report range and selected store after filter changes.
- Keep order activity, Shopify Payments payouts and Balance transactions separate.
- Treat emailed exports as pending until the authorized file is actually received.
Fictional collection example
A fictional store has orders in one period and the corresponding payout in the next. Its Balance account also receives a transfer. Keep all three groups of records separate. Neither the payout nor the Balance transfer is a substitute for gross sales or proof of when revenue should be recorded.
Invented teaching scenario, not a customer result or a reproduced vendor defect.
Capture the setup with the evidence
- Company, legal entity or account, report name, period, cash or accrual accounting basis, currency and timezone.
- Selected filters, status, page count, original record identifiers, record counts and totals used to check completeness.
- Collection time, source route and authorized role. Record browser and automation versions when using a browser.
- Original files and exceptions. Keep credentials, customer identifiers and financial artifacts private.
A browser version helps reproduce an interface issue. It does not validate the financial conclusion.
Practical workflows
Practical checks you can follow
Why can Shopify sales rise while the bank deposit falls?
Shopify records orders; Shopify Payments moves customer payments to your bank. Those totals can differ. Refunds, processing fees, adjustments and payments still waiting to reach the bank can reduce a deposit. Start with the payout ID and the transactions behind it, then find the deposit in the receiving bank account. Keep movements in Shopify Balance separate from Shopify Payments.
Explain one deposit without mistaking it for sales
- Identify the store, payment provider, currency, payout ID and receiving bank account. If another provider processed an order at checkout, use that provider’s payout records.
- Collect every transaction included in the payout. Keep transaction date, payout date, gross amount, fee and net amount. Check the selected filters before exporting.
- Add the signed charges, refunds and adjustments, then subtract fees. A refund shown as a negative amount reduces the total. Keep reserves and pending payments visible if they explain the difference.
- Use the transfer reference, where available, to find the deposit in the bank statement. Shopify’s Deposited label does not prove that the bank has received the money.
Bring to the review: A table showing how sales, refunds, fees and adjustments lead to the payout, with the matching bank deposit alongside it.
Then decide: Explain any difference between the payout and bank deposit before deciding that money is missing.
Explain a sales-report disagreement
- Keep each report’s title, store, date range, timezone and definition of sales.
- Keep order date, refund date and payout date separate. A refund or payout may occur in a different month from the order.
- Use the complete native order and refund records. An order can occupy several CSV rows when it contains multiple items. Count its order ID once, while keeping the item rows.
- Compare the same orders with the marketing dashboard. Check whether each total includes tax, shipping, discounts and refunded sales.
Bring to the review: A side-by-side explanation of which dates and sales definitions caused the totals to differ.
Then decide: Use orders to answer the sales question. Use marketing attribution, which assigns credit for sales to campaigns, to assess campaign response. Use payouts and bank records to explain cash.
Worked example
Two fictional orders, one later payout
All records and amounts below are fictional teaching inputs. CSV files are spreadsheet-compatible text files. This example demonstrates the calculation, not a customer outcome or a reproduced software defect.
Charges of 120 + 80 = 200. Signed activity is 200 - 20 = 180. Fees are 7. Payout net is 180 - 7 = 173. This fixture deliberately excludes taxes, shipping, reserves and other gateways.
What the CSV columns mean
- id: fictional transaction identity
- kind: charge or refund
- amount: signed USD before processor fee
- fee: positive USD charged by the processor
- net: signed USD amount minus fee
- payout_id: teaching payout identity
- Captured charges
- 200 USD
- Charge rows only, before this fixture's refund and fees.
- Signed activity
- 180 USD
- Charges less the linked refund.
- Processor fees
- 7 USD
- Fees retained as a separate cost.
- Payout net
- 173 USD
- Expected payout amount, still requiring the bank occurrence.
Inspect shopify-payout.csv
id,kind,amount,fee,net,payout_id charge_A,charge,120,4,116,payout_demo charge_B,charge,80,3,77,payout_demo refund_A,refund,-20,0,-20,payout_demoDownload this CSV
Next decision: Find the actual bank occurrence for payout_demo; do not book 173 as gross sales.
Run the example locally
Save the CSV files, expected-results.json and reproduce.mjs in one folder. With Node.js installed, run the command below. It calculates the checks from the CSV bytes and rejects a changed input or expected result.
node reproduce.mjs expected-results.json
No software login, customer records or API key is required.
AI prompt for collecting records without changing them
Replace the bracketed scope before use. This prompt collects evidence; it does not permit edits, approvals or accounting execution. Requesting an emailed report is a separate account action and requires explicit authorization.
Collect read-only evidence for Shopify, Payments and Balance to answer [financial question]. Confirm [company], [account/entity], [period], [basis], [currency] and [allowed reports]. Verify current store and native report title; select dates and read back the applied range. Use complete native analytics export where available, retaining totals/population. For source activity without export, capture the rendered report including visible values inside open-shadow content when the page extractor misses them. Keep emailed transaction exports pending until received. Collect Balance Transactions CSV and monthly statements separately. Retain original files, complete record IDs, counts, filters, collection timestamp and exceptions. Default Items shown can yield partial CSV; an incomplete page extraction can omit visible report values; date input can revert or shift. Orders payment CSV lacks payout/fee/net detail. Net payout is not sales; Balance transfer is not revenue. Stop if the source or scope is uncertain. Do not post, match, reconnect, delete or change settings. Return the evidence for financial review; do not claim the books are correct. Request an emailed export only when the collection authorization explicitly allows it; otherwise leave it pending for the account owner to obtain. Do not approve, submit payroll, pay, transfer, refund, send messages, invite users or accept terms. Stop at any login, MFA or credential prompt and hand back to the account owner. Store files only in [approved private location]. Do not paste customer artifacts into public tools. Use only preauthorized collection actions. Request an emailed report only when its delivery is explicitly authorized; otherwise ask the account owner to supply the file.
Next decision
What can you decide from these records?
Give the owner separate explanations of sales and cash, naming the adjustments that connect them. If records are missing or the transfer cannot be identified, leave that difference unresolved.
Compare the same records, accounts and reporting dates. List costs or payments you cannot yet verify before using the result for pricing, cash planning or month-end review.
Read the next finance check →References behind these workflows
Each product reference supports only the features and limits described beside that source. Level's checks and fictional calculations are separate from what the vendor documents.
Read the product and workflow references with their scopes and review datesExplore the financial diagnostic examplesSources and scope
Base product-reference scopes were reviewed . No end-to-end dated native UI walkthrough is published for this software. Individual source rechecks are dated with their citations. Operator decision guidance was reviewed 2026-10-09. The references below support their stated product scope, not every observed interface detail. It is not a vendor capability certification, a measured customer result or an independently reconciled account. Verify current features and what your plan includes in the account you use.
- Shopify Payments payout object
Product reference: Payout object and permissions, distinct from Balance and analytics reports.
- Shopify Balance exports and statement scope
Product reference: Posted Balance transactions and statement/export scope.
- Shopify finance report definitions
Product reference: Finance report definitions and selected populations.
- Shopify product overview
Product reference: Commerce platform, store and order management; provider-specific payment and payout scope supported separately by existing official help sources. Reviewed .
- Shopify payout details and exports
Product reference: Payout CSV, fee/net fields, status and bank-processing distinction. Reviewed .
Workflow reference: Payout CSV, fee/net fields, status and bank-processing distinction. Reviewed .
- Shopify order exports
Product reference: Captured-payment transaction history and multi-line-item export structure. Reviewed .
Workflow reference: Captured-payment transaction history and multi-line-item export structure. Reviewed .
- Shopify Payments balance transaction object
Product reference: Documented object; current app entitlement and selected query must be verified. Reviewed .
Workflow reference: Documented object; current app entitlement and selected query must be verified. Reviewed .