HubSpot Connector
HubSpot Connector
Verbinde dein HubSpot-CRM über Tajo mit Brevo für bidirektionale Kontaktsynchronisierung, Deal-Tracking, Engagement-Daten und eine einheitliche Marketingautomatisierung über beide Plattformen hinweg.
Überblick
| Eigenschaft | Wert |
|---|---|
| Plattform | HubSpot |
| Kategorie | CRM |
| Einrichtungsaufwand | Mittel |
| Offizielle Integration | Ja |
| Synchronisierte Daten | Kontakte, Unternehmen, Deals, Tickets, Events |
| API-Basis-URL | https://api.hubapi.com |
Funktionen
- Bidirektionale Kontaktsynchronisierung - Halte Kontakte zwischen HubSpot und Brevo in Echtzeit synchron
- Deal-Pipeline-Tracking - Synchronisiere Deal-Phasen und -Werte für eine umsatzbasierte Segmentierung
- Unternehmensdaten-Sync - Verknüpfe Kontakte mit Unternehmensdatensätzen und firmografischen Daten
- Ticket-Integration - Verfolge Support-Tickets für das Customer-Health-Scoring
- Engagement-Tracking - Synchronisiere E-Mail-Öffnungen, Klicks, Meetings, Anrufe und Notizen
- Unterstützung benutzerdefinierter Objekte - Ordne benutzerdefinierte HubSpot-Objekte Brevo-Attributen zu
- Workflow-Trigger - Nutze Änderungen der HubSpot-Lifecycle-Phasen, um Brevo-Automatisierungen auszulösen
- Webhook-Events - Echtzeitbenachrichtigungen bei Änderungen von CRM-Daten
Voraussetzungen
Bevor du beginnst, stelle sicher, dass du Folgendes hast:
- Ein HubSpot-Konto (Free, Starter, Professional oder Enterprise)
- Eine private HubSpot-App oder OAuth-App mit den erforderlichen Berechtigungen
- Ein Brevo-Konto mit API-Zugriff
- Ein Tajo-Konto
Authentifizierung
Zugriffstoken für private Apps (Empfohlen)
Erstelle eine private App in HubSpot für den direkten API-Zugriff mit granularer Berechtigungssteuerung.
- Gehe zu HubSpot-Einstellungen > Integrationen > Private Apps
- Erstelle eine neue private App
- Konfiguriere die erforderlichen Berechtigungen
- Kopiere das Zugriffstoken
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
Nutze OAuth 2.0 für Integrationen mit mehreren Konten, die eine Autorisierung durch Nutzer:innen erfordern.
# Authorization URLhttps://app.hubspot.com/oauth/authorize?client_id={client_id}&scope=crm.objects.contacts.read&redirect_uri={redirect_uri}Erforderliche Berechtigungen
crm.objects.contacts.readcrm.objects.contacts.writecrm.objects.companies.readcrm.objects.deals.readcrm.objects.deals.writecrm.objects.custom.readcrm.schemas.custom.readKonfiguration
Grundeinrichtung
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: 12Feldzuordnung
Ordne HubSpot-Eigenschaften den Brevo-Kontaktattributen zu:
Standardzuordnungen
| Parameter | Type | Description |
|---|---|---|
email required | string | E-Mail des Kontakts (primäre Kennung) |
firstname optional | string | Wird dem FIRSTNAME-Attribut in Brevo zugeordnet |
lastname optional | string | Wird dem LASTNAME-Attribut in Brevo zugeordnet |
phone optional | string | Wird dem SMS-Attribut für WhatsApp/SMS zugeordnet |
company optional | string | Name des zugeordneten Unternehmens |
lifecyclestage optional | string | HubSpot-Lifecycle-Phase (subscriber, lead, MQL, SQL, customer) |
hs_lead_status optional | string | Status der Lead-Qualifizierung |
hubspot_owner_id optional | string | ID des zugewiesenen Vertriebsverantwortlichen |
Zuordnung benutzerdefinierter Eigenschaften
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-Endpunkte
CRM-Objekte
| Methode | Endpunkt | Beschreibung |
|---|---|---|
GET | /crm/v3/objects/contacts | Kontakte auflisten |
POST | /crm/v3/objects/contacts | Einen Kontakt erstellen |
PATCH | /crm/v3/objects/contacts/{id} | Einen Kontakt aktualisieren |
GET | /crm/v3/objects/companies | Unternehmen auflisten |
GET | /crm/v3/objects/deals | Deals auflisten |
POST | /crm/v3/objects/deals | Einen Deal erstellen |
GET | /crm/v3/objects/tickets | Tickets auflisten |
Verknüpfungen
| Methode | Endpunkt | Beschreibung |
|---|---|---|
GET | /crm/v4/objects/{objectType}/{objectId}/associations/{toObjectType} | Verknüpfungen abrufen |
PUT | /crm/v4/objects/{objectType}/{objectId}/associations/{toObjectType}/{toObjectId} | Verknüpfung erstellen |
Engagements
| Methode | Endpunkt | Beschreibung |
|---|---|---|
GET | /crm/v3/objects/calls | Anruf-Engagements auflisten |
GET | /crm/v3/objects/emails | E-Mail-Engagements auflisten |
GET | /crm/v3/objects/meetings | Meetings auflisten |
GET | /crm/v3/objects/notes | Notizen auflisten |
GET | /crm/v3/objects/tasks | Aufgaben auflisten |
Events
Kontakt-Events
| Event | Auslöser | Anwendungsfall |
|---|---|---|
contact.creation | Neuer Kontakt erstellt | Trigger für Willkommens-Flow |
contact.propertyChange | Kontakteigenschaft aktualisiert | Attribut-Synchronisierung |
contact.merge | Kontakte zusammengeführt | Verarbeitung von Dubletten |
contact.deletion | Kontakt gelöscht | Bereinigung in Brevo |
Deal-Events
| Event | Auslöser | Anwendungsfall |
|---|---|---|
deal.creation | Neuer Deal erstellt | Vertriebsbenachrichtigung |
deal.propertyChange | Deal-Phase geändert | Pipeline-Automatisierung |
deal.deletion | Deal entfernt | Umsatzreporting |
Unternehmens-Events
| Event | Auslöser | Anwendungsfall |
|---|---|---|
company.creation | Neues Unternehmen hinzugefügt | Account-based Marketing |
company.propertyChange | Unternehmensdaten aktualisiert | Firmografische Synchronisierung |
Code-Beispiele
Connector initialisieren
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});Kontaktsynchronisierung ausführen
// 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 verarbeiten
// 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');});Ratenbegrenzungen
HubSpot wendet Ratenbegrenzungen pro privater App oder OAuth-App an:
| Plan | Ratenbegrenzung | Burst-Limit |
|---|---|---|
| Free/Starter | 100 Anfragen/10 Sekunden | 150 Anfragen/10 Sekunden |
| Professional | 150 Anfragen/10 Sekunden | 200 Anfragen/10 Sekunden |
| Enterprise | 200 Anfragen/10 Sekunden | 250 Anfragen/10 Sekunden |
| API-Add-on | 200 Anfragen/10 Sekunden | 250 Anfragen/10 Sekunden |
Weitere Begrenzungen:
- Such-API: 5 Anfragen/Sekunde pro App
- Batch-Operationen: 100 Datensätze pro Batch-Anfrage
- Tageslimit: 500.000 Anfragen/Tag (OAuth-Apps)
Umgang mit Ratenbegrenzungen
HubSpot gibt eine 429 Too Many Requests-Antwort zurück, wenn die Limits überschritten werden. Verwende exponentielles Backoff und überwache die X-HubSpot-RateLimit-*-Header.
Fehlerbehebung
Häufige Probleme
| Problem | Ursache | Lösung |
|---|---|---|
| 401 Unauthorized | Abgelaufenes oder ungültiges Token | Token der privaten App erneuern oder OAuth-Token aktualisieren |
| Kontakt nicht synchronisiert | Fehlende E-Mail-Eigenschaft | HubSpot-Kontakte benötigen eine E-Mail für die Brevo-Synchronisierung |
| Doppelte Kontakte | Keine Deduplizierungsregel | Merge-Regeln in HubSpot konfigurieren |
| Webhook nicht empfangen | Abonnement nicht aktiv | Webhook-Abonnements neu registrieren |
| Eigenschaft nicht zugeordnet | Benutzerdefinierte Eigenschaft nicht erstellt | Eigenschaft zuerst in HubSpot anlegen |
Debug-Modus
Ausführliches Logging aktivieren:
connectors: hubspot: debug: true log_level: verbose log_webhooks: trueVerbindung testen
tajo connectors test hubspot# ✓ API connection successful# ✓ Contacts readable# ✓ Companies readable# ✓ Deals readable# ✓ Webhooks registeredBest Practices
- Private Apps gegenüber API-Keys bevorzugen - API-Keys sind veraltet; nutze private Apps für bessere Sicherheit
- Bidirektionale Synchronisierung sorgfältig umsetzen - Vermeide Endlosschleifen, indem du die Synchronisationsquelle nachverfolgst
- Lifecycle-Phasen zuordnen - Nutze HubSpot-Lifecycle-Phasen zur Segmentierung von Kontakten in Brevo
- API-Anfragen bündeln - Nutze Batch-Endpunkte für Massenoperationen, um innerhalb der Ratenbegrenzungen zu bleiben
- Webhook-Zustellung überwachen - Richte Wiederholungslogik und Dead-Letter-Handling ein
- Inkrementelle Synchronisierung nutzen - Synchronisiere nur geänderte Datensätze über die Eigenschaft
lastmodifieddate
Sicherheit
- Zugriffstoken für private Apps - Scope-basierte Zugriffstoken mit granularen Berechtigungen
- OAuth 2.0 - Branchenstandard-Autorisierung mit Refresh-Token-Rotation
- Webhook-Signaturen - HMAC-basierte Signaturprüfung (v3)
- TLS-Verschlüsselung - Die gesamte API-Kommunikation wird bei der Übertragung verschlüsselt
- Eingeschränkte Berechtigungen - Zugriff mit minimalem Scope pro Integration