Beginner~12 min setupFinance & FinanceVerified April 2026
QuickBooks logo
Stripe logo

How to Record Stripe Refunds in QuickBooks with Make

Automatically create credit memos in QuickBooks 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

Businesses processing 50+ Stripe refunds monthly who need them recorded in QuickBooks within minutes.

Not ideal for

Companies with fewer than 20 refunds per month where manual entry is faster than automation setup.

Sync type

real-time

Use case type

sync

Real-World Example

💡

A 25-person e-commerce company processes 150 refunds monthly across multiple product lines. Before automation, their bookkeeper spent 3 hours weekly manually creating credit memos, often with 2-day delays that made month-end reconciliation painful. Now refunds appear in QuickBooks within 30 seconds, and the bookkeeper focuses on analysis instead of data entry.

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 Make

Copy the pre-built Make blueprint and paste it straight into Make. 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.

Active Stripe account with webhook permissions
QuickBooks Online subscription with API access enabled
Make account with webhook operations available
Matching customer records between Stripe and QuickBooks
Admin access to configure webhooks in Stripe dashboard

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Customer Emailcustomer.email
Refund Amountamount
Refund IDid
Refund Createdcreated
Currencycurrency
1 optional field▸ show
Charge IDcharge

Step-by-Step Setup

1

Dashboard > Create scenario > + > Stripe

Create a new scenario in Make

Start with a blank scenario that will listen for Stripe refunds. This sets up the foundation for your refund tracking automation.

  1. 1Click 'Create a new scenario' from your Make dashboard
  2. 2Click the large '+' circle in the center
  3. 3Search for 'Stripe' in the app list
  4. 4Select Stripe from the results
What you should see: You should see the Stripe module placed in your scenario canvas with configuration options on the right panel.
2

Stripe module > Watch events

Configure the Stripe webhook trigger

Set up Make to receive instant notifications when refunds happen. The webhook trigger ensures you catch every refund immediately.

  1. 1Select 'Watch events' from the Stripe trigger options
  2. 2Click 'Add' next to Connection to link your Stripe account
  3. 3In the Event types field, select 'charge.dispute.created' and 'refund.created'
  4. 4Copy the webhook URL that Make generates
What you should see: The trigger shows a green 'Webhooks are being received' status and displays a webhook URL starting with hook.integromat.com.
Common mistake — Don't select 'charge.refunded' — that fires for partial refunds too and creates duplicate entries.
Make
+
click +
search apps
QuickBooks
QU
QuickBooks
Configure the Stripe webhook…
QuickBooks
QU
module added
3

Stripe Dashboard > Developers > Webhooks > Add endpoint

Register webhook in Stripe dashboard

Tell Stripe to send refund events to Make. This creates the connection that triggers your automation.

  1. 1Open your Stripe dashboard in a new tab
  2. 2Go to Developers > Webhooks
  3. 3Click '+ Add endpoint'
  4. 4Paste the Make webhook URL into the Endpoint URL field
  5. 5Select 'refund.created' from the events list and click 'Add endpoint'
What you should see: Your new webhook endpoint appears in the Stripe webhooks list with a 'Enabled' status.
Common mistake — Set the webhook to live mode, not test mode, or it won't catch real refunds.
4

Between modules > Filter > Condition

Add a filter for refund events

Ensure your scenario only processes actual refunds, not other Stripe events. This prevents false triggers and keeps your books clean.

  1. 1Click the small wrench icon between modules to add a filter
  2. 2Set the condition to 'Event type' equals 'refund.created'
  3. 3Label the filter 'Only Refunds'
  4. 4Click OK to save the filter
What you should see: A small filter icon appears on the connection line, and the filter name 'Only Refunds' shows below it.
Common mistake — Filters are the most common place setups break. Double-check the field name and value exactly match what your app sends — a single capital letter difference will block everything.
QuickBooks
QU
trigger
filter
Condition
matches criteria?
yes — passes through
no — skipped
Stripe
ST
notified
5

After Stripe module > + > QuickBooks Online > Create Credit Memo

Add QuickBooks module

Connect QuickBooks to receive the refund data from Stripe. This module will create the credit memo in your accounting system.

  1. 1Click the '+' button after your Stripe module
  2. 2Search for and select 'QuickBooks Online'
  3. 3Choose 'Create a Credit Memo' from the action list
  4. 4Click 'Add' next to Connection to link your QuickBooks account
What you should see: The QuickBooks module appears connected to Stripe, showing credit memo configuration fields in the right panel.
Common mistake — Select 'Credit Memo' not 'Refund Receipt' — credit memos properly offset invoices in QuickBooks.
6

QuickBooks module > Customer section

Map customer information

Link the Stripe refund to the correct customer in QuickBooks. This ensures the credit appears on the right account.

  1. 1In the Customer field, click the mapping icon
  2. 2Select 'Customer Email' from the Stripe data
  3. 3Set Customer Display Name to map from Stripe's 'Customer Name'
  4. 4Leave Customer ID empty to let QuickBooks auto-match by email
What you should see: The customer fields show dynamic mapping tags like {{customer.email}} instead of static text.
Common mistake — If customers don't have matching emails, the scenario will fail — set up error handling for this.
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
7

QuickBooks module > Credit memo details

Configure credit memo details

