

How to Record Stripe Refunds in QuickBooks with N8n
Automatically create QuickBooks credit memos when Stripe processes refunds to keep your books accurate.
Steps and UI details are based on platform versions at time of writing β check each platform for the latest interface.
Best for
E-commerce businesses that need custom refund processing logic or complex GL account mapping.
Not ideal for
Simple stores that just want basic refund recording without customization.
Sync type
real-timeUse case type
syncReal-World Example
A 25-person Shopify Plus store uses this to automatically record refunds in QuickBooks with proper GL account coding by product category. Before automation, their bookkeeper spent 3 hours weekly manually creating credit memos and often missed refunds during busy periods, causing month-end reconciliation headaches. Now refunds appear in QuickBooks within 2 minutes with correct coding.
What Will This Cost?
Drag the slider to your expected monthly volume.
Each platform counts differently β Zapier: 1 task per trigger. Make: 1 operation per module per record. n8n: 1 execution per run.





Prices shown for annual billing. Based on published pricing as of April 2026.
Estimated ROI
1000
min saved/mo
$583
labor value/mo
Free
no platform cost
Based on ~2 min manual effort per operation at $35/hr fully loaded labor cost.
Implementation
Import this workflow directly into n8n
Copy the pre-built n8n blueprint and paste it straight into n8n. All modules, filters, and field mappings are already configured β you just need to connect your accounts.
Before You Start
Make sure you have everything ready.
Field Mapping
Map these fields between your apps.
| Field | API Name | |
|---|---|---|
| Required | ||
| Customer Reference | CustomerRef | |
| Total Amount | TotalAmt | |
| Line Item Amount | Line.Amount | |
3 optional fieldsβΈ show
| Transaction Date | TxnDate |
| Reference Number | DocNumber |
| Memo Field | PrivateNote |
Step-by-Step Setup
Editor > + > Stripe Trigger > Webhook
Set up Stripe webhook trigger
Configure N8n to listen for Stripe refund events. You'll create a webhook that fires whenever charge.dispute.created or invoice.payment_failed events occur.
- 1Click the + button in N8n editor
- 2Search for 'Stripe Trigger' and select it
- 3Choose 'Webhook' as the trigger type
- 4Select 'charge.refunded' from the event dropdown
Stripe Node > Credential > Create New
Connect your Stripe account
Add your Stripe API credentials so N8n can receive webhook data. You'll need your secret key from the Stripe dashboard.
- 1Click 'Create New' next to Credential for Stripe
- 2Paste your Stripe secret key (starts with sk_live_ or sk_test_)
- 3Click 'Save' to store the credential
- 4Test the connection using the 'Test' button
Stripe Dashboard > Developers > Webhooks > Add endpoint
Configure webhook in Stripe dashboard
Register N8n's webhook URL in your Stripe account so refund events get sent to your workflow. This creates the connection from Stripe to N8n.
- 1Copy the webhook URL from your N8n Stripe trigger node
- 2Go to Stripe Dashboard > Developers > Webhooks
- 3Click 'Add endpoint' and paste the N8n webhook URL
- 4Select 'charge.refunded' from the events list
- 5Click 'Add endpoint' to save
Editor > + > Set Node > Add Value
Add data extraction node
Extract the refund details from Stripe's webhook payload. You'll pull out customer info, refund amount, and original charge details needed for QuickBooks.
- 1Add a 'Set' node after the Stripe trigger
- 2Click 'Add Value' and set name to 'refund_amount'
- 3Set the value to {{ $json.data.object.amount_refunded }}
- 4Add another value called 'customer_email' with {{ $json.data.object.billing_details.email }}
Editor > + > QuickBooks > Credit Memo > Create New Credential
Connect QuickBooks Online account
Set up OAuth connection to your QuickBooks company file. This allows N8n to create credit memos in your accounting system.
- 1Add a 'QuickBooks' node and select 'Credit Memo' operation
- 2Click 'Create New' credential for QuickBooks
- 3Click 'Connect my account' and authorize with QuickBooks
- 4Select your company from the dropdown
QuickBooks Node > Get All > Customer > Filters
Map customer data to QuickBooks
Configure the customer lookup so N8n can find the right QuickBooks customer for this refund. This prevents creating duplicate customers.
- 1In the QuickBooks node, set operation to 'Get All' and resource to 'Customer'
- 2Add a filter where PrimaryEmailAddr equals {{ $node['Set'].json['customer_email'] }}
- 3Set the limit to 1 since emails should be unique
- 4Test this step to verify customer lookup works
Editor > + > QuickBooks > Credit Memo > Create
Create credit memo in QuickBooks
Build the actual credit memo record with line items, amounts, and references. This creates the accounting entry that balances against the original sale.
- 1Add another QuickBooks node and select 'Credit Memo' resource
- 2Set operation to 'Create'
- 3Map CustomerRef to {{ $node['QuickBooks'].json['Id'] }}
- 4Set TotalAmt to {{ $node['Set'].json['refund_amount'] / 100 }}
QuickBooks Node > Credit Memo > Line Items
Add line item details
Configure the credit memo line items with product details and amounts. This provides the detailed breakdown of what's being refunded.
- 1In the same QuickBooks node, expand 'Line' section
- 2Set Amount to {{ $node['Set'].json['refund_amount'] / 100 }}
- 3Add Description: 'Stripe refund for charge {{ $node['Stripe Trigger'].json['data']['object']['id'] }}'
- 4Select your refund item from the dropdown
QuickBooks Node > Settings > Continue On Fail
Configure error handling
Set up retry logic and error notifications so failed refunds don't get lost. This ensures your books stay accurate even when QuickBooks is temporarily down.
- 1Click on the QuickBooks node settings (gear icon)
- 2Set 'On Error' to 'Continue'
- 3Add an IF node after QuickBooks to check for errors
- 4Connect error path to email/Slack notification
N8n > Executions > Latest Run
Test with real refund
Process a test refund through Stripe to verify the complete workflow. This confirms both the webhook delivery and QuickBooks integration work correctly.
- 1Go to Stripe Dashboard and find a test charge
- 2Click 'Refund' and process a partial refund
- 3Check N8n execution log within 30 seconds
- 4Verify credit memo appears in QuickBooks
Drop this into an n8n Code node.
JavaScript β Code Node// Convert Stripe cents to dollars and round to 2 decimalsβΈ Show code
// Convert Stripe cents to dollars and round to 2 decimals
const dollarAmount = Math.round($json.amount_refunded) / 100;
return { amount: dollarAmount.toFixed(2) };... expand to see full code
// Convert Stripe cents to dollars and round to 2 decimals
const dollarAmount = Math.round($json.amount_refunded) / 100;
return { amount: dollarAmount.toFixed(2) };Scaling Beyond 200+ refunds/day+ Records
If your volume exceeds 200+ refunds/day records, apply these adjustments.
Batch processing setup
Group refunds by hour using a Schedule trigger and process in batches. QuickBooks API handles bulk operations better than individual calls and you'll avoid rate limiting.
Queue failed refunds
Add a database or Google Sheets node to store failed refunds for retry processing. High volume means more API failures, and you can't afford to lose refund records.
Going live
Production Checklist
Before you turn this on for real, confirm each item.
Troubleshooting
Common errors and how to fix them.
Frequently Asked Questions
Common questions about this workflow.
Analysis
Use N8n for this if you need custom refund logic or handle complex product catalogs. N8n's code nodes let you transform Stripe's payment data to match your QuickBooks chart of accounts perfectly. You can add conditional logic for partial refunds, different GL accounts by product type, or custom approval workflows. Pick Zapier instead if you just want basic refund recording with zero customization β their pre-built QuickBooks templates work in 5 minutes.
This workflow runs once per refund event. At 50 refunds per month, that's 50 executions total. N8n Cloud's Starter plan ($20/month) includes 5,000 executions, so you're covered until you hit 5,000+ refunds monthly. Zapier charges $29.99 for their Professional plan to get QuickBooks access, and Make costs $10.59 but limits you to 10,000 operations. N8n wins on cost until you're processing thousands of refunds.
Zapier handles the QuickBooks OAuth refresh automatically β N8n sometimes requires manual re-authorization after 6 months. Make has better built-in error handling with automatic retries and detailed logs. But N8n's JavaScript code nodes let you handle Stripe's complex refund objects (partial refunds, disputes, metadata) way better than the other platforms. You can parse custom fields and build sophisticated GL account routing that's impossible with point-and-click tools.
QuickBooks API often returns cryptic errors like 'Invalid Reference' when customers don't exist in both systems. Their sandbox environment behaves differently than production β test transactions work fine, but real refunds sometimes fail on tax calculations. Stripe webhooks can arrive out of order during high volume, so a refund webhook might arrive before the original charge webhook. Add timestamp checks to avoid processing refunds for charges that aren't in QuickBooks yet.
Ideas for what to build next
- βAdd invoice payment matching β Connect successful payments to QuickBooks invoices automatically, so refunds can reference the original invoice for better tracking.
- βSet up dispute handling workflow β Create a separate workflow for Stripe chargebacks that creates different GL entries and sends alerts to your finance team.
- βBuild refund analytics dashboard β Send refund data to Google Sheets or a database to track refund patterns, reasons, and trends for business insights.
Related guides
How to Share Notion Meeting Notes to Slack with Pipedream
~15 min setup
How to Share Notion Meeting Notes to Slack with Power Automate
~15 min setup
How to Share Notion Meeting Notes to Slack with n8n
~20 min setup
How to Send Notion Meeting Notes to Slack with Zapier
~8 min setup
How to Share Notion Meeting Notes to Slack with Make
~12 min setup
How to Create Notion Tasks from Slack with Pipedream
~15 min setup