HubSpot-connector
HubSpot-connector
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 | Ja |
| 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:
- Een HubSpot-account (Free, Starter, Professional of Enterprise)
- Een HubSpot private app of OAuth app met de vereiste scopes
- Een Brevo-account met API-toegang
- Een Tajo-account
Authenticatie
Private App Access Token (aanbevolen)
Maak een private app in HubSpot voor directe API-toegang met granulaire scopecontrole.
- Ga naar HubSpot Settings > Integrations > Private Apps
- Maak een nieuwe private app
- Configureer de vereiste scopes
- Kopieer het access token
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.
# Authorization URLhttps://app.hubspot.com/oauth/authorize?client_id={client_id}&scope=crm.objects.contacts.read&redirect_uri={redirect_uri}Vereiste scopes
crm.objects.contacts.readcrm.objects.contacts.writecrm.objects.companies.readcrm.objects.deals.readcrm.objects.deals.writecrm.objects.custom.readcrm.schemas.custom.readConfiguratie
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: 12Veldmapping
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: SEGMENTAPI-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
import { TajoClient } from '@tajo/sdk';
const tajo = new TajoClient({ apiKey: process.env.TAJO_API_KEY, brevoApiKey: process.env.BREVO_API_KEY});
// Connect HubSpotawait tajo.connectors.connect('hubspot', { accessToken: process.env.HUBSPOT_ACCESS_TOKEN});Contactsynchronisatie uitvoeren
// Full bidirectional syncawait tajo.connectors.sync('hubspot', { type: 'full', resources: ['contacts', 'companies', 'deals'], direction: 'bidirectional', since: '2023-01-01'});
// Check sync statusconst 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 notificationsapp.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:
connectors: hubspot: debug: true log_level: verbose log_webhooks: trueVerbinding testen
tajo connectors test hubspot# ✓ API connection successful# ✓ Contacts readable# ✓ Companies readable# ✓ Deals readable# ✓ Webhooks registeredBest practices
- Gebruik private apps in plaats van API keys - API keys zijn deprecated; gebruik private apps voor betere beveiliging
- Implementeer bidirectionele synchronisatie zorgvuldig - Voorkom oneindige loops door de sync source bij te houden
- Map lifecyclefases - Gebruik HubSpot-lifecyclefases om contacten in Brevo te segmenteren
- Batch API-requests - Gebruik batch-endpoints voor bulkoperaties om binnen rate limits te blijven
- Monitor webhook-delivery - Zet retry-logica en dead letter-afhandeling op
- 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