HubSpot Connector
Connector-Status: In Arbeit Im Aufbau. Noch nicht verifiziert.
Illustration · Beispieldaten
Sync-Beispiel
Quelle
HubSpot
Connector-Status: In Arbeit
Ziel
Ihr anderes Tool
Connector-Status: Eigenes Tool
Feldzuordnung
| Quellfeld | Zielfeld | Beispielwert |
|---|---|---|
record.id | source_id | record_1042 |
record.updated_at | updated_at | 2026-10-18T08:00:00Z |
record.value | value | sample_value |
- Entwerfen
- Einen Datensatz prüfen
- Diese Version freigeben
Der Status gilt für einzelne Connectoren und garantiert nicht, dass dieser Sync bereit ist. Felder zur Veranschaulichung. Prüfen Sie vor dem Sync das tatsächliche Schema und die Berechtigungen.
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 | Nein |
| 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