Zendesk + Slack: SLA alerts before tickets breach
SLA breaches rarely happen because your team “didn’t care.” They happen because nobody noticed a ticket was quietly running out of time until it was already too late.
If you run support in Zendesk, this Zendesk SLA alerts automation hits hard. Support leads feel it during busy weeks. Ops managers feel it when reporting gets ugly and nobody can explain what slipped. The outcome is simple: get warned before a breach, automatically.
This workflow checks open tickets every hour, calculates SLA risk, alerts your team in Slack at 75% and 90%, escalates priority for critical tickets, and logs everything into Google Sheets for clean reporting.
How This Automation Works
Here’s the complete workflow you’ll be setting up:
n8n Workflow Template: Zendesk + Slack: SLA alerts before tickets breach
flowchart LR
subgraph sg0["Flow 1"]
direction LR
n0@{ icon: "mdi:cog", form: "rounded", label: "Trigger Every Hour", pos: "b", h: 48 }
n1["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/zendesk.svg' width='40' height='40' /></div><br/>Fetch Open Tickets from Zend.."]
n2@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter: Open Tickets Only", pos: "b", h: 48 }
n3["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Notify: No Open Tickets"]
n4@{ icon: "mdi:code-braces", form: "rounded", label: "Calculate SLA Time Remaining", pos: "b", h: 48 }
n5@{ icon: "mdi:swap-vertical", form: "rounded", label: "Prepare Escalation Payload", pos: "b", h: 48 }
n6["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/zendesk.svg' width='40' height='40' /></div><br/>Update Zendesk: Warning Prio.."]
n7["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/zendesk.svg' width='40' height='40' /></div><br/>Update Zendesk: Escalate (90.."]
n8["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Alert Slack: SLA Warning"]
n9@{ icon: "mdi:database", form: "rounded", label: "Log to Google Sheets", pos: "b", h: 48 }
n10@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If ≥ 90% (Escalate)1", pos: "b", h: 48 }
n11@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If ≥ 75% (Warn)1", pos: "b", h: 48 }
n12@{ icon: "mdi:code-braces", form: "rounded", label: "Prepare Compliance Log1", pos: "b", h: 48 }
n11 --> n8
n0 --> n1
n10 --> n7
n12 --> n9
n2 --> n4
n2 --> n3
n5 --> n6
n4 --> n5
n1 --> n2
n6 --> n10
n6 --> n11
n6 --> n12
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n2,n10,n11 decision
class n9 database
class n4,n12 code
classDef customIcon fill:none,stroke:none
class n1,n3,n6,n7,n8 customIcon
Why This Matters: SLA breaches that “come out of nowhere”
Most SLA problems aren’t complicated. You’ve got a queue, a few urgent customers, and a bunch of tickets that look fine… until they aren’t. Someone checks Zendesk, sees “Open,” assumes it’s being handled, and moves on. Hours later, the SLA clock has burned down, the customer is annoyed, and your team scrambles. That scramble costs focus and makes everything else slower, which ironically creates more breaches. It’s a loop. Honestly, it’s exhausting.
It adds up fast. Here’s where it breaks down in real teams.
- Support agents end up doing manual “SLA sweeps” a few times per day, which eats about 30 minutes that never shows up on a dashboard.
- Tickets get handled in the wrong order because “priority” often reflects urgency at creation time, not urgency right now.
- Slack updates happen too late, so leads only learn about a risk when someone is already apologizing.
- Reporting turns into guesswork because there’s no consistent log of how close tickets were to breaching throughout the week.
What You’ll Build: Hourly Zendesk SLA monitoring with Slack escalation
This automation runs every hour and pulls your open Zendesk tickets via the Zendesk API. It immediately filters out anything that isn’t actionable (closed, pending, on-hold) so you’re only watching the tickets that can actually be worked. Then it calculates how much SLA time is left and how much of the SLA window has already been consumed. When a ticket crosses the 75% mark, the workflow sends a Slack warning to your chosen channel so the team can nudge it forward. When a ticket crosses 90%, it escalates: Zendesk priority gets bumped to High, escalation notes are added, and Slack gets a more urgent alert. Finally, it appends a clean SLA health row into Google Sheets so you can report on trends without rebuilding data later.
The workflow starts with an hourly schedule trigger in n8n. Zendesk provides the ticket list, a small function step does the SLA math, and Slack handles the real-time alerting. Google Sheets becomes your lightweight audit trail, which means you can spot patterns like “Mondays are always tight” without relying on memory.
What You’re Building
| What Gets Automated | What You’ll Achieve |
|---|---|
|
|
Expected Results
Say your team handles about 60 open tickets on a normal day, and a lead does manual SLA checks 3 times daily. If each sweep takes about 10 minutes (filtering views, opening ticket details, posting reminders), that’s roughly 30 minutes per day just watching the clock. With this workflow, the check runs hourly in the background and only pings Slack when something crosses 75% or 90%. You still do the work, but you stop babysitting the queue.
Before You Start
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Zendesk for pulling tickets and updating priority.
- Slack to send warning and escalation messages.
- Google Sheets to log SLA health for reporting.
- Zendesk API token (create it in Zendesk Admin Center under API settings).
Skill level: Beginner. You’ll mostly be connecting accounts and editing a couple of values like channels and thresholds.
Want someone to build this for you? Talk to an automation expert (free 15-minute consultation).
Step by Step
An hourly schedule checks your queue. n8n triggers the workflow once per hour, so you get frequent monitoring without anyone remembering to run a report.
Zendesk tickets are fetched and filtered to “open.” The workflow pulls the key fields (like ticket ID, status, created time, SLA due time, and priority) and ignores tickets that aren’t actively in play.
SLA time remaining is calculated and compared to thresholds. A function step computes how much of the SLA has been consumed, then If checks decide what happens next. At around 75% elapsed, Slack gets a warning; at around 90%, the ticket is escalated in Zendesk and your team gets a higher-urgency Slack message.
Everything gets logged for reporting. A final function assembles the compliance row and appends it to Google Sheets with a timestamp, so your reporting is based on actual queue health, not vibes.
You can easily modify the Slack channel and the threshold logic to match your SLA policy. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Schedule Trigger
Set the hourly schedule that starts the SLA monitoring workflow.
- Add and open Hourly Schedule Trigger.
- Confirm the node is configured to run on an hourly schedule (default cron settings for hourly execution).
- Connect Hourly Schedule Trigger to Retrieve Zendesk Tickets.
Step 2: Connect Zendesk and Retrieve Tickets
Pull all tickets from Zendesk for evaluation.
- Open Retrieve Zendesk Tickets and set Operation to
getAll. - Enable Return All with
trueto fetch the full ticket list. - Credential Required: Connect your zendeskApi credentials in Retrieve Zendesk Tickets.
Step 3: Filter Open Tickets and Handle No-Open Alerts
Separate open tickets from closed ones and optionally post a Slack update when none are open.
- In Filter Open Records, set the condition to check Status equals
openusing={{ $json.status }}. - Connect the true output of Filter Open Records to Compute SLA Remaining Time.
- Connect the false output of Filter Open Records to Post No-Open Alert.
- In Post No-Open Alert, set Text to
✅ No open tickets at this timeand choose your Slack Channel. - Credential Required: Connect your slackApi credentials in Post No-Open Alert.
Step 4: Compute SLA Metrics and Build the Escalation Payload
Calculate SLA progress per ticket and prepare update fields for Zendesk.
- Open Compute SLA Remaining Time and keep the Function Code as provided to calculate
timeRemainingMinutesandpercentElapsed. - Connect Compute SLA Remaining Time to Build Escalation Payload.
- In Build Escalation Payload, set priority to
Highand note toAuto-prioritised due to SLA nearing breach. - Connect Build Escalation Payload to Update Zendesk Warning.
Step 5: Update Zendesk and Run Parallel Threshold Checks
Apply warning updates in Zendesk, then branch into parallel actions for escalation, Slack alerts, and compliance logging.
- In Update Zendesk Warning, set ID to
={{ $json.id }}and Operation toupdate. - Credential Required: Connect your zendeskApi credentials in Update Zendesk Warning.
- Update Zendesk Warning outputs to both Check 90% Threshold, Check 75% Threshold, and Assemble Compliance Log in parallel.
- In Check 90% Threshold, set the numeric condition to
={{$json["percentElapsed"]}}largerEqual90. - In Check 75% Threshold, set the numeric condition to
={{$json["percentElapsed"]}}largerEqual75.
Step 6: Configure Escalation, Slack Warning, and Compliance Logging Outputs
Send escalations to Zendesk, notify Slack, and log SLA compliance to Google Sheets.
- Connect Check 90% Threshold to Apply Zendesk Escalation and set ID to
={{ $json.id }}with Operationupdate. - Credential Required: Connect your zendeskApi credentials in Apply Zendesk Escalation.
- Connect Check 75% Threshold to Send Slack SLA Warning and set Text to
={{ $json.message }}. - Credential Required: Connect your slackApi credentials in Send Slack SLA Warning (credentials are not configured yet).
- Connect Assemble Compliance Log to Append Compliance Sheet.
- In Append Compliance Sheet, set Operation to
append, choose the target Document and Sheet, and map columns forticket_id,percent_elapsed,time_remaining_minutes, andtimestamp. - Credential Required: Connect your googleSheetsOAuth2Api credentials in Append Compliance Sheet.
Step 7: Test and Activate Your Workflow
Run a manual test and confirm the workflow posts alerts, escalates tickets, and logs compliance before enabling it.
- Click Execute Workflow to run Hourly Schedule Trigger manually.
- Verify that open tickets pass through Filter Open Records and receive
percentElapsedandtimeRemainingMinutesin Compute SLA Remaining Time. - Confirm Slack outputs: Post No-Open Alert when no open tickets exist, and Send Slack SLA Warning when
percentElapsedmeets the 75% threshold. - Check Zendesk for updates from Update Zendesk Warning and Apply Zendesk Escalation when thresholds are met.
- Verify new rows are added by Append Compliance Sheet with the expected columns.
- Turn on the workflow using the Active toggle to enable hourly monitoring.
Troubleshooting Tips
- Zendesk credentials can expire or lack ticket update permissions. If priority updates fail, check your Zendesk API token and role permissions in Admin Center first.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Slack alerts can “succeed” but go to the wrong place if the channel ID or workspace connection is off. Verify the Slack node’s selected workspace and the exact target channel before trusting the alerts.
Quick Answers
About 30 minutes if your Zendesk, Slack, and Google Sheets access is ready.
No. You’ll connect accounts and adjust a few fields like thresholds and Slack channels.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in Zendesk, Slack, and Google Sheets costs (usually already covered by your existing plans).
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Yes, and you probably should. You can change the 75% and 90% rules in the two If checks, swap the Slack nodes to post in a different channel, and adjust the “Build Escalation Payload” step to update different Zendesk fields. Some teams add an “assignment” action at 90% or route alerts by ticket group instead of one shared channel.
Usually it’s an invalid or expired API token. Regenerate the token in Zendesk Admin Center, then update the Zendesk credentials in n8n. If it still fails, check that the user tied to the token can read tickets and update ticket fields like priority, because limited roles can fetch data but can’t write changes.
On n8n Cloud Starter, you can typically handle a few thousand executions per month; higher tiers handle more. If you self-host, there’s no execution cap, but your server still has limits. In practice, hourly checks work fine for most small and mid-sized support queues, since you’re processing a batch once per hour rather than triggering on every single ticket event.
Often, yes. Zapier and Make can alert on conditions, but this workflow benefits from branching logic (two thresholds), ticket updates back into Zendesk, and a structured Google Sheets log, all in one place. n8n also gives you a self-hosting option, which is useful if you want frequent runs without worrying about per-task pricing. That said, if you only want a simple “post to Slack when a ticket is created” automation, Zapier is hard to beat for speed. If you’re not sure, Talk to an automation expert and get a quick recommendation.
Once this is running, SLA risk stops living in someone’s head (or in a Zendesk view nobody checks). The workflow watches the clock and taps your team on the shoulder when it actually matters.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.