Guide

How to reconcile approved refunds with Shopify Payments transactions

Refund approvals live in a helpdesk, a returns app or a spreadsheet; the money moves in Shopify Payments. Most months they agree. The cases that cost money are a refund issued twice, a partial refund that never followed, or a refund nobody approved. This is the method behind RefundMatch.

1. One store, one month, an approval cohort

Reconcile one Shopify store at a time, one reporting month at a time. The month is the month the refunds were approved: the October report answers “did every refund we approved in October happen, once and in full?” An order belongs to October when one of its approvals is dated in October. Its comparison then uses every approval and every refund for that order in your files, whatever their dates, so an earlier partial refund is not mistaken for an extra one.

2. Export the approved refunds

One row per approval: order, approved_date (YYYY-MM-DD) and amount; approval_id, currency and reason are used when present. Two partial approvals for the same order are two rows. Start from the approved refunds template. Include the previous month’s approvals too if orders were refunded in parts across months.

3. Export Shopify Payments transactions

Export the Shopify Payments transactions for a date range that covers the orders being reconciled and runs through your reporting cutoff. Include late refunds and any earlier transactions for those orders. The export’s own headers are read as they are: Transaction Date, Type, Order, Card Brand, Card Source, Payout Status, Payout Date, Available On, Amount, Fee, Net, and Currency when present. If your data comes from somewhere else, use the normalized transactions template, which also accepts an optional transaction_id.

4. Keep refunds only and match by order

5. Partial refunds, equal amounts and IDs

All approvals of one order and currency are added up, and so are all its refund rows, in exact cents. $25.00 + $15.00 approved against $25.00 + $15.00 refunded is a match; every row stays visible.

Equal amounts
Two refund rows of $85.00 for an order approved once at $85.00 are $170.00 refunded: $85.00 more than approved. Without a transaction ID, two equal rows are two refunds. RefundMatch points them out so you can check them in Shopify.
Repeated explicit IDs
When your CSV has an ID column, the same ID twice with identical content is one transaction, counted once. The same ID with different content is ambiguous: every occurrence is left out of the confirmed totals and the order is marked for review.

6. The settlement and report cutoff

A refund approved on October 30 may be issued on November 4. It belongs to the October report, because the cohort is the approval month, but it only appears in a transactions export that reaches November. Payouts and settlement come later again and do not change whether a refund was made. So:

7. Reading the results

Every result is a statement about the two files, not proof: a refund made by another payment method, an approval recorded elsewhere or an export with the wrong date range all look like differences.

8. Month-end checklist

Match your refunds Try the demo

RefundMatch compares the files you give it. It does not connect to your store, cannot see refunds made outside the transactions file and never decides whether a refund should have been approved.