HubSpot ↔ Salesforce: Bi-Directional CRM Sync
Syncing two CRMs is complex: contacts can exist in both, deals may differ, and ownership rules conflict. This guide covers native bi-directional sync, contact deduplication strategies, and when to use Zapier or n8n for advanced workflows.
Quick Answer
Use Make ↗ for bi-directional sync with deduplication logic. The native connector is one-way. n8n ↗ is best if you need custom field mapping or self-hosted compliance.
Why Sync HubSpot and Salesforce?
Most teams use HubSpot for marketing and Salesforce for sales. Contacts live in both, but they're never in sync — marketing sees 50 leads, sales sees 30 deals, nobody knows the truth. Syncing solves this but requires deduplication rules.
Method Comparison
| Factor | Native | Make | n8n |
|---|---|---|---|
| Bi-Directional Sync | ❌ One-way only | ✅ Yes | ✅ Yes |
| Deduplication (by email) | ⚠️ Manual | ✅ Automated | ✅ Automated |
| Contact Ownership Rules | ⚠️ Limited | ✅ Custom logic | ✅ Custom logic |
| Setup Time | 30 min | 4–6 hours | 6–8 hours |
The Deduplication Problem
If you sync all HubSpot contacts to Salesforce by email, you'll create duplicates for every contact that exists in both systems. You need rules:
- If email exists in both → update existing Salesforce contact, don't create new
- If contact in Salesforce but not HubSpot → leave it alone
- If only in HubSpot → create in Salesforce only if it matches deal criteria
Method 1: Native Connector (HubSpot → Salesforce Only)
HubSpot's native Salesforce connector syncs contacts and companies one-way: HubSpot → Salesforce. When a HubSpot contact gets emailed, they sync to Salesforce automatically.
⚠️ Limitation: No reverse sync (Salesforce → HubSpot)
Method 2: Make ↗ (Bi-Directional with Dedup)
Create two scenarios: HubSpot → Salesforce and Salesforce → HubSpot. Each checks for existing records by email before creating duplicates.
Scenario 1: HubSpot → Salesforce
- Trigger: HubSpot contact created or updated
- Search: Look up Salesforce contact by email
- If exists → update; if not → create new
Scenario 2: Salesforce → HubSpot
- Trigger: Salesforce contact created or updated
- Search: Look up HubSpot contact by email
- If exists → update; if not → create new
Method 3: n8n ↗ (Advanced Ownership Rules)
Use n8n Code nodes to implement complex ownership rules. Example: if a contact is assigned to a sales rep in Salesforce, map them to the HubSpot owner with the same email address.
- ✓ Ownership mapping — match sales reps by email across both CRMs
- ✓ Deal → Contact link — ensure contacts are linked to deals in both systems
- ✓ Self-hosted option — run workflows on your own servers
Troubleshooting
Duplicate Contacts Created
Email field not matching or search isn't working.
Fix: Check both systems use lowercase emails. Test the search step in Make/n8n before running the full scenario.
Sync Only Works One Direction
You built HubSpot → Salesforce but forgot the reverse scenario.
Fix: Create a second scenario for Salesforce → HubSpot with the same dedup logic.