---
title: "Conector de HubSpot"
description: "Guía completa de integración con HubSpot CRM para sincronizar contactos, empresas, negocios, tickets y datos de marketing con Brevo mediante Tajo."
url: https://tajo.io/es/docs/connectors/crm/hubspot/
markdown: https://tajo.io/es/docs/connectors/crm/hubspot.md
lang: es-ES
robots: noindex
---

Solicita acceso anticipado

Escribe tu nombre y dirección de correo de trabajo. Te enviaremos un enlace para confirmar tu solicitud de acceso a Tajo.

# Conector de HubSpot

Estado del conector: En desarrollo En construcción. Aún no verificado.

| Campo de origen | Campo de destino | Valor de ejemplo |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

Conecta tu CRM de HubSpot con Brevo a través de Tajo para sincronizar contactos de forma bidireccional, hacer seguimiento de negocios, compartir datos de interacción y automatizar el marketing de forma unificada entre ambas plataformas.

## Resumen

| Propiedad | Valor |
| --- | --- |
| **Plataforma** | HubSpot |
| **Categoría** | CRM |
| **Complejidad de configuración** | Media |
| **Integración oficial** | No |
| **Datos sincronizados** | Contactos, Empresas, Negocios, Tickets, Eventos |
| **URL base de la API** | `https://api.hubapi.com` |

## Funcionalidades

- **Sincronización bidireccional de contactos** - Mantén los contactos sincronizados entre HubSpot y Brevo en tiempo real
- **Seguimiento del pipeline de ventas** - Sincroniza etapas de negocios y valores para segmentar por ingresos
- **Sincronización de datos de empresas** - Asocia contactos con registros de empresas y datos firmográficos
- **Integración de tickets** - Haz seguimiento de tickets de soporte para evaluar la salud del cliente
- **Seguimiento de interacciones** - Sincroniza aperturas de email, clics, reuniones, llamadas y notas
- **Soporte de objetos personalizados** - Asocia objetos personalizados de HubSpot con atributos de Brevo
- **Activadores de workflows** - Usa los cambios de etapa del ciclo de vida en HubSpot para disparar automatizaciones en Brevo
- **Eventos de webhook** - Notificaciones en tiempo real sobre cambios en los datos del CRM

## Requisitos previos

Antes de empezar, asegúrate de tener:

1. Una cuenta de HubSpot (Free, Starter, Professional o Enterprise)
2. Una app privada o app OAuth de HubSpot con los scopes necesarios
3. Una cuenta de Brevo con acceso a la API
4. Una cuenta de Tajo

## Autenticación

### Token de acceso de app privada (recomendado)

Crea una app privada en HubSpot para acceso directo a la API con control granular de scopes.

1. Ve a Configuración de HubSpot > Integraciones > Apps privadas
2. Crea una nueva app privada
3. Configura los scopes necesarios
4. Copia el token de acceso

```bash
curl -X GET "https://api.hubapi.com/crm/v3/objects/contacts" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json"
```

### OAuth 2.0

Usa OAuth 2.0 para integraciones multicuenta que requieran autorización del usuario.

```bash
# Authorization URL
https://app.hubspot.com/oauth/authorize?client_id={client_id}&scope=crm.objects.contacts.read&redirect_uri={redirect_uri}
```

#### Scopes necesarios

```
crm.objects.contacts.read
crm.objects.contacts.write
crm.objects.companies.read
crm.objects.deals.read
crm.objects.deals.write
crm.objects.custom.read
crm.schemas.custom.read
```

## Configuración

### Configuración básica

```yaml
connectors:
  hubspot:
    enabled: true
    access_token: "${HUBSPOT_ACCESS_TOKEN}"

    # Data sync options
    sync:
      contacts: true
      companies: true
      deals: true
      tickets: true
      engagements: true

    # Sync direction
    direction: bidirectional  # or 'hubspot_to_brevo' | 'brevo_to_hubspot'

    # List assignment in Brevo
    lists:
      all_contacts: 10
      qualified_leads: 11
      customers: 12
```

### Asignación de campos

Asocia las propiedades de HubSpot con los atributos de contacto de Brevo:

#### Asignaciones por defecto

