

How to Auto-create invoices from payments with Power Automate
When a Stripe payment succeeds, automatically create a matching invoice in QuickBooks with customer details, amount, and payment method.
Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.
Best for
Small businesses using Stripe for payments that need automatic invoice generation in QuickBooks for accounting compliance.
Not ideal for
High-volume merchants processing 1000+ payments daily who need complex invoice line items or multi-currency support.
Sync type
real-timeUse case type
importReal-World Example
A 12-person consulting agency processes 150 client payments monthly through Stripe. Before automation, their bookkeeper manually created matching invoices in QuickBooks, taking 3-4 hours weekly and often creating duplicates. Now invoices appear in QuickBooks within 2 minutes of payment completion.
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 | ||
| Invoice Number | Name | |
| Customer Name | billing_details.name | |
| Invoice Amount | UnitPrice | |
| Invoice Date | created | |
| Currency | currency | |
3 optional fields▸ show
| Description | Description |
| Customer Email | billing_details.email |
| Payment Method | charges.data.payment_method_details.card.brand |
Step-by-Step Setup
My flows > + New flow > Automated cloud flow
Create new automated flow
Navigate to 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 to QuickBooks Invoice Creator' and leave the trigger blank for now.
- 1Click 'My flows' in the left navigation
- 2Click '+ New flow' button at the top
- 3Select 'Automated cloud flow'
- 4Enter flow name 'Stripe to QuickBooks Invoice Creator'
- 5Click 'Create' without selecting a trigger
Flow designer > Choose trigger > HTTP > When a HTTP request is received
Add Stripe webhook trigger
Click 'Choose your flow's trigger' and search for 'HTTP' in the connector search box. Select 'When a HTTP request is received' trigger. This creates a webhook URL that Stripe will call when payments succeed. The trigger will show a URL field that remains empty until you save the flow.
- 1Click 'Choose your flow's trigger'
- 2Type 'HTTP' in the search box
- 3Select 'When a HTTP request is received'
- 4Leave the JSON schema blank for now
- 5Click outside the trigger to continue
Flow designer > + New step > QuickBooks Online > Create item (V3)
Connect to QuickBooks Online
Click '+ New step' below the HTTP trigger. Search for 'QuickBooks' and select the QuickBooks Online connector. Choose 'Create item (V3)' action since invoices are treated as items in the API. You'll be prompted to sign into your QuickBooks account and grant permissions.
- 1Click '+ New step' under the HTTP trigger
- 2Type 'QuickBooks' in the connector search
- 3Select 'QuickBooks Online'
- 4Choose 'Create item (V3)' action
- 5Sign into QuickBooks when prompted
QuickBooks action > Item configuration
Configure QuickBooks invoice settings
In the QuickBooks action, select your company from the Company ID dropdown. Set Item Type to 'Invoice' from the dropdown. The Name field should be set to a dynamic value from Stripe - click in the field and you'll see dynamic content options become available once we configure the HTTP schema.
- 1Select your company from Company ID dropdown
- 2Set Item Type to 'Invoice'
- 3Leave Name field empty for now
- 4Set Active to 'true'
- 5Leave other fields blank temporarily
Flow designer > Save > HTTP trigger > HTTP POST URL
Save flow and copy webhook URL
Click 'Save' at the top right of the flow designer. After saving, go back to your HTTP trigger and you'll see the webhook URL is now populated. Copy this URL - you'll need it for Stripe webhook configuration. The URL looks like https://prod-xx.eastus.logic.azure.com:443/workflows/xxx/triggers/manual/paths/invoke.
- 1Click 'Save' button in top right
- 2Wait for save confirmation
- 3Click on the HTTP trigger to expand it
- 4Copy the HTTP POST URL that now appears
- 5Store the URL somewhere safe
Stripe Dashboard > Developers > Webhooks > Add endpoint
Configure Stripe webhook
Log into your Stripe Dashboard and navigate to Developers > Webhooks. Click 'Add endpoint' and paste your Power Automate webhook URL. In the events section, select 'payment_intent.succeeded' event. Set the API version to your account default and click 'Add endpoint'.
- 1Go to dashboard.stripe.com and sign in
- 2Click 'Developers' in left menu
- 3Click 'Webhooks' tab
- 4Click '+ Add endpoint' button
- 5Paste your Power Automate URL in Endpoint URL field
- 6Click 'Select events' and choose 'payment_intent.succeeded'
Stripe webhook > Send test webhook > Power Automate run history
Test webhook and capture payload
In Stripe, scroll down to your new webhook and click 'Send test webhook'. Select a recent payment_intent.succeeded event from your account. This sends real Stripe data to your flow, which will fail at QuickBooks but that's expected. Check your flow's run history to see the incoming JSON structure.
- 1Click on your webhook endpoint in Stripe
- 2Scroll to bottom and click 'Send test webhook'
- 3Select 'payment_intent.succeeded' event type
- 4Choose a recent event from the list
- 5Click 'Send test webhook' button
Flow run history > HTTP trigger > Request Body JSON Schema
Update HTTP trigger with JSON schema
Go back to Power Automate and click on the failed run in your flow's run history. Expand the HTTP trigger step and copy the JSON body from the test webhook. Return to your flow editor, click the HTTP trigger, and paste this JSON into the 'Request Body JSON Schema' field. Use 'Generate from sample' button to auto-create the schema.
- 1Click on the failed run in run history
- 2Expand the HTTP trigger step
- 3Copy the entire JSON body content
- 4Go back to flow editor and click HTTP trigger
- 5Click 'Generate from sample' in Request Body JSON Schema
- 6Paste the JSON and click 'Done'
QuickBooks action > Field mapping > Dynamic content
Map Stripe data to QuickBooks fields
Click on your QuickBooks action to configure field mapping. Set Name to the payment intent ID from dynamic content. For Amount, use the amount field but note it's in cents so you'll need a formula. Click Expression tab and use div(outputs('When_a_HTTP_request_is_received')?['body']?['data']?['object']?['amount'],100) to convert cents to dollars.
- 1Click on the QuickBooks 'Create item' action
- 2Click in Name field and select payment intent ID from dynamic content
- 3Click in UnitPrice field and choose Expression tab
- 4Enter the division formula to convert cents to dollars
- 5Set QtyOnHand to 1 from the Expression tab
QuickBooks action > Customer fields > Dynamic content
Add customer and payment method mapping
Continue mapping QuickBooks fields using Stripe data. Set Description to the payment intent description from dynamic content. For customer information, map the billing details name and email from the Stripe payload. Add a condition to check if customer exists in QuickBooks first, but for now map the basic fields to test the flow.
- 1Click Description field and select payment intent description
- 2Map customer name from billing_details object
- 3Map customer email from billing_details
- 4Set Invoice date to utcnow() expression
- 5Leave customer ID mapping for advanced setup
Save flow > Stripe test webhook > QuickBooks verification
Test the complete flow
Save your flow and trigger another test webhook from Stripe. This time the flow should complete successfully and create an actual invoice in QuickBooks. Check your QuickBooks account to verify the invoice was created with correct amount, customer name, and payment details. Monitor the flow run to ensure all steps complete without errors.
- 1Click 'Save' to save your flow changes
- 2Return to Stripe and send another test webhook
- 3Watch the flow run in real-time
- 4Check QuickBooks for the new invoice
- 5Verify amount, customer, and description are correct
Add this expression to the UnitPrice field to handle Stripe's cent-based amounts and ensure proper decimal formatting in QuickBooks invoices.
JavaScript — Code Stepdiv(triggerBody()?['data']?['object']?['amount'], 100)▸ Show code
div(triggerBody()?['data']?['object']?['amount'], 100) // For payment method details: if(equals(triggerBody()?['data']?['object']?['charges']?['data'][0]?['payment_method_details']?['type'], 'card'),
... expand to see full code
div(triggerBody()?['data']?['object']?['amount'], 100) // For payment method details: if(equals(triggerBody()?['data']?['object']?['charges']?['data'][0]?['payment_method_details']?['type'], 'card'), triggerBody()?['data']?['object']?['charges']?['data'][0]?['payment_method_details']?['card']?['brand'], triggerBody()?['data']?['object']?['charges']?['data'][0]?['payment_method_details']?['type'] ) // Customer name with fallback: if(empty(triggerBody()?['data']?['object']?['billing_details']?['name']), 'Online Customer', triggerBody()?['data']?['object']?['billing_details']?['name'] )
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 in the Microsoft ecosystem and need enterprise-grade compliance. The QuickBooks Online connector handles authentication renewal automatically, and you get built-in retry logic for failed API calls. Skip this if you need complex conditional logic - Zapier's interface makes invoice customization much easier.
Real math time. Each successful payment costs 1 flow run. At 500 payments monthly, you'll use 500 runs from your plan allowance. Most Office 365 Business plans include 2,000 runs monthly, so you're covered until 2,000 payments. Compare that to Zapier's $20/month for 1,000 tasks or Make's $9/month for 1,000 operations.
Zapier wins on setup speed - their QuickBooks integration includes invoice templates and customer matching out of the box. Make handles complex field transformations better with dedicated text and math modules. n8n gives you complete control over the invoice structure with custom JSON. Pipedream offers the best debugging with live webhook inspection. But Power Automate integrates with your existing Office 365 compliance and governance policies, which matters for financial workflows.
You'll hit Stripe's webhook delivery quirks first. They retry failed webhooks up to 3 days, so you need duplicate detection or you'll create multiple invoices for the same payment. QuickBooks API rate limits kick in at 500 requests per minute - not an issue for single payments but kills bulk imports. The biggest gotcha: QuickBooks requires existing customers for invoices, but Stripe payments from new customers will fail unless you add customer creation logic first.
Ideas for what to build next
- →Add customer creation logic — Enhance the flow to automatically create new QuickBooks customers when they don't exist, using Stripe billing details.
- →Handle refunds and disputes — Create a separate flow that listens for Stripe refund events and creates credit memos in QuickBooks automatically.
- →Multi-line item support — Modify the flow to handle Stripe checkout sessions with multiple line items and create detailed invoices 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