This workflow corresponds to n8n.io template #15932 — we link there as the canonical source.
This workflow follows the Datatable → Gmail recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"meta": {
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "71803eb3-c095-47bb-8f05-d425b03a9c78",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2368,
288
],
"parameters": {
"width": 480,
"height": 896,
"content": "## Automated Stripe Payment Recovery: Assign Account Manager for High LTV and coupons for others\n\n### How it works\n\nThe workflow triggers on a Stripe payment failure and retrieves contact details.\nIt queries the payment failures table to check if the client already has a recorded failure.\nIf a record exists, it increments the failure count; otherwise, it creates a new entry in the table.\nThe workflow evaluates the client's lifetime value (LTV) and checks if they have already been processed in the system.\nHigh LTV clients receive a newly created Stripe discount coupon via Gmail to encourage retention.\nThe system also checks for pending tasks, creating new internal tasks and Google Calendar events if none exist.\n\n### Setup steps\n\n- [ ] Configure Stripe credentials for the trigger and coupon creation nodes.\n- [ ] Connect the HighLevel account to manage contacts and tasks.\n- [ ] Authenticate your chosen data table here it is n8n official data tables.\n- [ ] Set up Gmail credentials for sending emails to users.\n- [ ] Connect Google Calendar for internal event creation.\n\n### Customization\n\nYou can customize the Stripe coupon amount, the criteria used to determine 'high LTV' clients, and the email template sent to them."
},
"typeVersion": 1
},
{
"id": "85137481-5ddf-4690-9f0d-fe713f1d4ab8",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1808,
592
],
"parameters": {
"color": 7,
"width": 640,
"height": 272,
"content": "## Handle Stripe trigger\n\nReceives the Stripe webhook and fetches associated contact details."
},
"typeVersion": 1
},
{
"id": "b91ca06e-b0f7-4bd5-9854-7c6e17191855",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1136,
560
],
"parameters": {
"color": 7,
"width": 416,
"height": 320,
"content": "## Query payment failures table\n\nChecks the data table to see if a failure record already exists for the client."
},
"typeVersion": 1
},
{
"id": "cc9b08b5-d0f9-4086-9e6d-8d0f5d089942",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-672,
96
],
"parameters": {
"color": 7,
"width": 640,
"height": 320,
"content": "## Process existing failure record\n\nIncrements the failure count for known clients and evaluates their LTV status."
},
"typeVersion": 1
},
{
"id": "f9176afb-3423-4bf9-af32-43b43462de90",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-688,
880
],
"parameters": {
"color": 7,
"width": 640,
"height": 320,
"content": "## Process new failure record\n\nCreates a new data table entry for first-time payment failures and evaluates LTV."
},
"typeVersion": 1
},
{
"id": "4f356d63-2425-4450-87c5-82c54f041851",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
0,
0
],
"parameters": {
"color": 7,
"width": 640,
"height": 304,
"content": "## Check for existing pending tasks\n\nFetches and aggregates current tasks to check if the client already has pending follow-ups."
},
"typeVersion": 1
},
{
"id": "1a2034f9-2f3c-4784-9a70-de636870473e",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
720,
128
],
"parameters": {
"color": 7,
"width": 640,
"height": 304,
"content": "## Create follow-up task and event for a dedicated account manager\n\nGenerates a new internal task, creates a Google Calendar event, and updates the row."
},
"typeVersion": 1
},
{
"id": "108f08e5-4008-4aa0-b038-fe5e7db6042e",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
0,
336
],
"parameters": {
"color": 7,
"width": 640,
"height": 304,
"content": "## Generate coupon and send message\n\nCreates a discount coupon in Stripe and sends it to the high LTV client via Gmail."
},
"typeVersion": 1
},
{
"id": "2d9ac668-fa16-40d0-8196-ecdf45c6b38f",
"name": "Sticky Note8",
"type": "n8n-nodes-base.stickyNote",
"position": [
-16,
768
],
"parameters": {
"color": 7,
"width": 640,
"height": 304,
"content": "## Evaluate tasks for new records\n\nFetches and aggregates tasks for clients with newly created failure records."
},
"typeVersion": 1
},
{
"id": "ab52aa64-01b3-488c-97f8-b3c558efea28",
"name": "Sticky Note9",
"type": "n8n-nodes-base.stickyNote",
"position": [
704,
896
],
"parameters": {
"color": 7,
"width": 640,
"height": 304,
"content": "## Schedule task for new records\n\nCreates follow-up tasks and calendar events for new payment failure instances."
},
"typeVersion": 1
},
{
"id": "faf71875-4786-4051-932e-da7fffbd110c",
"name": "Sticky Note10",
"type": "n8n-nodes-base.stickyNote",
"position": [
-16,
1104
],
"parameters": {
"color": 7,
"width": 640,
"height": 304,
"content": "## Issue coupon for new records\n\nCreates a Stripe coupon and sends a retention email for newly recorded high LTV clients."
},
"typeVersion": 1
},
{
"id": "c894bc0d-7ad8-486f-8e7f-2be1a983f523",
"name": "Stripe Event Trigger",
"type": "n8n-nodes-base.stripeTrigger",
"position": [
-1760,
704
],
"parameters": {
"events": [
"invoice.payment_failed",
"payment_intent.payment_failed"
]
},
"credentials": {
"stripeApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "580818b0-abf6-4d4c-94c4-75c9d4453988",
"name": "Fetch Contacts List",
"type": "n8n-nodes-base.highLevel",
"position": [
-1536,
704
],
"parameters": {
"filters": {
"query": "={{ $json.data.object.receipt_email }}"
},
"options": {},
"operation": "getAll",
"requestOptions": {}
},
"credentials": {
"highLevelOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 2,
"alwaysOutputData": true
},
{
"id": "7ddb8eb6-e7bb-46a7-8eff-86cac1fa7302",
"name": "If Contact Exists",
"type": "n8n-nodes-base.if",
"position": [
-1312,
704
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "de566e1a-9687-4bfd-84bb-70005de261e3",
"operator": {
"type": "string",
"operation": "notEmpty",
"singleValue": true
},
"leftValue": "={{ $json.id }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.3
},
{
"id": "e1e83686-d089-40f9-9c46-077efe5d7011",
"name": "If Payment Failure Exists",
"type": "n8n-nodes-base.if",
"position": [
-864,
688
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "80468b7c-f365-447f-813a-d8641a66cd9c",
"operator": {
"type": "number",
"operation": "notEmpty",
"singleValue": true
},
"leftValue": "={{ $json.id }}",
"rightValue": 0
}
]
}
},
"typeVersion": 2.3
},
{
"id": "2802df7f-0aed-4cfb-85cd-cfeaf8351cd9",
"name": "Create Task",
"type": "n8n-nodes-base.highLevel",
"position": [
768,
256
],
"parameters": {
"title": "High LTV Customer Payment Issue | Very Important",
"dueDate": "2026-05-22T00:00:00",
"resource": "task",
"contactId": "={{ $('Update Failure Count').item.json.ContactID }}",
"requestOptions": {},
"additionalFields": {
"assignedTo": "=enter-your-dedicated-account-manager-ghl-id"
}
},
"credentials": {
"highLevelOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 2
},
{
"id": "bdd26f3d-341d-4141-a3cd-18c7cadb54fb",
"name": "Create Task for New Failure",
"type": "n8n-nodes-base.highLevel",
"position": [
752,
1024
],
"parameters": {
"title": "High LTV Customer Payment Issue | Very Important",
"dueDate": "2026-05-22T00:00:00",
"resource": "task",
"contactId": "={{ $('Add Payment Failure Record').item.json.ContactID }}",
"requestOptions": {},
"additionalFields": {
"assignedTo": "=enter-your-dedicated-account-manager-ghl-id"
}
},
"credentials": {
"highLevelOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 2
},
{
"id": "62fbf15e-9c9e-4c8a-acfe-935d3b87428c",
"name": "Update Failure Count",
"type": "n8n-nodes-base.dataTable",
"position": [
-624,
224
],
"parameters": {
"columns": {
"value": {
"Email": "={{ $json.Email }}",
"Amount": "={{ parseFloat($('Stripe Event Trigger').item.json.data.object.amount) / 100 }}",
"Currency": "$",
"ContactID": "={{ $json.ContactID }}",
"ErrorCode": "={{ $('Stripe Event Trigger').item.json.data.object.last_payment_error.code }}",
"ErrorMessage": "={{ $('Stripe Event Trigger').item.json.data.object.last_payment_error.message }}",
"FailureCount": "={{ new Date($json.updatedAt).getTime() > (Date.now() - 30 * 24 * 60 * 60 * 1000) ? ($('Get Payment Failures Data').item.json.FailureCount || 0) + 1 : 1 }}",
"DiscountOffered": 0,
"StripePaymentIntentID": "={{ $('Stripe Event Trigger').item.json.data.object.id }}"
},
"schema": [
{
"id": "Email",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Email",
"defaultMatch": false
},
{
"id": "ContactID",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "ContactID",
"defaultMatch": false
},
{
"id": "StripePaymentIntentID",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "StripePaymentIntentID",
"defaultMatch": false
},
{
"id": "Amount",
"type": "number",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Amount",
"defaultMatch": false
},
{
"id": "Currency",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Currency",
"defaultMatch": false
},
{
"id": "FailureCount",
"type": "number",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "FailureCount",
"defaultMatch": false
},
{
"id": "DiscountOffered",
"type": "number",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "DiscountOffered",
"defaultMatch": false
},
{
"id": "ErrorCode",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "ErrorCode",
"defaultMatch": false
},
{
"id": "ErrorMessage",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "ErrorMessage",
"defaultMatch": false
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"filters": {
"conditions": [
{
"keyValue": "={{ $json.id }}"
}
]
},
"options": {},
"operation": "update",
"dataTableId": {
"__rl": true,
"mode": "list",
"value": "d5QC1syJrsgKlhaz",
"cachedResultUrl": "/projects/S0V0gYYsL1xXfutM/datatables/d5QC1syJrsgKlhaz",
"cachedResultName": "Payment_intent_failures"
}
},
"typeVersion": 1.1
},
{
"id": "db66fc88-65f0-42f0-b2b0-4d65f66cc8e1",
"name": "Add Payment Failure Record",
"type": "n8n-nodes-base.dataTable",
"position": [
-640,
1008
],
"parameters": {
"columns": {
"value": {
"Email": "={{ $json.Email }}",
"Amount": "={{ parseFloat($('Stripe Event Trigger').item.json.data.object.amount) / 100 }}",
"Currency": "$",
"ContactID": "={{ $('Fetch Contacts List').item.json.id }}",
"ErrorCode": "={{ $('Stripe Event Trigger').item.json.data.object.last_payment_error.code }}",
"ErrorMessage": "={{ $('Stripe Event Trigger').item.json.data.object.last_payment_error.message }}",
"FailureCount": "=1",
"DiscountOffered": 0,
"StripePaymentIntentID": "={{ $('Stripe Event Trigger').item.json.data.object.id }}"
},
"schema": [
{
"id": "Email",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Email",
"defaultMatch": false
},
{
"id": "ContactID",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "ContactID",
"defaultMatch": false
},
{
"id": "StripePaymentIntentID",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "StripePaymentIntentID",
"defaultMatch": false
},
{
"id": "Amount",
"type": "number",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Amount",
"defaultMatch": false
},
{
"id": "Currency",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Currency",
"defaultMatch": false
},
{
"id": "FailureCount",
"type": "number",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "FailureCount",
"defaultMatch": false
},
{
"id": "DiscountOffered",
"type": "number",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "DiscountOffered",
"defaultMatch": false
},
{
"id": "ErrorCode",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "ErrorCode",
"defaultMatch": false
},
{
"id": "ErrorMessage",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "ErrorMessage",
"defaultMatch": false
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"dataTableId": {
"__rl": true,
"mode": "list",
"value": "d5QC1syJrsgKlhaz",
"cachedResultUrl": "/projects/S0V0gYYsL1xXfutM/datatables/d5QC1syJrsgKlhaz",
"cachedResultName": "Payment_intent_failures"
}
},
"typeVersion": 1.1
},
{
"id": "efca41ed-6ea8-47cd-9a6c-45dfc44709e2",
"name": "Create Calendar Event",
"type": "n8n-nodes-base.googleCalendar",
"position": [
992,
256
],
"parameters": {
"calendar": {
"__rl": true,
"mode": "list",
"value": "user@example.com",
"cachedResultName": "Family"
},
"additionalFields": {
"summary": "={{ $json.task.title }}",
"attendees": [
"=enter-your-dedicated-account-manager-email-here"
],
"description": "=Customer Email: {{ $('Fetch Contacts List').item.json.email }}\n\nHey, This is some serious issue out there support our IMP customer payment issue. And report back to our manager",
"sendUpdates": "all"
}
},
"credentials": {
"googleCalendarOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "74fb9654-58ad-4a22-af59-89a3c99cac14",
"name": "Create Calendar Event for New",
"type": "n8n-nodes-base.googleCalendar",
"position": [
976,
1024
],
"parameters": {
"calendar": {
"__rl": true,
"mode": "list",
"value": "user@example.com",
"cachedResultName": "Family"
},
"additionalFields": {
"summary": "={{ $json.task.title }}",
"attendees": [
"=enter-your-dedicated-account-manager-email-here"
],
"description": "=Customer Email: {{ $('Fetch Contacts List').item.json.email }}\n\nHey, This is some serious issue out there support our IMP customer payment issue. And report back to our manager.",
"sendUpdates": "all"
}
},
"credentials": {
"googleCalendarOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "4aa6f0a2-b04d-4363-82c2-0a1f511cf230",
"name": "Create Stripe Coupon",
"type": "n8n-nodes-base.stripe",
"position": [
48,
464
],
"parameters": {
"resource": "coupon",
"percentOff": 5
},
"credentials": {
"stripeApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "1cdec0b4-b1e2-4f70-9259-068213717feb",
"name": "Send Coupon Email",
"type": "n8n-nodes-base.gmail",
"position": [
272,
464
],
"parameters": {
"sendTo": "={{ $('Fetch Contacts List').item.json.email }}",
"message": "=<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>Action Required: Your recent payment failed</title>\n<style>\n /* Reset & Base Styles */\n body, table, td, a {\n -webkit-text-size-adjust: 100%;\n -ms-text-size-adjust: 100%;\n }\n body {\n margin: 0;\n padding: 0;\n background-color: #f4f7f6;\n font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n color: #333333;\n -webkit-font-smoothing: antialiased;\n }\n /* Layout */\n .email-wrapper {\n width: 100%;\n background-color: #f4f7f6;\n padding: 40px 0;\n }\n .email-content {\n max-width: 600px;\n margin: 0 auto;\n background-color: #ffffff;\n border-radius: 8px;\n box-shadow: 0 4px 10px rgba(0,0,0,0.05);\n overflow: hidden;\n }\n .email-header {\n text-align: center;\n padding: 30px 40px 10px;\n }\n .email-body {\n padding: 20px 40px 30px;\n }\n /* Typography */\n h1 {\n font-size: 22px;\n color: #1a1a1a;\n margin-top: 0;\n margin-bottom: 20px;\n font-weight: 600;\n }\n p {\n font-size: 16px;\n line-height: 1.6;\n margin-top: 0;\n margin-bottom: 20px;\n color: #4a4a4a;\n }\n /* Highlight Box */\n .discount-box {\n background-color: #f0f7ff;\n border: 2px dashed #0066cc;\n border-radius: 6px;\n padding: 25px 20px;\n text-align: center;\n margin: 30px 0;\n }\n .discount-box p {\n margin: 0;\n color: #004499;\n font-size: 15px;\n }\n .discount-code {\n display: block;\n font-size: 26px;\n font-weight: bold;\n letter-spacing: 1.5px;\n margin-top: 10px;\n color: #0066cc;\n }\n /* Button */\n .cta-container {\n text-align: center;\n margin: 35px 0 20px;\n }\n .cta-button {\n background-color: #0066cc;\n color: #ffffff !important;\n text-decoration: none;\n padding: 14px 32px;\n border-radius: 6px;\n font-size: 16px;\n font-weight: bold;\n display: inline-block;\n }\n /* Footer */\n .email-footer {\n background-color: #f9fafc;\n padding: 30px 40px;\n text-align: center;\n border-top: 1px solid #eeeeee;\n }\n .email-footer p {\n font-size: 13px;\n color: #888888;\n margin-bottom: 10px;\n line-height: 1.5;\n }\n /* Responsive */\n @media only screen and (max-width: 600px) {\n .email-body, .email-header, .email-footer {\n padding-left: 20px !important;\n padding-right: 20px !important;\n }\n }\n</style>\n</head>\n<body>\n\n<div class=\"email-wrapper\">\n <div class=\"email-content\">\n \n <div class=\"email-body\">\n <h1>Action Required: Your payment failed</h1>\n \n <p>Hi {{ $('Stripe Event Trigger').item.json.data.object.last_payment_error.payment_method.billing_details.name }},</p>\n \n <p>It looks like we ran into a small hiccup while processing your recent payment. Don't worry\u2014this usually just happens due to an expired card, a typo, or a strict bank filter.</p>\n \n <p>To help get things back on track and make up for the inconvenience, we\u2019ve set up a custom <strong>5% discount</strong> for you to apply when you retry your payment.</p>\n\n <div class=\"discount-box\">\n <p>Use this promo code at checkout:</p>\n <span class=\"discount-code\">{{ $json.id }}</span>\n </div>\n\n <div class=\"cta-container\">\n <a href=\"https://www.blankarray.com/\" class=\"cta-button\">Update Payment Details</a>\n </div>\n\n <p>If you run into any issues or have questions, simply reply directly to this email and our support team will get it sorted out for you.</p>\n \n <p>Best regards,<br>\n <strong>The Blankarray Team</strong></p>\n </div>\n\n <div class=\"email-footer\">\n <p>You are receiving this email because you recently attempted a transaction at blankarray.</p>\n <p>© 2026 Blankarray. All rights reserved.</p>\n </div>\n\n </div>\n</div>\n\n</body>\n</html>",
"options": {},
"subject": "=Action Required: Your recent payment failed (Plus a 5% discount inside!)"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.2
},
{
"id": "a5d0b89c-5b6a-4052-8803-4bec9f3e47f0",
"name": "Create Stripe Coupon for New",
"type": "n8n-nodes-base.stripe",
"position": [
32,
1232
],
"parameters": {
"resource": "coupon",
"percentOff": 5
},
"credentials": {
"stripeApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "40c31cd0-1442-41b5-8c7d-25f6fb976eff",
"name": "Send Coupon Email for New",
"type": "n8n-nodes-base.gmail",
"position": [
256,
1232
],
"parameters": {
"sendTo": "={{ $('Fetch Contacts List').item.json.email }}",
"message": "=<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>Action Required: Your recent payment failed</title>\n<style>\n /* Reset & Base Styles */\n body, table, td, a {\n -webkit-text-size-adjust: 100%;\n -ms-text-size-adjust: 100%;\n }\n body {\n margin: 0;\n padding: 0;\n background-color: #f4f7f6;\n font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n color: #333333;\n -webkit-font-smoothing: antialiased;\n }\n /* Layout */\n .email-wrapper {\n width: 100%;\n background-color: #f4f7f6;\n padding: 40px 0;\n }\n .email-content {\n max-width: 600px;\n margin: 0 auto;\n background-color: #ffffff;\n border-radius: 8px;\n box-shadow: 0 4px 10px rgba(0,0,0,0.05);\n overflow: hidden;\n }\n .email-header {\n text-align: center;\n padding: 30px 40px 10px;\n }\n .email-body {\n padding: 20px 40px 30px;\n }\n /* Typography */\n h1 {\n font-size: 22px;\n color: #1a1a1a;\n margin-top: 0;\n margin-bottom: 20px;\n font-weight: 600;\n }\n p {\n font-size: 16px;\n line-height: 1.6;\n margin-top: 0;\n margin-bottom: 20px;\n color: #4a4a4a;\n }\n /* Highlight Box */\n .discount-box {\n background-color: #f0f7ff;\n border: 2px dashed #0066cc;\n border-radius: 6px;\n padding: 25px 20px;\n text-align: center;\n margin: 30px 0;\n }\n .discount-box p {\n margin: 0;\n color: #004499;\n font-size: 15px;\n }\n .discount-code {\n display: block;\n font-size: 26px;\n font-weight: bold;\n letter-spacing: 1.5px;\n margin-top: 10px;\n color: #0066cc;\n }\n /* Button */\n .cta-container {\n text-align: center;\n margin: 35px 0 20px;\n }\n .cta-button {\n background-color: #0066cc;\n color: #ffffff !important;\n text-decoration: none;\n padding: 14px 32px;\n border-radius: 6px;\n font-size: 16px;\n font-weight: bold;\n display: inline-block;\n }\n /* Footer */\n .email-footer {\n background-color: #f9fafc;\n padding: 30px 40px;\n text-align: center;\n border-top: 1px solid #eeeeee;\n }\n .email-footer p {\n font-size: 13px;\n color: #888888;\n margin-bottom: 10px;\n line-height: 1.5;\n }\n /* Responsive */\n @media only screen and (max-width: 600px) {\n .email-body, .email-header, .email-footer {\n padding-left: 20px !important;\n padding-right: 20px !important;\n }\n }\n</style>\n</head>\n<body>\n\n<div class=\"email-wrapper\">\n <div class=\"email-content\">\n \n <div class=\"email-body\">\n <h1>Action Required: Your payment failed</h1>\n \n <p>Hi {{ $('Stripe Event Trigger').item.json.data.object.last_payment_error.payment_method.billing_details.name }},</p>\n \n <p>It looks like we ran into a small hiccup while processing your recent payment. Don't worry\u2014this usually just happens due to an expired card, a typo, or a strict bank filter.</p>\n \n <p>To help get things back on track and make up for the inconvenience, we\u2019ve set up a custom <strong>5% discount</strong> for you to apply when you retry your payment.</p>\n\n <div class=\"discount-box\">\n <p>Use this promo code at checkout:</p>\n <span class=\"discount-code\">{{ $json.id }}</span>\n </div>\n\n <div class=\"cta-container\">\n <a href=\"https://www.blankarray.com/\" class=\"cta-button\">Update Payment Details</a>\n </div>\n\n <p>If you run into any issues or have questions, simply reply directly to this email and our support team will get it sorted out for you.</p>\n \n <p>Best regards,<br>\n <strong>The Blankarray Team</strong></p>\n </div>\n\n <div class=\"email-footer\">\n <p>You are receiving this email because you recently attempted a transaction at blankarray.</p>\n <p>© 2026 Blankarray. All rights reserved.</p>\n </div>\n\n </div>\n</div>\n\n</body>\n</html>",
"options": {},
"subject": "=Action Required: Your recent payment failed (Plus a 5% discount inside!)"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.2
},
{
"id": "b771294a-905e-4d85-b532-33d937e7775b",
"name": "If High LTV Client",
"type": "n8n-nodes-base.if",
"position": [
-176,
240
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "loose"
},
"combinator": "and",
"conditions": [
{
"id": "5717e36d-c4d4-4b29-a412-49ac6234e3a6",
"operator": {
"type": "number",
"operation": "gt"
},
"leftValue": "={{ $('Fetch Contacts List').item.json.customFields[0].value }}",
"rightValue": 2000
}
]
},
"looseTypeValidation": true
},
"typeVersion": 2.3
},
{
"id": "01d8a689-725a-4b6c-9d44-1978fa3f20a2",
"name": "If High LTV Client (New)",
"type": "n8n-nodes-base.if",
"position": [
-192,
1024
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "loose"
},
"combinator": "and",
"conditions": [
{
"id": "5717e36d-c4d4-4b29-a412-49ac6234e3a6",
"operator": {
"type": "number",
"operation": "gt"
},
"leftValue": "={{ $('Fetch Contacts List').item.json.customFields[0].value }}",
"rightValue": 2000
}
]
},
"looseTypeValidation": true
},
"typeVersion": 2.3
},
{
"id": "8189a134-3a58-4e69-8db8-5df8d5d131a1",
"name": "Update Record with Event",
"type": "n8n-nodes-base.dataTable",
"position": [
1216,
256
],
"parameters": {
"columns": {
"value": {
"automated_in_last_30_days": true
},
"schema": [
{
"id": "Email",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Email",
"defaultMatch": false
},
{
"id": "ContactID",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "ContactID",
"defaultMatch": false
},
{
"id": "StripePaymentIntentID",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "StripePaymentIntentID",
"defaultMatch": false
},
{
"id": "Amount",
"type": "number",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Amount",
"defaultMatch": false
},
{
"id": "Currency",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Currency",
"defaultMatch": false
},
{
"id": "FailureCount",
"type": "number",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "FailureCount",
"defaultMatch": false
},
{
"id": "DiscountOffered",
"type": "number",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "DiscountOffered",
"defaultMatch": false
},
{
"id": "ErrorCode",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "ErrorCode",
"defaultMatch": false
},
{
"id": "ErrorMessage",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "ErrorMessage",
"defaultMatch": false
},
{
"id": "automated_in_last_30_days",
"type": "boolean",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "automated_in_last_30_days",
"defaultMatch": false
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"filters": {
"conditions": [
{
"keyName": "Email",
"keyValue": "={{ $('Update Failure Count').item.json.Email }}"
}
]
},
"options": {},
"operation": "update",
"dataTableId": {
"__rl": true,
"mode": "list",
"value": "d5QC1syJrsgKlhaz",
"cachedResultUrl": "/projects/S0V0gYYsL1xXfutM/datatables/d5QC1syJrsgKlhaz",
"cachedResultName": "Payment_intent_failures"
}
},
"typeVersion": 1.1
},
{
"id": "a01f58f6-f7a8-43e4-95aa-a903fe0a49e4",
"name": "Update New Record with Event",
"type": "n8n-nodes-base.dataTable",
"position": [
1200,
1024
],
"parameters": {
"columns": {
"value": {
"automated_in_last_30_days": true
},
"schema": [
{
"id": "Email",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Email",
"defaultMatch": false
},
{
"id": "ContactID",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "ContactID",
"defaultMatch": false
},
{
"id": "StripePaymentIntentID",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "StripePaymentIntentID",
"defaultMatch": false
},
{
"id": "Amount",
"type": "number",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Amount",
"defaultMatch": false
},
{
"id": "Currency",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Currency",
"defaultMatch": false
},
{
"id": "FailureCount",
"type": "number",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "FailureCount",
"defaultMatch": false
},
{
"id": "DiscountOffered",
"type": "number",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "DiscountOffered",
"defaultMatch": false
},
{
"id": "ErrorCode",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "ErrorCode",
"defaultMatch": false
},
{
"id": "ErrorMessage",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "ErrorMessage",
"defaultMatch": false
},
{
"id": "automated_in_last_30_days",
"type": "boolean",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "automated_in_last_30_days",
"defaultMatch": false
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"filters": {
"conditions": [
{
"keyName": "Email",
"keyValue": "={{ $('Add Payment Failure Record').item.json.Email }}"
}
]
},
"options": {},
"operation": "update",
"dataTableId": {
"__rl": true,
"mode": "list",
"value": "d5QC1syJrsgKlhaz",
"cachedResultUrl": "/projects/S0V0gYYsL1xXfutM/datatables/d5QC1syJrsgKlhaz",
"cachedResultName": "Payment_intent_failures"
}
},
"typeVersion": 1.1
},
{
"id": "ca6f56c1-23bb-43f2-8f8e-dc11f78ea47f",
"name": "Update New Record After Email",
"type": "n8n-nodes-base.dataTable",
"position": [
480,
1232
],
"parameters": {
"columns": {
"value": {
"automated_in_last_30_days": true
},
"schema": [
{
"id": "Email",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Email",
"defaultMatch": false
},
{
"id": "ContactID",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "ContactID",
"defaultMatch": false
},
{
"id": "StripePaymentIntentID",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "StripePaymentIntentID",
"defaultMatch": false
},
{
"id": "Amount",
"type": "number",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Amount",
"defaultMatch": false
},
{
"id": "Currency",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Currency",
"defaultMatch": false
},
{
"id": "FailureCount",
"type": "number",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "FailureCount",
"defaultMatch": false
},
{
"id": "DiscountOffered",
"type": "number",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "DiscountOffered",
"defaultMatch": false
},
{
"id": "ErrorCode",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "ErrorCode",
"defaultMatch": false
},
{
"id": "ErrorMessage",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "ErrorMessage",
"defaultMatch": false
},
{
"id": "automated_in_last_30_days",
"type": "boolean",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "automated_in_last_30_days",
"defaultMatch": false
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"filters": {
"conditions": [
{
"keyName": "Email",
"keyValue": "={{ $('Add Payment Failure Record').item.json.Email }}"
}
]
},
"options": {},
"operation": "update",
"dataTableId": {
"__rl": true,
"mode": "list",
"value": "d5QC1syJrsgKlhaz",
"cachedResultUrl": "/projects/S0V0gYYsL1xXfutM/datatables/d5QC1syJrsgKlhaz",
"cachedResultName": "Payment_intent_failures"
}
},
"typeVersion": 1.1
},
{
"id": "c5329dea-0937-4e86-9b03-a7affcc87c49",
"name": "Update Record After Email",
"type": "n8n-nodes-base.dataTable",
"position": [
496,
464
],
"parameters": {
"columns": {
"value": {
"automated_in_last_30_days": true
},
"schema": [
{
"id": "Email",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Email",
"defaultMatch": false
},
{
"id": "ContactID",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "ContactID",
"defaultMatch": false
},
{
"id": "StripePaymentIntentID",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "StripePaymentIntentID",
"defaultMatch": false
},
{
"id": "Amount",
"type": "number",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Amount",
"defaultMatch": false
},
{
"id": "Currency",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Currency",
"defaultMatch": false
},
{
"id": "FailureCount",
"type": "number",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "FailureCount",
"defaultMatch": false
},
{
"id": "DiscountOffered",
"type": "number",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "DiscountOffered",
"defaultMatch": false
},
{
"id": "ErrorCode",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "ErrorCode",
"defaultMatch": false
},
{
"id": "ErrorMessage",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "ErrorMessage",
"defaultMatch": false
},
{
"id": "automated_in_last_30_days",
"type": "boolean",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "automated_in_last_30_days",
"defaultMatch": false
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"filters": {
"conditions": [
{
"keyName": "Email",
"keyValue": "={{ $('Update Failure Count').item.json.Email }}"
}
]
},
"options": {},
"operation": "update",
"dataTableId": {
"__rl": true,
"mode": "list",
"value": "d5QC1syJrsgKlhaz",
"cachedResultUrl": "/projects/S0V0gYYsL1xXfutM/datatables/d5QC1syJrsgKlhaz",
"cachedResultName": "Payment_intent_failures"
}
},
"typeVersion": 1.1
},
{
"id": "bc493944-8065-4966-9c50-cd38dd481d2a",
"name": "Fetch Existing Tasks",
"type": "n8n-nodes-base.highLevel",
"position": [
48,
128
],
"parameters": {
"resource": "task",
"contactId": "={{ $json.ContactID }}",
"operation": "getAll",
"requestOptions": {}
},
"credentials": {
"highLevelOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 2,
"alwaysOutputData": true
},
{
"id": "74ade7f4-c3f3-4fd6-91be-f093fa06a25b",
"name": "Aggregate Existing Tasks",
"type": "n8n-nodes-base.aggregate",
"position": [
272,
128
],
"parameters": {
"options": {},
"aggregate": "aggregateAllItemData",
"destinationFieldName": "tasks"
},
"typeVersion": 1
},
{
"id": "2fdcad4b-2bff-40d2-b19a-4f5d44918fed",
"name": "If Pending Tasks Exist",
"type": "n8n-nodes-base.if",
"position": [
496,
128
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "loose"
},
"combinator": "and",
"conditions": [
{
"id": "afc08e03-4fac-4c33-920a-d2595f6f5237",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $json.tasks?.some(task => new Date(task.dueDate).getTime() > Date.now() - 604800000 && task.completed === false) || false }}",
"rightValue": ""
}
]
},
"looseTypeValidation": true
},
"typeVersion": 2.3
},
{
"id": "114f1e48-285c-47e1-b556-f15b4b30653e",
"name": "Fetch Existing Tasks for New",
"type": "n8n-nodes-base.highLevel",
"position": [
32,
896
],
"parameters": {
"resource": "task",
"contactId": "={{ $json.ContactID }}",
"operation": "getAll",
"requestOptions": {}
},
"credentials": {
"highLevelOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 2
},
{
"id": "6e57eee5-6056-44c3-af34-21d2c486d7a7",
"name": "Aggregate Existing Tasks for New",
"type": "n8n-nodes-base.aggregate",
"position": [
256,
896
],
"parameters": {
"options": {},
"aggregate": "aggregateAllItemData",
"destinationFieldName": "tasks"
},
"typeVersion": 1
},
{
"id": "e66259ef-c1d6-47c0-b4e1-ddb31aedbaae",
"name": "If Pending Tasks Exist for New",
"type": "n8n-nodes-base.if",
"position": [
480,
896
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "loose"
},
"combinator": "and",
"conditions": [
{
"id": "afc08e03-4fac-4c33-920a-d2595f6f5237",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $json.tasks?.some(task => new Date(task.dueDate).getTime() > Date.now() - 604800000 && task.completed === false) || false }}",
"rightValue": ""
}
]
},
"looseTypeValidation": true
},
"typeVersion": 2.3
},
{
"id": "4fcdcc8d-f11d-4572-b723-a82958c76559",
"name": "If Already Automated Recently",
"type": "n8n-nodes-base.if",
"position": [
-400,
224
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "2aed159a-2abb-4df9-a7b1-fe017d6e6999",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $json.automated_in_last_30_days }}",
"rightValue": false
}
]
}
},
"typeVersion": 2.3
},
{
"id": "04f7307d-aaf8-4491-a5af-0ae9f486640f",
"name": "If Already Automated for New",
"type": "n8n-nodes-base.if",
"position": [
-416,
1008
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "2aed159a-2abb-4df9-a7b1-fe017d6e6999",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $json.automated_in_last_30_days }}",
"rightValue": false
}
]
}
},
"typeVersion": 2.3
},
{
"id": "28e11ab6-c4e5-4ed9-a13b-9833784cb153",
"name": "Get Payment Failures Data",
"type": "n8n-nodes-base.dataTable",
"position": [
-1088,
688
],
"parameters": {
"limit": 1,
"filters": {
"conditions": [
{
"keyName": "Email",
"keyValue": "={{ $json.email }}"
}
]
},
"operation": "get",
"dataTableId": {
"__rl": true,
"mode": "list",
"value": "d5QC1syJrsgKlhaz",
"cachedResultUrl": "/projects/S0V0gYYsL1xXfutM/datatables/d5QC1syJrsgKlhaz",
"cachedResultName": "Payment_intent_failures"
}
},
"typeVersion": 1.1
}
],
"connections": {
"Create Task": {
"main": [
[
{
"node": "Create Calendar Event",
"type": "main",
"index": 0
}
]
]
},
"If Contact Exists": {
"main": [
[
{
"node": "Get Payment Failures Data",
"type": "main",
"index": 0
}
]
]
},
"Send Coupon Email": {
"main": [
[
{
"node": "Update Record After Email",
"type": "main",
"index": 0
}
]
]
},
"If High LTV Client": {
"main": [
[
{
"node": "Fetch Existing Tasks",
"type": "main",
"index": 0
}
],
[
{
"node": "Create Stripe Coupon",
"type": "main",
"index": 0
}
]
]
},
"Fetch Contacts List": {
"main": [
[
{
"node": "If Contact Exists",
"type": "main",
"index": 0
}
]
]
},
"Create Stripe Coupon": {
"main": [
[
{
"node": "Send Coupon Email",
"type": "main",
"index": 0
}
]
]
},
"Fetch Existing Tasks": {
"main": [
[
{
"node": "Aggregate Existing Tasks",
"type": "main",
"index": 0
}
]
]
},
"Stripe Event Trigger": {
"main": [
[
{
"node": "Fetch Contacts List",
"type": "main",
"index": 0
}
]
]
},
"Update Failure Count": {
"main": [
[
{
"node": "If Already Automated Recently",
"type": "main",
"index": 0
}
]
]
},
"Create Calendar Event": {
"main": [
[
{
"node": "Update Record with Event",
"type": "main",
"index": 0
}
]
]
},
"If Pending Tasks Exist": {
"main": [
[],
[
{
"node": "Create Task",
"type": "main",
"index": 0
}
]
]
},
"Aggregate Existing Tasks": {
"main": [
[
{
"node": "If Pending Tasks Exist",
"type": "main",
"index": 0
}
]
]
},
"If High LTV Client (New)": {
"main": [
[
{
"node": "Fetch Existing Tasks for New",
"type": "main",
"index": 0
}
],
[
{
"node": "Create Stripe Coupon for New",
"type": "main",
"index": 0
}
]
]
},
"Get Payment Failures Data": {
"main": [
[
{
"node": "If Payment Failure Exists",
"type": "main",
"index": 0
}
]
]
},
"If Payment Failure Exists": {
"main": [
[
{
"node": "Update Failure Count",
"type": "main",
"index": 0
}
],
[
{
"node": "Add Payment Failure Record",
"type": "main",
"index": 0
}
]
]
},
"Send Coupon Email for New": {
"main": [
[
{
"node": "Update New Record After Email",
"type": "main",
"index": 0
}
]
]
},
"Add Payment Failure Record": {
"main": [
[
{
"node": "If Already Automated for New",
"type": "main",
"index": 0
}
]
]
},
"Create Task for New Failure": {
"main": [
[
{
"node": "Create Calendar Event for New",
"type": "main",
"index": 0
}
]
]
},
"C
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
gmailOAuth2googleCalendarOAuth2ApihighLevelOAuth2ApistripeApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow listens for Stripe payment failures, looks up the customer in HighLevel, logs or updates the failure in an n8n Data Table, and—when not recently automated—creates a Stripe coupon and emails it via Gmail while also creating HighLevel follow-up tasks and Google…
Source: https://n8n.io/workflows/15932/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Payment Recovery. Uses stripeTrigger, highLevel, dataTable, googleCalendar. Event-driven trigger; 40 nodes.
Stop losing valuable leads to missed meetings with this No-Show Follow-Up & Rescheduling automation! Whenever a lead is marked as a “no-show” in your CRM or calendar, this workflow automatically sends
This workflow automatically handles every failed Stripe payment by collecting all details, assessing severity, and taking immediate action — alerting your team, creating recovery tasks, escalating rep
Stripe invoicing automation that is connected to your CRM, in this example, it is ClickUp. At the end of the flow, once your lead has been sent an invoice, you (or your team) will be sent an email not
Automatically checks your Google Calendar to determine if you're officially off work for the rest of today. If so, it auto-sends a personalized out‑of‑office reply via Gmail, telling senders when you’