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

How to Send Help Scout Ticket Updates to Slack with Power Automate

Automatically posts a Slack message to a designated channel whenever a Help Scout ticket is closed, reopened, or reassigned — no manual monitoring required.

Steps and UI details are based on platform versions at time of writing — check each platform for the latest interface.

Best for

Support teams already inside the Microsoft 365 ecosystem who want ticket status visibility in Slack without switching tools.

Not ideal for

Teams needing sub-60-second alerts — Power Automate's Help Scout connector polls every 1–5 minutes, so use Make or Zapier if instant notification matters.

Sync type

scheduled

Use case type

notification

Real-World Example

💡

A 12-person SaaS support team uses this to post updates to #support-ops in Slack whenever a Help Scout ticket is closed or reassigned to a new agent. Before this flow, team leads checked Help Scout manually twice per shift and often missed reassignments for 2–3 hours. Now every status change surfaces in Slack within 5 minutes with the ticket subject, assignee name, and a direct link.

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 Power Automate

Copy the pre-built Power Automate blueprint and paste it straight into Power Automate. 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 API access enabled — go to Your Profile > API Keys and generate an OAuth2 client ID and secret
Slack workspace where you have permission to add apps and post to the target channel (typically Workspace Admin or channel manager role)
Microsoft 365 account with Power Automate access — a Microsoft 365 Business Basic plan or higher includes cloud flows
Help Scout OAuth2 scopes required: conversations.read — confirm your API key has this scope under App settings
Slack OAuth scopes required: chat:write and channels:read — these are granted automatically during the Power Automate Slack connection flow

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Ticket Subjectsubject
Ticket Statusstatus
Conversation IDid
Last Updated AtupdatedAt
Slack Channel
5 optional fields▸ show
Assignee First Nameassignee.firstName
Assignee Last Nameassignee.lastName
Assignee Emailassignee.email
Customer Namecustomer.fullName
Mailbox NamemailboxId

Step-by-Step Setup

1

make.powerautomate.com > My flows > + New flow > Automated cloud flow

Open Power Automate and create a new Automated cloud flow

Go to make.powerautomate.com and sign in with your Microsoft 365 account. In the left sidebar, click 'My flows', then click '+ New flow' at the top. Select 'Automated cloud flow' from the dropdown. A dialog will appear asking you to name the flow and choose a trigger — type a name like 'Help Scout Ticket Status to Slack' and then search for 'Help Scout' in the trigger search box.

  1. 1Click 'My flows' in the left sidebar
  2. 2Click '+ New flow' at the top right
  3. 3Select 'Automated cloud flow'
  4. 4Name the flow 'Help Scout Ticket Status to Slack'
  5. 5Search 'Help Scout' in the trigger search field
What you should see: You should see the Help Scout connector appear in the trigger list with available trigger options beneath it.
Common mistake — Power Automate does not have a native Help Scout connector. You will use the HTTP action with Help Scout's REST API or the custom connector. Confirm this before proceeding — if your tenant blocks custom connectors, you'll need admin approval.
2

Trigger picker > Recurrence > Interval: 5, Frequency: Minute

Configure the Help Scout polling trigger via HTTP or custom connector

Since Power Automate has no certified Help Scout connector, select 'Recurrence' as your trigger to run the flow on a schedule. Set the interval to 5 minutes and the frequency to 'Minute'. This creates a polling loop that will query Help Scout's API for tickets modified since the last run. You'll store a timestamp in a variable to track the last checked time.

  1. 1Search for 'Recurrence' in the trigger picker
  2. 2Select the 'Recurrence' trigger (Schedule category)
  3. 3Set Interval to '5'
  4. 4Set Frequency to 'Minute'
  5. 5Click 'Show advanced options' and set Start time to now
What you should see: The canvas shows a Recurrence trigger block with '5 Minute' displayed. The flow will now execute every 5 minutes when enabled.
Common mistake — Setting the interval below 1 minute will quickly consume your Power Automate run quota. At 5-minute intervals, this flow runs 8,640 times per month — factor that into your plan limits.
Power Automate
+
click +
search apps
Slack
SL
Slack
Configure the Help Scout pol…
Slack
SL
module added
3

New step > Variables > Initialize variable

Initialize a variable to store the last-checked timestamp

Click '+ New step' and search for 'Initialize variable'. Add this action and name the variable 'LastChecked' with a type of 'String'. Set the default value to a UTC timestamp from 5 minutes ago using the expression: addMinutes(utcNow(), -5). This variable tells the Help Scout API query where to start looking for updated tickets on each run.

  1. 1Click '+ New step' below the Recurrence trigger
  2. 2Search for 'Initialize variable' and select it
  3. 3Set Name to 'LastChecked'
  4. 4Set Type to 'String'
  5. 5Set Value to the expression: addMinutes(utcNow(), -5)
