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

How to sync Stripe subscriptions to QuickBooks with Power Automate

Automatically creates recurring invoices in QuickBooks when Stripe subscriptions renew, keeping MRR tracking current.

Steps and UI details are based on platform versions at time of writing β€” check each platform for the latest interface.

Best for

SaaS companies with recurring revenue who need MRR visibility in their accounting system

Not ideal for

High-volume businesses with 1000+ renewals monthly should use direct API integration instead

Sync type

real-time

Use case type

sync

Real-World Example

πŸ’‘

A 25-person B2B SaaS company processes 200 subscription renewals monthly across $15K MRR. Before automation, their bookkeeper manually entered each renewal into QuickBooks within 48 hours, often missing renewals during busy periods. Now invoices appear in QuickBooks within 3 minutes of Stripe processing the renewal.

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 admin access with API permissions enabled
Stripe account with live webhook endpoints allowed (not available on all plans)
Power Automate license that includes premium connectors (Office 365 Business or higher)
Existing customers in QuickBooks or permission to auto-create new customers
Stripe subscription products configured with consistent naming for QuickBooks mapping

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Customer EmailCustomer
Invoice DescriptionDescription
Amount PaidAmount
Period StartTxnDate
4 optional fieldsβ–Έ show
Period EndDueDate
Subscription IDDocNumber
Customer NameBillAddr_Line1
Invoice IDPrivateNote

Step-by-Step Setup

1

My flows > + New flow > Automated cloud flow

Create new automated cloud flow

Go to make.powerautomate.com and sign in with your Microsoft account. Click 'My flows' in the left sidebar, then the blue '+ New flow' button. Select 'Automated cloud flow' from the dropdown menu. Name your flow 'Stripe Subscription Renewal to QuickBooks'.

  1. 1Click 'My flows' in the left navigation
  2. 2Click the blue '+ New flow' button
  3. 3Select 'Automated cloud flow'
  4. 4Enter flow name: 'Stripe Subscription Renewal to QuickBooks'
βœ“ What you should see: You should see the flow creation dialog with trigger selection options.
2

Flow builder > Choose trigger > Search connectors

Add Stripe webhook trigger

In the trigger selection screen, search for 'Stripe' in the connector search box. Select the Stripe connector, then choose 'When an invoice payment succeeds' trigger. This fires when Stripe processes a successful subscription renewal payment.

  1. 1Type 'Stripe' in the connector search box
  2. 2Click the Stripe connector tile
  3. 3Select 'When an invoice payment succeeds' trigger
  4. 4Click 'Create' to proceed
βœ“ What you should see: The Stripe trigger appears in your flow with connection setup required.
⚠
Common mistake β€” Don't use the generic webhook trigger - it requires manual webhook URL setup in Stripe dashboard.
Power Automate
+
click +
search apps
QuickBooks
QU
QuickBooks
Add Stripe webhook trigger
QuickBooks
QU
module added
3

Stripe trigger > Sign in

Connect to Stripe account

Click 'Sign in' in the Stripe trigger box. Enter your Stripe account credentials when prompted. Power Automate will redirect you to Stripe's authorization page where you'll grant access to invoice and subscription data.

  1. 1Click 'Sign in' in the Stripe connector
  2. 2Enter your Stripe email and password
  3. 3Click 'Authorize access' on Stripe's permission page
  4. 4Wait for redirect back to Power Automate
βœ“ What you should see: The Stripe trigger shows 'Connected' with a green checkmark next to your account name.
⚠
Common mistake β€” Use your live Stripe account, not test mode, unless you're testing the flow first.
Power Automate settings
Connection
Choose a connection…Add
click Add
QuickBooks
Log in to authorize
Authorize Power Automate
popup window
βœ“
Connected
green checkmark
4

Flow builder > + New step > Control > Condition

Add condition to filter subscription invoices

Click '+ New step' below the Stripe trigger. Search for 'Condition' and select the Control connector's Condition action. This filters out one-time payments and only processes recurring subscription invoices.

  1. 1Click '+ New step' below the Stripe trigger
  2. 2Search for 'Condition' in the action search
  3. 3Select 'Condition' from Control connector
  4. 4Click on the left value box
βœ“ What you should see: A condition box appears with 'Choose a value', operator dropdown, and right value field.
⚠
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.

Add this expression in a Compose action before QuickBooks to handle currency conversion and create a clean invoice reference. Paste this in the formula bar when configuring the Compose action inputs.

