---
title: "HubSpot-connector"
description: "Volledige HubSpot CRM-integratiegids voor het synchroniseren van contacten, bedrijven, deals, tickets en marketingdata met Brevo via Tajo."
url: https://tajo.io/nl/docs/connectors/crm/hubspot/
markdown: https://tajo.io/nl/docs/connectors/crm/hubspot.md
lang: nl-NL
robots: noindex
---

Vraag vroegtijdige toegang aan

Vul je voornaam en je zakelijke e-mailadres in. We sturen je een link om je aanvraag voor toegang tot Tajo te bevestigen.

# HubSpot-connector

Connectorstatus: In ontwikkeling In aanbouw. Nog niet geverifieerd.

| Bronveld | Doelveld | Voorbeeldwaarde |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

Verbind je HubSpot CRM met Brevo via Tajo voor bidirectionele contactsynchronisatie, dealtracking, engagementdata en uniforme marketingautomatisering op beide platforms.

## Overzicht

| Eigenschap | Waarde |
| --- | --- |
| **Platform** | HubSpot |
| **Categorie** | CRM |
| **Setupcomplexiteit** | Gemiddeld |
| **Officiële integratie** | Nee |
| **Gesynchroniseerde data** | Contacten, Bedrijven, Deals, Tickets, Events |
| **API Base URL** | `https://api.hubapi.com` |

## Functies

- **Bidirectionele contactsynchronisatie** - Houd contacten in realtime gesynchroniseerd tussen HubSpot en Brevo
- **Dealpipeline-tracking** - Synchroniseer dealfases en -waardes voor omzetgebaseerde segmentatie
- **Bedrijfsdatasynchronisatie** - Koppel contacten aan bedrijfsrecords en firmografische data
- **Ticketintegratie** - Volg supporttickets voor klantgezondheidsscores
- **Engagementtracking** - Synchroniseer e-mailopens, klikken, meetings, calls en notities
- **Ondersteuning voor custom objects** - Map HubSpot custom objects naar Brevo-attributen
- **Workflow-triggers** - Gebruik wijzigingen in HubSpot-lifecyclefases om Brevo-automatiseringen te triggeren
- **Webhook-events** - Realtime notificaties bij wijzigingen in CRM-data

## Vereisten

Voordat je begint, zorg dat je beschikt over:

1. Een HubSpot-account (Free, Starter, Professional of Enterprise)
2. Een HubSpot private app of OAuth app met de vereiste scopes
3. Een Brevo-account met API-toegang
4. Een Tajo-account

## Authenticatie

### Private App Access Token (aanbevolen)

Maak een private app in HubSpot voor directe API-toegang met granulaire scopecontrole.

1. Ga naar HubSpot Settings > Integrations > Private Apps
2. Maak een nieuwe private app
3. Configureer de vereiste scopes
4. Kopieer het access token