Set up the credit memo with refund amount and description. This creates a clear paper trail for your accounting records.

  1. 1Map Document Number to Stripe's 'Refund ID'
  2. 2Set Transaction Date to Stripe's 'Refund Created' timestamp
  3. 3In the Memo field, type 'Stripe refund for charge' and map Stripe's 'Charge ID'
  4. 4Set Currency to match your QuickBooks base currency
What you should see: The memo preview shows dynamic values like 'Stripe refund for charge {{charge.id}}' with proper date mapping.
8

QuickBooks module > Line Items > Add item

Add line item for refund amount

Create the actual credit line that reduces the customer's balance. This is the core accounting entry that reflects the refund.

  1. 1Scroll to Line Items section and click 'Add item'
  2. 2Set Item Type to 'Service'
  3. 3Map Amount to Stripe's 'Refund Amount' divided by 100
  4. 4Set Description to 'Refund processed via Stripe'
What you should see: The line item shows the refund amount formula {{amount}}/100 and the service description.
Common mistake — Stripe amounts are in cents — always divide by 100 or your refunds will be 100x too large.
9

QuickBooks module > Right click > Add error handler

Set up error handling

Configure what happens when the scenario fails. This prevents lost refunds and gives you visibility into issues.

  1. 1Right-click the QuickBooks module and select 'Add error handler'
  2. 2Choose 'Break' as the error handler type
  3. 3Enable 'Store incomplete executions'
  4. 4Set retry attempts to 3 with 1-minute intervals
What you should see: A red error handler route appears below the QuickBooks module with retry settings configured.
Common mistake — Don't use 'Ignore' error handling — you'll lose track of failed refunds and your books won't match.
10

Bottom toolbar > Run once

Test with sample data

Verify the scenario works before going live. This catches mapping errors and API issues in a safe environment.

  1. 1Click 'Run once' at the bottom of the screen
  2. 2Process a test refund in your Stripe test environment
  3. 3Check that Make receives the webhook and processes it
  4. 4Verify a credit memo appears in your QuickBooks sandbox
What you should see: The scenario execution log shows green checkmarks for both modules, and you see a new credit memo in QuickBooks.
Common mistake — Test in sandbox first — production refunds can't be easily reversed once they hit QuickBooks.
Make
▶ Run once
executed
QuickBooks
Stripe
Stripe
🔔 notification
received
11

Bottom left toggle > ON > Immediately

Enable automatic execution

Turn on the scenario to handle real refunds automatically. This activates your refund recording system for production use.

  1. 1Click the 'OFF' toggle in the bottom left to turn it 'ON'
  2. 2Set the schedule to 'Immediately' for real-time processing
  3. 3Click 'OK' to confirm the activation
  4. 4Monitor the first few executions in the execution history
What you should see: The scenario status shows 'ON' with a green indicator, and new executions appear in the history as refunds occur.

Drop this into a Make custom function.

JavaScript — Custom Function{{formatNumber(parseNumber(amount) / 100; 2)}}
▸ Show code
{{formatNumber(parseNumber(amount) / 100; 2)}}

... expand to see full code

{{formatNumber(parseNumber(amount) / 100; 2)}}

Scaling Beyond 100+ refunds/day+ Records

If your volume exceeds 100+ refunds/day records, apply these adjustments.

1

Add processing delays

Insert 2-3 second delay modules between operations to stay under QuickBooks' 500 calls/hour limit. Without delays, you'll hit rate limits during refund spikes.

2

Use data stores for deduplication

Set up a data store to track processed refund IDs and prevent duplicate credit memos. High volume increases the chance of webhook retries creating duplicates.

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 Make for this workflow

Use Make for this if you process 50+ refunds per month and need them in QuickBooks within minutes, not hours. Make's webhook triggers catch Stripe refunds instantly, while Zapier polls every 15 minutes on paid plans. The visual scenario builder makes it easy to add error handling for failed customer lookups. Skip Make if you only process 5-10 refunds monthly — manually entering them takes less time than maintaining automation.

Cost

This workflow uses 2 operations per refund: one for the webhook trigger, one for the QuickBooks credit memo. At 100 refunds per month, that's 200 operations monthly. That fits Make's Core plan at $9/month with operations to spare. Zapier Professional costs $49/month for the webhook feature, and N8N cloud runs $20/month for similar volume. Make saves you $240+ annually compared to Zapier.

Tradeoffs

Zapier handles QuickBooks customer matching better — it auto-creates customers when they don't exist, while Make requires manual router setup for this. N8N gives you more data transformation options if you need complex refund categorization rules. But Make wins on webhook reliability and error handling. Its incomplete execution storage means you never lose a failed refund, while Zapier's retry logic is less transparent.

You'll hit QuickBooks rate limits if you process 20+ refunds in quick succession — space them with delay modules. Stripe sends amounts in cents, so always divide by 100 or your credit memos will be 100x too large. Customer email mismatches kill the scenario, so set up error handlers that assign orphaned refunds to a catch-all customer. QuickBooks duplicate protection only works if you map document numbers to Stripe refund IDs.

Ideas for what to build next

  • Add Slack notifications for large refundsSet up a router that sends alerts to your finance channel when refunds exceed $500 or other thresholds you define.
  • Create refund reports in Google SheetsBuild a parallel path that logs all refunds to a spreadsheet for monthly analysis and trend tracking beyond what QuickBooks provides.
  • Handle disputed charges separatelyExtend the scenario to catch Stripe dispute events and create different QuickBooks entries, since disputes need different accounting treatment than voluntary refunds.

Related guides

Was this guide helpful?
QuickBooks + Stripe overviewMake profile →