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

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

Use case type

import

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

/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 account with admin access to create connections and invoices
Active Stripe account with webhook creation permissions in Dashboard
Microsoft Power Automate license (included with most Office 365 plans)
QuickBooks Online API access enabled (found in Company Settings > Advanced)

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Invoice NumberName
Customer Namebilling_details.name
Invoice AmountUnitPrice
Invoice Datecreated
Currencycurrency
3 optional fields▸ show
DescriptionDescription
Customer Emailbilling_details.email
Payment Methodcharges.data.payment_method_details.card.brand

Step-by-Step Setup

1

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.

  1. 1Click 'My flows' in the left navigation
  2. 2Click '+ New flow' button at the top
  3. 3Select 'Automated cloud flow'
  4. 4Enter flow name 'Stripe to QuickBooks Invoice Creator'
  5. 5Click 'Create' without selecting a trigger
What you should see: You should see the flow designer with an empty canvas and 'Choose your flow's trigger' prompt.
2

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.

  1. 1Click 'Choose your flow's trigger'
  2. 2Type 'HTTP' in the search box
  3. 3Select 'When a HTTP request is received'
  4. 4Leave the JSON schema blank for now
  5. 5Click outside the trigger to continue
What you should see: You should see an HTTP trigger box with 'HTTP POST URL' field showing 'will be created after save'.
Common mistake — Don't add a JSON schema yet - we'll configure this after setting up the Stripe webhook to capture the actual payload structure.
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 (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.

  1. 1Click '+ New step' under the HTTP trigger
  2. 2Type 'QuickBooks' in the connector search
  3. 3Select 'QuickBooks Online'
  4. 4Choose 'Create item (V3)' action
  5. 5Sign into QuickBooks when prompted
What you should see: You should see the QuickBooks action with fields for Company ID, Item Type, and other invoice parameters.
Common mistake — QuickBooks connection requires admin permissions on the QuickBooks company file - regular users cannot create this connection.
4

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.

  1. 1Select your company from Company ID dropdown
  2. 2Set Item Type to 'Invoice'
  3. 3Leave Name field empty for now
  4. 4Set Active to 'true'
  5. 5Leave other fields blank temporarily
What you should see: QuickBooks action shows selected company and Invoice type, with remaining fields ready for dynamic content.
5

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.

  1. 1Click 'Save' button in top right
  2. 2Wait for save confirmation
  3. 3Click on the HTTP trigger to expand it
  4. 4Copy the HTTP POST URL that now appears
  5. 5Store the URL somewhere safe
What you should see: You should have a complete webhook URL starting with https://prod- that you can paste into Stripe.
Common mistake — This URL is secret and gives direct access to your flow - never share it publicly or commit it to code repositories.
6

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

  1. 1Go to dashboard.stripe.com and sign in
  2. 2Click 'Developers' in left menu
  3. 3Click 'Webhooks' tab
  4. 4Click '+ Add endpoint' button
  5. 5Paste your Power Automate URL in Endpoint URL field
  6. 6Click 'Select events' and choose 'payment_intent.succeeded'
What you should see: Stripe shows your new webhook endpoint with 'payment_intent.succeeded' event selected and Active status.
Common mistake — Choose 'payment_intent.succeeded' not 'charge.succeeded' - payment intents provide better customer data and handle complex payment flows.
7

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.

  1. 1Click on your webhook endpoint in Stripe
  2. 2Scroll to bottom and click 'Send test webhook'
  3. 3Select 'payment_intent.succeeded' event type
  4. 4Choose a recent event from the list
  5. 5Click 'Send test webhook' button
What you should see: Stripe shows 'Test webhook sent' and your Power Automate flow shows a failed run in the run history.
Common mistake — Copy the webhook URL carefully — it expires if you regenerate it, and any scenarios using the old URL will silently stop working.
Power Automate
▶ Test flow
executed
QuickBooks
Stripe
Stripe
🔔 notification
received
8

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.

  1. 1Click on the failed run in run history
  2. 2Expand the HTTP trigger step
  3. 3Copy the entire JSON body content
  4. 4Go back to flow editor and click HTTP trigger
  5. 5Click 'Generate from sample' in Request Body JSON Schema
  6. 6Paste the JSON and click 'Done'
What you should see: HTTP trigger now shows a detailed JSON schema and dynamic content tokens become available for the QuickBooks action.
Common mistake — Use a real webhook payload, not Stripe's documentation examples - the actual structure includes nested objects that sample docs miss.
9

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.

  1. 1Click on the QuickBooks 'Create item' action
  2. 2Click in Name field and select payment intent ID from dynamic content
  3. 3Click in UnitPrice field and choose Expression tab
  4. 4Enter the division formula to convert cents to dollars
  5. 5Set QtyOnHand to 1 from the Expression tab
What you should see: QuickBooks action shows mapped fields with dynamic content tokens and formula for amount conversion.
Common mistake — Stripe amounts are always in cents (e.g., $10.50 = 1050) so you must divide by 100 or QuickBooks invoices will be 100x too large.
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
10

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.

  1. 1Click Description field and select payment intent description
  2. 2Map customer name from billing_details object
  3. 3Map customer email from billing_details
  4. 4Set Invoice date to utcnow() expression
  5. 5Leave customer ID mapping for advanced setup
What you should see: QuickBooks action has all required fields mapped with dynamic Stripe data and expressions for calculated values.
11

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.

  1. 1Click 'Save' to save your flow changes
  2. 2Return to Stripe and send another test webhook
  3. 3Watch the flow run in real-time
  4. 4Check QuickBooks for the new invoice
  5. 5Verify amount, customer, and description are correct
What you should see: Flow runs successfully and creates a properly formatted invoice in QuickBooks with Stripe payment data.
Common mistake — Test invoices will appear in your real QuickBooks data - consider using a sandbox QuickBooks company for testing if available.

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

VerdictWhy n8n for this workflow

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.

Cost

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.

Tradeoffs

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 logicEnhance the flow to automatically create new QuickBooks customers when they don't exist, using Stripe billing details.
  • Handle refunds and disputesCreate a separate flow that listens for Stripe refund events and creates credit memos in QuickBooks automatically.
  • Multi-line item supportModify the flow to handle Stripe checkout sessions with multiple line items and create detailed invoices in QuickBooks.

Related guides

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