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

How to Send Stripe Failed Payment Alerts to QuickBooks with N8n

When Stripe payments fail, automatically create follow-up tasks in QuickBooks and notify your finance team.

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

Best for

Teams needing custom payment failure logic or processing high volumes where per-execution pricing matters.

Not ideal for

Simple setups where basic Stripe-to-email notifications are sufficient without QuickBooks integration.

Sync type

real-time

Use case type

notification

Real-World Example

💡

A 25-person SaaS company uses this to handle 200+ monthly subscription payment failures. Before automation, their finance team manually checked Stripe daily and missed follow-ups on failed renewals worth $5K+. Now high-value failures create QuickBooks tasks automatically while small subscription failures get logged without alerting the team.

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 n8n

Copy the pre-built n8n blueprint and paste it straight into n8n. 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.

Stripe account with webhook access and API keys
QuickBooks Online subscription with API access enabled
N8n instance running with internet access for webhooks
Admin access to configure Stripe webhook endpoints
QuickBooks company file access to create tasks

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Customer Emaildata.object.customer_email
Amount Duedata.object.amount_due
Invoice Numberdata.object.number
3 optional fields▸ show
Failure Codedata.object.charge.failure_code
Customer Namedata.object.customer_name
Next Payment Attemptdata.object.next_payment_attempt

Step-by-Step Setup

1

Dashboard > New Workflow

Create new N8n workflow

Start a blank workflow to capture Stripe webhooks. N8n will listen for failed payment events and route them to QuickBooks.

  1. 1Click 'New Workflow' from the N8n dashboard
  2. 2Name it 'Stripe Failed Payment Alerts'
  3. 3Save the workflow to generate a webhook URL
What you should see: Empty workflow canvas with a generated webhook endpoint URL visible in the workflow settings.
2

Workflow > Add Node > Webhook

Add Stripe webhook trigger

Configure N8n to receive Stripe's payment failure notifications. This trigger fires immediately when payments fail.

  1. 1Click the '+' button to add a node
  2. 2Search for 'Webhook' and select it
  3. 3Set HTTP method to 'POST'
  4. 4Copy the webhook URL from the node settings
What you should see: Webhook node showing a unique URL ending in '/webhook/[random-string]'.
Common mistake — Don't use the generic webhook - you need the Webhook node specifically for Stripe's payload format
n8n
+
click +
search apps
QuickBooks
QU
QuickBooks
Add Stripe webhook trigger
QuickBooks
QU
module added
3

Stripe > Developers > Webhooks > Add endpoint

Configure Stripe webhook in dashboard

Tell Stripe where to send failed payment notifications. Point it to your N8n webhook URL.

  1. 1Open Stripe Dashboard > Developers > Webhooks
  2. 2Click 'Add endpoint'
  3. 3Paste your N8n webhook URL
  4. 4Select event type 'invoice.payment_failed'
  5. 5Click 'Add endpoint' to save
What you should see: Stripe shows your endpoint as 'Active' with invoice.payment_failed event selected.
Common mistake — Only select invoice.payment_failed - selecting all events will spam your workflow with irrelevant triggers
4

N8n > Execute Workflow | Stripe > Test webhook

Test the webhook connection

Verify Stripe can reach your N8n workflow. This confirms the webhook endpoint works before building the rest.

  1. 1In N8n, click 'Execute Workflow' to start listening
  2. 2In Stripe dashboard, click 'Send test webhook'
  3. 3Select a sample invoice.payment_failed event
  4. 4Click 'Send test webhook' button
What you should see: N8n shows execution completed with Stripe's test payload data visible in the webhook node output.
Common mistake — Copy the webhook URL carefully — it expires if you regenerate it, and any scenarios using the old URL will silently stop working.
n8n
▶ Run once
executed
QuickBooks
Stripe
Stripe
🔔 notification
received
5

Workflow > Add Node > QuickBooks Online

Add QuickBooks connection

