HubSpot + Zendesk: keep customer orgs up to date
Your support team updates a ticket, your sales team updates a company record, and somehow the “same” customer ends up with two different names, two different domains, and three different org profiles. Then comes the real pain: misrouted tickets, confused agents, and awkward customer conversations that should never happen.
This is the kind of mess that hits Support Ops first. But RevOps and agency teams managing multiple portals feel it too. A solid HubSpot Zendesk sync keeps Zendesk organizations aligned with the latest HubSpot company data, so tickets stay tied to the right customer.
Below you’ll see exactly how this automation works, what it replaces, and how it changes day-to-day ticket handling once it’s running.
How This Automation Works
See how this solves the problem:
n8n Workflow Template: HubSpot + Zendesk: keep customer orgs up to date
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/merge.svg' width='40' height='40' /></div><br/>Add Zendesk company data to .."]
n1@{ icon: "mdi:code-braces", form: "rounded", label: "Set new last execution times..", pos: "b", h: 48 }
n2@{ icon: "mdi:code-braces", form: "rounded", label: "Get last execution timestamp", 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/hubspot.svg' width='40' height='40' /></div><br/>Get modified companies"]
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/>Get all Zendesk organisations"]
n5@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Company exists in Zendesk", 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/>Create organisation"]
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 organisation"]
n8@{ icon: "mdi:cog", form: "rounded", label: "Every 5 minutes", pos: "b", h: 48 }
n8 --> n2
n6 --> n1
n7 --> n1
n3 --> n4
n3 --> n0
n5 --> n7
n5 --> n6
n2 --> n3
n4 --> n0
n0 --> 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 n5 decision
class n1,n2 code
classDef customIcon fill:none,stroke:none
class n0,n3,n4,n6,n7 customIcon
The Challenge: Company data drifts between HubSpot and Zendesk
HubSpot is usually where company data gets cleaned up first. Someone fixes a domain, adds a parent company, changes an industry field, or corrects a billing address. Meanwhile in Zendesk, agents are working tickets under organizations that were created months ago with old details (or worse, created twice with slightly different names). It’s not dramatic in isolation. But when you’re triaging tickets quickly, small mismatches cause big delays, and people stop trusting the CRM data altogether.
The friction compounds. Here’s where it breaks down most often.
- Agents waste time hunting for the “right” organization when duplicates exist, and they often pick the wrong one under pressure.
- Ticket routing and reporting get messy because org fields in Zendesk don’t match what leadership sees in HubSpot.
- Manual updates happen only when someone complains, which means you’re always reacting instead of staying current.
- Data drift creates embarrassing support moments when your team asks customers to confirm info you should already know.
The Fix: Sync HubSpot company updates into Zendesk organizations
This workflow watches for updated company data in HubSpot on a short schedule, then makes sure Zendesk organizations match. Every 5 minutes, it checks what changed since the last run, pulls the recently modified companies from HubSpot, and looks up the related organizations in Zendesk. Next, it merges the HubSpot and Zendesk datasets so each company lines up with the org record it should affect. If Zendesk already has the organization, the workflow updates it with the latest company details. If Zendesk doesn’t have it yet, it creates the organization so tickets can attach to a single, current record.
The workflow begins on a timer, which keeps it reliable without anyone pushing buttons. HubSpot becomes the source of truth for company updates, and Zendesk stays aligned automatically. At the end, the workflow stores the latest run time, so the next cycle only pulls what’s new.
What Changes: Before vs. After
| What This Eliminates | Impact You’ll See |
|---|---|
|
|
Real-World Impact
Say your team updates 30 HubSpot companies a week (new domains, renamed orgs, refreshed addresses). Manually, it’s easy to spend about 5 minutes per company finding the Zendesk org, confirming it’s the correct one, and updating fields, so you lose roughly 2.5 hours weekly. With this automation, the “work” is basically zero: the Cron trigger runs every 5 minutes and updates or creates organizations automatically. You still spot-check occasionally, but you’re no longer living in cleanup mode.
Requirements
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- HubSpot for the company updates and fields.
- Zendesk to create/update organizations used on tickets.
- HubSpot + Zendesk credentials (generate in each tool’s admin/settings area)
Skill level: Intermediate. You’ll connect accounts, map a few org/company fields, and test with real records.
Need help implementing this? Talk to an automation expert (free 15-minute consultation).
The Workflow Flow
A 5-minute schedule kicks things off. The Cron trigger runs continuously in the background, so updates don’t wait for someone to remember a checklist.
The workflow remembers what it already processed. It retrieves the previous run time, then uses that timestamp so HubSpot only returns companies modified since the last cycle. Less noise. Fewer missed updates.
HubSpot and Zendesk data are compared side by side. Recently updated HubSpot companies are pulled in, Zendesk organizations are retrieved, and a merge-by-key step lines up matching records so the workflow can make a clear decision.
Zendesk gets updated (or filled in). If the organization exists, it’s modified with current details. If it doesn’t, the workflow creates it so future tickets have a proper home.
You can easily modify which company properties sync (like domain, lifecycle stage, or account owner) to match how your Zendesk org fields are structured. 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 every five minutes using the built-in scheduler.
- Add the Scheduled 5-min trigger node as the trigger.
- Set Trigger Times to run
everyXminutes with value5. - Connect Scheduled 5-min trigger to Retrieve previous run time.
Step 2: Connect HubSpot and Retrieve Updated Companies
Load the last execution timestamp and use it to fetch recently modified companies from HubSpot.
- In Retrieve previous run time, keep the provided Function Code that sets
item.lastExecutionanditem.executionTimeStamp. - Open Fetch updated companies and set Resource to
company. - Set Operation to
getRecentlyModifiedand Authentication toappToken. - Set Filters → Since to
={{ $json["lastExecution"] }}. - Credential Required: Connect your hubspotAppToken credentials in Fetch updated companies.
Step 3: Retrieve Zendesk Organizations and Merge Data
Pull all Zendesk organizations and merge them with the updated HubSpot companies.
- Configure Retrieve Zendesk orgs with Resource
organization, OperationgetAll, and Return All set totrue. - Credential Required: Connect your zendeskApi credentials in Retrieve Zendesk orgs.
- In Merge Zendesk with HubSpot, set Mode to
mergeByKey. - Set Property Name 1 to
properties.name.valueand Property Name 2 toname. - Fetch updated companies outputs to both Retrieve Zendesk orgs and Merge Zendesk with HubSpot in parallel.
Step 4: Route Records for Create vs Update
Use a conditional check to decide whether to update an existing Zendesk organization or create a new one.
- In Check org in Zendesk, set the String Condition to Value 1
={{ $json["id"] }}and OperationisNotEmpty. - Connect the true output of Check org in Zendesk to Modify Zendesk org.
- Connect the false output of Check org in Zendesk to Create Zendesk org.
id, all records will be treated as new and sent to Create Zendesk org.Step 5: Configure Zendesk Create/Update and Store Run Time
Send changes to Zendesk and record the latest run time after successful updates.
- In Create Zendesk org, set Name to
={{ $json["properties"].name.value }}. - Set Additional Fields → Domain Names to
={{ $json["properties"].domain.value }}. - Credential Required: Connect your zendeskApi credentials in Create Zendesk org.
- In Modify Zendesk org, set ID to
={{ $json["id"] }}and Operation toupdate. - Set Update Fields → Name to
={{ $json["properties"].name.value }}and Update Fields → Domain Names to={{ $json["properties"].domain.value }}. - Credential Required: Connect your zendeskApi credentials in Modify Zendesk org.
- Ensure both Create Zendesk org and Modify Zendesk org connect to Store latest run time.
- In Store latest run time, keep the provided Function Code that stores
executionTimeStampin workflow static data.
Step 6: Test and Activate Your Workflow
Validate the flow end-to-end and then enable it for scheduled runs.
- Click Execute Workflow to run a manual test from Scheduled 5-min trigger.
- Confirm Fetch updated companies returns results filtered by
lastExecution, and that merged data reaches Check org in Zendesk. - Verify new organizations are created in Create Zendesk org and existing ones are updated in Modify Zendesk org.
- Check that Store latest run time updates the stored timestamp for the next run.
- Toggle the workflow to Active to enable the 5-minute schedule in production.
Watch Out For
- HubSpot credentials can expire or need specific permissions. If things break, check your HubSpot private app token scopes (or connected app settings) in HubSpot 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.
Common Questions
About an hour if your HubSpot and Zendesk access is ready.
Yes, but someone needs to be comfortable testing data mappings. You’re mostly connecting accounts and deciding which HubSpot fields should update Zendesk organization fields.
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 HubSpot and Zendesk plan limits for API access.
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.
Start by adjusting what “updated company” means in the Fetch updated companies node, then map only the fields you trust. You can also tweak the Merge Zendesk with HubSpot matching key (for example, prefer domain over name if naming is inconsistent). Common customizations include syncing account owner into a Zendesk org field, skipping certain lifecycle stages, and adding a quick “do nothing” branch when required fields are missing.
Usually it’s expired credentials or missing scopes on the HubSpot token. Update the credentials in n8n, then confirm your HubSpot private app has permissions to read companies (and any properties you’re pulling). If it only fails sometimes, check rate limits and reduce how many records you pull per run.
On n8n Cloud Starter, it’s designed for modest volumes, and higher plans handle more executions. If you self-host, there’s no execution cap, but your server resources will determine how fast it runs. Practically, a 5-minute schedule works well for many small teams because you only process recently modified companies, not the whole database. If you’re updating hundreds of companies an hour, you’ll want to add batching and tighter filters.
Often, yes. This workflow relies on “last run time” logic, merging datasets, and conditional create-vs-update handling, and frankly those patterns get expensive or awkward in Zapier when you scale. n8n also gives you a self-hosting option, which matters if you want unlimited runs without per-task pricing. Zapier or Make can still be fine for a lightweight one-way sync with a small dataset. Talk to an automation expert if you want help choosing the simplest approach for your setup.
Once this is running, Zendesk organizations stop drifting away from reality in HubSpot. The workflow handles the repetitive updates so your team can focus on resolving tickets, not reconciling records.
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.