Intermediate~20 min setupCommunication & SupportVerified April 2026
Slack logo
Help Scout logo

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-time

Use case type

notification

Real-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.

/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.

Help Scout account with Admin access to configure Webhooks under Settings > Integrations
Slack bot token (xoxb-) with chat:write and channels:read scopes, and the bot already invited to your VIP support channel
n8n instance running v1.0+ — either self-hosted or on n8n Cloud — with the Webhook and Slack nodes available
A defined list of VIP customer tags in Help Scout (e.g., 'enterprise', 'priority', 'vip') or a list of key account email domains to filter on
Public HTTPS URL for your n8n instance so Help Scout can reach the webhook endpoint — localhost won't work without a tunnel like ngrok

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Customer Emailbody.customer.email
Customer Namebody.customer.firstName + body.customer.lastName
Conversation Subjectbody.subject
Conversation IDbody.id
Tagsbody._embedded.tags[].name
Conversation URLbody._links.web.href
3 optional fields▸ show
Mailbox Namebody._embedded.mailbox.name
Created At Timestampbody.createdAt
Assigned Teambody._embedded.assignee.email

Step-by-Step Setup

1

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.

  1. 1Click '+ New Workflow' in the top right corner
  2. 2Click the workflow name at the top and rename it to 'Help Scout VIP Ticket → Slack Alert'
  3. 3Click 'Add first step' on the canvas
What you should see: You should see an empty canvas with the trigger selection panel open on the right side.
2

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.

  1. 1Type 'Webhook' in the search box
  2. 2Click the 'Webhook' trigger node
  3. 3Set HTTP Method to 'POST'
  4. 4Copy the 'Test URL' shown in the node panel — you'll use this in Help Scout
What you should see: You should see a Webhook node on the canvas with a unique URL like https://your-n8n.domain/webhook-test/xxxxxxx displayed in the node settings.
Common mistake — n8n shows two URLs: a 'Test URL' and a 'Production URL'. Only use the Test URL during setup. Once you activate the workflow, Help Scout must be updated to use the Production URL or events will silently fail.
n8n
+
click +
search apps
Slack
SL
Slack
Add a Webhook trigger node
Slack
SL
module added
3

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.

  1. 1Navigate to Help Scout Settings > Integrations > Webhooks
  2. 2Click 'Add Webhook'
  3. 3Paste your n8n test webhook URL into the 'Callback URL' field
  4. 4Enter a random string (e.g., 32-character random hex) in the 'Secret Key' field and copy it
  5. 5Check only 'Conversation Created' under Events
  6. 6Click 'Save'
What you should see: Help Scout will show a green checkmark next to your new webhook entry and list 'Conversation Created' as the subscribed event.
Common mistake — Help Scout fires webhooks for ALL new conversations by default, including internal notes and non-customer contacts. If you skip the VIP filter step later, your Slack channel will be flooded with every single new ticket.
4

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.

  1. 1Click 'Listen for Test Event' in the Webhook node panel
  2. 2Switch to Help Scout and create a new test conversation
  3. 3Return to n8n and wait for the green 'Event received' banner
  4. 4Click through the JSON output to find fields like body.customer.email, body.subject, and body._embedded.tags
What you should see: You should see the full Help Scout conversation payload appear in the Webhook node output, with nested objects for customer, tags, mailbox, and links.
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
Slack
Help Scout
Help Scout
🔔 notification
received
5

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.

  1. 1Click the '+' connector after the Webhook node
  2. 2Search for 'Code' and select the Code node
  3. 3Set the Mode to 'Run Once for All Items'
  4. 4Paste the VIP filter code from the Pro Tip section into the editor
  5. 5Update the VIP_TAGS and VIP_DOMAINS arrays to match your actual customer data
