HubSpot-connector

HubSpot-connector

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

Overzicht

EigenschapWaarde
PlatformHubSpot
CategorieCRM
SetupcomplexiteitGemiddeld
Officiële integratieJa
Gesynchroniseerde dataContacten, Bedrijven, Deals, Tickets, Events
API Base URLhttps://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
Terminal window
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.

Terminal window
# 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

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

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

MethodEndpointBeschrijving
GET/crm/v3/objects/contactsLijst contacten
POST/crm/v3/objects/contactsMaak een contact aan
PATCH/crm/v3/objects/contacts/{id}Werk een contact bij
GET/crm/v3/objects/companiesLijst bedrijven
GET/crm/v3/objects/dealsLijst deals
POST/crm/v3/objects/dealsMaak een deal aan
GET/crm/v3/objects/ticketsLijst tickets

Associaties

MethodEndpointBeschrijving
GET/crm/v4/objects/{objectType}/{objectId}/associations/{toObjectType}Haal associaties op
PUT/crm/v4/objects/{objectType}/{objectId}/associations/{toObjectType}/{toObjectId}Maak associatie

Engagements

MethodEndpointBeschrijving
GET/crm/v3/objects/callsLijst call-engagements
GET/crm/v3/objects/emailsLijst e-mail-engagements
GET/crm/v3/objects/meetingsLijst meetings
GET/crm/v3/objects/notesLijst notities
GET/crm/v3/objects/tasksLijst taken

Events

Contact-events

EventTriggerUse case
contact.creationNieuw contact aangemaaktTrigger voor welkomstflow
contact.propertyChangeContacteigenschap bijgewerktAttribuutsynchronisatie
contact.mergeContacten samengevoegdAfhandelen van deduplicatie
contact.deletionContact verwijderdOpschonen in Brevo

Deal-events

EventTriggerUse case
deal.creationNieuwe deal aangemaaktSalesnotificatie
deal.propertyChangeDealfase gewijzigdPipeline-automatisering
deal.deletionDeal verwijderdOmzetrapportage

Bedrijfsevents

EventTriggerUse case
company.creationNieuw bedrijf toegevoegdAccount-based marketing
company.propertyChangeBedrijfsdata bijgewerktFirmografische synchronisatie

Codevoorbeelden

Connector initialiseren

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

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

// 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:

PlanRate limitBurst limit
Free/Starter100 requests/10 seconden150 requests/10 seconden
Professional150 requests/10 seconden200 requests/10 seconden
Enterprise200 requests/10 seconden250 requests/10 seconden
API add-on200 requests/10 seconden250 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

ProbleemOorzaakOplossing
401 UnauthorizedVerlopen of ongeldig tokenRegenereer het private app-token of ververs het OAuth-token
Contact niet gesynchroniseerdOntbrekende e-maileigenschapHubSpot-contacten vereisen een e-mail voor Brevo-synchronisatie
Dubbele contactenGeen deduplicatieregelConfigureer merge-regels in HubSpot
Webhook niet ontvangenAbonnement niet actiefRegistreer webhook-subscriptions opnieuw
Eigenschap niet gemaptCustom property niet aangemaaktMaak de eigenschap eerst aan in HubSpot

Debugmodus

Zet uitgebreide logging aan:

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

Verbinding testen

Terminal window
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

Subscribe to updates

developer-docs

Drop your email or phone number — we'll send you what matters next.

AI-assistent

Hallo! Stel me vragen over de documentatie.

Start gratis met Brevo