---
title: "HubSpot Connector"
description: "Vollständiger Leitfaden zur HubSpot-CRM-Integration für die Synchronisierung von Kontakten, Unternehmen, Deals, Tickets und Marketingdaten mit Brevo über Tajo."
url: https://tajo.io/de/docs/connectors/crm/hubspot/
markdown: https://tajo.io/de/docs/connectors/crm/hubspot.md
lang: de-DE
robots: noindex
---

Beantrage frühzeitigen Zugang

Gib deinen Vornamen und deine geschäftliche E-Mail-Adresse ein. Wir senden dir einen Link, mit dem du deine Anfrage für den Tajo-Zugang bestätigst.

# HubSpot Connector

Connector-Status: In Arbeit Im Aufbau. Noch nicht verifiziert.

| Quellfeld | Zielfeld | Beispielwert |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

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:

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

```bash
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.

```bash
# 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

```yaml
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

```yaml
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

| 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

```javascript
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

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

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

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

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

### Verbindung testen

```bash
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

- [HubSpot API-Dokumentation](https://developers.hubspot.com/docs/api/overview)
- [HubSpot-Authentifizierungsleitfaden](https://developers.hubspot.com/docs/api/working-with-oauth)
- [Salesforce Connector](https://tajo.io/de/docs/connectors/crm/salesforce)
- [Customer-Sync-Skill](https://tajo.io/de/docs/skills/data-sync/customer-sync)
- [Brevo Contacts API](https://tajo.io/de/docs/contact-management)
