Gmail + Slack to Zendesk, tickets captured and tagged
Your support requests are coming in from everywhere, and the worst part is the “in-between” work. Someone copies an email into Zendesk, someone else pastes a Slack message, and by the time it’s a real ticket, the customer is already annoyed.
Support leads feel it first, because they get blamed for slow replies. A small business owner sees it as lost time. And an ops manager? They see a process that breaks the moment volume spikes. This Zendesk ticket automation takes Gmail and Slack requests and turns them into tracked, prioritized Zendesk tickets automatically.
Below, you’ll see exactly how the workflow runs, what results to expect, and what you need to set it up without turning it into a “weekend project.”
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Gmail + Slack to Zendesk, tickets captured and tagged
flowchart LR
subgraph sg0["Slack Flow"]
direction LR
n0["<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/>Slack Trigger"]
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/code.svg' width='40' height='40' /></div><br/>Normalize Gmail Data"]
n2["<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/code.svg' width='40' height='40' /></div><br/>Normalize Slack Data"]
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/merge.svg' width='40' height='40' /></div><br/>Merge Channels"]
n4["<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/>Create Zendesk Ticket"]
n5["<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/code.svg' width='40' height='40' /></div><br/>Format Sheet Data"]
n6@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check for Errors", pos: "b", h: 48 }
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/slack.svg' width='40' height='40' /></div><br/>Send Error Notification"]
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/>Send Success Notification"]
n9@{ icon: "mdi:play-circle", form: "rounded", label: "Gmail Trigger", pos: "b", h: 48 }
n10@{ icon: "mdi:database", form: "rounded", label: "Log to Google Sheets", pos: "b", h: 48 }
n9 --> n1
n0 --> n2
n3 --> n4
n6 --> n7
n6 --> n8
n5 --> n10
n10 --> n6
n1 --> n3
n2 --> n3
n4 --> n5
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 n0,n9 trigger
class n6 decision
class n10 database
class n1,n2,n5 code
classDef customIcon fill:none,stroke:none
class n0,n1,n2,n3,n4,n5,n7,n8 customIcon
The Problem: Multi-Channel Requests Turn Into Ticket Chaos
Support “intake” sounds simple until you live with it. One customer emails a wall of text with screenshots. Another pings your Slack support channel with two words: “urgent, broken.” Now you’re juggling inbox triage, Slack threads, and Zendesk tabs while trying to keep response times reasonable. Manual ticket creation also means inconsistent subjects, missing context, and the same request getting logged twice because two people saw it first. It’s not just slow. It’s mentally draining, and it makes reporting unreliable.
The friction compounds. Here’s where it usually breaks down.
- People forget to create the ticket at all, so the request lives in Slack purgatory.
- Urgent issues get treated like normal ones because priority depends on who is online.
- Details get lost during copy-paste, especially when the original message had formatting or HTML.
- You can’t confidently answer “How many tickets did we get from Slack last week?” without manual digging.
The Solution: Auto-Create Zendesk Tickets from Gmail and Slack
This workflow listens for two things: new Slack messages in your support channel and unread emails hitting your Gmail inbox. When a message arrives, it cleans and normalizes the content so Zendesk gets a clear subject and description, not messy formatting. It also checks for urgency keywords (like “urgent”) so high-priority requests don’t blend into the pile. Then it creates a Zendesk ticket, logs that ticket in Google Sheets with useful metadata (including a clickable URL), and posts a Slack notification so the team knows it’s captured. If anything fails, it alerts you instead of failing silently.
It starts with Gmail and Slack triggers. The workflow cleans the text, merges both sources into one consistent format, then creates the Zendesk case. Finally, it appends a row to Google Sheets and posts a success or failure message back into Slack so you’re not guessing.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say your team gets 10 support requests a day, split between Gmail and Slack. Manually creating tickets takes maybe 6 minutes each once you copy details, pick a priority, and paste links, so you’re spending about an hour a day just on intake. With this workflow, the “work” is basically zero: the triggers catch the message, Zendesk gets the ticket, and Slack gets the confirmation while you keep moving. Over a week, that’s about 5 hours back, plus fewer mistakes.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Gmail for monitoring unread support emails.
- Slack to capture channel requests and notify the team.
- Zendesk API credentials (get it from Zendesk Admin Center → Apps and Integrations → APIs).
- Google Sheets to log every ticket with a URL.
Skill level: Intermediate. You’ll connect accounts, set permissions, and paste a few IDs like your Slack channel and Zendesk subdomain.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
A new message arrives in Gmail or Slack. Gmail is polled for unread emails, and Slack listens for new posts in your chosen support channel. Either one can start the process.
The content gets cleaned and normalized. The workflow runs separate “data cleaner” steps for Gmail and Slack so both sources end up with the same structure. That’s what makes the next part reliable, because Zendesk ticket fields expect consistent inputs.
A Zendesk ticket is created with smart priority tagging. After both input streams are merged, the workflow generates a Zendesk case with a proper subject and description. Urgency detection flags messages that include “urgent” language so they don’t get buried.
Everything gets logged and announced. A Google Sheets row is appended with the ticket metadata and a clickable Zendesk URL (based on your subdomain). Then a Slack notification posts success, or an error alert fires if something went wrong.
You can easily modify the urgency keywords to match your team’s language, or change where notifications go based on priority. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Trigger Type
This workflow starts from two sources—new Gmail messages and Slack events—so configure both triggers to capture support requests.
- Add and configure Gmail Inbox Watcher to watch the mailbox that receives support emails.
- Credential Required: Connect your Gmail OAuth2 credentials in Gmail Inbox Watcher.
- Add and configure Slack Event Listener to receive Slack support events via its webhook.
- Credential Required: Connect your Slack OAuth2 credentials in Slack Event Listener.
- Confirm that Gmail Inbox Watcher sends data to Gmail Data Cleaner and Slack Event Listener sends data to Slack Data Cleaner.
⚠️ Common Pitfall: Both triggers must be enabled and authorized; if one is missing credentials, the workflow will only process one source.
Step 2: Connect Primary Services
Zendesk, Slack, and Google Sheets are the primary services used for ticket creation, alerts, and logging.
- Open Generate Zendesk Case and connect your Zendesk credentials.
- Credential Required: Connect your Zendesk credentials in Generate Zendesk Case.
- Open Post Failure Alert and Post Success Alert and connect your Slack credentials for notifications.
- Credential Required: Connect your Slack OAuth2 credentials in Post Failure Alert and Post Success Alert.
- Open Append to Sheets Log and connect your Google Sheets credentials.
- Credential Required: Connect your Google Sheets credentials in Append to Sheets Log.
Tip: Use a shared service account for Google Sheets logging if multiple team members need consistent access.
Step 3: Set Up Processing Nodes
Normalize incoming data and merge both input streams before creating the Zendesk ticket.
- In Gmail Data Cleaner, add code to clean and standardize incoming email fields (e.g., subject, body, sender).
- In Slack Data Cleaner, add code to normalize Slack event payloads to match the email structure.
- Ensure Combine Input Streams receives inputs from both Gmail Data Cleaner and Slack Data Cleaner before passing to Generate Zendesk Case.
Step 4: Configure Output and Logging Nodes
Create the Zendesk ticket, build a sheet-ready payload, log it, and route success or failure alerts.
- In Generate Zendesk Case, set the required ticket fields using the merged data from Combine Input Streams.
- In Prepare Sheet Payload, build the row data to log ticket details in your spreadsheet.
- In Append to Sheets Log, select the spreadsheet and worksheet where logs should be appended.
- Set Validate Outcome to check whether the log was written or ticket creation succeeded, then route to Post Failure Alert or Post Success Alert.
⚠️ Common Pitfall: If Validate Outcome is not configured with a clear success condition, notifications may go to the wrong channel.
Step 5: Test and Activate Your Workflow
Run end-to-end tests for both Gmail and Slack inputs, then activate the workflow for production use.
- Use Execute Workflow to manually test with a sample Gmail message and a sample Slack event.
- Confirm that Generate Zendesk Case creates a new ticket and Append to Sheets Log writes a new row.
- Verify that Validate Outcome routes to Post Success Alert on successful runs and Post Failure Alert on failures.
- Turn the workflow Active to enable continuous processing for live support requests.
Common Gotchas
- Gmail OAuth credentials can expire or have limited inbox permissions. If emails aren’t being captured, check the Gmail Trigger node credentials and confirm it can read the correct mailbox and labels.
- 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 bot permissions matter more than people expect. If notifications don’t post or the listener sees nothing, confirm channels:history and chat:write scopes, then re-invite the bot to the channel.
Frequently Asked Questions
About 30 minutes if your Gmail, Slack, Zendesk, and Sheets accounts are ready.
No. You’ll connect accounts, paste a few IDs, and test with a real message.
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 plan limits and any API usage policies your account has.
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 honestly it’s one of the first tweaks you should make. The workflow already detects “urgent” language during the Gmail and Slack cleaning steps, then passes that into ticket creation. You can expand the keyword list (for example “ASAP”, “outage”, “payment failed”) and map each keyword to a priority, tag, or even a different Zendesk group. Many teams also route VIP customers to a separate Slack notification channel so the right people see it fast.
Usually it’s expired or incorrect API credentials in the Zendesk node. Regenerate your Zendesk API token (or password auth if you still use it), update it in n8n, and confirm the subdomain matches your Zendesk instance. If it only fails sometimes, check for rate limiting or missing required fields like subject and description after the data-cleaning steps.
For most small teams, hundreds per day is fine as long as your credentials and Zendesk plan allow it.
Often, yes, because this workflow needs branching, merging two sources (Gmail and Slack), and solid error handling without paying extra for “premium” steps. n8n also gives you self-hosting, which matters if your ticket volume grows and you don’t want per-task pricing. Zapier or Make can still be a good fit if you only need one trigger and one action, with almost no logic. If your process includes cleanup, tagging rules, logging, and alerts, n8n tends to feel less cramped. Talk to an automation expert if you want a quick recommendation based on your volume.
Once this is running, ticket intake stops being a daily game of catch-up. The workflow handles the repetitive part, so your team can focus on solving the actual problems.
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.