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

EigenschaftWert
PlattformHubSpot
KategorieCRM
EinrichtungsaufwandMittel
Offizielle IntegrationJa
Synchronisierte DatenKontakte, Unternehmen, Deals, Tickets, Events
API-Basis-URLhttps://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:

  1. Ein HubSpot-Konto (Free, Starter, Professional oder Enterprise)
  2. Eine private HubSpot-App oder OAuth-App mit den erforderlichen Berechtigungen
  3. Ein Brevo-Konto mit API-Zugriff
  4. 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.

  1. Gehe zu HubSpot-Einstellungen > Integrationen > Private Apps
  2. Erstelle eine neue private App
  3. Konfiguriere die erforderlichen Berechtigungen
  4. Kopiere das Zugriffstoken
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

Nutze OAuth 2.0 für Integrationen mit mehreren Konten, die eine Autorisierung durch Nutzer:innen erfordern.

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

Erforderliche Berechtigungen

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

Konfiguration

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

Feldzuordnung

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

API-Endpunkte

CRM-Objekte

MethodeEndpunktBeschreibung
GET/crm/v3/objects/contactsKontakte auflisten
POST/crm/v3/objects/contactsEinen Kontakt erstellen
PATCH/crm/v3/objects/contacts/{id}Einen Kontakt aktualisieren
GET/crm/v3/objects/companiesUnternehmen auflisten
GET/crm/v3/objects/dealsDeals auflisten
POST/crm/v3/objects/dealsEinen Deal erstellen
GET/crm/v3/objects/ticketsTickets auflisten

Verknüpfungen

MethodeEndpunktBeschreibung
GET/crm/v4/objects/{objectType}/{objectId}/associations/{toObjectType}Verknüpfungen abrufen
PUT/crm/v4/objects/{objectType}/{objectId}/associations/{toObjectType}/{toObjectId}Verknüpfung erstellen

Engagements

MethodeEndpunktBeschreibung
GET/crm/v3/objects/callsAnruf-Engagements auflisten
GET/crm/v3/objects/emailsE-Mail-Engagements auflisten
GET/crm/v3/objects/meetingsMeetings auflisten
GET/crm/v3/objects/notesNotizen auflisten
GET/crm/v3/objects/tasksAufgaben auflisten

Events

Kontakt-Events

EventAuslöserAnwendungsfall
contact.creationNeuer Kontakt erstelltTrigger für Willkommens-Flow
contact.propertyChangeKontakteigenschaft aktualisiertAttribut-Synchronisierung
contact.mergeKontakte zusammengeführtVerarbeitung von Dubletten
contact.deletionKontakt gelöschtBereinigung in Brevo

Deal-Events

EventAuslöserAnwendungsfall
deal.creationNeuer Deal erstelltVertriebsbenachrichtigung
deal.propertyChangeDeal-Phase geändertPipeline-Automatisierung
deal.deletionDeal entferntUmsatzreporting

Unternehmens-Events

EventAuslöserAnwendungsfall
company.creationNeues Unternehmen hinzugefügtAccount-based Marketing
company.propertyChangeUnternehmensdaten aktualisiertFirmografische 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 HubSpot
await tajo.connectors.connect('hubspot', {
accessToken: process.env.HUBSPOT_ACCESS_TOKEN
});

Kontaktsynchronisierung ausführen

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

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

Ratenbegrenzungen

HubSpot wendet Ratenbegrenzungen pro privater App oder OAuth-App an:

PlanRatenbegrenzungBurst-Limit
Free/Starter100 Anfragen/10 Sekunden150 Anfragen/10 Sekunden
Professional150 Anfragen/10 Sekunden200 Anfragen/10 Sekunden
Enterprise200 Anfragen/10 Sekunden250 Anfragen/10 Sekunden
API-Add-on200 Anfragen/10 Sekunden250 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

ProblemUrsacheLösung
401 UnauthorizedAbgelaufenes oder ungültiges TokenToken der privaten App erneuern oder OAuth-Token aktualisieren
Kontakt nicht synchronisiertFehlende E-Mail-EigenschaftHubSpot-Kontakte benötigen eine E-Mail für die Brevo-Synchronisierung
Doppelte KontakteKeine DeduplizierungsregelMerge-Regeln in HubSpot konfigurieren
Webhook nicht empfangenAbonnement nicht aktivWebhook-Abonnements neu registrieren
Eigenschaft nicht zugeordnetBenutzerdefinierte Eigenschaft nicht erstelltEigenschaft zuerst in HubSpot anlegen

Debug-Modus

Ausführliches Logging aktivieren:

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

Verbindung testen

Terminal window
tajo connectors test hubspot
# ✓ API connection successful
# ✓ Contacts readable
# ✓ Companies readable
# ✓ Deals readable
# ✓ Webhooks registered

Best Practices

  1. Private Apps gegenüber API-Keys bevorzugen - API-Keys sind veraltet; nutze private Apps für bessere Sicherheit
  2. Bidirektionale Synchronisierung sorgfältig umsetzen - Vermeide Endlosschleifen, indem du die Synchronisationsquelle nachverfolgst
  3. Lifecycle-Phasen zuordnen - Nutze HubSpot-Lifecycle-Phasen zur Segmentierung von Kontakten in Brevo
  4. API-Anfragen bündeln - Nutze Batch-Endpunkte für Massenoperationen, um innerhalb der Ratenbegrenzungen zu bleiben
  5. Webhook-Zustellung überwachen - Richte Wiederholungslogik und Dead-Letter-Handling ein
  6. 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

Verwandte Ressourcen

Subscribe to updates

developer-docs

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

AI-Assistent

Hallo! Fragen Sie mich alles über die Dokumentation.

Kostenlos mit Brevo starten