Connect to QuickBooks to create follow-up tasks. N8n needs OAuth access to write tasks to your company file.

  1. 1Add a new node and search for 'QuickBooks'
  2. 2Select 'QuickBooks Online' from the results
  3. 3Click 'Create New Credential'
  4. 4Follow OAuth flow to authorize N8n access
What you should see: QuickBooks node shows 'Connected' status with your company name displayed.
Common mistake — Use QuickBooks Online node, not QuickBooks Desktop - the API endpoints are completely different
6

QuickBooks Node > Resource: Task > Operation: Create

Set QuickBooks operation to create task

Configure the QuickBooks node to create follow-up tasks. Tasks appear in the QuickBooks task center for your finance team.

  1. 1In QuickBooks node, set Resource to 'Task'
  2. 2Set Operation to 'Create'
  3. 3Map 'Name' field to customer email from Stripe data
  4. 4Set 'Description' to payment failure reason
What you should see: QuickBooks node configuration showing Task creation with Stripe webhook fields mapped to task properties.
7

QuickBooks Node > Fields > Expression

Map Stripe payment data to task fields

Pull customer and payment details from Stripe's webhook payload. This creates meaningful task descriptions for your finance team.

  1. 1Click the 'Expression' tab for task Name field
  2. 2Enter: {{$json.data.object.customer_email}}
  3. 3For Description, enter: Payment failed: ${{$json.data.object.amount_due}} - {{$json.data.object.failure_code}}
  4. 4Set Due Date to 3 days from now using expression: {{$now.plus({days: 3}).toISO()}}
What you should see: Field mappings showing Stripe customer email, amount, and failure reason populated in task fields.
Common mistake — Stripe amounts come in cents - divide by 100 if you want dollar amounts in the description
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
8

Workflow > Add Node > IF

Add conditional notification logic

Only notify the team for high-value failed payments. This prevents spam for small subscription failures.

  1. 1Add an 'IF' node after the webhook
  2. 2Set condition: {{$json.data.object.amount_due}} > 5000
  3. 3Connect the true path to an email or Slack node
  4. 4Leave false path empty or connect to a different action
What you should see: IF node showing condition logic with two output paths - one for high-value failures requiring notification.
Common mistake — Remember Stripe amounts are in cents - 5000 = $50, not $5000
QuickBooks
QU
trigger
filter
Condition
matches criteria?
yes — passes through
no — skipped
Stripe
ST
notified
9

Workflow > Add Node > Email/Slack

Configure team notification

Send alerts to your finance team for payment failures above the threshold. Use email or Slack based on your team's preference.

  1. 1Add an Email or Slack node on the IF true path
  2. 2Set recipient to your finance team email/channel
  3. 3Create subject: Failed payment alert: {{$json.data.object.customer_email}}
  4. 4Include payment amount and failure reason in message body
What you should see: Notification node configured with finance team recipient and Stripe payment failure details in the message.
10

QuickBooks Node > Right-click > Add Error Trigger

Add error handling

Catch QuickBooks API failures and retry logic. Prevents lost notifications when QuickBooks is temporarily unavailable.

  1. 1Right-click the QuickBooks node and select 'Add Error Trigger'
  2. 2Add a 'Wait' node set to 60 seconds
  3. 3Connect wait node back to QuickBooks node for retry
  4. 4Set maximum retry attempts to 3
What you should see: Error handling flow showing retry logic with wait periods between QuickBooks API attempts.
Common mistake — Don't set retries too aggressive - QuickBooks has rate limits and will block rapid retry attempts
11

Workflow > Toggle Active > QuickBooks > Task Center

Test with real failed payment

Verify the complete workflow using actual Stripe data. This confirms both QuickBooks task creation and team notifications work.

  1. 1Activate the workflow by toggling it 'On'
  2. 2Create a test failed payment in Stripe
  3. 3Check QuickBooks task center for the new task
  4. 4Verify notification was sent to finance team
