Every time a customer pays you, something should happen automatically: your team gets notified, your CRM updates, an invoice goes out, your spreadsheet logs the revenue. Instead, most small businesses do each of these steps by hand, which takes time and introduces errors.
N8N's Stripe integration fixes that. In this tutorial, you'll learn how to connect Stripe to N8N and build four practical workflows that run without you touching them. No code required beyond copy-paste configuration.
If you're new to N8N, start with how to build your first N8N workflow before following this guide. If you already use webhooks, the N8N webhook tutorial explains the underlying mechanics that power Stripe triggers.
What You Can Automate with N8N and Stripe
Stripe fires a webhook event for virtually every action that happens in your account: a charge succeeds, a subscription renews, an invoice fails, a customer cancels. N8N can listen to any of these events and respond with whatever logic you define.
Here are the four workflows this guide covers:
- New payment alert — Notify your team on Slack the moment a payment succeeds
- Failed payment recovery — Email the customer automatically when a payment fails
- CRM sync — Create or update a contact in HubSpot or Airtable when a new customer pays
- Weekly revenue report — Pull Stripe charges every Monday and log them to Google Sheets
Each workflow is independent. Build one, test it, then add the others as you get comfortable with the pattern.
Step 1: Connect Stripe to N8N
Get a Stripe API key
Log into your Stripe dashboard. Go to Developers > API keys. Create a restricted key with only the permissions your workflows need. For read-only reporting, grant read access to charges, customers, and subscriptions. For workflows that update customer data, also grant write access to customers.
Using a restricted key limits the blast radius if credentials are ever exposed. Never use your secret key for automation workflows.
Add credentials in N8N
- In N8N, go to Settings > Credentials > New
- Search for "Stripe" and select the Stripe credential type
- Paste your restricted API key and save
- N8N will test the connection and confirm it's working
Your Stripe credentials are now available to any node in any workflow. You set them up once and reference them throughout.
Workflow 1: New Payment Alert to Slack
This is the most common Stripe workflow and the fastest to build. When a payment succeeds in Stripe, your team gets a Slack message with the customer name and amount. No more checking the Stripe dashboard to see if overnight revenue came in.
Build the workflow
- Create a new workflow in N8N
- Add a Stripe Trigger node as the first step. Set the event to
payment_intent.succeeded - N8N will give you a webhook URL. Copy it
- In Stripe, go to Developers > Webhooks > Add endpoint. Paste the N8N URL and select the
payment_intent.succeededevent - Back in N8N, add a Slack node after the trigger
- Configure the Slack message to include
{{ $json.data.object.amount / 100 }}for the amount and{{ $json.data.object.receipt_email }}for the customer email
Test it by creating a test payment in Stripe using a test card. The Slack message should appear within seconds.
The N8N Slack integration guide covers formatting options in more detail if you want to include things like customer name, plan, or a link back to the Stripe dashboard record.
Workflow 2: Failed Payment Recovery Email
Failed payments are silent revenue killers. Stripe retries automatically on a schedule, but the customer often doesn't know their card declined until they notice a service interruption. A proactive email sent within minutes of failure recovers far more revenue than a retry alone.
Build the workflow
- Create a new workflow with a Stripe Trigger node set to
invoice.payment_failed - Add an IF node to check
{{ $json.data.object.attempt_count }}. If it equals 1 (first failure), send an urgent "card declined" email. If it equals 2 or more, send a different message about account suspension risk - Add an Email (SMTP) or Gmail node for each branch. Write a plain, direct subject line like "Action required: payment for [product] didn't go through"
- Include a direct link to Stripe's hosted invoice page so the customer can update their card without creating a support ticket:
{{ $json.data.object.hosted_invoice_url }}
Keep the email short. The customer needs one thing: a link to fix their payment. Everything else is noise.
Add a Slack notification for your team
In the same workflow, add a parallel Slack branch so your team also knows about the failure. High-value customers may warrant a personal outreach from your sales team rather than a generic email.
Revenue impact: For one client, automating failed payment emails at the first retry attempt recovered 34% of initially failed subscription charges in the same billing cycle, compared to 11% from Stripe's automatic retries alone.
Workflow 3: CRM Sync on New Customer
When someone pays you for the first time, they should immediately appear in your CRM with the right tags, deal stage, and contact details. Doing this manually means delays, missed contacts, and inconsistent data.
Build the workflow
- Create a workflow with a Stripe Trigger set to
checkout.session.completed - Add a HubSpot node (or Airtable, Pipedrive, etc.) in "Upsert Contact" mode
- Map the Stripe fields to CRM fields:
customer_details.email→ Contact emailcustomer_details.name→ Contact nameamount_total / 100→ Deal valuemetadata.plan→ Product or plan name (if you set Stripe metadata)
- After the CRM upsert, add a Set node to tag the contact as "Paid Customer" and set the deal stage to "Closed Won"
If you use Airtable as a lightweight CRM, the N8N Airtable integration guide walks through the exact record-creation syntax for this kind of trigger.
Workflow 4: Weekly Revenue Report to Google Sheets
Finance and operations teams need a consistent view of what came in each week. Rather than logging into Stripe and manually exporting, you can have N8N pull the data every Monday morning and append it to a Google Sheet automatically.
Build the workflow
- Create a workflow with a Schedule Trigger set to run every Monday at 8:00 AM
- Add a Stripe node set to "Get Many" on the Charges resource. Filter by
created[gte]set to the start of the previous week using an expression:{{ Math.floor(new Date(new Date().setDate(new Date().getDate() - 7)).setHours(0,0,0,0) / 1000) }} - Add a Split In Batches node to handle large result sets
- Add a Google Sheets node to append each charge as a row: date, amount, customer email, description, status
The N8N Google Sheets integration guide and the N8N scheduled triggers tutorial cover the exact node configurations for these steps if you want more detail.
Manual vs. Automated: What the Time Adds Up To
| Task | Manual time per week | With N8N + Stripe | Time saved |
|---|---|---|---|
| New payment notifications | Check Stripe 3-4x daily | Instant Slack alert | ~2 hrs/week |
| Failed payment follow-up emails | 15-20 min per failure | Automated within 60 seconds | ~3 hrs/week for 10 failures |
| CRM contact creation | 5-10 min per new customer | Real-time, zero manual steps | ~4 hrs/week for 25 customers |
| Weekly revenue report | 30-45 min every Monday | Delivered before you start work | ~45 min/week |
Across a team of three to five people, that's 8-10 hours per week reclaimed. For businesses processing higher payment volumes, the numbers grow proportionally.
Curious what this translates to in dollar terms for your business? Use the automation ROI calculator to run the math against your own numbers.
Security Best Practices for Stripe Webhooks in N8N
Stripe signs every webhook request with a secret so you can verify it actually came from Stripe. N8N's Stripe Trigger node handles signature verification automatically when you add your webhook signing secret. Here's how to set it up properly:
- In Stripe under Developers > Webhooks, click your endpoint and find the "Signing secret" field. Reveal it and copy it
- In N8N, edit your Stripe credentials and paste the signing secret into the "Webhook Secret" field
- N8N will now reject any webhook request that doesn't match the signature. Spoofed or replayed requests won't trigger your workflow
Use a restricted API key (not your secret key) for all read and write operations. Rotate API keys if any are exposed. Keep your N8N instance behind authentication, especially if self-hosted.
Common Issues and How to Fix Them
Webhook not firing
Make sure the Stripe endpoint is registered and the event type matches exactly. Stripe uses dot notation (payment_intent.succeeded), and the event selected in your N8N trigger must match. Also check that your N8N workflow is active, not in draft mode.
Amounts showing as integers
Stripe stores all amounts in the smallest currency unit (cents for USD). Always divide by 100 in your N8N expressions: {{ $json.data.object.amount / 100 }} before displaying or logging.
Missing customer data
The payment_intent.succeeded event doesn't always include customer email directly. For checkout flows, use checkout.session.completed instead, which includes customer_details.email and customer_details.name. For subscription renewals, use invoice.paid and retrieve the customer object separately with a second Stripe node.
Workflow errors on N8N error handling
Review the N8N error handling best practices guide for setting up retry logic and error alerts so your Stripe workflows don't silently fail during edge cases.
What to Build Next
Once these four workflows are running, you have a solid foundation. Here's where teams typically go next:
- Subscription lifecycle automation — Trigger onboarding sequences when
customer.subscription.createdfires and offboarding tasks whencustomer.subscription.deletedfires - Invoice automation — Auto-send customized invoice PDFs using N8N + a document generation tool when
invoice.paidfires - Churn risk alerts — Flag customers who have had two or more payment failures in 60 days for a proactive outreach sequence
- Revenue dashboards — Aggregate weekly Google Sheets data into a real-time Notion database for executive visibility
If you want to see how payment and operations automation has delivered measurable results, the Le Marquier case study is a concrete example. Their team reduced operational costs by 80% and reached a 98% AI handling rate across customer interactions, freeing up staff to focus on growth rather than administrative work.
Not sure whether your business is ready to go further with automation? The AI readiness assessment gives you a structured answer in about five minutes.
If you'd rather have someone build and maintain these workflows for you, our N8N automation service covers design, implementation, and ongoing monitoring for SMBs that want automation without the setup overhead.
Frequently Asked Questions
Does N8N have a native Stripe node?
Yes. N8N includes a built-in Stripe node that supports customers, charges, subscriptions, invoices, payment intents, and more. You can also use the HTTP Request node alongside Stripe webhooks for event-driven workflows not covered by the native node.
How do I trigger an N8N workflow when a Stripe payment fails?
Use N8N's Stripe Trigger node and select the payment_intent.payment_failed or invoice.payment_failed event. When Stripe fires that webhook, your N8N workflow starts automatically and can send the customer a retry email, notify your team on Slack, and log the failure to a spreadsheet.
Can N8N sync Stripe customers to my CRM automatically?
Yes. Use the Stripe Trigger node listening for customer.created or checkout.session.completed events, then pipe that data into HubSpot, Pipedrive, Airtable, or any CRM with an N8N node or HTTP Request. The sync runs in real time, within seconds of the payment.
Is it safe to connect Stripe to N8N?
Yes, when set up correctly. Use a restricted Stripe API key with only the permissions your workflow needs (read-only for reporting, write for customer updates). If you self-host N8N, your API credentials never leave your server. Always validate Stripe webhook signatures in your trigger node to reject spoofed requests.
What Stripe events can N8N listen to?
N8N's Stripe Trigger node supports all standard Stripe webhook events including payment_intent.succeeded, payment_intent.payment_failed, customer.subscription.created, customer.subscription.deleted, invoice.paid, invoice.payment_failed, checkout.session.completed, and more.
Ready to Get Started?
Book a free 30-minute discovery call. We'll identify your biggest opportunities and show you exactly what AI automation can do for your business.