```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

Gebruik OAuth 2.0 voor multi-account-integraties die gebruikersautorisatie vereisen.

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

#### Vereiste scopes

```
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
```

## Configuratie

### Basisinstelling

```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
```

### Veldmapping

Map HubSpot-eigenschappen naar Brevo-contactattributen:

#### Standaardmappings

| Parameter | Type | Description |
| --- | --- | --- |
| `email` required | string | E-mail van contact (primaire identifier) |
| `firstname` optional | string | Mapt naar FIRSTNAME-attribuut in Brevo |
| `lastname` optional | string | Mapt naar LASTNAME-attribuut in Brevo |
| `phone` optional | string | Mapt naar SMS-attribuut voor WhatsApp/SMS |
| `company` optional | string | Gekoppelde bedrijfsnaam |
| `lifecyclestage` optional | string | HubSpot-lifecyclefase (subscriber, lead, MQL, SQL, customer) |
| `hs_lead_status` optional | string | Status leadkwalificatie |
| `hubspot_owner_id` optional | string | ID van toegewezen sales owner |

#### Custom property-mapping

```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
```

## API-endpoints

### CRM Objects

| Method | Endpoint | Beschrijving |
| --- | --- | --- |
| `GET` | `/crm/v3/objects/contacts` | Lijst contacten |
| `POST` | `/crm/v3/objects/contacts` | Maak een contact aan |
| `PATCH` | `/crm/v3/objects/contacts/{id}` | Werk een contact bij |
| `GET` | `/crm/v3/objects/companies` | Lijst bedrijven |
| `GET` | `/crm/v3/objects/deals` | Lijst deals |
| `POST` | `/crm/v3/objects/deals` | Maak een deal aan |
| `GET` | `/crm/v3/objects/tickets` | Lijst tickets |

### Associaties

| Method | Endpoint | Beschrijving |
| --- | --- | --- |
| `GET` | `/crm/v4/objects/{objectType}/{objectId}/associations/{toObjectType}` | Haal associaties op |
| `PUT` | `/crm/v4/objects/{objectType}/{objectId}/associations/{toObjectType}/{toObjectId}` | Maak associatie |

### Engagements

| Method | Endpoint | Beschrijving |
| --- | --- | --- |
| `GET` | `/crm/v3/objects/calls` | Lijst call-engagements |
| `GET` | `/crm/v3/objects/emails` | Lijst e-mail-engagements |
| `GET` | `/crm/v3/objects/meetings` | Lijst meetings |
| `GET` | `/crm/v3/objects/notes` | Lijst notities |
| `GET` | `/crm/v3/objects/tasks` | Lijst taken |

## Events

### Contact-events

| Event | Trigger | Use case |
| --- | --- | --- |
| `contact.creation` | Nieuw contact aangemaakt | Trigger voor welkomstflow |
| `contact.propertyChange` | Contacteigenschap bijgewerkt | Attribuutsynchronisatie |
| `contact.merge` | Contacten samengevoegd | Afhandelen van deduplicatie |
| `contact.deletion` | Contact verwijderd | Opschonen in Brevo |

### Deal-events

| Event | Trigger | Use case |
| --- | --- | --- |
| `deal.creation` | Nieuwe deal aangemaakt | Salesnotificatie |
| `deal.propertyChange` | Dealfase gewijzigd | Pipeline-automatisering |
| `deal.deletion` | Deal verwijderd | Omzetrapportage |

### Bedrijfsevents

| Event | Trigger | Use case |
| --- | --- | --- |
| `company.creation` | Nieuw bedrijf toegevoegd | Account-based marketing |
| `company.propertyChange` | Bedrijfsdata bijgewerkt | Firmografische synchronisatie |

## Codevoorbeelden

### Connector initialiseren

```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
});
```

### Contactsynchronisatie uitvoeren

```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
// }
```

### Webhook-events afhandelen

```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');
});
```

## Rate limits

HubSpot hanteert rate limits per private app of OAuth app:

| Plan | Rate limit | Burst limit |
| --- | --- | --- |
| Free/Starter | 100 requests/10 seconden | 150 requests/10 seconden |
| Professional | 150 requests/10 seconden | 200 requests/10 seconden |
| Enterprise | 200 requests/10 seconden | 250 requests/10 seconden |
| API add-on | 200 requests/10 seconden | 250 requests/10 seconden |

Aanvullende limieten:

- **Search API**: 5 requests/seconde per app
- **Batch-operaties**: 100 records per batch-request
- **Daglimiet**: 500.000 requests/dag (OAuth apps)

Afhandeling van rate limits

HubSpot retourneert een `429 Too Many Requests`-response wanneer de limieten worden overschreden. Gebruik exponentiële backoff en monitor de `X-HubSpot-RateLimit-*`-headers.

## Probleemoplossing

### Veelvoorkomende problemen

| Probleem | Oorzaak | Oplossing |
| --- | --- | --- |
| 401 Unauthorized | Verlopen of ongeldig token | Regenereer het private app-token of ververs het OAuth-token |
| Contact niet gesynchroniseerd | Ontbrekende e-maileigenschap | HubSpot-contacten vereisen een e-mail voor Brevo-synchronisatie |
| Dubbele contacten | Geen deduplicatieregel | Configureer merge-regels in HubSpot |
| Webhook niet ontvangen | Abonnement niet actief | Registreer webhook-subscriptions opnieuw |
| Eigenschap niet gemapt | Custom property niet aangemaakt | Maak de eigenschap eerst aan in HubSpot |

### Debugmodus

Zet uitgebreide logging aan:

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

### Verbinding testen

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

## Best practices

1. **Gebruik private apps in plaats van API keys** - API keys zijn deprecated; gebruik private apps voor betere beveiliging
2. **Implementeer bidirectionele synchronisatie zorgvuldig** - Voorkom oneindige loops door de sync source bij te houden
3. **Map lifecyclefases** - Gebruik HubSpot-lifecyclefases om contacten in Brevo te segmenteren
4. **Batch API-requests** - Gebruik batch-endpoints voor bulkoperaties om binnen rate limits te blijven
5. **Monitor webhook-delivery** - Zet retry-logica en dead letter-afhandeling op
6. **Gebruik incrementele synchronisatie** - Synchroniseer alleen gewijzigde records via de `lastmodifieddate`-eigenschap

## Beveiliging

- **Private App Tokens** - Scoped access tokens met granulaire rechten
- **OAuth 2.0** - Industriestandaard-autorisatie met refresh token-rotatie
- **Webhook-signatures** - HMAC-gebaseerde signatureverificatie (v3)
- **TLS-encryptie** - Alle API-communicatie is versleuteld tijdens transport
- **Scoped permissions** - Toegang volgens minimum-benodigde scope per integratie

## Gerelateerde bronnen

- [HubSpot API-documentatie](https://developers.hubspot.com/docs/api/overview)
- [HubSpot Authenticatiegids](https://developers.hubspot.com/docs/api/working-with-oauth)
- [Salesforce-connector](https://tajo.io/nl/docs/connectors/crm/salesforce)
- [Customer Sync Skill](https://tajo.io/nl/docs/skills/data-sync/customer-sync)
- [Brevo Contacts API](https://tajo.io/nl/docs/contact-management)
