Find WooCommerce refunds that never reached Stripe.
Match each WooCommerce refund to the Stripe refund for the same order. Find refunds recorded in the store but never sent through Stripe, refunds made in Stripe that the store never recorded, and refunds that failed at the customer’s bank.
WooCommerce and Stripe · Refunds Oct 15–Nov 13, 2026 (store time, New York) · Orders and charges from the last 120 days · Read Nov 14, 15:00 UTC
Between Oct 15 and Nov 13, WooCommerce recorded 31 refunds on Stripe-paid orders and Stripe shows 30 refunds on store payments. 28 pair up by order number and amount. Three store refunds totaling $412.00 have no Stripe refund at all, two Stripe refunds totaling $236.50 never reached WooCommerce, and one refund the store shows as sent failed at the customer’s bank: $89.00 for order 4171.
WHERE THE RESULT GOES
Google Sheets
Export each data source report to Google Sheets, then add your analysis or checklist to the review Sheet.
Example use case
Ask. Follow up. Take the next step.
✦ AI assistantSample use case
YOU
Did every WooCommerce refund reach Stripe?
✦
Between Oct 15 and Nov 13, WooCommerce recorded 31 refunds on Stripe-paid orders and Stripe shows 30 refunds on store payments. 28 pair up by order number and amount. Three store refunds totaling $412.00 have no Stripe refund at all, two Stripe refunds totaling $236.50 never reached WooCommerce, and one refund the store shows as sent failed at the customer’s bank: $89.00 for order 4171.
01
Recorded in WooCommerce only · 3 refunds, $412.00Orders 4127, 4152 and 4188 · Stripe charge still shows nothing refundedReview first
Each of these refunds was recorded in WooCommerce by the same staff account without going through the payment gateway, and none has a Stripe refund. The Stripe charges for the three orders still show $0.00 refunded. Order 4127 ($186.00, damaged in transit) and order 4188 ($78.00, wrong glaze color) have reasons; order 4152 ($148.00) has none.
NextThe store manager asks the staff member how each customer was paid back. A store credit or a cash refund can be correct and only needs a note on the order. A customer still owed money is refunded in Stripe, and the Stripe refund ID is added as a private order note so both records agree.
02
Refunded in Stripe only · 2 refunds, $236.50Orders 4163 and 4166 · Nov 3 and Nov 4Record in WooCommerce
Both refunds were made in the Stripe dashboard and succeeded, and both charges carry the WooCommerce order number. WooCommerce has no refund for either order, so its sales report still counts $236.50 that went back to customers. The other four dashboard refunds this month reached the store with the reason “Refunded via Stripe Dashboard”, which points to a problem on these two days only.
NextThe bookkeeper records each refund in WooCommerce for the same amount, choosing to record it only so no second payment goes out, and adds the Stripe refund ID as a private note. Whoever manages the store checks the Stripe plugin’s webhook history for Nov 3 and Nov 4.
03
Stripe refund failed · Order 4171, $89.00Refunded Nov 6 · failure reason lost_or_stolen_cardContact the customer
WooCommerce shows this refund as sent through Stripe. Stripe’s refund has the status failed: the customer’s card was reported lost or stolen, so the money went back to the store’s Stripe balance instead of to the customer.
NextSupport contacts the customer to agree another way to return the $89.00 and adds a private note to the order. The bookkeeper keeps the order on the list until the money has gone out.
WooCommerce and Stripe · Refunds Oct 15–Nov 13, 2026 (store time, New York) · Orders and charges from the last 120 days · Read Nov 14, 15:00 UTC
01 · CONNECT YOUR DATA
Your tools. One place to ask.
2 of 3 Free data sources No credit card · Daily refresh
DatapipeYour project
✦Your AI assistantor a report in Sheets / Data Studio
Create your free workspace
Sign up with your company email. Your first project opens on Data sources.
Add the data sources
Choose the accounts for this use case. Authorize access and select the property or site.
Bring your question
Connect your project to a supported AI assistant, or build your source reports.
Email/password signups confirm their email first. Use Google signup with a company account if you prefer.
WooCommerce: Add your store address with a WooCommerce REST API consumer key and secret that can read orders and refunds. Refund events by date need WooCommerce 9.0 or later. Setup guide ↗
Stripe: Authorize the intended Stripe account using its supported sign-in or dedicated read-key setup. Setup guide ↗
Free includes 3 data sources across the workspace. One account/property added to one project counts as one. Extra properties or the same account in another project use another slot.
02 · ASK A USEFUL QUESTION
Start with a prompt. Follow the evidence.
Copy these in order into your connected assistant. Each builds on the answer before it.
01
Read refunds, orders and charges
Read the full prompt
Use only this Datapipe project’s authorized data. Discover the connected accounts, datasets and compatible fields first. Confirm dates, timezones, currencies and data coverage. Keep missing or unmatched rows visible; never substitute sample data. Compare the sources explicitly and explain every match. Do not change source records or send messages.
From the connected WooCommerce store, read Refund events by date for Oct 15 to Nov 13 with refund ID, order ID, amount, currency, reason, refunded by, refunded through the gateway, date created and date created (GMT). Then read orders from the last 120 days with order ID, order number, status, payment method, total and currency. From the connected Stripe account, read refunds created from Oct 14 to Nov 14 with refund ID, charge, payment intent, amount, currency, status, reason and failure reason, and charges from the last 120 days with charge ID, amount, amount refunded, description and metadata. Tell me the exact date range of each read, how many rows came back, and every payment method value you found with its order count. Ask me which payment methods are Stripe before going further.
02
Match each Stripe refund to a store order
Read the full prompt
Keep the WooCommerce refunds whose order uses the payment methods I confirmed. For each Stripe refund, find its charge and read order_id from the charge metadata. List Stripe refunds whose charge has no order_id, or whose order_id matches no WooCommerce order, on their own; do not guess a match from amounts or dates. Convert Stripe amounts from cents to dollars and check that currencies agree. Then match each Stripe refund to a WooCommerce refund on the same order with the same amount. Show every unmatched refund on either side with its order number, amount, date, reason and gateway flag, and every matched pair where the Stripe status is not succeeded.
03
Prepare the refund exceptions list
Read the full prompt
Prepare one table with three sections: refunds recorded in WooCommerce with no Stripe refund, refunds made in Stripe with no WooCommerce refund, and Stripe refunds that did not succeed. For each row show the order number, amount, refund date in store time, who recorded it, the reason and the Stripe refund ID or failure reason. Add the number and total of matched refunds above the table, and list Stripe refunds outside the store at the end. Draft it in this conversation for our monthly close. Do not create refunds, notes or any other change in WooCommerce or Stripe.
Match by order number and agree who fixes each gap.
01
Read the month’s WooCommerce refunds and their orders.
02
Read the Stripe refunds and the charges behind them.
03
Match by order number and agree who fixes each gap.
↗
Check the result at your next review.
Run the same review at the next monthly close. The three store-only refunds should each have a note or a matching Stripe refund, orders 4163 and 4166 should show their refunds in WooCommerce, and the store-only and Stripe-only lists should be empty or explained.
Implementation tips for this use case
Join each Stripe refund to its charge, read order_id from the charge metadata, and match it to the WooCommerce order number, then to that order’s refunds by amount. A store refund with no Stripe refund, a Stripe refund with no store refund and a Stripe refund with the status failed each go on their own list. Stripe refunds whose charge has no order_id belong to payments taken outside the store and are listed separately. Take the lists to the monthly close, where the store manager, support and the bookkeeper agree who contacts which customer and which records need a refund or a note.
WHEN YOU NEED MORE CONTEXT
Go a little deeper.
The method and reporting checks behind this example.
How to match WooCommerce refunds to Stripe refunds by order number
Read the month’s WooCommerce refunds and their orders.
Add your WooCommerce store and your Stripe account to one project. Read WooCommerce Refund events by date for the month: refund ID, order ID, amount, currency, reason, refunded by, payment refunded through the gateway and the creation dates. Refunds are selected by their own date in store time, so they include refunds on older orders. Then read orders from the last 120 days with order ID, order number, payment method, total and currency, and keep only refunds whose order was paid with a payment method starting with stripe. The gateway flag says whether WooCommerce asked the gateway to send money; it is false both for refunds recorded by hand and for refunds made in the Stripe dashboard and copied back by the Stripe plugin.
Read the Stripe refunds and the charges behind them.
Read Stripe refunds created in the same days plus one day either side, with refund ID, charge, amount, currency, status, reason and failure reason, and Stripe charges from the last 120 days with charge ID, amount, amount refunded, description and metadata. The WooCommerce Stripe plugin writes the store’s order number into each payment’s metadata as order_id, and Stripe copies it to the charge. Stripe amounts are in cents; WooCommerce amounts are in dollars.
Match by order number and agree who fixes each gap.
Join each Stripe refund to its charge, read order_id from the charge metadata, and match it to the WooCommerce order number, then to that order’s refunds by amount. A store refund with no Stripe refund, a Stripe refund with no store refund and a Stripe refund with the status failed each go on their own list. Stripe refunds whose charge has no order_id belong to payments taken outside the store and are listed separately. Take the lists to the monthly close, where the store manager, support and the bookkeeper agree who contacts which customer and which records need a refund or a note.
See the complete example report
EXAMPLE REPORT
Did every WooCommerce refund reach Stripe?
WooCommerce and Stripe · Refunds Oct 15–Nov 13, 2026 (store time, New York) · Orders and charges from the last 120 days · Read Nov 14, 15:00 UTC
Did every WooCommerce refund reach Stripe?
Refund check
Refunds
Amount
Recorded in WooCommerce only
3
$412.00
Refunded in Stripe only
2
$236.50
Stripe refund failed
1
$89.00
WHAT TO LOOK ATBetween Oct 15 and Nov 13, WooCommerce recorded 31 refunds on Stripe-paid orders and Stripe shows 30 refunds on store payments. 28 pair up by order number and amount. Three store refunds totaling $412.00 have no Stripe refund at all, two Stripe refunds totaling $236.50 never reached WooCommerce, and one refund the store shows as sent failed at the customer’s bank: $89.00 for order 4171.
Match by order number and agree who fixes each gap.
Each of these refunds was recorded in WooCommerce by the same staff account without going through the payment gateway, and none has a Stripe refund. The Stripe charges for the three orders still show $0.00 refunded. Order 4127 ($186.00, damaged in transit) and order 4188 ($78.00, wrong glaze color) have reasons; order 4152 ($148.00) has none. Both refunds were made in the Stripe dashboard and succeeded, and both charges carry the WooCommerce order number. WooCommerce has no refund for either order, so its sales report still counts $236.50 that went back to customers. The other four dashboard refunds this month reached the store with the reason “Refunded via Stripe Dashboard”, which points to a problem on these two days only. WooCommerce shows this refund as sent through Stripe. Stripe’s refund has the status failed: the customer’s card was reported lost or stolen, so the money went back to the store’s Stripe balance instead of to the customer.
Try the example with sample CSVs
Fictional rows matching the example above. Attach these files to your assistant for a sample analysis.
Data method, reporting checks & sources
Add your WooCommerce store and your Stripe account to one project. Read WooCommerce Refund events by date for the month: refund ID, order ID, amount, currency, reason, refunded by, payment refunded through the gateway and the creation dates. Refunds are selected by their own date in store time, so they include refunds on older orders. Then read orders from the last 120 days with order ID, order number, payment method, total and currency, and keep only refunds whose order was paid with a payment method starting with stripe. The gateway flag says whether WooCommerce asked the gateway to send money; it is false both for refunds recorded by hand and for refunds made in the Stripe dashboard and copied back by the Stripe plugin. Read Stripe refunds created in the same days plus one day either side, with refund ID, charge, amount, currency, status, reason and failure reason, and Stripe charges from the last 120 days with charge ID, amount, amount refunded, description and metadata. The WooCommerce Stripe plugin writes the store’s order number into each payment’s metadata as order_id, and Stripe copies it to the charge. Stripe amounts are in cents; WooCommerce amounts are in dollars. Join each Stripe refund to its charge, read order_id from the charge metadata, and match it to the WooCommerce order number, then to that order’s refunds by amount. A store refund with no Stripe refund, a Stripe refund with no store refund and a Stripe refund with the status failed each go on their own list. Stripe refunds whose charge has no order_id belong to payments taken outside the store and are listed separately. Take the lists to the monthly close, where the store manager, support and the bookkeeper agree who contacts which customer and which records need a refund or a note.
Refunds are matched by order number from the Stripe charge’s order_id metadata, then by amount; matching on amount or date alone is never used. Stripe amounts are converted from cents before comparing, and currencies must agree. Store refunds made through the Stripe dashboard count as matched, even though their gateway flag is false. Stripe refunds read one day either side of the month, so a refund near midnight is not missed because of time zones.
Refunds are matched by order number from the Stripe charge’s order_id metadata, then by amount; matching on amount or date alone is never used.
Stripe amounts are converted from cents before comparing, and currencies must agree.
Store refunds made through the Stripe dashboard count as matched, even though their gateway flag is false.
Stripe refunds read one day either side of the month, so a refund near midnight is not missed because of time zones.
Access to the intended WooCommerce account or property.
Access to the intended Stripe account or property.
Refunds are matched by order number from the Stripe charge’s order_id metadata, then by amount; matching on amount or date alone is never used.
For blended reports, align dates, normalized URLs, and reporting grain. Query-level search rows must not duplicate page-level sessions.
WooCommerce knows which order each refund belongs to and who recorded it. Stripe knows whether money actually went back to the card and whether it arrived. A refund is only finished when both agree.
How are refunds matched to orders?
The WooCommerce Stripe plugin saves the store’s order number as order_id in the payment’s metadata, and Stripe copies it to the charge. Each Stripe refund points to its charge, so the order number connects the two. Within an order, refunds are matched by amount.
What does it mean when a WooCommerce refund wasn’t sent through the gateway?
WooCommerce records whether it asked the payment gateway to send the money back. That flag is false for refunds recorded by hand, such as a store credit, and also for refunds made in the Stripe dashboard that the Stripe plugin copied back to the store. That is why each refund is checked against Stripe instead of judged on the flag alone.
Why would a Stripe refund fail?
The customer’s bank or card issuer can reject it, for example when the card was closed or reported lost or stolen. Stripe then returns the money to your Stripe balance, and you need to refund the customer another way.
Which WooCommerce version does this need?
Refund events by date use WooCommerce’s refunds endpoint, which needs WooCommerce 9.0 or later. On an older store you can still read the refunds of one order at a time.
Does this create refunds or change orders?
No. The assistant reads both sources and drafts the list in your conversation. Your team refunds customers, records refunds and adds order notes in WooCommerce or Stripe.
YOUR NEXT STEP
Try it with your own data.
Start free with up to 3 data sources. No credit card.