Stripe Invoice Paid: Update HubSpot Deal & Notify Slack
Overview
This workflow automatically reacts when a Stripe invoice payment succeeds. It checks if the invoice has a custom field containing a Purchase Order (PO) number, then searches HubSpot for a deal matching that PO number. If found, it marks the deal as paid and sends a success notification to a Slack channel. If the PO number is missing or no matching deal is found, it sends alert messages to the same Slack channel so your team can investigate manually. This helps bridge the gap between billing and CRM, ensuring deal statuses stay current and the finance/sales team is always informed.
Node-by-Node Breakdown
-
When Invoice Paid (Stripe Trigger) — Stripe webhook (no authentication required inside the node; the Stripe trigger is set up via n8n's Stripe node credentials which use API key-based authentication). This node listens for the
invoice.payment_succeededevent from Stripe. When triggered, it passes the full invoice object downstream. -
If no PO Number (IF) — No external authentication. This conditional node checks whether the incoming invoice's
custom_fieldsarray is empty. If it is empty, execution goes via the true branch; otherwise via the false branch. -
Send no PO Message (Slack) — Uses Slack OAuth2 credentials. If the invoice lacks a PO number, this node posts a red-colored alert message to the
#team-accountschannel with the invoice amount, currency, customer name, and email. -
Find Deal based on PO Number (HubSpot) — Uses HubSpot OAuth2 credentials. Performs a search on HubSpot deals using a filter where the property
po_numberequals the value of the first custom field from the Stripe invoice. It always outputs data (even if no results are found). -
If no deal found for PO (IF) — No external authentication. Checks if the search result from the previous node contains an
id(i.e., a deal was found). If empty, the true branch fires; otherwise the false branch fires. -
Send Deal not found message (Slack) — Uses Slack OAuth2 credentials. Posts a red alert to
#team-accountsindicating that no deal could be found for the given PO number, along with invoice details. -
Update Deal to Paid (HubSpot) — Uses HubSpot OAuth2 credentials. Updates the found deal by setting the custom property
paidtoYes. The deal ID is taken from the HubSpot search result. -
Send invoice paid message (Slack) — Uses Slack OAuth2 credentials. Posts a green success message to
#team-accountswith the amount, currency, customer name, email, and PO number, plus the transaction ID.
Setup Instructions
- Stripe: You need a Stripe account. In n8n, create a Stripe Trigger node credential using your Stripe Secret API Key (available in the Stripe Dashboard under Developers → API keys). The webhook will be automatically configured by n8n when you activate the workflow.
- HubSpot: You need a HubSpot account with CRM access. Create an OAuth2 credential in n8n for HubSpot. Make sure the scopes include at least
crm.objects.deals.readandcrm.objects.deals.writeso the workflow can search and update deals. Also, ensure your HubSpot deals have a custom property calledpo_number(single-line text) and a checkbox/property calledpaid(or adjust the property names in the nodes). - Slack: You need a Slack workspace where you can create an app and obtain OAuth2 credentials (Bot Token). The bot must be invited to the
#team-accountschannel (or any channel you specify). In n8n, create a Slack OAuth2 credential. - Custom fields in Stripe: This workflow expects the Stripe invoice to have a custom field (often used for PO numbers) as the first entry in the
custom_fieldsarray. If your setup uses a different field, modify the expression in the Find Deal based on PO Number node.
Use Cases & Variations
- Automated Deal Closure: Use this to automatically mark HubSpot deals as “Closed Won” or “Paid” when the corresponding Stripe invoice is paid, reducing manual data entry.
- Finance & Sales Alignment: Slack notifications keep both teams instantly aware of payments and any missing PO numbers, speeding up resolution.
- Multi‑channel Alerting: Replace Slack with email (Gmail/SMTP), Microsoft Teams, or a webhook to your own chat system.
- Different CRM: Swap HubSpot for Salesforce, Pipedrive, or any other CRM node in n8n.
- Additional Actions: After updating the deal, you could send a thank‑you email, update a Google Sheet, or create a task in a project management tool.
- Error Handling: The workflow already branches on missing data; you could extend it with a delay/retry logic or a notification to a separate admin channel.
Note: All Slack messages use the
team-accountschannel. Change the channel name in each Slack node to match your workspace.
Workflow JSON
{
"id": 100,
"name": "On new Stripe Invoice Payment update Hubspot and notify the team in Slack",
"nodes": [
{
"name": "When Invoice Paid",
"type": "n8n-nodes-base.stripeTrigger",
"position": [
400,
460
],
"webhookId": "47727266-5233-48e5-b7f7-e47252840a4e",
"parameters": {
"events": [
"invoice.payment_succeeded"
]
},
"credentials": {
"stripeApi": {
"id": "39",
"name": "Stripe account"
}
},
"typeVersion": 1
},
{
"name": "Update Deal to Paid",
"type": "n8n-nodes-base.hubspot",
"position": [
1240,
500
],
"parameters": {
"dealId": "={{$json[\"id\"]}}",
"operation": "update",
"updateFields": {
"customPropertiesUi": {
"customPropertiesValues": [
{
"value": "Yes",
"property": "paid"
}
]
}
},
"authentication": "oAuth2"
},
"credentials": {
"hubspotOAuth2Api": {
"id": "60",
// ... truncated (copy to see full JSON)How to Import This Workflow
- 1Copy the workflow JSON above using the Copy Workflow JSON button.
- 2Open your n8n instance and go to Workflows.
- 3Click Import from JSON and paste the copied workflow.
Don't have an n8n instance? Start your free trial at n8nautomation.cloud
Related Templates
Auto-Qualify Google Sheets Leads with OpenAI GPT-4
Overview This workflow automatically qualifies new leads submitted via Google Forms (or directly entered) into a Google Sheet. Using OpenAI's GPT-4, it evaluates each lead against custom criteria (e.g., decision-maker role, team size, email domain) and updates the sheet with a qualification rating and explanation. This saves manual review time and ensures consistent lead scoring for sales teams or community managers. Node-by-Node Breakdown Check for new entries (Google Sheets Trigger – OAuth2) - Listens for new rows added to a specific Google Sheet (connected to a Google Form or standalone). - Configured to poll every minute (adjustable). - Requires: A Google Sheet document ID and sheet name. Qualify leads with GPT (OpenAI – API Key auth) - Uses the chat model. - A system message defines qualification rules (decision-maker, team size, corporate email). - A user message injects the lead's name, email, business area, and team size from the trigger output. - Temperature set to 0.3 for consistent, deterministic responses. - Instructed to reply with a JSON object: . Extract JSON reply (Set Node – no auth) - Parses the from OpenAI's response using . - Stores the resulting object in a new field for downstream nodes. Merge (Merge Node – no auth) - Combines the original lead data (from the trigger) with the parsed GPT reply. - Uses “Combine” mode with “Merge by position” to join the two inputs horizontally. - Input 0 (from trigger) holds the row data; Input 1 (from Extract JSON reply) holds the GPT rating. Update lead status (Google Sheets – OAuth2) - Updates the same Google Sheet with the GPT's rating and explanation. - Matches rows by the column (to avoid updating the wrong row). - Writes the rating into a column (and optionally the explanation if you extend the schema). Setup Instructions Google Cloud / Sheets API - Create a Google Cloud project, enable the Google Sheets API, and create OAuth2 credentials (Desktop app or Web application). - In n8n, add a new Google Sheets credential (OAuth2) using your client ID and secret. OpenAI API Key - Sign up at OpenAI and create an API key. - In n8n, add a new OpenAI credential with your API key. Google Sheet - Use the provided template or create your own with columns: Timestamp, Email Address, Your name, Your business area, Your team size, Rating. - If using Google Forms, submissions will automatically populate the sheet. Configure the workflow - After importing, select each Google Sheets node and choose your credential and the correct sheet/document. - Adjust the polling interval if needed (default: every minute). - Modify the GPT system message to fit your own lead qualification criteria. Use Cases & Adaptations Sales lead scoring: Replace the criteria with your ICP (ideal customer profile) – e.g., industry, company size, budget. Community membership approval: Automatically accept or reject join requests based on responses. Event registration filtering: Qualify attendees for VIP access or follow-up. Extend output: Store the explanation in a separate column by adding it to the Update node's column mapping. Add notifications: Insert a Slack or email node after the Merge to alert your team when a high-quality lead is detected. Use a different model: Switch to for lower cost or for faster responses. This template is a starting point – tweak the prompt, polling frequency, and output columns to match your exact process.
Lead Capture to Notion CRM with Alerts in Slack
Overview This workflow instantly captures leads from any web form (Webflow, Tally, WordPress, custom HTML, etc.) and creates a new entry in your Notion CRM database while simultaneously sending a formatted alert to a Slack sales channel. It eliminates manual data entry and ensures your sales team can respond to leads within seconds of submission — no Zapier subscription required. How It Works The workflow is triggered by an incoming HTTP POST request (the webhook), then processes the lead data through two sequential actions: first creating a Notion database page, then posting a Slack message. The webhook responds immediately with a 200 status so the form never hangs or times out. Node-by-Node Breakdown Lead Webhook (No auth) — Listens for incoming POST requests at the path . Accepts both JSON and form-encoded payloads. When activated, n8n provides a unique production URL that you point your form's action attribute or integration to. The node responds automatically with HTTP 200 after all downstream nodes complete. Add to Notion CRM (OAuth2) — Creates a new database page in your specified Notion database. Configured parameters: - : The Notion database ID (must be replaced with your actual database ID) - : Set dynamically to (the lead's name from the webhook payload) - : Maps the lead's email to the "Email" property and sets a "Status" select property to "New" - Requires sharing your Notion database with the n8n integration Alert Sales Channel (OAuth2) — Posts a formatted Slack message to a specified channel. Configured parameters: - : The Slack channel ID (must be replaced with your actual channel) - : A dynamic message template using expressions: - Uses Slack's markdown formatting for bold text and blockquotes Setup Instructions Prerequisites An n8n instance (self-hosted or cloud) A Notion account with a Leads database (must contain at least Name, Email, and Status properties) A Slack workspace where you can create/choose a channel for lead alerts A web form or service that can send POST requests (Webflow, Tally, WordPress, Framer, custom HTML form, etc.) Step-by-Step Activate the workflow in n8n and copy the production webhook URL from the Lead Webhook node (it will look like ) Configure your form to send a POST request to that URL with fields: , , and (JSON or form-encoded both work) Connect Notion: - Create an integration at https://www.notion.so/my-integrations - Share your Leads database with that integration - In n8n, create a Notion credential (OAuth2) and select your database - Replace with your actual database ID Connect Slack: - Create a Slack app with and scopes - Install the app to your workspace - In n8n, create a Slack credential (OAuth2) - Replace with your actual channel ID (e.g., ) Test: Submit a test lead through your form and verify it appears in Notion and Slack Use Cases & Adaptations Primary Use Cases Marketing teams: Capture leads from landing pages, webinar registrations, or content downloads Sales teams: Get instant notifications when high-value prospects submit inquiries Startups: Build a lightweight CRM without expensive tools Variations to Try Add email automation: Insert a Gmail or SendGrid node after Notion to send an auto-reply to the lead Enrich lead data: Add an HTTP Request node to look up company info via Clearbit or Hunter.io Score leads: Use an n8n Code node to assign lead scores based on message content or source Multi-channel capture: Create additional webhook nodes for different forms, each routing to the same Notion database Error handling: Build a separate Error Trigger workflow that posts to Slack when any node fails Required Replacements Before running, you must replace these placeholder values: → Your Notion database ID → Your Slack channel ID
WhatsApp Lead Qualification Bot with Google Sheets & Slack Alerts
Overview This workflow automates the qualification and routing of incoming WhatsApp messages for sales teams. It receives messages via a WAHA (WhatsApp HTTP API) webhook, normalizes the data, scores leads based on urgency keywords, and then takes action on high-intent leads. Hot leads are simultaneously saved to Google Sheets for record-keeping and sent as a Slack notification to the sales team. An optional auto-reply node is included to acknowledge the message in Portuguese (customizable). This is a free, no-code/low-code solution that replaces expensive AI-based lead scoring with simple keyword matching, making it accessible for small businesses and startups. Node Breakdown WhatsApp Webhook (WAHA) — Webhook (No auth) — Listens for incoming WhatsApp messages at the path . Configure WAHA to POST messages here. No authentication required on the webhook itself; WAHA handles the connection. Normalize & Score Lead — Code node (No auth) — Extracts phone, message, name, and timestamp from the incoming payload. Assigns an (9 or 5) and (HOT or WARM) based on a list of Portuguese/English urgency keywords (e.g., "preço", "buy", "urgente"). Filter Hot Leads — Code node (No auth) — Routes only leads with to the next nodes. All other leads are discarded. Save Lead to Google Sheets — Google Sheets (OAuth2) — Appends lead data (phone, name, message, intent score, urgency) to a specified Google Sheet. Requires a Google Sheets OAuth credential and a valid Sheet ID and range. Notify Sales Team (Slack/Webhook) — HTTP Request (No auth) — Sends a POST request to a Slack incoming webhook URL with a formatted message containing the hot lead details. Requires a Slack webhook URL. Send Auto-Reply (WhatsApp) — WhatsApp (WhatsApp API, OAuth2) — Sends a predefined auto-reply message (Portuguese) to the customer. This node is included but not connected in the current workflow; users should connect it after the webhook or normalization step to reply to all leads. Setup Instructions **WAHA (WhatsApp HTTP API) — Deploy a WAHA instance (self-hosted or cloud) and configure it to send incoming messages to the webhook URL provided by this workflow (e.g., ). Google Sheets — Create a Google Sheet, copy its ID, and set up an OAuth2 credential in n8n for Google Sheets. Slack — Create an incoming webhook in your Slack workspace and copy the webhook URL. WhatsApp — For the auto-reply, you need a WhatsApp Business API credential (or WAHA) configured in n8n. The template name and namespace in the node are placeholders; replace with your own WhatsApp template. Customization — Update the keyword list in the Normalize node to match your business terms. Change the auto-reply message and language as needed. Use Cases & Variations Lead qualification for real estate, services, e-commerce — Replace keywords with industry-specific terms (e.g., "apartment", "quote", "order"). Multi-channel lead routing — Add similar webhooks for Facebook Messenger, Telegram, or email to centralize lead handling. CRM integration — Replace the Google Sheets node with a CRM node (HubSpot, Salesforce) to create leads directly. AI-powered scoring — Swap the keyword logic in the Normalize node with an OpenAI or Gemini node for more accurate intent detection (free tier available). Team assignment — Use the Slack notification to route leads to different channels based on product or region.