| Parameter | Type | Description |
| --- | --- | --- |
| `email` required | string | Correo electrónico del contacto (identificador principal) |
| `firstname` optional | string | Se asigna al atributo FIRSTNAME en Brevo |
| `lastname` optional | string | Se asigna al atributo LASTNAME en Brevo |
| `phone` optional | string | Se asigna al atributo SMS para WhatsApp/SMS |
| `company` optional | string | Nombre de la empresa asociada |
| `lifecyclestage` optional | string | Etapa del ciclo de vida en HubSpot (subscriber, lead, MQL, SQL, customer) |
| `hs_lead_status` optional | string | Estado de calificación del lead |
| `hubspot_owner_id` optional | string | ID del responsable de ventas asignado |

#### Asignación de propiedades personalizadas

```yaml
field_mapping:
  # Standard fields
  email: email
  firstname: FIRSTNAME
  lastname: LASTNAME
  phone: SMS

  # CRM fields
  lifecyclestage: LIFECYCLE_STAGE
  hs_lead_status: LEAD_STATUS
  company: COMPANY_NAME

  # Deal metrics
  hs_total_deal_value: DEAL_VALUE
  num_associated_deals: DEAL_COUNT

  # Custom properties
  preferred_channel: PREFERRED_CHANNEL
  customer_segment: SEGMENT
```

## Endpoints de la API

### Objetos del CRM

| Método | Endpoint | Descripción |
| --- | --- | --- |
| `GET` | `/crm/v3/objects/contacts` | Listar contactos |
| `POST` | `/crm/v3/objects/contacts` | Crear un contacto |
| `PATCH` | `/crm/v3/objects/contacts/{id}` | Actualizar un contacto |
| `GET` | `/crm/v3/objects/companies` | Listar empresas |
| `GET` | `/crm/v3/objects/deals` | Listar negocios |
| `POST` | `/crm/v3/objects/deals` | Crear un negocio |
| `GET` | `/crm/v3/objects/tickets` | Listar tickets |

### Asociaciones

| Método | Endpoint | Descripción |
| --- | --- | --- |
| `GET` | `/crm/v4/objects/{objectType}/{objectId}/associations/{toObjectType}` | Obtener asociaciones |
| `PUT` | `/crm/v4/objects/{objectType}/{objectId}/associations/{toObjectType}/{toObjectId}` | Crear asociación |

### Interacciones

| Método | Endpoint | Descripción |
| --- | --- | --- |
| `GET` | `/crm/v3/objects/calls` | Listar llamadas registradas |
| `GET` | `/crm/v3/objects/emails` | Listar emails registrados |
| `GET` | `/crm/v3/objects/meetings` | Listar reuniones |
| `GET` | `/crm/v3/objects/notes` | Listar notas |
| `GET` | `/crm/v3/objects/tasks` | Listar tareas |

## Eventos

### Eventos de contactos

| Evento | Disparador | Caso de uso |
| --- | --- | --- |
| `contact.creation` | Nuevo contacto creado | Disparar flujo de bienvenida |
| `contact.propertyChange` | Propiedad del contacto actualizada | Sincronización de atributos |
| `contact.merge` | Contactos fusionados | Gestión de duplicados |
| `contact.deletion` | Contacto eliminado | Limpieza en Brevo |

### Eventos de negocios

| Evento | Disparador | Caso de uso |
| --- | --- | --- |
| `deal.creation` | Nuevo negocio creado | Notificación comercial |
| `deal.propertyChange` | Cambio de etapa del negocio | Automatización del pipeline |
| `deal.deletion` | Negocio eliminado | Reporte de ingresos |

### Eventos de empresas

| Evento | Disparador | Caso de uso |
| --- | --- | --- |
| `company.creation` | Nueva empresa añadida | Marketing basado en cuentas |
| `company.propertyChange` | Datos de la empresa actualizados | Sincronización firmográfica |

## Ejemplos de código

### Inicializar el conector

```javascript
import { TajoClient } from '@tajo/sdk';

const tajo = new TajoClient({
  apiKey: process.env.TAJO_API_KEY,
  brevoApiKey: process.env.BREVO_API_KEY
});

// Connect HubSpot
await tajo.connectors.connect('hubspot', {
  accessToken: process.env.HUBSPOT_ACCESS_TOKEN
});
```

### Ejecutar la sincronización de contactos

```javascript
// Full bidirectional sync
await tajo.connectors.sync('hubspot', {
  type: 'full',
  resources: ['contacts', 'companies', 'deals'],
  direction: 'bidirectional',
  since: '2023-01-01'
});

// Check sync status
const status = await tajo.connectors.status('hubspot');
console.log(status);
// {
//   connected: true,
//   lastSync: '2024-01-15T10:30:00Z',
//   contactsSynced: 34200,
//   companiesSynced: 5100,
//   dealsSynced: 2340
// }
```

