

How to Auto-create invoices from payments with Pipedream
Automatically create QuickBooks invoices with customer details whenever a Stripe payment succeeds.
Steps and UI details are based on platform versions at time of writing β check each platform for the latest interface.
Best for
SaaS companies and e-commerce businesses that need real-time invoice generation for completed payments.
Not ideal for
Businesses that batch process payments daily or need complex invoice approval workflows before creation.
Sync type
real-timeUse case type
notificationReal-World Example
A 25-person subscription software company processes 200+ payments monthly through Stripe. Their accounting team spent 3 hours weekly manually creating QuickBooks invoices after payments cleared, often missing invoices for days. Now invoices generate within 30 seconds 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 Pipedream
Copy the pre-built Pipedream blueprint and paste it straight into Pipedream. 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 Name | CustomerRef.Name | |
| Invoice Amount | Line.Amount | |
| Payment Description | Line.Description | |
| Payment Date | TxnDate | |
| Payment Status | Balance | |
3 optional fieldsβΈ show
| Payment Method | PaymentMethodRef.Name |
| Billing Address | BillAddr |
| Invoice Reference | DocNumber |
Step-by-Step Setup
Dashboard > New Workflow
Create new workflow in Pipedream
Navigate to pipedream.com and click 'New Workflow' in your dashboard. You'll see a blank workflow canvas with a placeholder trigger step. This is where you'll configure the Stripe webhook that fires when payments succeed.
- 1Click the green 'New Workflow' button
- 2Name your workflow 'Stripe to QuickBooks Invoices'
- 3Click 'Create Workflow' to proceed
Trigger Step > Select App > Stripe
Set up Stripe webhook trigger
Click the trigger step and select Stripe from the app list. Choose 'New Payment Intent Succeeded' as your event type. Pipedream automatically generates a webhook URL that you'll register with Stripe to receive payment notifications.
- 1Click 'Select App' in the trigger step
- 2Search for and select 'Stripe'
- 3Choose 'New Payment Intent Succeeded' from the event list
- 4Copy the generated webhook URL
Stripe Dashboard > Developers > Webhooks
Register webhook in Stripe dashboard
Open your Stripe dashboard and navigate to Developers > Webhooks. Add the Pipedream webhook URL you copied and select 'payment_intent.succeeded' as the event type. This tells Stripe where to send payment notifications.
- 1Click 'Add endpoint' in Stripe webhooks
- 2Paste your Pipedream webhook URL
- 3Select 'payment_intent.succeeded' from events
- 4Click 'Add endpoint' to save
Add Step > QuickBooks Online > Create Invoice
Connect QuickBooks account
Add a new step below your trigger and select QuickBooks Online from the app list. Choose 'Create Invoice' as the action. You'll need to authenticate with your QuickBooks account and grant Pipedream permission to create invoices.
- 1Click the '+' button below your trigger step
- 2Select 'QuickBooks Online' from the app directory
- 3Choose 'Create Invoice' action
- 4Click 'Connect Account' and authorize Pipedream
Create Invoice Step > Customer Field
Map customer information
Configure the invoice customer field by mapping Stripe payment data to QuickBooks. You'll need to handle customer lookup or creation since Stripe customer IDs don't exist in QuickBooks. Set up the billing address using Stripe's payment method billing details.
- 1Click the Customer field dropdown
- 2Select 'Use an expression' from the menu
- 3Enter steps.trigger.event.charges.data[0].billing_details.name
- 4Map billing address from steps.trigger.event.charges.data[0].billing_details.address
Create Invoice Step > Line Items
Configure invoice amount and description
Set the invoice line item amount using Stripe's payment amount. Stripe amounts come in cents, so divide by 100 for dollar amounts. Add the payment description from Stripe metadata or use the payment intent description field.
- 1Click 'Add Line Item' in the invoice configuration
- 2Set Amount to steps.trigger.event.amount_received / 100
- 3Set Description to steps.trigger.event.description
- 4Select appropriate Income Account from dropdown
Add this code step before QuickBooks invoice creation to handle customer lookup and creation automatically. Paste this in a Node.js code step between your trigger and QuickBooks action.
JavaScript β Code Stepexport default defineComponent({βΈ Show code
export default defineComponent({
async run({ steps, $ }) {
const customerName = steps.trigger.event.charges.data[0].billing_details.name;... expand to see full code
export default defineComponent({
async run({ steps, $ }) {
const customerName = steps.trigger.event.charges.data[0].billing_details.name;
const customerEmail = steps.trigger.event.charges.data[0].billing_details.email;
// Check if customer exists in QuickBooks
try {
const existingCustomer = await $.send.http({
method: 'GET',
url: `https://sandbox-quickbooks.api.intuit.com/v3/company/${steps.quickbooks_auth.company_id}/customers`,
headers: {
'Authorization': `Bearer ${steps.quickbooks_auth.oauth_access_token}`,
'Accept': 'application/json'
},
params: {
query: `SELECT * FROM Customer WHERE Name = '${customerName}'`
}
});
if (existingCustomer.QueryResponse?.Customer?.length > 0) {
return { customerId: existingCustomer.QueryResponse.Customer[0].Id, action: 'found' };
}
// Create new customer if not found
const newCustomer = await $.send.http({
method: 'POST',
url: `https://sandbox-quickbooks.api.intuit.com/v3/company/${steps.quickbooks_auth.company_id}/customer`,
headers: {
'Authorization': `Bearer ${steps.quickbooks_auth.oauth_access_token}`,
'Content-Type': 'application/json'
},
data: {
Name: customerName,
CompanyName: customerName,
PrimaryEmailAddr: { Address: customerEmail }
}
});
return { customerId: newCustomer.Customer.Id, action: 'created' };
} catch (error) {
$.export('error', error.message);
throw new Error(`Customer lookup/creation failed: ${error.message}`);
}
}
});Create Invoice Step > Payment Details
Set payment method and status
Configure the invoice to reflect that payment was already received through Stripe. Set the payment method based on Stripe's payment method type and mark the invoice as paid. This prevents double-charging customers.
- 1Set Payment Method to steps.trigger.event.charges.data[0].payment_method_details.type
- 2Set Invoice Status to 'Paid'
- 3Set Payment Date to steps.trigger.event.created
- 4Enable 'Mark as Paid' checkbox
Add Step > Code > Node.js
Add duplicate prevention
Insert a code step before QuickBooks to check if an invoice already exists for this Stripe payment ID. This prevents creating duplicate invoices if Stripe sends the webhook multiple times. Use Pipedream's built-in deduplication or custom logic.
- 1Click '+' above the QuickBooks step
- 2Select 'Code' then 'Run Node.js Code'
- 3Add duplicate check logic using payment intent ID
- 4Return early if duplicate found
Workflow > Test > View Logs
Test the complete workflow
Make a test payment in Stripe to trigger your workflow. Watch the workflow execution in Pipedream's logs to see each step process. Verify that a corresponding invoice appears in QuickBooks with correct customer, amount, and paid status.
- 1Create a test payment in Stripe dashboard
- 2Monitor workflow execution in Pipedream logs
- 3Check QuickBooks for new invoice creation
- 4Verify all mapped fields are correct
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 Pipedream for this if you need real-time invoice generation and want to add custom logic without leaving the platform. Pipedream's instant webhook processing means invoices appear in QuickBooks within 30 seconds of payment completion. The Node.js code steps let you handle customer lookup, duplicate prevention, and error handling without external tools. Choose Make instead if you prefer a visual interface and don't need custom code logic.
This costs 1 credit per payment processed. At 200 payments monthly, you'll use 200 credits ($10/month on the Basic plan). Zapier charges $0.10 per task after the free tier, making this same volume $20/month. Make's operations pricing works out to about $12/month for the same usage. Pipedream wins on cost for moderate payment volumes.
Make handles QuickBooks authentication better with automatic token refresh, while Pipedream requires manual reconnection every 180 days. Zapier offers more pre-built QuickBooks templates but lacks the custom logic capabilities. n8n provides similar Node.js flexibility for free but requires self-hosting and manual webhook management. Power Automate integrates well with Microsoft accounting tools but has weaker Stripe webhook reliability. Pipedream's instant webhook processing and built-in code environment still make it the best choice for payment-to-invoice automation.
You'll hit QuickBooks' 500 requests per minute rate limit if processing payment bursts during sales events. Stripe sometimes sends duplicate webhook events, especially during network issues, creating multiple invoices without proper deduplication. Customer names from Stripe billing often don't match QuickBooks customer records exactly, causing lookup failures that need fuzzy matching logic.
Ideas for what to build next
- βAdd invoice PDF email delivery β Send invoice PDFs to customers automatically using QuickBooks' send invoice API and email templates.
- βHandle partial refunds and disputes β Create credit memos in QuickBooks when Stripe processes refunds or chargebacks for existing invoices.
- βSync subscription renewals β Extend workflow to handle Stripe subscription billing cycles and create recurring invoices automatically.
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