Pipedrive + HubSpot: keep contacts aligned, always
Your contact list shouldn’t feel like a crime scene. But when Pipedrive and HubSpot drift apart, you end up with duplicates, missing phone numbers, and reps emailing the wrong person.
Sales Ops usually gets blamed first. Then the marketing manager notices list quality slipping, and the agency running campaigns can’t trust segments. This CRM contact sync automation keeps both CRMs aligned so follow-ups happen faster and reporting stops being a debate.
You’ll see how this workflow compares contacts in both tools, identifies what’s missing, and pushes updates in both directions on a schedule.
How This Automation Works
See how this solves the problem:
n8n Workflow Template: Pipedrive + HubSpot: keep contacts aligned, always
flowchart LR
subgraph sg0["Flow 1"]
direction LR
n0@{ icon: "mdi:cog", form: "rounded", label: "Scheduled Trigger", 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/pipedrive.svg' width='40' height='40' /></div><br/>Fetch Pipedrive Contacts"]
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/pipedrive.svg' width='40' height='40' /></div><br/>Modify Pipedrive Contact"]
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/>Retrieve HubSpot Contacts"]
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/hubspot.svg' width='40' height='40' /></div><br/>Update HubSpot Contact"]
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/merge.svg' width='40' height='40' /></div><br/>Combine Records A"]
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/merge.svg' width='40' height='40' /></div><br/>Combine Records B"]
n0 --> n1
n0 --> n3
n5 --> n2
n6 --> n4
n3 --> n5
n3 --> n6
n1 --> n5
n1 --> n6
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
classDef customIcon fill:none,stroke:none
class n1,n2,n3,n4,n5,n6 customIcon
The Challenge: Two CRMs, Two “Truths”
Keeping Pipedrive persons and HubSpot contacts aligned sounds simple until you live with it. Someone imports a list into HubSpot, a rep creates a person in Pipedrive from a call, and suddenly the same lead exists twice with slightly different details. Then you get the quiet failures: marketing automation triggers on the wrong record, deal owners lose context, and “quick” reporting turns into a half-day cleanup. It’s not hard work. It’s endless work, because the drift never stops.
The friction compounds. Here’s where it usually breaks down.
- New contacts get created in the “wrong” CRM first, and nobody remembers to copy them over later.
- Duplicates appear because each tool treats email, name, and company data a bit differently.
- Follow-ups slow down when your team has to cross-check two profiles before sending anything.
- List exports become the default fix, which means you’re always one import away from a fresh mess.
The Fix: Two-Way Pipedrive + HubSpot Contact Sync
This workflow runs on a short schedule (every minute) and keeps both CRMs in sync automatically. It pulls your current list of persons from Pipedrive and your contacts from HubSpot, then compares the two sets to find what’s missing on each side. If a person exists in HubSpot but not Pipedrive, the workflow creates or updates that person in Pipedrive. If a person exists in Pipedrive but not HubSpot, it creates or updates the HubSpot contact. You’re not relying on someone’s memory anymore. The systems reconcile themselves in the background, which keeps your pipeline and your marketing database telling the same story.
The workflow starts with a scheduled trigger, then pulls contacts from both tools in parallel. Next, it merges and filters the lists to isolate unique records for each side. Finally, it updates Pipedrive and HubSpot so both lists converge into one clean dataset.
What Changes: Before vs. After
| What This Eliminates | Impact You’ll See |
|---|---|
|
|
Real-World Impact
Say your team adds 20 new people a day across Pipedrive and HubSpot. Manually, it’s maybe 5 minutes to check, re-create, and verify each one in the other CRM, which is about 2 hours daily once you count interruptions. With this workflow, you create the contact wherever it happens naturally (from a deal, a form, or an import) and the sync catches up automatically within a minute. That’s time you can spend on outreach, not record babysitting.
Requirements
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Pipedrive to fetch and update persons.
- HubSpot to retrieve and update contacts.
- Pipedrive and HubSpot API access (create private app tokens in each platform’s settings).
Skill level: Intermediate. You’ll connect credentials and confirm how you want records matched (usually by email).
Need help implementing this? Talk to an automation expert (free 15-minute consultation).
The Workflow Flow
Scheduled run every minute. A Cron trigger starts the workflow automatically, so you don’t need a rep to “remember” to sync anything.
Pull both contact lists. n8n fetches persons from Pipedrive and contacts from HubSpot in parallel, so it can compare the latest state of both CRMs.
Compare and isolate what’s missing. Two merge steps remove key matches, leaving you with the contacts that exist only in HubSpot and only in Pipedrive. That difference list is the whole point.
Update each CRM. The workflow pushes the “HubSpot-only” people into Pipedrive, and the “Pipedrive-only” people into HubSpot. Done.
You can easily modify how matching works (email, name, a custom field) to fit your process. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Cron Trigger
This workflow starts on a schedule using Scheduled Trigger and then runs two data pulls in parallel.
- Add the Scheduled Trigger node to your canvas.
- Set the schedule you want inside Scheduled Trigger (e.g., hourly or daily based on your CRM sync needs).
- Connect Scheduled Trigger so it outputs to both Fetch Pipedrive Contacts and Retrieve HubSpot Contacts in parallel.
Step 2: Connect Pipedrive
Pull contacts from Pipedrive and prepare updates to send back into Pipedrive.
- Open Fetch Pipedrive Contacts and set Resource to
person, Operation togetAll, and Return All totrue. - Credential Required: Connect your
pipedriveApicredentials in Fetch Pipedrive Contacts. - Open Modify Pipedrive Contact and set Resource to
person. - Set Name to
={{$json["properties"]["firstname"]["value"]}}. - In Additional Fields → Email, set the value to
={{$json["identity-profiles"][0]["identities"][0]["value"]}}. - Credential Required: Connect your
pipedriveApicredentials in Modify Pipedrive Contact.
Step 3: Connect HubSpot
Pull HubSpot contacts and prepare updates to send back into HubSpot.
- Open Retrieve HubSpot Contacts and set Resource to
contact, Operation togetAll, and Return All totrue. - Credential Required: Connect your
hubspotApicredentials in Retrieve HubSpot Contacts. - Open Update HubSpot Contact and set Resource to
contact. - Set Email to
={{$json["email"][0]["value"]}}. - In Additional Fields → First Name, set the value to
={{$json["first_name"]}}. - Credential Required: Connect your
hubspotApicredentials in Update HubSpot Contact.
Step 4: Set Up Record Matching and Sync Routing
Use the merge nodes to identify records that need updates across both systems and route them to the correct update node.
- Configure Combine Records A with Mode set to
removeKeyMatches, Property Name 1 toidentity-profiles[0].identities[0].value, and Property Name 2 toemail[0].value. - Configure Combine Records B with Mode set to
removeKeyMatches, Property Name 1 toemail[0].value, and Property Name 2 toidentity-profiles[0].identities[0].value. - Scheduled Trigger outputs to both Fetch Pipedrive Contacts and Retrieve HubSpot Contacts in parallel.
- Retrieve HubSpot Contacts outputs to both Combine Records A and Combine Records B in parallel, and Fetch Pipedrive Contacts outputs to both Combine Records A and Combine Records B in parallel.
- Connect Combine Records A to Modify Pipedrive Contact and Combine Records B to Update HubSpot Contact.
Step 5: Test and Activate Your Workflow
Validate the sync behavior before enabling the schedule.
- Click Execute Workflow to run a manual test.
- Confirm Fetch Pipedrive Contacts and Retrieve HubSpot Contacts both return contact lists.
- Verify that Modify Pipedrive Contact and Update HubSpot Contact execute with the expected mapped fields.
- When the results look correct, toggle the workflow to Active so Scheduled Trigger runs on your schedule.
Watch Out For
- Pipedrive credentials can expire or need specific permissions. If things break, check your Pipedrive API token or private app scope settings first.
- If your contact lists are large, the every-minute Cron schedule can collide with API rate limits. When you see intermittent failures, slow the schedule down a bit or filter to recently updated contacts.
- Matching rules matter more than people expect. If one CRM stores email in a different field or you allow blank emails, you’ll create near-duplicates that look “new” to the merge logic.
Common Questions
Usually about an hour if your Pipedrive and HubSpot access is ready.
Yes. No coding required, but someone should be comfortable connecting accounts and testing with a small batch first.
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 Pipedrive and HubSpot plan limits if your API usage is high.
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 changing what counts as a “match” in the merge logic, then map the fields you actually care about in the update steps. Common tweaks include matching on email first (and skipping blank emails), adding a custom ID field to both systems for rock-solid matching, and limiting the sync to specific pipelines or lists so you’re not moving old data around forever.
Usually it’s an expired token or missing scopes on the HubSpot private app. Update the credential in n8n, then confirm the app can read and write contacts. If the workflow runs every minute and you have a lot of records, you can also hit rate limits, so slow the schedule down and test again.
If you self-host, capacity mostly depends on your server and API limits.
Often, yes, because two-way syncing needs more than a simple “if this then that.” n8n makes it easier to pull full lists, compare them, and then branch updates without paying extra for every path. You also get the self-hosting option, which is handy when the workflow runs frequently. Zapier or Make can still be fine for lighter, event-based syncing, like “new HubSpot contact → create Pipedrive person.” If you’re unsure, Talk to an automation expert and describe your volume and matching rules.
Two CRMs can work together without constant cleanup. Set this up once, and your team stops wasting attention on contact drift.
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.