

How to Record Refunds with Power Automate
Automatically create credit memos in QuickBooks whenever Stripe processes a refund to keep your accounting books accurate.
Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.
Best for
Small businesses that process 20+ refunds monthly and want real-time accounting updates without manual QuickBooks entry.
Not ideal for
Companies needing complex refund approval workflows or multi-currency refund handling should use n8n instead.
Sync type
real-timeUse case type
syncReal-World Example
A 25-person e-commerce company processes 50 Stripe refunds monthly. Before automation, their bookkeeper spent 3 hours each week manually creating credit memos in QuickBooks, often missing refunds for days. Now credit memos appear in QuickBooks within 30 seconds of Stripe processing the refund.
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 Power Automate
Copy the pre-built Power Automate blueprint and paste it straight into Power Automate. 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 | ||
| Refund Amount | ||
| Refund Date | ||
3 optional fields▸ show
| Stripe Charge ID | |
| Description | |
| Tax Code |
Step-by-Step Setup
My flows > + New flow > Automated cloud flow
Create automated cloud flow
Open make.powerautomate.com and sign in with your Microsoft account. Click 'My flows' in the left sidebar, then click '+ New flow' at the top. Select 'Automated cloud flow' from the dropdown menu. Name your flow 'Stripe Refunds to QuickBooks' and leave the trigger blank for now.
- 1Click 'My flows' in the left navigation
- 2Click '+ New flow' button
- 3Select 'Automated cloud flow'
- 4Type 'Stripe Refunds to QuickBooks' in the name field
- 5Click 'Create' without selecting a trigger
Flow designer > Trigger > HTTP
Add Stripe webhook trigger
Click the trigger box and search for 'HTTP' in the connector search. Select 'When a HTTP request is received' trigger. Power Automate will generate a webhook URL after you save the flow. Copy this URL - you'll need it for Stripe's webhook configuration in step 4.
- 1Click the empty trigger box
- 2Type 'HTTP' in the search bar
- 3Select 'When a HTTP request is received'
- 4Leave the JSON schema blank for now
- 5Click 'Save' in the top toolbar
Flow designer > + New step > QuickBooks Online > Create item
Connect to QuickBooks Online
Click '+ New step' below the trigger. Search for 'QuickBooks Online' and select it from the connectors list. Choose 'Create item' action since we'll create credit memos. Sign in to your QuickBooks account when prompted and authorize Power Automate access.
- 1Click '+ New step' button
- 2Type 'QuickBooks Online' in the connector search
- 3Select 'QuickBooks Online' connector
- 4Choose 'Create item' action
- 5Click 'Sign in' and enter QuickBooks credentials
Stripe Dashboard > Developers > Webhooks > Add endpoint
Configure Stripe webhook
Open your Stripe dashboard and go to Developers > Webhooks. Click 'Add endpoint' and paste the webhook URL from step 2. In the events section, select only 'charge.dispute.created' and 'invoice.payment_failed' for refund-related events. Set the API version to your current version.
- 1Go to dashboard.stripe.com and log in
- 2Click 'Developers' in left sidebar
- 3Click 'Webhooks' tab
- 4Click 'Add endpoint' button
- 5Paste the Power Automate webhook URL
- 6Select 'charge.refunded' event only
Flow designer > Trigger > Use sample payload to generate schema
Test webhook and generate schema
In Stripe's webhook page, click 'Send test webhook' and choose a refund event. Go back to Power Automate and click 'Run history' to see the test payload. Click on the successful run, then copy the JSON body. Return to your trigger and click 'Use sample payload to generate schema' and paste the JSON.
- 1In Stripe, click 'Send test webhook' on your endpoint
- 2Select 'charge.refunded' test event
- 3Return to Power Automate flow designer
- 4Click the trigger box
- 5Click 'Use sample payload to generate schema'
- 6Paste the JSON from Stripe's test webhook
QuickBooks Online action > Item Type > Credit Memo
Set QuickBooks item type
Back in the QuickBooks action, set the Item Type dropdown to 'Credit Memo'. Select your company from the Company dropdown if not already selected. This tells QuickBooks we're creating a credit memo rather than an invoice or estimate.
- 1Click the QuickBooks Online action box
- 2Click the 'Item Type' dropdown
- 3Select 'Credit Memo'
- 4Verify Company shows your business name
- 5Leave other fields blank for now
QuickBooks action > Customer > Dynamic content
Map customer field
Click in the Customer field and select 'Dynamic content' tab. Look for Stripe data fields and select the billing details or customer email. If your QuickBooks customers are stored by email, use the email field. If by name, you may need to add a 'Get customer' step first to resolve the Stripe customer ID.
- 1Click the Customer field in QuickBooks action
- 2Click 'Dynamic content' tab
- 3Expand 'When a HTTP request is received'
- 4Look for customer-related fields from Stripe
- 5Select the appropriate customer identifier
QuickBooks action > Line items > Add new item
Configure line items
Scroll down to Line items section and click 'Add new item'. Set Amount to the refunded amount from Stripe's dynamic content. Set Description to something like 'Refund for charge [Stripe Charge ID]' using dynamic content. Leave Quantity as 1 and set Tax Code to your default if applicable.
- 1Scroll to 'Line items' section
- 2Click 'Add new item'
- 3Click Amount field and select refund amount from dynamic content
- 4Set Description using Stripe charge ID
- 5Set Quantity to 1
- 6Select appropriate Tax Code if needed
QuickBooks action > Date > Dynamic content
Add refund date
Set the Date field to the refund created timestamp from Stripe. Click the Date field, go to Dynamic content, and select the created timestamp. You may need to format this date using an expression if Stripe's format doesn't match QuickBooks requirements.
- 1Click the Date field
- 2Select Dynamic content tab
- 3Find the created or timestamp field from Stripe
- 4Select the timestamp field
- 5If needed, click Expression tab to format the date
Flow designer > Test > Manually
Test and save flow
Click 'Save' to save your flow, then click 'Test' in the top toolbar. Choose 'Manually' and trigger a test by sending another webhook from Stripe or processing a real refund. Check that a credit memo appears in your QuickBooks company with the correct amount, customer, and date.
- 1Click 'Save' in the top toolbar
- 2Click 'Test' button
- 3Select 'Manually' option
- 4Click 'Test' to start listening
- 5Trigger a Stripe webhook or process a test refund
- 6Check QuickBooks for the new credit memo
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 Microsoft Power Automate for this if you're already using Office 365 and want simple webhook-to-QuickBooks automation without learning a new platform. The HTTP trigger handles Stripe webhooks reliably, and the QuickBooks Online connector includes credit memo creation out of the box. Power Automate makes sense if you process under 200 refunds monthly and don't need complex refund logic. For multi-currency refunds or complex approval workflows, use n8n instead for better data transformation capabilities.
At 50 refunds monthly, you'll use about 50 Power Automate runs per month. Most Office 365 Business plans include 2000 runs monthly, so this costs nothing extra. Standalone Power Automate costs $15/month for 5000 runs. Zapier charges $20/month for the same volume, and Make costs $9/month but requires more setup time. Power Automate wins on cost if you already have Office 365.
Zapier's QuickBooks integration is more mature and includes better error handling for customer mismatches. Make offers superior webhook payload parsing and can handle complex refund calculations more elegantly. n8n gives you complete control over the credit memo creation logic and supports custom retry mechanisms. Pipedream's built-in data stores make tracking processed refunds easier. But Power Automate's strength is simplicity - the flow works in 10 steps without complex expressions, and non-technical users can modify it.
You'll hit two main issues after going live. First, customer name mismatches will break 10-15% of refunds initially until you clean up the mapping between Stripe and QuickBooks customer records. Second, Stripe's webhook retry logic can overwhelm Power Automate if your flow fails repeatedly - failed webhooks retry 3 times each, burning through your run limits fast. Always test customer matching thoroughly before enabling the production webhook.
Ideas for what to build next
- →Add partial refund handling — Modify the flow to handle partial refunds by checking if the refunded amount is less than the original charge amount.
- →Create refund approval workflow — Add a condition that sends large refunds to managers for approval before creating the credit memo in QuickBooks.
- →Sync refund status back to Stripe — Build a reverse flow that updates Stripe metadata when credit memos are manually edited or deleted in QuickBooks.
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