What you should see: When you run a test with a non-VIP ticket, the Code node should return an empty items array. With a VIP-tagged ticket, it should return the item with a new isVip: true field.
Common mistake — Help Scout tag names are case-sensitive in the API payload. If your tag is 'Enterprise' with a capital E and your code checks for 'enterprise', the filter will always miss. Log the raw tag array from the test payload to confirm exact casing before writing your filter logic.

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;
6

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.

  1. 1Click '+' after the Code node
  2. 2Search for 'IF' and select the IF node
  3. 3Set Condition to: Value 1 = {{ $json.isVip }}, Operation = 'Equal', Value 2 = true
  4. 4Leave the 'false' output branch unconnected
What you should see: The IF node should show two output branches labeled 'true' and 'false'. Only the 'true' branch has a connecting line going forward.
7

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.

  1. 1Click '+' on the true branch output of the IF node
  2. 2Search for 'Slack' and select the Slack node
  3. 3Click the Credentials dropdown and select 'Create New Credential'
  4. 4Select 'Access Token' and paste your Slack bot token (xoxb-...)
  5. 5Click 'Save' and confirm the credential name
What you should see: The Slack node credentials dropdown should show your new credential name with no error. If the token is invalid, n8n will show a red 'Could not connect' error immediately.
Common mistake — Your Slack bot must be invited to the target channel before it can post. Run /invite @your-bot-name in the Slack channel, otherwise the API call returns a channel_not_found or not_in_channel error even if the token is valid.
n8n settings
Connection
Choose a connection…Add
click Add
Slack
Log in to authorize
Authorize n8n
popup window
Connected
green checkmark
8

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.

  1. 1Set Resource to 'Message'
  2. 2Set Operation to 'Send'
  3. 3Set Channel to your VIP support channel name or ID (e.g., #vip-support)
  4. 4Toggle 'Blocks' on and paste the Block Kit JSON from the Pro Tip
  5. 5Set 'Text' (fallback) to: 🚨 VIP Ticket: {{ $json.subject }}
What you should see: You should see a preview of the Block Kit structure in the node panel. The fallback text field should show the ticket subject expression populated from the previous node.
Common mistake — Block Kit JSON must be passed as a stringified array, not a raw object. If you paste a plain JSON object instead of a JSON array string, the Slack API returns an invalid_blocks error that n8n surfaces as a generic 400.
9

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.

  1. 1Click 'Test Workflow' in the top toolbar
  2. 2Switch to Help Scout and create a conversation tagged with your VIP tag
  3. 3Return to n8n and watch the execution panel for green node completions
  4. 4Open Slack and confirm the alert appeared in your VIP support channel
  5. 5Check that all dynamic fields (name, email, subject, link) are populated correctly
What you should see: All four nodes should show green completion indicators. Your Slack channel should contain a new message with the correct ticket details posted within 5–10 seconds of creating the Help Scout conversation.
10

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.

  1. 1Click the 'Inactive' toggle in the top right of the n8n canvas to activate the workflow
  2. 2Open the Webhook node and copy the 'Production URL'
  3. 3Go to Help Scout Settings > Integrations > Webhooks
  4. 4Click Edit on your existing webhook
  5. 5Replace the test URL with the Production URL and save
What you should see: The workflow toggle shows 'Active' in green. In Help Scout, the webhook entry reflects the new production URL. Create one more test ticket to confirm alerts still fire.
Common mistake — Copy the webhook URL carefully — it expires if you regenerate it, and any scenarios using the old URL will silently stop working.
11

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.

  1. 1Hover over the Slack node and click the orange triangle (error output) icon
  2. 2Click '+' on the error output connector
  3. 3Add a second Slack node pointing to #n8n-errors or your admin channel
  4. 4Set the message to: 'WORKFLOW ERROR: VIP alert failed for ticket {{ $json.subject }}. Check n8n logs.'
  5. 5Save and re-test with an intentionally broken Slack token to confirm the error branch fires
What you should see: When you test with an invalid Slack token, the error branch fires and you see the fallback message appear in your error channel instead of a silent failure.

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 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.

Cost

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.

Tradeoffs

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 ScoutExtend 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 minutesAdd 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 tierReplace 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

Was this guide helpful?
Slack + Help Scout overviewn8n profile →