

How to Send Help Scout VIP Alerts to Slack with n8n
Automatically posts a Slack message to your support channel the moment a high-priority or VIP customer creates a ticket in Help Scout.
Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.
Best for
Support teams that need to catch VIP or enterprise customer tickets within seconds, not minutes, of creation
Not ideal for
Teams with no defined list of priority customers — without that data, filtering is guesswork and every ticket becomes an alert
Sync type
real-timeUse case type
notificationReal-World Example
A 12-person SaaS company uses this to ping #vip-support in Slack the moment any customer tagged 'Enterprise' or 'Priority' opens a Help Scout ticket. Before this workflow, the support lead would manually scan Help Scout every 30–40 minutes and occasionally miss a ticket from a $50k ARR account for over an hour. Now the team sees the alert in under 90 seconds and the on-call rep claims it within the thread.
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 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.
Field Mapping
Map these fields between your apps.
| Field | API Name | |
|---|---|---|
| Required | ||
| Customer Email | body.customer.email | |
| Customer Name | body.customer.firstName + body.customer.lastName | |
| Conversation Subject | body.subject | |
| Conversation ID | body.id | |
| Tags | body._embedded.tags[].name | |
| Conversation URL | body._links.web.href | |
3 optional fields▸ show
| Mailbox Name | body._embedded.mailbox.name |
| Created At Timestamp | body.createdAt |
| Assigned Team | body._embedded.assignee.email |
Step-by-Step Setup
n8n Dashboard > + New Workflow
Create a new n8n workflow
Open your n8n instance and click the '+ New Workflow' button in the top right of the canvas. Give it a clear name like 'Help Scout VIP Ticket → Slack Alert' so it's identifiable in your workflow list. You'll land on an empty canvas with a grey 'Add first step' prompt. This is where you'll configure the webhook trigger in the next step.
- 1Click '+ New Workflow' in the top right corner
- 2Click the workflow name at the top and rename it to 'Help Scout VIP Ticket → Slack Alert'
- 3Click 'Add first step' on the canvas
Canvas > Add first step > Search 'Webhook' > Webhook node
Add a Webhook trigger node
In the trigger selection panel, search for 'Webhook' and select it. n8n will generate a unique webhook URL — copy it immediately and keep it open in a tab. Set the HTTP Method to POST and leave the Response Mode as 'Last Node'. Help Scout will send ticket payloads to this URL, so you need it before configuring Help Scout in the next step.
- 1Type 'Webhook' in the search box
- 2Click the 'Webhook' trigger node
- 3Set HTTP Method to 'POST'
- 4Copy the 'Test URL' shown in the node panel — you'll use this in Help Scout
Help Scout > Your Profile > Settings > Integrations > Webhooks > Add Webhook
Register the webhook in Help Scout
In Help Scout, go to your account settings and find the Webhooks section under 'Integrations'. Click 'Add Webhook', paste the n8n test URL into the Callback URL field, and set the Secret Key to a random string — save that string because you'll need it to validate payloads later. Under Events, check 'Conversation Created' only. Save the webhook.
- 1Navigate to Help Scout Settings > Integrations > Webhooks
- 2Click 'Add Webhook'
- 3Paste your n8n test webhook URL into the 'Callback URL' field
- 4Enter a random string (e.g., 32-character random hex) in the 'Secret Key' field and copy it
- 5Check only 'Conversation Created' under Events
- 6Click 'Save'
n8n Canvas > Webhook Node > Listen for Test Event
Test the webhook with a real Help Scout ticket
Back in n8n, click 'Listen for Test Event' on the Webhook node. Then open Help Scout and create a test conversation from any customer. Within a few seconds, n8n should receive the payload and display it in the node output panel. Click through the JSON to locate the fields you'll use: customer name, email, tags, subject, and the conversation URL. This raw payload is the source of truth for every field mapping decision you make.
- 1Click 'Listen for Test Event' in the Webhook node panel
- 2Switch to Help Scout and create a new test conversation
- 3Return to n8n and wait for the green 'Event received' banner
- 4Click through the JSON output to find fields like body.customer.email, body.subject, and body._embedded.tags
Canvas > '+' after Webhook node > Search 'Code' > Code node
Add a Code node to check for VIP status
Click the '+' after the Webhook node and add a 'Code' node. This is where you define what makes a customer 'high priority'. The cleanest approach is to check two things: whether the conversation tags include a VIP-tier tag (like 'enterprise', 'priority', or 'vip'), and optionally whether the customer's email domain matches a list of key accounts. If neither condition is met, the workflow should return an empty array so downstream nodes don't fire. The full working code is in the Pro Tip section below.
- 1Click the '+' connector after the Webhook node
- 2Search for 'Code' and select the Code node
- 3Set the Mode to 'Run Once for All Items'
- 4Paste the VIP filter code from the Pro Tip section into the editor
- 5Update the VIP_TAGS and VIP_DOMAINS arrays to match your actual customer data
Paste this into the Code node (Mode: Run Once for All Items). It handles VIP tag matching, VIP domain matching, null-safe tag access, and builds a pre-formatted Slack Block Kit payload so the Slack node just has to send it. Update VIP_TAGS and VIP_DOMAINS at the top with your actual values before activating.
JavaScript — Code Node// ============================================================▸ Show code
// ============================================================ // Help Scout VIP Filter + Slack Block Builder // n8n Code Node — Mode: Run Once for All Items
... expand to see full code
// ============================================================
// Help Scout VIP Filter + Slack Block Builder
// n8n Code Node — Mode: Run Once for All Items
// ============================================================
// --- CONFIG: Update these to match your actual customer data ---
const VIP_TAGS = ['enterprise', 'priority', 'vip', 'strategic'];
const VIP_DOMAINS = ['acmecorp.com', 'globalretail.io', 'bigclient.net'];
// --- Process each incoming webhook item ---
const results = [];
for (const item of $input.all()) {
const body = item.json.body || item.json;
// --- Safely extract tags (array may be missing entirely) ---
const rawTags = body?._embedded?.tags || [];
const tagNames = rawTags.map(t => (t.name || '').toLowerCase());
// --- Extract customer details ---
const customerEmail = (body?.customer?.email || '').toLowerCase();
const customerDomain = customerEmail.split('@')[1] || '';
const firstName = body?.customer?.firstName || '';
const lastName = body?.customer?.lastName || '';
const customerName = `${firstName} ${lastName}`.trim() || 'Unknown Customer';
// --- Extract ticket details ---
const subject = body?.subject || 'No subject';
const conversationId = body?.id || '';
const conversationUrl = body?._links?.web?.href || `https://secure.helpscout.net/conversations/${conversationId}`;
const mailboxName = body?._embedded?.mailbox?.name || 'Unknown Mailbox';
const createdAt = body?.createdAt ? new Date(body.createdAt).toLocaleString('en-US', {
month: 'short', day: 'numeric', year: 'numeric',
hour: 'numeric', minute: '2-digit', hour12: true
}) : 'Unknown time';
// --- VIP check: tag match OR domain match ---
const matchedTag = tagNames.find(t => VIP_TAGS.includes(t));
const matchedDomain = VIP_DOMAINS.includes(customerDomain);
const isVip = Boolean(matchedTag || matchedDomain);
if (!isVip) continue; // Drop non-VIP tickets here
const vipReason = matchedTag ? `Tag: ${matchedTag}` : `Domain: ${customerDomain}`;
// --- Build Slack Block Kit payload ---
const slackBlocks = [
{
type: 'header',
text: { type: 'plain_text', text: '🚨 VIP Support Ticket', emoji: true }
},
{
type: 'section',
fields: [
{ type: 'mrkdwn', text: `*Customer:*\n${customerName}` },
{ type: 'mrkdwn', text: `*Email:*\n${customerEmail}` },
{ type: 'mrkdwn', text: `*Mailbox:*\n${mailboxName}` },
{ type: 'mrkdwn', text: `*VIP Reason:*\n${vipReason}` }
]
},
{
type: 'section',
text: { type: 'mrkdwn', text: `*Subject:* ${subject}` }
},
{
type: 'context',
elements: [{ type: 'mrkdwn', text: `Opened: ${createdAt} | Conversation #${conversationId}` }]
},
{
type: 'actions',
elements: [{
type: 'button',
text: { type: 'plain_text', text: 'Open in Help Scout', emoji: true },
url: conversationUrl,
style: 'primary'
}]
}
];
results.push({
json: {
isVip: true,
customerName,
customerEmail,
subject,
conversationUrl,
vipReason,
createdAt,
slackBlocks: JSON.stringify(slackBlocks),
slackFallbackText: `🚨 VIP Ticket from ${customerName} (${customerEmail}): ${subject}`
}
});
}
return results;Canvas > '+' after Code node > Search 'IF' > IF node
Add an IF node to halt non-VIP tickets
After the Code node, add an 'IF' node. Set the condition to check whether the 'isVip' field from the Code node output equals true. The 'true' branch continues to the Slack node. The 'false' branch goes nowhere — just leave it unconnected. This is your safety gate. Without it, a bug in the Code node could let all tickets through.
- 1Click '+' after the Code node
- 2Search for 'IF' and select the IF node
- 3Set Condition to: Value 1 = {{ $json.isVip }}, Operation = 'Equal', Value 2 = true
- 4Leave the 'false' output branch unconnected
Canvas > IF node (true branch) > '+' > Slack node > Credentials > Create New
Connect your Slack account to n8n
Click '+' on the 'true' branch of the IF node and add a 'Slack' node. In the Credentials dropdown, click 'Create New Credential'. n8n will prompt you to choose between OAuth2 and a Bot Token — use the Bot Token method for simplicity. Paste your Slack bot token (starts with xoxb-) into the field. Your bot must already exist in the Slack API dashboard and be installed to your workspace before this step.
- 1Click '+' on the true branch output of the IF node
- 2Search for 'Slack' and select the Slack node
- 3Click the Credentials dropdown and select 'Create New Credential'
- 4Select 'Access Token' and paste your Slack bot token (xoxb-...)
- 5Click 'Save' and confirm the credential name
Slack node > Resource: Message > Operation: Send
Configure the Slack message
In the Slack node, set the Resource to 'Message' and the Operation to 'Send'. Set the Channel field to your VIP support channel (e.g., #vip-support). For the Message Text field, build a message using n8n expressions to pull in ticket details. Use the Block Kit format for a structured, scannable alert — include customer name, email, ticket subject, priority tag, and a direct link to the Help Scout conversation.
- 1Set Resource to 'Message'
- 2Set Operation to 'Send'
- 3Set Channel to your VIP support channel name or ID (e.g., #vip-support)
- 4Toggle 'Blocks' on and paste the Block Kit JSON from the Pro Tip
- 5Set 'Text' (fallback) to: 🚨 VIP Ticket: {{ $json.subject }}
n8n Canvas > Test Workflow button (top toolbar)
Test the full workflow end to end
Click 'Test Workflow' in the n8n toolbar. Then create a new Help Scout conversation that includes one of your VIP tags. Watch the n8n execution panel — each node should light up green in sequence: Webhook → Code → IF (true branch) → Slack. Check your Slack channel to confirm the alert message appeared with the correct customer name, email, subject, and link.
- 1Click 'Test Workflow' in the top toolbar
- 2Switch to Help Scout and create a conversation tagged with your VIP tag
- 3Return to n8n and watch the execution panel for green node completions
- 4Open Slack and confirm the alert appeared in your VIP support channel
- 5Check that all dynamic fields (name, email, subject, link) are populated correctly
n8n Canvas > Active toggle (top right) | Help Scout > Settings > Integrations > Webhooks > Edit
Activate the workflow and switch to Production URL
Toggle the workflow to 'Active' using the switch in the top right of the n8n canvas. Once active, n8n stops listening on the Test URL and starts using the Production URL. Go back to Help Scout Settings > Integrations > Webhooks, edit your webhook, and replace the test URL with the Production URL from the Webhook node. Without this swap, Help Scout will keep hitting the dead test URL and your workflow will never fire in production.
- 1Click the 'Inactive' toggle in the top right of the n8n canvas to activate the workflow
- 2Open the Webhook node and copy the 'Production URL'
- 3Go to Help Scout Settings > Integrations > Webhooks
- 4Click Edit on your existing webhook
- 5Replace the test URL with the Production URL and save
Slack node > Error Output (triangle icon) > '+' > Second Slack node or Email node
Add an error handler for failed Slack posts
Click the Slack node, then click the small error icon (triangle) on the node to open the Error Output settings. Connect the error output to a second Slack node that posts to a #n8n-errors channel or emails your dev team. This ensures that if the Slack API rate-limits or the channel is deleted, you're not silently dropping VIP alerts. Set the error message to include the workflow name and the failed ticket subject.
- 1Hover over the Slack node and click the orange triangle (error output) icon
- 2Click '+' on the error output connector
- 3Add a second Slack node pointing to #n8n-errors or your admin channel
- 4Set the message to: 'WORKFLOW ERROR: VIP alert failed for ticket {{ $json.subject }}. Check n8n logs.'
- 5Save and re-test with an intentionally broken Slack token to confirm the error branch fires
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 n8n for this if you want zero per-execution cost at any volume, need to write custom VIP matching logic that goes beyond simple tag checks, or you're already self-hosting n8n for other workflows. The Code node lets you match against a CRM API, check account ARR from a database, or apply complex multi-condition rules in one step — none of which Zapier or Make can do without external API calls and extra steps. If your team doesn't have anyone comfortable reading 30 lines of JavaScript and your VIP list is just one or two tags, Zapier's Filter step handles this in 8 minutes with no code at all.
The cost math is simple. This workflow runs once per incoming Help Scout ticket that hits the webhook. If you receive 200 new tickets per month and 40 are VIP-tagged, you'll have 200 webhook executions (Help Scout fires regardless of VIP status) and 40 Slack posts. On n8n Cloud's Starter plan at $20/month you get 2,500 executions — this workflow won't come close. Self-hosted n8n costs nothing per execution, just your server bill. Zapier's equivalent would use 2 Zaps (one trigger, one filter + action), burning 200 tasks/month, which hits the free tier limit in a few days and costs $19.99/month on Starter for 750 tasks. Make handles the same volume for free under 1,000 operations/month.
Zapier's 'Filter' step is cleaner for pure tag matching — one click, no code, works in under 5 minutes. Make's scenario builder lets you visually branch between VIP tiers without writing a Switch node, and its error handling UI is more beginner-friendly than n8n's error output connectors. Power Automate has a native Help Scout connector in preview but it's unreliable for webhooks and the trigger latency can hit 3–5 minutes — not acceptable for VIP alerts. Pipedream is the closest competitor to n8n here: better built-in logging, native Help Scout source events, and the code step has the same flexibility. Choose Pipedream over n8n if your team is more comfortable with Node.js async/await patterns and you want better per-step execution logs out of the box. Choose n8n if you're already in the ecosystem or need self-hosting.
Three things you'll hit after the first week. First, Help Scout occasionally sends duplicate webhook events when a conversation is created and a rule fires on it simultaneously — you'll see the same ticket post twice in Slack. Add a conversation ID check using n8n's static data or a Redis key to deduplicate within a 60-second window. Second, the Help Scout webhook payload structure changed between API v1 and v2 — if you're on an older Help Scout plan, the tag path may be body.tags[] instead of body._embedded.tags[], and your filter will silently fail for every ticket. Check your raw payload before writing the Code node. Third, Slack's Block Kit button with a URL requires your Slack app to have the links:read and links:write scopes enabled, otherwise the button renders but the URL is stripped — users see an unclickable button. Add those scopes in the Slack API dashboard and reinstall the app to your workspace.
Ideas for what to build next
- →Add ticket assignment in Help Scout — Extend the workflow to auto-assign VIP tickets to your senior support rep using Help Scout's API directly from n8n. Add an HTTP Request node after the Slack node that PATCHes the conversation with the assigned user ID — so the ticket is claimed before anyone even opens Slack.
- →Escalate unacknowledged tickets after 15 minutes — Add a second workflow that polls Help Scout every 5 minutes for VIP conversations that are still in 'new' status. If a ticket hasn't been responded to within 15 minutes of creation, post a follow-up escalation message in Slack tagging the support manager directly.
- →Route alerts to different Slack channels by tier — Replace the single Slack node with a Switch node that routes based on the VIP tag value — 'enterprise' tickets go to #enterprise-support, 'priority' tickets go to #priority-queue. Each branch gets its own Slack node pointing to the right channel, with tier-specific message templates.
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