What you should see: You'll see a variable block on the canvas showing 'LastChecked' with the expression in the Value field. The expression editor will show no errors.
4

New step > HTTP > Method: GET

Call the Help Scout API to fetch recently modified tickets

Click '+ New step' and search for 'HTTP'. Select the HTTP action. Set the Method to GET and the URI to https://api.helpscout.net/v2/conversations?status=all&modifiedSince=@{variables('LastChecked')}&sortField=modifiedAt&sortOrder=desc. In the Authentication dropdown, select 'Basic' and enter your Help Scout API key as the Username with a blank Password — Help Scout uses API key as Basic auth username.

  1. 1Click '+ New step' and search for 'HTTP'
  2. 2Select the 'HTTP' action
  3. 3Set Method to 'GET'
  4. 4Paste the Help Scout API URL with the LastChecked variable inserted
  5. 5Expand Authentication, choose 'Basic', enter your API key as Username and leave Password blank
What you should see: The HTTP block shows the full URL with the dynamic variable reference highlighted in a blue pill. Authentication shows 'Basic' with the key field populated.
Common mistake — Help Scout's v2 API requires a Bearer token obtained via OAuth2, not a plain API key. Go to your Help Scout account under Your Profile > API Keys to generate an OAuth client ID and secret, then use the OAuth2 authentication option in the HTTP action instead of Basic.
5

New step > Data Operations > Parse JSON

Parse the JSON response from Help Scout

Add a 'Parse JSON' action after the HTTP step. Set Content to the Body output from the HTTP action using the dynamic content picker. For the Schema, paste a JSON schema matching Help Scout's conversation list response — include fields like id, subject, status, assignee (name, email), mailboxId, and updatedAt. Click 'Generate from sample' and paste a real API response from Help Scout's API explorer to auto-generate the schema.

  1. 1Click '+ New step' and search for 'Parse JSON'
  2. 2Set Content to the 'Body' output from the HTTP step
  3. 3Click 'Generate from sample'
  4. 4Paste a sample Help Scout conversation list response
  5. 5Click 'Done' to generate the schema automatically
What you should see: The Parse JSON block shows a populated schema with nested objects for _embedded, conversations, and assignee. Dynamic content from this step now appears in subsequent steps.
Common mistake — If Help Scout returns an empty _embedded.conversations array (no changes since last run), the Apply to each loop in the next step will simply skip — this is expected behavior, not an error.
6

New step > Control > Apply to each

Add an Apply to each loop over the conversations array

Add an 'Apply to each' control action. Set the 'Select an output from previous steps' field to the conversations array from the Parse JSON output — this will be something like body/_embedded/conversations. Every item inside this loop represents one changed Help Scout ticket. All subsequent filtering and Slack actions go inside this loop.

  1. 1Click '+ New step' and search for 'Apply to each'
  2. 2Select 'Apply to each' under Control
  3. 3Click inside 'Select an output from previous steps'
  4. 4In the dynamic content panel, find and select the conversations array from Parse JSON
  5. 5Confirm the loop block appears on the canvas with an '+ Add an action' area inside it
What you should see: An 'Apply to each' loop appears on the canvas. Inside it you'll see an empty 'Add an action' prompt. The loop is bound to the conversations array.
7

Apply to each > + Add an action > Control > Condition

Add a Condition to filter by relevant status changes

Inside the Apply to each loop, add a 'Condition' control. Set the left value to the 'status' field from the current conversation item. Set the operator to 'is equal to' and the right value to 'closed'. To catch multiple statuses, click '+ Add row' and add OR conditions for 'active' (reopened) and 'pending' (assigned). This prevents the flow from sending Slack messages for every minor ticket update.

  1. 1Inside the Apply to each loop, click '+ Add an action'
  2. 2Search for 'Condition' and select it
  3. 3Set left value to the 'status' field from Parse JSON dynamic content
  4. 4Set operator to 'is equal to', right value to 'closed'
  5. 5Click '+ Add row', change connector to 'Or', add status equals 'active', repeat for 'pending'
What you should see: The Condition block shows three OR'd rows checking for closed, active, and pending statuses. A 'Yes' and 'No' branch appear below the condition block.
Common mistake — Help Scout status values are lowercase strings: 'active', 'closed', 'pending', 'spam'. Using 'Closed' with a capital C will never match and the Yes branch will never fire.
Slack
SL
trigger
filter
Status
matches criteria?
yes — passes through
no — skipped
Help Scout
HE
notified
8

Condition (Yes branch) > + Add an action > Slack > Post message > Sign in

Connect your Slack account as a Power Automate Connection

