Integración de HubSpot y Salesforce: guía paso a paso (2026)
Deja de perder oportunidades por datos de CRM desalineados. Aquí te mostramos cómo crear una sincronización fiable y bidireccional entre HubSpot y Salesforce.  * Una cuenta de Salesforce con credenciales de administrador o una app conectada ya configurada, con OAuth 2.0 habilitado * Una cuenta activa de MakeVas a crear un escenario que detecte contactos nuevos o actualizados en HubSpot y luego cree o actualice el registro de lead correspondiente en Salesforce. Entre los dos módulos hay una comprobación de deduplicación para evitar que aparezcan registros duplicados en cualquiera de los dos sistemas. Si es la primera vez que construyes en Make, la ) guía cubre todo lo que necesitas antes de continuar. Para Salesforce, revisa la ) en help.salesforce.com antes de empezar el Paso 2, ya que necesitarás tener listos tu Consumer Key y Consumer Secret.
Paso 1: configura tu conexión de HubSpot en Make
Abre Make y crea un nuevo escenario. Añade un módulo de HubSpot como primer paso usando la ,) y luego selecciona el tipo de disparador según lo que vayas a sincronizar: * Usa Watch Contacts para activar el escenario cuando se cree o actualice un contacto en HubSpot * Usa Watch CRM Objects si necesitas hacer seguimiento de cambios en otros tipos de objeto, como empresas o dealsPara autenticarte, selecciona 'Add a connection' y elige OAuth 2.0. Make abre la pantalla de autorización de HubSpot, donde concederás los permisos que requiere el escenario: como mínimo, lectura/escritura de contactos y objetos de CRM. OAuth 2.0 es la opción adecuada para uso en producción porque te da un control granular de los permisos y te permite revocar el acceso sin tener que rotar las claves API en cada integración. Una vez conectado, configura el intervalo de comprobación. El valor predeterminado comprueba HubSpot a intervalos fijos, lo que introduce una latencia proporcional a ese intervalo. Si tu caso de uso requiere sincronización en tiempo real, esta configuración del módulo no lo permitirá: la sincronización en tiempo real requiere un módulo disparador basado en Webhook y una configuración distinta del módulo de HubSpot por completo.  | | {{1.company}} | Company | None | | {{1.hs_lead_status}} | LeadSource | Los valores de los campos de selección deben coincidir exactamente con una opción válida de Salesforce | | {{1.createdate}} | CreatedDate | formatDate({{1.createdate}}; "YYYY-MM-DD") | | {{1.hubspot_owner_id}} | OwnerId | Requiere una búsqueda aparte del ID de usuario | Tres campos provocan errores de sincronización con más frecuencia: los campos de fecha, donde HubSpot devuelve una marca de tiempo Unix y Salesforce espera ISO 8601, por lo que se necesita formatDate; los campos de selección, cuyos valores deben coincidir exactamente con una opción válida de Salesforce. Los campos obligatorios de Salesforce sin equivalente en HubSpot deben tener un valor predeterminado configurado en el módulo, o el registro fallará en cada ejecución. ![Make scenario image for salesforce & Hubspot](__CODE_BLOCK_10__Step 4: Add a deduplication filter
Before the Salesforce write module, add a Salesforce Search Records module to query by email address. If a matching record is found, the bundle returns a Salesforce lead ID. If not, it returns empty. Use that result to drive a[ ](__CODE_BLOCK_11__ with two branches: * New lead: search returns empty, route runs Salesforce Create a Record * Existing lead: search returns a matching ID, route runs Salesforce Upsert a RecordWithout this logic, every HubSpot contact update triggers a new Salesforce lead record, polluting your CRM with duplicates that are difficult to reconcile after the fact. One tradeoff to account for: the Salesforce Search Records module consumes an Operation on every Scenario run. Mitigate it by tightening your trigger conditions in Step 1, so the Scenario only fires on contacts that are genuinely new or meaningfully updated, rather than on every minor property change.
Step 5: Handle errors and set up notifications
In a CRM sync context, silent failures are dangerous. A contact that fails to create in Salesforce simply disappears from the sales pipeline, with no visibility for anyone. Right-click the Salesforce Create a Record or Salesforce Upsert a Record module and select "Add error handler" to open the[ ](__CODE_BLOCK_12__ Choose the right directive for your use case: | Directive | When to use it | | --- | --- | | Break | Stores the failed bundle in Incomplete Executions for manual or automatic retry — the right default for a CRM write | | Resume | Continues the Scenario with a fallback value — use only if the failed record is non-critical | | Rollback | Stops execution and attempts to revert prior actions — use for multi-system writes where partial records cause bigger problems | After the error handler, add a notification module: a Slack message or email that fires on failure, with {{error.message}} and the contact ID mapped into the message body. This gives your team immediate visibility when a sync fails. Finally, enable email alerts for incomplete runs in your Scenario settings. This adds a second layer of monitoring that catches failures the error handler route itself may not surface.Step 6: Test the Scenario and validate data
Click Run once in the Scenario Builder toolbar to trigger a single [test execution](__CODE_BLOCK_13__ Use a real HubSpot contact with a known email address so you can cross-reference the output directly in Salesforce. After the run, check each module's output bubble to confirm data passed through correctly. Then validate the resulting Salesforce record against the following checklist: * Record was created or updated, not duplicated * All mapped field values match the HubSpot source contact exactly * Data types are correct: dates in ISO 8601 format, phone numbers as strings * Record ownership transferred to the expected Salesforce user * The error handler route was not triggeredIf any item fails, open the bundle output for the failing module in the Scenario Builder to identify where the data broke down. Fix the mapping or transformation, then rerun. Run five to ten test records before activating the Scenario for production use. A single passing test rarely surfaces edge cases around picklist values, missing required fields, or contacts with incomplete data.
What are common use cases for a HubSpot Salesforce integration?
Most ops and RevOps teams build a HubSpot Salesforce integration for one of two reasons: * Automating the marketing lead handoff to sales * Keeping deal stage data consistent across both platforms for revenue reportingBoth follow the same Scenario architecture covered in this guide, with different trigger conditions and field mappings. Start from Make's create a Salesforce lead from a HubSpot CRM [contact template](__CODE_BLOCK_14__ to accelerate either build. | Use case | Trigger | Outcome | | --- | --- | --- | | Marketing lead handoff | Contact reaches MQL status in HubSpot | Salesforce lead created and assigned to the correct rep within minutes | | Deal stage sync | Deal stage changes in Salesforce | HubSpot deal record updated to match, keeping attribution intact |