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.