### Gestionar eventos de webhook

```javascript
// Handle HubSpot webhook notifications
app.post('/webhooks/hubspot', async (req, res) => {
  const signature = req.get('X-HubSpot-Signature-v3');

  // Verify webhook signature
  if (!verifyHubSpotSignature(req.body, signature)) {
    return res.status(401).send('Unauthorized');
  }

  for (const event of req.body) {
    await tajo.connectors.handleWebhook('hubspot', {
      eventType: event.subscriptionType,
      objectId: event.objectId,
      propertyName: event.propertyName,
      propertyValue: event.propertyValue
    });
  }

  res.status(200).send('OK');
});
```

## Límites de velocidad

HubSpot aplica límites de velocidad por app privada o app OAuth:

| Plan | Límite de velocidad | Límite de ráfaga |
| --- | --- | --- |
| Free/Starter | 100 peticiones/10 segundos | 150 peticiones/10 segundos |
| Professional | 150 peticiones/10 segundos | 200 peticiones/10 segundos |
| Enterprise | 200 peticiones/10 segundos | 250 peticiones/10 segundos |
| Complemento de API | 200 peticiones/10 segundos | 250 peticiones/10 segundos |

Límites adicionales:

- **API de búsqueda**: 5 peticiones/segundo por app
- **Operaciones en lote**: 100 registros por petición
- **Límite diario**: 500.000 peticiones/día (apps OAuth)

Gestión de límites de velocidad

HubSpot devuelve una respuesta `429 Too Many Requests` cuando se superan los límites. Usa backoff exponencial y monitoriza las cabeceras `X-HubSpot-RateLimit-*`.

## Resolución de problemas

### Problemas habituales

| Problema | Causa | Solución |
| --- | --- | --- |
| 401 Unauthorized | Token expirado o no válido | Regenera el token de la app privada o refresca el token OAuth |
| Contacto no sincronizado | Falta la propiedad email | Los contactos de HubSpot necesitan email para sincronizarse con Brevo |
| Contactos duplicados | Sin regla de deduplicación | Configura reglas de fusión en HubSpot |
| Webhook no recibido | Suscripción inactiva | Vuelve a registrar las suscripciones de webhook |
| Propiedad sin asignar | Propiedad personalizada no creada | Crea primero la propiedad en HubSpot |

### Modo depuración

Activa el registro detallado:

```yaml
connectors:
  hubspot:
    debug: true
    log_level: verbose
    log_webhooks: true
```

### Probar la conexión

```bash
tajo connectors test hubspot
# ✓ API connection successful
# ✓ Contacts readable
# ✓ Companies readable
# ✓ Deals readable
# ✓ Webhooks registered
```

## Buenas prácticas

1. **Usa apps privadas en lugar de claves de API** - Las claves de API están obsoletas; usa apps privadas para mayor seguridad
2. **Implementa la sincronización bidireccional con cuidado** - Evita bucles infinitos rastreando el origen de la sincronización
3. **Asocia las etapas del ciclo de vida** - Usa las etapas del ciclo de vida de HubSpot para segmentar contactos en Brevo
4. **Agrupa las peticiones a la API** - Usa los endpoints de lote para operaciones masivas y respetar los límites
5. **Supervisa la entrega de webhooks** - Configura lógica de reintentos y gestión de dead letters
6. **Usa sincronización incremental** - Sincroniza solo los registros modificados usando la propiedad `lastmodifieddate`

## Seguridad

- **Tokens de apps privadas** - Tokens de acceso con permisos granulares
- **OAuth 2.0** - Autorización estándar del sector con rotación de refresh tokens
- **Firmas de webhooks** - Verificación de firma basada en HMAC (v3)
- **Cifrado TLS** - Toda la comunicación con la API está cifrada en tránsito
- **Permisos con scope** - Acceso con los scopes mínimos necesarios por integración

## Recursos relacionados

- [Documentación de la API de HubSpot](https://developers.hubspot.com/docs/api/overview)
- [Guía de autenticación de HubSpot](https://developers.hubspot.com/docs/api/working-with-oauth)
- [Conector de Salesforce](https://tajo.io/es/docs/connectors/crm/salesforce)
- [Skill de sincronización de clientes](https://tajo.io/es/docs/skills/data-sync/customer-sync)
- [API de contactos de Brevo](https://tajo.io/es/docs/contact-management)
