Zendesk + Pipedrive: tickets assigned to the right owner
Your support inbox fills up, a ticket comes in from a customer, and then the guessing game starts. Who owns this account? Who should reply? And why does it always take three internal pings to figure it out?
This is where Zendesk Pipedrive routing hits hardest for Support Leads, but Sales Ops and small agency teams feel it too. You get clean ownership in minutes, not a messy handoff that drags into tomorrow.
This workflow checks for new Zendesk tickets every few minutes, finds the matching contact in Pipedrive, and assigns the ticket to the right owner automatically. You’ll see what it does, what you need, and how to avoid the common pitfalls.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Zendesk + Pipedrive: tickets assigned to the right owner
flowchart LR
subgraph sg0["Flow 1"]
direction LR
n0@{ icon: "mdi:code-braces", form: "rounded", label: "Get last execution timestamp", pos: "b", h: 48 }
n1@{ icon: "mdi:code-braces", form: "rounded", label: "Set new last execution times..", pos: "b", h: 48 }
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/zendesk.svg' width='40' height='40' /></div><br/>Get tickets created after la.."]
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/>Get requester information"]
n4@{ icon: "mdi:swap-vertical", form: "rounded", label: "Keep only needed requester i..", pos: "b", h: 48 }
n5@{ icon: "mdi:swap-vertical", form: "rounded", label: "Keep only requester owner em..", pos: "b", h: 48 }
n6@{ icon: "mdi:cog", form: "rounded", label: "Every 5 minutes", 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/merge.svg' width='40' height='40' /></div><br/>Add requester information to.."]
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/pipedrive.svg' width='40' height='40' /></div><br/>Search requester in pipedrive"]
n9["<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/httprequest.dark.svg' width='40' height='40' /></div><br/>Get owner information of Pip.."]
n10["<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 agents and admins"]
n11@{ icon: "mdi:swap-vertical", form: "rounded", label: "Keep only email and Id", pos: "b", h: 48 }
n12["<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/>Add Pipedrive agent data to .."]
n13["<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/>Add contact owner to ticket .."]
n14@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Contact exists in Pipedrive", pos: "b", h: 48 }
n15["<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/>Change assignee to Pipedrive.."]
n16["<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/>Add a note requester not found"]
n6 --> n0
n10 --> n11
n11 --> n12
n3 --> n4
n14 --> n15
n14 --> n16
n0 --> n2
n8 --> n9
n16 --> n1
n5 --> n12
n13 --> n14
n4 --> n7
n7 --> n8
n7 --> n13
n2 --> n7
n2 --> n3
n15 --> n1
n9 --> n5
n12 --> n13
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 n14 decision
class n9 api
class n0,n1 code
classDef customIcon fill:none,stroke:none
class n2,n3,n7,n8,n9,n10,n12,n13,n15,n16 customIcon
The Problem: Tickets get stuck in ownership limbo
A customer emails support about billing, contract terms, or “we need to upgrade.” Support sees the ticket, but they don’t know who owns the account. Sales knows the owner, but they’re in Pipedrive all day, not Zendesk. So the ticket sits unassigned, or worse, it gets assigned to the wrong person and the customer repeats themselves. Multiply that by a handful of tickets per day and it becomes a steady leak: slower first replies, more internal noise, and that vague feeling that your tools aren’t actually connected.
It adds up fast. Here’s where it breaks down in real teams.
- Unassigned tickets linger because nobody wants to “grab” an account they don’t own.
- Support pings Sales for ownership details, which turns one ticket into a mini project.
- Tickets get routed based on guesswork, and customers notice the inconsistency.
- When ownership changes in the CRM, Zendesk doesn’t magically learn that on its own.
The Solution: Auto-assign Zendesk tickets based on Pipedrive ownership
This n8n workflow acts like a bridge between Zendesk and Pipedrive. Every five minutes, it checks Zendesk for tickets that arrived since the last run, then pulls the requester details (especially the email). With that email, it searches Pipedrive for the matching contact. If it finds one, it looks up the contact’s owner in Pipedrive and maps that owner back to the right Zendesk agent. Then it updates the ticket assignee so the “real” owner sees it immediately. If no matching contact is found, the workflow doesn’t silently fail. It adds a note to the ticket so your team knows why it wasn’t routed.
The workflow starts on a schedule and keeps its own “last run” timestamp so it only processes new tickets. It merges ticket data with requester details, enriches it with Pipedrive ownership, and finishes by assigning the ticket (or logging a clear note when it can’t). Clean in, clean out.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say your team gets 20 Zendesk tickets a day that need a sales-owner handoff. Manually, even 5 minutes per ticket to look up the requester in Pipedrive, find the owner, then reassign in Zendesk is about 100 minutes daily. With this workflow, routing happens on the 5-minute schedule: the “work” is basically zero minutes after setup, plus a quick glance at the occasional “contact not found” note. That’s roughly an hour or two back every week, and it usually feels bigger because it removes constant interruptions.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Zendesk to read tickets and update assignees.
- Pipedrive to find contacts and their owners.
- Pipedrive API token (get it from Pipedrive personal preferences).
Skill level: Intermediate. You’ll mostly connect accounts, map a few fields, and sanity-check identity matching (emails, owners, agents).
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
A scheduled check kicks everything off. A Cron trigger runs every 5 minutes, then the workflow loads the last successful run time so it only considers newly received Zendesk tickets.
Ticket and requester data get stitched together. Zendesk provides the ticket list and requester details, and n8n keeps only the useful bits (requester email and ID) before merging them into one “ticket context.”
Pipedrive becomes the source of truth for ownership. The workflow searches Pipedrive by requester email, then calls the API to fetch the owner information for that contact. Separately, it pulls Zendesk agents/admins so it can match an owner email to a real Zendesk assignee.
Zendesk gets updated (or annotated) automatically. If a contact match exists, the ticket assignee is changed to the correct owner. If not, a note is added so the exception is visible, then the workflow stores the new “last run” timestamp.
You can easily modify the matching logic (email, domain, org rules) to fit your process. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Scheduled Trigger
Set the workflow to run on a fixed interval to process newly created tickets.
- Add and open Scheduled Trigger 5 Min.
- Set Trigger Times to
Every X minuteswithValueset to5. - Connect Scheduled Trigger 5 Min to Fetch Last Run Time.
Step 2: Connect Zendesk and Pipedrive Services
This workflow relies on Zendesk tickets and Pipedrive contacts/owners. Configure credentials for all service nodes.
- Open Retrieve Recent Tickets and set Operation to
getAll. - Set Query to
=created>{{ $json["lastExecution"] }}, Sort By toupdated_at, and Sort Order todesc. - Credential Required: Connect your zendeskApi credentials to Retrieve Recent Tickets, Fetch Requester Details, Utility: Fetch Agents/Admins, Update Ticket Assignee, and Log Missing Contact Note.
- Credential Required: Connect your pipedriveApi credentials to Locate Pipedrive Contact and Fetch Pipedrive Owner.
Step 3: Track Run Times and Pull Recent Tickets
Use static data to store the last execution time and only process new tickets.
- In Fetch Last Run Time, keep the Function Code that sets
item.executionTimeStampanditem.lastExecution. - Connect Fetch Last Run Time to Retrieve Recent Tickets.
- In Store Latest Run Time, keep the Function Code that sets
staticData.lastExecution = $item(0).$node["Fetch Last Run Time"].executionTimeStamp.
Step 4: Build the Requester + Ticket Merge (Parallel Branches)
Retrieve requester details and merge with ticket data to enable email-based matching.
- In Fetch Requester Details, set Resource to
user, Operation toget, and ID to={{ $json["requester_id"] }}. - In Select Requester Fields, enable Keep Only Set and map requester_id to
={{ $json["id"] }}and requester_email to={{ $json["email"] }}. - In Merge Ticket + Requester, set Mode to
mergeByKeywith Property Name 1 and Property Name 2 set torequester_id. - Retrieve Recent Tickets outputs to both Merge Ticket + Requester and Fetch Requester Details in parallel.
- Merge Ticket + Requester outputs to both Locate Pipedrive Contact and Merge Owner Into Ticket in parallel.
Step 5: Match Pipedrive Owner to Zendesk Agents
This section finds the Pipedrive owner by requester email and aligns that owner to a Zendesk agent.
- In Locate Pipedrive Contact, set Resource to
person, Operation tosearch, Term to={{ $json["requester_email"] }}, and Additional Fields → Fields toemail. - In Fetch Pipedrive Owner, set URL to
=https://n8n.pipedrive.com/api/v1/users/{{$json["owner"]["id"]}}and keep Authentication aspredefinedCredentialTypewith nodeCredentialType set topipedriveApi. - In Extract Owner Emails, enable Keep Only Set and set requester_pipedrive_email to
={{ $node["Locate Pipedrive Contact"].json["primary_email"] }}and requester_pipedrive_owner_email to={{ $json["data"].email }}. - In Utility: Fetch Agents/Admins, set Resource to
user, Operation togetAll, Return All totrue, and filter Role toagentandadmin. - In Utility: Select Agent Fields, enable Keep Only Set and set agent_email to
={{ $json["email"] }}and agent_id to={{ $json["id"] }}. - In Combine Agent With Contact, set Mode to
mergeByKeywith Property Name 1 asrequester_pipedrive_owner_emailand Property Name 2 asagent_email. - In Merge Owner Into Ticket, set Mode to
mergeByKeywith Property Name 1 asrequester_emailand Property Name 2 asrequester_pipedrive_email.
Step 6: Route Ticket Assignment and Log Missing Contacts
Use a conditional check to determine whether to assign the ticket or log a missing contact note.
- In Verify Contact Presence, set the condition to String with Value 1 as
={{ $json["agent_id"] }}and Operation asisNotEmpty. - In the true branch, configure Update Ticket Assignee with ID
={{ $json["id"] }}, Operationupdate, and Assignee Email={{$json["requester_pipedrive_owner_email"]}}. - In the false branch, configure Log Missing Contact Note with ID
={{ $json["id"] }}, Operationupdate, and Internal NoteRequester not found in Pipedrive. - Connect both Update Ticket Assignee and Log Missing Contact Note to Store Latest Run Time.
Step 7: Test and Activate Your Workflow
Run the workflow manually to validate ticket retrieval, owner matching, and assignment updates.
- Click Execute Workflow to run a manual test from Scheduled Trigger 5 Min.
- Confirm that Retrieve Recent Tickets returns tickets created after the stored timestamp, and that requester details are merged correctly.
- Verify that Update Ticket Assignee updates tickets with a matching agent email, and Log Missing Contact Note logs for unmatched contacts.
- Once verified, toggle Active to enable the workflow for production use.
Common Gotchas
- Zendesk credentials can expire or need specific permissions. If things break, check your n8n Zendesk credential connection and Zendesk API access settings 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.
- Pipedrive owner lookups can fail when the contact email doesn’t match exactly. Frankly, one alias or shared inbox can derail routing, so standardize emails or add a fallback rule.
Frequently Asked Questions
About 30–60 minutes if your Zendesk and Pipedrive accounts are ready.
No. You’ll connect accounts and map a few fields in n8n.
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 want to factor in any Zendesk or Pipedrive plan limits tied to API usage.
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 a small change. You can adjust the “Locate Pipedrive Contact” search to match by domain or organization, then update the “Verify Contact Presence” condition to add a fallback assignee. Common tweaks include routing VIP domains to a specific agent, assigning by Pipedrive organization owner instead of contact owner, and logging missing matches to a Google Sheet for cleanup.
Usually it’s expired or revoked API access, so re-check the Zendesk credentials saved in n8n and confirm the account still has permission to read tickets and update assignees. Another common issue is using a different Zendesk user than the one that originally authorized the integration. This workflow is also picky about identity matching; if emails differ between Zendesk requester and Pipedrive contact, it can look like a “failure” when it’s really a “no match.”
On n8n Cloud, it depends on your execution allowance, but many small teams fit comfortably on the Starter tier. If you self-host, there’s no execution limit beyond your server capacity, so volume is mostly about Zendesk/Pipedrive API limits and how many tickets arrive each run. Practically, teams process dozens to a few hundred tickets per day without thinking about it, as long as the matching rules are solid.
Often, yes, because this workflow has branching logic, merges, and “last run” state tracking that you’d end up rebuilding in a more expensive way elsewhere. n8n also lets you self-host, which is a big deal if you expect volume and don’t want every ticket to feel like a meter running. Zapier or Make can still be fine if your routing rule is dead simple (one lookup, one update). But once you need to merge requester details, map owners to agents, and log exceptions cleanly, n8n is usually the calmer choice. Talk to an automation expert if you want a quick gut-check before you commit.
Once ticket ownership is automatic, your team stops babysitting the queue. Set it up, let it run, and spend your attention on customers instead of internal routing.
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.