JavaScript β€” Code Step{
β–Έ Show code
{
  "customer_email": triggerBody()?['customer']?['email'],
  "amount_dollars": div(triggerBody()?['amount_paid'], 100),

... expand to see full code

{
  "customer_email": triggerBody()?['customer']?['email'],
  "amount_dollars": div(triggerBody()?['amount_paid'], 100),
  "billing_period": concat(
    formatDateTime(triggerBody()?['lines']?['data']?[0]?['period']?['start'], 'MMM d'),
    ' - ',
    formatDateTime(triggerBody()?['lines']?['data']?[0]?['period']?['end'], 'MMM d, yyyy')
  ),
  "invoice_reference": concat('Stripe-', triggerBody()?['id']),
  "formatted_date": convertTimeZone(
    triggerBody()?['lines']?['data']?[0]?['period']?['start'],
    'UTC',
    'Eastern Standard Time',
    'yyyy-MM-dd'
  )
}
QuickBooks
QU
trigger
filter
Condition
matches criteria?
yes β€” passes through
no β€” skipped
Stripe
ST
notified
5

Condition > Choose a value > Dynamic content

Configure subscription filter condition

In the condition's left value box, click 'Dynamic content' and select 'Subscription' from the Stripe trigger outputs. Set the operator to 'is not equal to'. In the right value box, type 'null'. This ensures the invoice has an associated subscription.

  1. 1Click the left value box in the condition
  2. 2Select 'Subscription' from Dynamic content
  3. 3Change operator to 'is not equal to'
  4. 4Type 'null' in the right value box
βœ“ What you should see: Condition shows 'Subscription is not equal to null' with Stripe's subscription field selected.
⚠
Common mistake β€” Without this filter, one-time invoice payments will create duplicate QuickBooks entries.

Add this expression in a Compose action before QuickBooks to handle currency conversion and create a clean invoice reference. Paste this in the formula bar when configuring the Compose action inputs.

JavaScript β€” Code Step{
β–Έ Show code
{
  "customer_email": triggerBody()?['customer']?['email'],
  "amount_dollars": div(triggerBody()?['amount_paid'], 100),

... expand to see full code

{
  "customer_email": triggerBody()?['customer']?['email'],
  "amount_dollars": div(triggerBody()?['amount_paid'], 100),
  "billing_period": concat(
    formatDateTime(triggerBody()?['lines']?['data']?[0]?['period']?['start'], 'MMM d'),
    ' - ',
    formatDateTime(triggerBody()?['lines']?['data']?[0]?['period']?['end'], 'MMM d, yyyy')
  ),
  "invoice_reference": concat('Stripe-', triggerBody()?['id']),
  "formatted_date": convertTimeZone(
    triggerBody()?['lines']?['data']?[0]?['period']?['start'],
    'UTC',
    'Eastern Standard Time',
    'yyyy-MM-dd'
  )
}
6

Condition > If yes > Add an action > QuickBooks Online

Add QuickBooks connection in Yes branch

Click 'Add an action' inside the 'If yes' branch of the condition. Search for 'QuickBooks' and select the QuickBooks Online connector. Choose 'Create invoice' action to generate the recurring invoice in your accounting system.

  1. 1Click 'Add an action' in the 'If yes' branch
  2. 2Search for 'QuickBooks' in the connector search
  3. 3Select 'QuickBooks Online' connector
  4. 4Choose 'Create invoice' action
βœ“ What you should see: QuickBooks 'Create invoice' action appears with connection setup required.
⚠
Common mistake β€” Make sure you select QuickBooks Online, not QuickBooks Desktop connector.
7

QuickBooks action > Sign in > Intuit authorization

Authenticate QuickBooks connection

Click 'Sign in' in the QuickBooks action. You'll be redirected to Intuit's authorization page. Select your QuickBooks company from the dropdown and click 'Authorize' to grant Power Automate access to create invoices and customers.

  1. 1Click 'Sign in' in the QuickBooks connector
  2. 2Select your company from the dropdown
  3. 3Click 'Authorize' on Intuit's page
  4. 4Wait for redirect back to Power Automate
βœ“ What you should see: QuickBooks action shows 'Connected' with your company name and required fields appear.
⚠
Common mistake β€” You need QuickBooks Online admin access - bookkeeper permissions won't work for API connections.
8

Create invoice > Customer field > Enter custom value

Map customer information

In the QuickBooks 'Create invoice' action, click the 'Customer' field dropdown. If the customer exists in QuickBooks, select from the list. For new customers, click 'Enter custom value' and map Stripe's customer email or name using dynamic content.

  1. 1Click the 'Customer' dropdown in Create invoice
  2. 2Select 'Enter custom value' at the bottom
  3. 3Click 'Add dynamic content'
  4. 4Select 'Customer Email' from Stripe trigger data
βœ“ What you should see: Customer field shows the Stripe customer email dynamic content token.
⚠
Common mistake β€” QuickBooks requires exact customer name matches - email mapping works better for automatic customer creation.
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
9

Create invoice > Line > Add new item

Configure invoice line items

Scroll down to the 'Line' section in the QuickBooks action. Click 'Add new item' to create an invoice line. Map 'Description' to Stripe's plan name, 'Amount' to the invoice total, and set 'DetailType' to 'SalesItemLineDetail' for proper accounting.

  1. 1Click 'Add new item' in the Line section
  2. 2Map 'Description' to Stripe's 'Lines Plan Name'
  3. 3Map 'Amount' to Stripe's 'Amount Paid'
  4. 4Set 'DetailType' to 'SalesItemLineDetail'
βœ“ What you should see: Invoice line item shows mapped Stripe subscription data with proper QuickBooks formatting.
10

Create invoice > TxnDate and DueDate fields

Set invoice date and due date

In the invoice date fields, map 'TxnDate' to Stripe's 'Period Start' using dynamic content. This aligns the QuickBooks invoice date with the subscription billing period. Set 'DueDate' to the same value since subscription payments are processed immediately.

  1. 1Click 'TxnDate' field and add dynamic content
  2. 2Select 'Period Start' from Stripe trigger
  3. 3Click 'DueDate' field
  4. 4Select 'Period Start' again for immediate payment
βœ“ What you should see: Both date fields show Stripe's Period Start timestamp for proper billing alignment.
⚠
Common mistake β€” Don't use the current date - this throws off monthly recurring revenue calculations in QuickBooks.
11

Flow builder > Save > Test > Manually

Test and activate the flow

Click 'Save' at the top right to save your flow. Then click 'Test' and select 'Manually' to trigger a test run. Process a test subscription renewal in Stripe to verify the invoice appears correctly in QuickBooks with all mapped fields.

  1. 1Click 'Save' in the top right corner
  2. 2Click 'Test' next to Save
  3. 3Select 'Manually' test option
  4. 4Process a test renewal in Stripe to trigger the flow
βœ“ What you should see: Test run shows green checkmarks for each step and creates a properly formatted invoice in QuickBooks.
⚠
Common mistake β€” Test with a small amount first - failed tests can create duplicate invoices that need manual cleanup.
Power Automate
β–Ά Test flow
executed
βœ“
QuickBooks
βœ“
Stripe
Stripe
πŸ”” notification
received

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 Power Automate for this if you're already using Microsoft 365 and process fewer than 500 subscription renewals monthly. The native QuickBooks Online connector handles invoice creation cleanly without custom API work. Power Automate's webhook handling is reliable for real-time sync. Skip this platform if you need complex subscription proration logic - Zapier's Formatter tools handle invoice calculations better.

Cost

Real math: Power Automate runs cost 1 flow execution per renewal. At 200 renewals monthly, that's 200 runs. Most Office 365 business plans include 2,000 runs monthly, so you're covered. Premium connector usage (QuickBooks) costs extra on basic plans - factor in $15/month for the premium license. Zapier costs $20/month for the same volume but includes the premium apps.

Tradeoffs

Make handles complex subscription scenarios better with built-in JSON parsing and math functions. Zapier's QuickBooks integration includes customer auto-creation that Power Automate requires manual setup for. n8n gives you full webhook customization and can handle Stripe's webhook signature verification natively. Pipedream processes webhooks fastest with sub-second response times. But Power Automate wins on ease - the visual flow builder and Microsoft ecosystem integration make setup straightforward for non-technical teams.

You'll hit Stripe's webhook signature verification requirements first - Power Automate doesn't validate signatures automatically, so duplicate webhooks can create multiple invoices. QuickBooks rate limiting kicks in around 500 API calls per hour during peak renewal times. The currency conversion from Stripe's cents to QuickBooks dollars trips up most implementations initially. Test thoroughly with failed payments - Stripe sends webhook events for both successful and failed attempts, and you don't want failed charges creating invoices.

Ideas for what to build next

  • β†’
    Add failed payment handling β€” Create a separate flow for Stripe invoice payment failures that marks invoices as unpaid in QuickBooks and sends collection reminders.
  • β†’
    Build subscription cancellation sync β€” Automatically void or credit corresponding QuickBooks invoices when customers cancel their Stripe subscriptions mid-billing cycle.
  • β†’
    Create MRR dashboard connection β€” Connect QuickBooks invoice data to Power BI or Excel for automated monthly recurring revenue reporting and growth tracking.

Related guides

Was this guide helpful?
← QuickBooks + Stripe overviewPower Automate profile β†’