What was built
Full build and deployment of the bidirectional HubSpot↔Salesforce integration designed in Phase 1, covering both acquired companies (Contentserv and ShoppingFeed) and the bulk migration of historical data.
Integration Architecture
Two HubSpot instances (Contentserv = HS(CS), ShoppingFeed = HS(SF)) syncing into one Salesforce org (Centric = SF(Centric)). All sync scenarios built in Make.com with JavaScript-based mapping logic.
Sync directions per entity:
- HS(CS) → SF(Centric): Contacts, Companies, Leads, Notes (as ContentNotes)
- HS(SF) → SF(Centric): Contacts, Companies
- SF(Centric) → HS(CS): Contact/Account updates, Lead conversions
- SF(Centric) → HS(SF): Contact/Company updates
Make.com Scenarios
Scenarios evolved through four major versions (v1→v4) as edge cases were resolved and the data volume requirements grew. Key scenario types:
| Scenario | Purpose |
|---|---|
| HS(CS/SF) Contact+Company → SF | Create/update Salesforce contacts and accounts from HubSpot |
| SF Contact+Account → HS(CS/SF) | Push Salesforce changes back into HubSpot instances |
| SF Lead → HS(CS) | Lead conversion and contact creation in Contentserv HubSpot |
| Importer Queue | Queue-based bulk import handler for 20k+ record migrations |
| ContentNote Creator | Creates Salesforce ContentNotes from HubSpot activity notes |
Bulk Migration
Contentserv had 20k+ contacts and accounts to migrate. A queue-based importer was built specifically for this: accounts synced first to get Salesforce Account IDs back into HubSpot before contacts, preventing orphaned contact records. Post-upload error handling addressed duplicate detection, missing property errors, and account association failures.
ShoppingFeed migration (~8k contacts) followed the same pattern with a cloned and adapted scenario set. In progress as of early 2026.
Field & Logic Additions
- Pardot campaign attribution fields (
pi__campaign__c) mapped to HubSpot contact properties for marketing reporting - Lifecycle stage and source detail fields applied on create-only (no overwrite on update)
Centric Ownercustom field to track originating CRM ownership- Conflict resolution text: when both systems have competing values, a formatted conflict message is written as a note
- Company name and English name mapping fixes for multi-language account records
Ongoing Maintenance
Weekly check-ins with Mathieu (ShoppingFeed), Christian (Contentserv marketing), Lisa (deals/sales ops), and José (sales overview). Break fixes for Salesforce API errors (duplicate contacts, missing properties), scenario restarts after rate-limit breaks, and incremental field additions per stakeholder requests.
Recently touched
- 2026-04-22 Wrong lead linking in HubSpot Done
- 2026-04-22 Nikolai <> Doug, check in Done
- 2026-04-18 Importing 8k from HS(SF) to SF(Centric) Backlog
- 2026-04-17 HubSpot / Contentserv Early Renewal Done
- 2026-04-07 Plan of attack (visual, with lanes) for sales and partnerships tracks Done