What you should see: New task appears in QuickBooks with customer details and your team receives the notification email/Slack message.
12

Workflow > Settings > Execution Logging

Set up monitoring and logging

Track workflow execution and failures. N8n's execution log helps debug issues with Stripe webhooks or QuickBooks API calls.

  1. 1Enable workflow execution logging in settings
  2. 2Set up error notifications to your admin email
  3. 3Create a dashboard bookmark for execution history
  4. 4Document the workflow for team handoffs
What you should see: Workflow settings showing logging enabled with admin notifications configured for execution failures.
Common mistake — N8n logs can get large with high payment volume - set retention limits to avoid storage issues

Drop this into an n8n Code node.

Copy this template// Add this expression to create smarter task due dates based on payment amount
▸ Show code
// Add this expression to create smarter task due dates based on payment amount
{{ $json.data.object.amount_due > 10000 ? $now.plus({days: 1}).toISO() : $now.plus({days: 7}).toISO() }}
// High-value failures get 1-day follow-up, smaller amounts get 7 days

... expand to see full code

// Add this expression to create smarter task due dates based on payment amount
{{ $json.data.object.amount_due > 10000 ? $now.plus({days: 1}).toISO() : $now.plus({days: 7}).toISO() }}
// High-value failures get 1-day follow-up, smaller amounts get 7 days

Scaling Beyond 100+ failed payments/day+ Records

If your volume exceeds 100+ failed payments/day records, apply these adjustments.

1

Implement batching for notifications

Group multiple payment failures into digest emails sent hourly instead of individual alerts. Use N8n's schedule trigger with a database node to queue failures.

2

Add QuickBooks rate limit handling

QuickBooks allows 500 API calls per hour. Add a queue system using N8n's memory store or external database to throttle task creation during peak failure periods.

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 N8n for this if you need custom logic around payment failures or want to avoid per-execution costs. N8n handles Stripe webhooks instantly and gives you full control over conditional notifications and retry logic. The code nodes let you transform Stripe's payload format however QuickBooks needs it. Skip N8n if you just want basic alerts - Zapier's Stripe integration has pre-built failed payment triggers that work in 5 minutes.

Cost

This workflow uses 1 execution per failed payment. At 50 failed payments monthly, that's 50 executions total. N8n's self-hosted version is free with unlimited executions. The cloud version starts at $20/month for 2,500 executions - easily handling 2,000+ monthly payment failures. Zapier charges $29/month for 750 tasks, so N8n cloud saves you money above 30 failures per month. Make's cheapest plan is $9 but only includes 1,000 operations.

Tradeoffs

Zapier wins on setup speed - their Stripe app includes payment failure triggers out of the box. Make has better error handling with automatic retries and dead letter queues built in. N8n requires manual retry logic like we built in step 10. But N8n's webhook reliability beats both - no polling delays or missed events. Plus the conditional logic in step 8 prevents notification spam for small amounts, something Zapier makes awkward with multiple Zaps.

Stripe webhooks can arrive out of order during high traffic periods. If a customer has multiple payment methods, you might get several failure events for the same invoice. Add a duplicate check using N8n's memory store to prevent creating multiple QuickBooks tasks. QuickBooks API rate limits kick in at 500 requests/hour - not a problem for most businesses, but e-commerce sites with hundreds of daily failures need batching logic. The OAuth tokens expire every 90 days and N8n doesn't auto-refresh QuickBooks credentials like it does for other apps.

Ideas for what to build next

  • Add successful payment recovery trackingCreate a follow-up workflow that updates or closes QuickBooks tasks when customers successfully retry their payment.
  • Build payment failure analytics dashboardSend failure data to Google Sheets or Airtable to track failure patterns by customer segment, payment method, or amount range.
  • Automate customer communicationAdd email sequences to notify customers about failed payments with personalized retry links, reducing manual outreach from your team.

Related guides

Was this guide helpful?
QuickBooks + Stripe overviewn8n profile →