Intermediate~15 min setupFinance & FinanceVerified April 2026
QuickBooks logo
Stripe logo

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-time

Use case type

sync

Real-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.

/mo
505005K50K

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

Skip the setup

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.

QuickBooks Online subscription with API access (Simple Start plan or higher)
Stripe account with webhook configuration permissions
Microsoft Power Automate license (included with Office 365 Business plans)
Matching customer records between Stripe and QuickBooks

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Customer
Refund Amount
Refund Date
3 optional fields▸ show
Stripe Charge ID
Description
Tax Code

Step-by-Step Setup

1

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.

  1. 1Click 'My flows' in the left navigation
  2. 2Click '+ New flow' button
  3. 3Select 'Automated cloud flow'
  4. 4Type 'Stripe Refunds to QuickBooks' in the name field
  5. 5Click 'Create' without selecting a trigger
What you should see: You should see the flow designer with an empty trigger box and 'Choose your flow's trigger' placeholder.
2

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.

  1. 1Click the empty trigger box
  2. 2Type 'HTTP' in the search bar
  3. 3Select 'When a HTTP request is received'
  4. 4Leave the JSON schema blank for now
  5. 5Click 'Save' in the top toolbar
What you should see: The trigger shows 'When a HTTP request is received' and displays a long webhook URL starting with https://prod-xx.eastus.logic.azure.com.
Common mistake — Don't fill in the JSON schema yet - Stripe's webhook payload is complex and we'll generate it automatically after testing.
Power Automate
+
click +
search apps
QuickBooks
QU
QuickBooks
Add Stripe webhook trigger
QuickBooks
QU
module added
3

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.

  1. 1Click '+ New step' button
  2. 2Type 'QuickBooks Online' in the connector search
  3. 3Select 'QuickBooks Online' connector
  4. 4Choose 'Create item' action
  5. 5Click 'Sign in' and enter QuickBooks credentials
What you should see: You should see 'Create item' action box with Company dropdown showing your QuickBooks company name.
Common mistake — Make sure you're signing into the correct QuickBooks company - Power Automate will remember this connection for all future flows.
4

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.

  1. 1Go to dashboard.stripe.com and log in
  2. 2Click 'Developers' in left sidebar
  3. 3Click 'Webhooks' tab
  4. 4Click 'Add endpoint' button
  5. 5Paste the Power Automate webhook URL
  6. 6Select 'charge.refunded' event only
What you should see: Stripe shows your new webhook endpoint with status 'Enabled' and 1 selected event: charge.refunded.
Common mistake — Only select charge.refunded - adding other events will trigger your flow unnecessarily and waste runs.
5

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.

  1. 1In Stripe, click 'Send test webhook' on your endpoint
  2. 2Select 'charge.refunded' test event
  3. 3Return to Power Automate flow designer
  4. 4Click the trigger box
  5. 5Click 'Use sample payload to generate schema'
  6. 6Paste the JSON from Stripe's test webhook
What you should see: The trigger now shows a detailed JSON schema with fields like 'data', 'object', 'amount_refunded', and 'id'.
Common mistake — If you don't see the test webhook in Power Automate's run history within 2 minutes, check that your webhook URL was copied correctly.
Power Automate
▶ Test flow
executed
QuickBooks
Stripe
Stripe
🔔 notification
received
6

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.

  1. 1Click the QuickBooks Online action box
  2. 2Click the 'Item Type' dropdown
  3. 3Select 'Credit Memo'
  4. 4Verify Company shows your business name
  5. 5Leave other fields blank for now
What you should see: The QuickBooks action shows 'Credit Memo' selected and displays credit memo-specific fields like Customer, Line items, and Total amount.
7

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.

  1. 1Click the Customer field in QuickBooks action
  2. 2Click 'Dynamic content' tab
  3. 3Expand 'When a HTTP request is received'
  4. 4Look for customer-related fields from Stripe
  5. 5Select the appropriate customer identifier
What you should see: Customer field shows a blue dynamic content tag with the Stripe field name you selected.
Common mistake — QuickBooks requires exact customer name matches - if your Stripe customer names don't match QuickBooks exactly, this will fail.
QuickBooks fields
DocNumber
CustomerRef.name
TotalAmt
Balance
DueDate
available as variables:
1.props.DocNumber
1.props.CustomerRef.name
1.props.TotalAmt
1.props.Balance
1.props.DueDate
8

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.

  1. 1Scroll to 'Line items' section
  2. 2Click 'Add new item'
  3. 3Click Amount field and select refund amount from dynamic content
  4. 4Set Description using Stripe charge ID
  5. 5Set Quantity to 1
  6. 6Select appropriate Tax Code if needed
What you should see: Line items section shows one item with dynamic Stripe refund amount and description fields populated with blue tags.
Common mistake — Make sure Amount is negative for credit memos - some Stripe refund amounts come as positive numbers but QuickBooks needs negative values for credits.
9

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.

  1. 1Click the Date field
  2. 2Select Dynamic content tab
  3. 3Find the created or timestamp field from Stripe
  4. 4Select the timestamp field
  5. 5If needed, click Expression tab to format the date
What you should see: Date field shows the dynamic Stripe timestamp, and QuickBooks will use the refund processing date for the credit memo.
10

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.

  1. 1Click 'Save' in the top toolbar
  2. 2Click 'Test' button
  3. 3Select 'Manually' option
  4. 4Click 'Test' to start listening
  5. 5Trigger a Stripe webhook or process a test refund
  6. 6Check QuickBooks for the new credit memo
What you should see: Power Automate shows green checkmarks for each step, and a new credit memo appears in your QuickBooks Sales > Credit memos section.
Common mistake — Test with a small amount first - failed test runs can create duplicate credit memos that you'll need to delete manually from QuickBooks.

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

VerdictWhy n8n for this workflow

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.

Cost

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.

Tradeoffs

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 handlingModify the flow to handle partial refunds by checking if the refunded amount is less than the original charge amount.
  • Create refund approval workflowAdd a condition that sends large refunds to managers for approval before creating the credit memo in QuickBooks.
  • Sync refund status back to StripeBuild a reverse flow that updates Stripe metadata when credit memos are manually edited or deleted in QuickBooks.

Related guides

Was this guide helpful?
QuickBooks + Stripe overviewPower Automate profile →