Zendesk + Asana: tickets that stay in sync
Your support inbox moves fast, but project work moves… when someone remembers to copy the details over. Tickets get “handed off” in Slack messages, half-updated Asana tasks, and comments that never reach the person doing the work.
This Zendesk Asana sync hits Support Leads first, because they’re the ones chasing updates. But Project Managers and small agency owners feel it too when delivery work starts without the full context. The goal here is simple: one ticket creates one task, and every new comment stays attached to the work.
Below, you’ll see exactly how the automation runs, what you get out of it, and what you need set up in Zendesk and Asana so it stays reliable.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Zendesk + Asana: tickets that stay in sync
flowchart LR
subgraph sg0["Flow 1"]
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/zendesk.svg' width='40' height='40' /></div><br/>Get ticket"]
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/asana.svg' width='40' height='40' /></div><br/>Create task"]
n2@{ icon: "mdi:swap-horizontal", form: "rounded", label: "IF", 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/zendesk.svg' width='40' height='40' /></div><br/>Update ticket"]
n4@{ icon: "mdi:code-braces", form: "rounded", label: "Determine", pos: "b", h: 48 }
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/asana.svg' width='40' height='40' /></div><br/>Create comment on existing t.."]
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/webhook.dark.svg' width='40' height='40' /></div><br/>On new Zendesk ticket"]
n2 --> n5
n2 --> n1
n4 --> n2
n0 --> n4
n1 --> n3
n6 --> n0
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 decision
class n6 api
class n4 code
classDef customIcon fill:none,stroke:none
class n0,n1,n3,n5,n6 customIcon
The Problem: Ticket handoffs break the moment comments start
Creating an Asana task from a Zendesk ticket isn’t the hard part. The hard part is everything after that. A customer replies with a new detail, a teammate asks a question, or someone posts a screenshot. Now you’ve got fresh context living in Zendesk while the delivery team is staring at an old Asana task and guessing. People start copy-pasting, rewriting, and paraphrasing, which is how small errors sneak into scopes and timelines. Honestly, the biggest cost is the mental load of “Did I update the other place?”
The friction compounds. Here’s where it breaks down in real teams.
- New tickets get turned into tasks, but ongoing comments stay trapped in Zendesk.
- Updates arrive in bursts, which means you’re always catching up instead of moving work forward.
- Someone inevitably pastes the wrong snippet, and now the task has “almost” the right context.
- When customers ask for status, you waste time checking two threads and reconciling the story.
The Solution: Create the task once, then sync every Zendesk comment
This workflow listens for Zendesk ticket events through a webhook, then decides what to do based on whether the ticket is already linked to Asana. If it’s a brand-new ticket with no link, it creates an Asana task in your chosen workspace and writes the Asana task ID (GID) back into a dedicated Zendesk ticket field. That field becomes the “source of truth” for the connection. When new comments show up on the Zendesk ticket later, the workflow fetches the saved Asana GID and appends the new comment directly onto the matching Asana task. No hunting. No copy-paste. Just one continuous thread tied to the work.
The workflow starts when Zendesk fires the webhook with the ticket ID and latest comment HTML. n8n retrieves the full ticket info, checks for an existing Asana GID, then either creates the Asana task or posts the comment to the existing one. Finally, it updates Zendesk when a new task is created so future comments can sync cleanly.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say your team handles about 30 tickets a week that require work in Asana, and each one gets roughly 4 back-and-forth comments. Manually, you might spend 5 minutes creating the task and another 2 minutes per comment copying updates over, which is about 6 hours of busywork weekly. With this workflow, creating the task and syncing comments happens automatically after the webhook fires (you only wait for processing). In practice, most teams get nearly all of that time back, and the “lost comment” problem largely disappears.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Zendesk to receive tickets and trigger webhooks.
- Asana to create tasks and store threaded updates.
- Zendesk webhook + custom field (set up in Admin Center, ticket fields).
Skill level: Beginner. You will copy a webhook URL, create one Zendesk trigger, and map a Zendesk custom field to store the Asana GID.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
Zendesk triggers the workflow via webhook. A Zendesk business rule (trigger) calls the n8n webhook when a ticket is new, passing the ticket ID and latest comment HTML.
Ticket details get pulled in. n8n uses the ticket ID to retrieve full ticket info, including the custom field that will store the Asana GID.
n8n decides: create a task or add a comment. A small logic check looks for an existing Asana GID. If it exists, the workflow posts the incoming comment to that Asana task; if not, it creates the task first.
Zendesk is updated so the link stays permanent. When a task is created, the workflow writes the new Asana GID back into Zendesk so every future comment knows where to go.
You can easily modify which tickets sync (for example, only certain forms or groups) to match your process. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Webhook Trigger
Set up the webhook endpoint that Zendesk will call when a ticket update occurs.
- Add the Zendesk Ticket Webhook node as your trigger.
- Set HTTP Method to
POST. - Set Path to
4637a853-0b3a-43d4-9d76-92e1ce87889d. - Copy the production webhook URL from Zendesk Ticket Webhook and paste it into your Zendesk webhook configuration.
Step 2: Connect Zendesk and Retrieve Ticket Data
Pull full ticket details based on the webhook payload so downstream logic can evaluate and route the ticket.
- Add the Retrieve Ticket Info node and connect it after Zendesk Ticket Webhook.
- Set Operation to
get. - Set Ticket ID to
={{$node["Zendesk Ticket Webhook"].json["body"]["id"]}}. - Credential Required: Connect your zendeskApi credentials.
Step 3: Set Up the Asana Link Check and Routing Logic
Determine whether the Zendesk ticket already has an Asana task ID and route accordingly.
- Add the Check Asana Link node and connect it after Retrieve Ticket Info.
- In Function Code, replace the placeholder
[YOUR_ID]inconst ISSUE_KEY_FIELD_ID = "[YOUR_ID]";with your Zendesk custom field ID. - Add the Branch Condition node and connect it after Check Asana Link.
- Configure the condition to check String value
={{$node["Check Asana Link"].json["Asana GID"]}}with Operation set toisNotEmpty. - Ensure the true path goes to Append Task Comment and the false path goes to Generate Asana Task.
[YOUR_ID] in Check Asana Link, the workflow will never find the Asana task ID and will always create new tasks.Step 4: Configure Asana Task Creation and Ticket Updates
When no existing Asana task is found, create a new task and write the task ID back to Zendesk.
- Add the Generate Asana Task node on the false branch from Branch Condition.
- Set Name to
={{$node["Retrieve Ticket Info"].json["subject"]}}. - Set Workspace to
[YOUR_ID]and update Assignee to your Asana user ID. - Credential Required: Connect your asanaApi credentials.
- Add the Modify Ticket Record node and connect it after Generate Asana Task.
- Set Operation to
updateand Ticket ID to={{$node["Zendesk Ticket Webhook"].json["body"]["id"]}}. - Under Custom Fields, set id to
[YOUR_ID]and value to={{$node["Generate Asana Task"].json["gid"]}}. - Credential Required: Connect your zendeskApi credentials.
Step 5: Configure Comment Appending for Existing Asana Tasks
If an Asana task already exists, post the Zendesk ticket comment to the task.
- Add the Append Task Comment node on the true branch from Branch Condition.
- Set Resource to
taskCommentand enable Is Text Html. - Set Task ID to
={{$node["Check Asana Link"].json["Asana GID"]}}. - Set Text to
=<body>{{$node["Zendesk Ticket Webhook"].json["body"]["comment"]}}</body>. - Credential Required: Connect your asanaApi credentials.
Step 6: Test and Activate Your Workflow
Validate the end-to-end flow with a real Zendesk ticket update before turning the workflow on.
- Click Execute Workflow and send a test ticket update from Zendesk to the webhook URL.
- Confirm Retrieve Ticket Info returns ticket data and Check Asana Link outputs the expected
Asana GID(empty or filled). - Verify one of the following success paths: an Asana comment is added by Append Task Comment, or a new task is created by Generate Asana Task and written back by Modify Ticket Record.
- Once validated, switch the workflow to Active for production use.
Common Gotchas
- Zendesk credentials can expire or need specific permissions. If things break, check your Zendesk API token and the Admin Center webhook/trigger history 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.
- Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.
Frequently Asked Questions
About 30 minutes if you already have Zendesk and Asana access.
No. You will mostly copy settings, connect accounts, and map one custom field. If you can create a Zendesk trigger, you can handle this.
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 and Asana subscription costs.
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 it’s usually just a small change. In Zendesk, adjust the trigger conditions so only specific forms, groups, or statuses notify the webhook. In n8n, the “Branch Condition” logic can also be expanded so certain tickets create tasks in different Asana projects, or skip task creation and only sync comments when a link already exists.
Usually it’s an expired API token or a connection using the wrong Zendesk subdomain. Reconnect the Zendesk credentials in n8n, then confirm your Zendesk webhook is still enabled and the trigger is still firing. Also check that the webhook body includes the ticket ID, because the workflow can’t fetch ticket details without it. If your account has IP restrictions or stricter roles, make sure the API user can read tickets and update the custom field.
A typical setup can handle hundreds of tickets a day; the limit is usually your n8n plan and API rate limits, not the workflow logic.
Sometimes, yes. This workflow needs a “create once, then keep syncing comments” pattern, and that’s where n8n tends to feel more dependable because you can store the Asana GID back in Zendesk and branch logic without paying extra for every path. Self-hosting is also a big deal if you expect a lot of ticket events, because you’re not counting every small step as a separate billable task. Zapier or Make can still be fine for a quick, simple “ticket creates task” setup. If your process includes multiple teams, custom fields, and lots of follow-up comments, n8n is usually the calmer option. Talk to an automation expert if you want a quick recommendation for your exact stack.
Once this is in place, tickets stop turning into “Did anyone tell the team?” moments. The workflow keeps the thread intact so you can focus on solving the problem, not moving updates around.
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.