Inside the 'Yes' branch of the Condition, click '+ Add an action' and search for 'Slack'. Select the 'Post message' action. A sign-in prompt will appear — click 'Sign in' to authenticate with Slack using OAuth. Power Automate will open a Slack authorization window in a new tab. Approve the permissions for the Power Automate app to post to channels. After authorizing, the connection appears in the Connections section of Power Automate.

  1. 1Inside the Yes branch, click '+ Add an action'
  2. 2Search for 'Slack' and select the Slack connector
  3. 3Choose 'Post message' action
  4. 4Click 'Sign in' in the connection prompt
  5. 5Authorize Power Automate in the Slack OAuth window that opens
What you should see: After authorizing, the Slack action shows your workspace name next to a green checkmark. The 'Channel' and 'Message Text' fields become editable.
Common mistake — The Slack connection is made under your personal Slack account. If you leave the company or revoke access, the flow stops posting. Use a shared service account or a Slack bot token for production flows.
Power Automate settings
Connection
Choose a connection…Add
click Add
Slack
Log in to authorize
Authorize Power Automate
popup window
Connected
green checkmark
9

Slack > Post message > Channel + Message Text

Configure the Slack message with ticket details

Set the Channel field to the Slack channel where updates should post — type the channel name directly (e.g., #support-ops) or select from the dropdown. In the Message Text field, build a message using dynamic content from the Parse JSON step. Include ticket subject, current status, assignee name, and a direct link to the ticket. Use the format: Ticket Update: [subject] is now [status]. Assigned to: [assignee firstName] [assignee lastName]. View: https://secure.helpscout.net/conversation/[id].

  1. 1Click the Channel field and type or select your target channel (e.g., #support-ops)
  2. 2Click into the Message Text field
  3. 3Type 'Ticket Update: ' then insert the 'subject' dynamic value
  4. 4Continue building: ' is now ' + status + '. Assigned to: ' + assignee firstName + ' ' + assignee lastName
  5. 5Append the Help Scout conversation URL using the conversation id field
What you should see: The Message Text field shows a mix of static text and blue dynamic content pills. The preview reads like a real alert message, not a JSON dump.
Common mistake — If the ticket has no assignee, the assignee firstName field will be null and Power Automate will post 'Assigned to: null null'. Wrap the assignee section in a Condition or use the expression: `if(empty(item()?['assignee']), 'Unassigned', concat(item()?['assignee']?['firstName'], ' ', item()?['assignee']?['lastName']))`
10

Canvas top right > Save > Test > Manually > Run flow

Test the flow with a real Help Scout ticket change

Click 'Save' in the top right of the canvas, then click 'Test' (also top right). Choose 'Manually' to trigger a test run immediately. While the flow is waiting, go to Help Scout and close or reassign an existing ticket. Return to Power Automate and click 'Run flow'. Watch the run history — each action block shows green (success) or red (failure) with input/output data you can inspect.

  1. 1Click 'Save' in the top right
  2. 2Click 'Test' next to the Save button
  3. 3Select 'Manually' in the test panel
  4. 4In Help Scout, close or reassign a ticket to trigger the change
  5. 5Back in Power Automate, click 'Run flow' and watch the live run log
What you should see: The run history shows all steps with green checkmarks. The Slack action shows a 200 response. Check your #support-ops channel — the message should appear within 30 seconds of clicking Run flow.
Power Automate
▶ Test flow
executed
Slack
Help Scout
Help Scout
🔔 notification
received
11

make.powerautomate.com > My flows > [Flow name] > ... > Turn on

Turn on the flow for production

Once the test passes, go back to 'My flows' in the left sidebar. Find your flow in the list — it will show as 'Off' if you created it in test mode. Click the three-dot menu next to the flow name and select 'Turn on'. The flow will now run every 5 minutes automatically. Monitor the run history for the first hour to confirm it's catching real ticket changes without errors.

  1. 1Go to My flows in the left sidebar
  2. 2Find 'Help Scout Ticket Status to Slack' in the list
  3. 3Click the three-dot '...' menu on the right
  4. 4Select 'Turn on'
  5. 5Refresh the page and confirm the flow shows 'On' status
What you should see: The flow shows a green 'On' badge in My flows. The Next run time column shows a timestamp roughly 5 minutes from now.

Paste this expression into a Compose action between your Parse JSON step and the Apply to each loop. It formats the raw UTC timestamp from Help Scout into a readable local time and uppercases the status string — both changes make the Slack message more readable without adding extra actions.

JavaScript — Code Step// Power Automate expression — use in a Compose action
▸ Show code
// Power Automate expression — use in a Compose action
// Reference output as: outputs('Format_Ticket_Message')
// Place between Parse JSON and Apply to each

... expand to see full code

// Power Automate expression — use in a Compose action
// Reference output as: outputs('Format_Ticket_Message')
// Place between Parse JSON and Apply to each

concat(
  'Ticket Update: ''',
  items('Apply_to_each')?['subject'],
  ''' is now ',
  toUpper(items('Apply_to_each')?['status']),
  '. Assigned to: ',
  if(
    empty(items('Apply_to_each')?['assignee']),
    'Unassigned',
    concat(
      items('Apply_to_each')?['assignee']?['firstName'],
      ' ',
      items('Apply_to_each')?['assignee']?['lastName']
    )
  ),
  '. Updated: ',
  formatDateTime(items('Apply_to_each')?['updatedAt'], 'MMM d h:mm tt'),
  '. View: https://secure.helpscout.net/conversation/',
  string(items('Apply_to_each')?['id'])
)

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 Power Automate for this if your team runs on Microsoft 365 and you want everything governed under your existing tenant — SSO, DLP policies, audit logs, the works. It's also the right call if your IT team has blocked third-party automation tools and Power Automate is already approved. A third reason: if you're already using SharePoint or Azure Table Storage to persist state, the integration is native and costs nothing extra. The one scenario where you'd pick something else: if your support team needs alerts in under 60 seconds, go straight to Make or Zapier. Power Automate's Help Scout support is polling-only, which means a built-in delay of up to 5 minutes.

Cost

On cost: a Power Automate per-user plan costs $15/month and includes 40,000 flow runs. This workflow runs every 5 minutes — that's 8,640 runs per month — leaving you roughly 31,000 runs for other flows. If you're on the free Microsoft 365 plan, you get 750 runs/month, which this flow will blow through in under 3 days. The Power Automate per-flow plan at $100/month is overkill for just this workflow. Compare that to Make's free tier at 1,000 operations/month: a Make scenario for this use case uses 3–4 operations per changed ticket, so at 50 ticket changes per month you'd stay on the free tier indefinitely. Zapier's equivalent Zap costs 1 task per ticket update — at 50 updates/month you're on the free plan too. Power Automate is cheaper only if you're already paying for Microsoft 365 Business and have run quota to spare.

Tradeoffs

Make has a genuine edge here: it offers an event-based Help Scout module that receives webhooks, meaning Slack messages fire within seconds of a ticket change — no polling loop, no timestamp management. Zapier also has a 'Ticket Status Changed' trigger that's webhook-backed and takes 8 minutes to set up versus the 45 minutes this Power Automate flow requires. n8n's Help Scout node is polling-based like Power Automate, but n8n lets you self-host, which matters for teams with strict data residency requirements. Pipedream's HTTP source can receive Help Scout webhooks directly and transform the payload in Node.js before posting to Slack, which gives you the most flexibility for custom message formatting. Power Automate is still the right choice when Microsoft 365 governance is non-negotiable and your team isn't going to maintain a self-hosted tool or manage a third-party SaaS bill.

Three things you'll hit after setup. First, the null assignee problem — roughly 15–20% of ticket status changes involve tickets with no assigned agent, and Power Automate renders null as the string 'null' in message text. The fix is in the troubleshooting section, but expect to encounter this in your first week. Second, the in-memory variable reset: every time the Recurrence trigger fires, a new flow instance starts and any Initialize variable action sets back to its default — meaning LastChecked always resets to 'now minus 5 minutes' rather than carrying forward the previous run's timestamp. This causes duplicates unless you persist LastChecked externally in SharePoint or Azure. Third, Help Scout's OAuth2 token expires every 48 hours and must be refreshed — Power Automate handles this automatically via the connection refresh mechanism, but if your Microsoft tenant's conditional access policies block token refresh for non-Microsoft apps, the flow will silently fail until you re-authenticate manually.

Ideas for what to build next

  • Route alerts to different Slack channels by mailboxAdd a Switch control inside the Apply to each loop that checks the mailboxId field and posts to a different Slack channel for each Help Scout mailbox — #billing-support, #tech-support, #enterprise — instead of dumping everything into one channel.
  • Add a daily digest instead of per-event messagesCreate a second Scheduled flow that runs at 9 AM each day, queries Help Scout for all tickets closed in the last 24 hours, and posts a single formatted summary to Slack — cuts down on notification noise for lower-volume teams.
  • Log every status change to a SharePoint list for reportingInside the Yes branch, add a 'Create item' SharePoint action alongside the Slack post — record the ticket ID, status, assignee, and timestamp. After 30 days you'll have a clean dataset to build a Power BI report on ticket resolution trends.

Related guides

Was this guide helpful?
Slack + Help Scout overviewPower Automate profile →