

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-timeUse case type
syncReal-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.
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 Email | Customer | |
| Invoice Description | Description | |
| Amount Paid | Amount | |
| Period Start | TxnDate | |
4 optional fieldsβΈ show
| Period End | DueDate |
| Subscription ID | DocNumber |
| Customer Name | BillAddr_Line1 |
| Invoice ID | PrivateNote |
Step-by-Step Setup
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'.
- 1Click 'My flows' in the left navigation
- 2Click the blue '+ New flow' button
- 3Select 'Automated cloud flow'
- 4Enter flow name: 'Stripe Subscription Renewal to QuickBooks'
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.
- 1Type 'Stripe' in the connector search box
- 2Click the Stripe connector tile
- 3Select 'When an invoice payment succeeds' trigger
- 4Click 'Create' to proceed
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.
- 1Click 'Sign in' in the Stripe connector
- 2Enter your Stripe email and password
- 3Click 'Authorize access' on Stripe's permission page
- 4Wait for redirect back to Power Automate
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.
- 1Click '+ New step' below the Stripe trigger
- 2Search for 'Condition' in the action search
- 3Select 'Condition' from Control connector
- 4Click on the left value box
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'
)
}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.
- 1Click the left value box in the condition
- 2Select 'Subscription' from Dynamic content
- 3Change operator to 'is not equal to'
- 4Type 'null' in the right value box
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'
)
}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.
- 1Click 'Add an action' in the 'If yes' branch
- 2Search for 'QuickBooks' in the connector search
- 3Select 'QuickBooks Online' connector
- 4Choose 'Create invoice' action
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.
- 1Click 'Sign in' in the QuickBooks connector
- 2Select your company from the dropdown
- 3Click 'Authorize' on Intuit's page
- 4Wait for redirect back to Power Automate
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.
- 1Click the 'Customer' dropdown in Create invoice
- 2Select 'Enter custom value' at the bottom
- 3Click 'Add dynamic content'
- 4Select 'Customer Email' from Stripe trigger data
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.
- 1Click 'Add new item' in the Line section
- 2Map 'Description' to Stripe's 'Lines Plan Name'
- 3Map 'Amount' to Stripe's 'Amount Paid'
- 4Set 'DetailType' to 'SalesItemLineDetail'
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.
- 1Click 'TxnDate' field and add dynamic content
- 2Select 'Period Start' from Stripe trigger
- 3Click 'DueDate' field
- 4Select 'Period Start' again for immediate payment
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.
- 1Click 'Save' in the top right corner
- 2Click 'Test' next to Save
- 3Select 'Manually' test option
- 4Process a test renewal in Stripe to trigger the flow
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 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.
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.
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
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