---
title: "HubSpot Connector"
description: "Komplet guide til HubSpot CRM-integration til synkronisering af kontakter, virksomheder, aftaler, tickets og marketingdata med Brevo via Tajo."
url: https://tajo.io/dk/docs/connectors/crm/hubspot/
markdown: https://tajo.io/dk/docs/connectors/crm/hubspot.md
lang: da-DK
robots: noindex
---

Bed om tidlig adgang til Tajo

Indtast dit fornavn og din arbejds-e-mailadresse. Vi sender dig et link til at bekræfte din anmodning om adgang til Tajo.

# HubSpot Connector

Connectorstatus: Under udvikling Under opbygning. Endnu ikke verificeret.

| Kildefelt | Destinationsfelt | Eksempelværdi |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

Forbind dit HubSpot CRM med Brevo via Tajo for tovejs-kontaktsynkronisering, aftalesporing, engagementsdata og samlet marketingautomatisering på tværs af begge platforme.

## Oversigt

| Egenskab | Værdi |
| --- | --- |
| **Platform** | HubSpot |
| **Kategori** | CRM |
| **Opsætningskompleksitet** | Medium |
| **Officiel integration** | Nej |
| **Synkroniserede data** | Kontakter, virksomheder, aftaler, tickets, hændelser |
| **API-base-URL** | `https://api.hubapi.com` |

## Funktioner

- **Tovejs-kontaktsynkronisering** - Hold kontakter synkroniserede mellem HubSpot og Brevo i realtid
- **Sporing af aftalepipeline** - Synkronisér aftalestadier og -værdier til omsætningsbaseret segmentering
- **Synkronisering af virksomhedsdata** - Knyt kontakter til virksomhedsposter og firmografiske data
- **Ticket-integration** - Spor supporttickets til kundesundhedsscoring
- **Engagementssporing** - Synkronisér e-mailåbninger, klik, møder, opkald og noter
- **Understøttelse af brugerdefinerede objekter** - Kortlæg HubSpot-brugerdefinerede objekter til Brevo-attributter
- **Workflow-triggere** - Brug ændringer i HubSpot-livscyklusstadier til at udløse Brevo-automatiseringer
- **Webhook-hændelser** - Notifikationer i realtid ved CRM-dataændringer

## Forudsætninger

Før du begynder, skal du sikre dig, at du har:

1. En HubSpot-konto (Free, Starter, Professional eller Enterprise)
2. En HubSpot privat app eller OAuth-app med de nødvendige scopes
3. En Brevo-konto med API-adgang
4. En Tajo-konto

## Autentifikation

### Privat app-adgangstoken (anbefalet)

Opret en privat app i HubSpot for direkte API-adgang med granulær scope-kontrol.

1. Gå til HubSpot Settings > Integrations > Private Apps
2. Opret en ny privat app
3. Konfigurér de nødvendige scopes
4. Kopiér adgangstokenet

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

Brug OAuth 2.0 til integrationer med flere konti, der kræver brugerautorisation.

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

#### Påkrævede scopes

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

### Grundlæggende opsætning

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

### Feltmapping

Kortlæg HubSpot-egenskaber til Brevo-kontaktattributter:

#### Standardmappinger

| Parameter | Type | Description |
| --- | --- | --- |
| `email` required | string | Kontakt-e-mail (primær identifikator) |
| `firstname` optional | string | Kortlægges til FIRSTNAME-attribut i Brevo |
| `lastname` optional | string | Kortlægges til LASTNAME-attribut i Brevo |
| `phone` optional | string | Kortlægges til SMS-attribut for WhatsApp/SMS |
| `company` optional | string | Tilknyttet virksomhedsnavn |
| `lifecyclestage` optional | string | HubSpot-livscyklusstadie (subscriber, lead, MQL, SQL, customer) |
| `hs_lead_status` optional | string | Lead-kvalificeringsstatus |
| `hubspot_owner_id` optional | string | ID på tildelt salgsejer |

#### Mapping af brugerdefinerede egenskaber

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

### CRM-objekter

| Metode | Endpoint | Beskrivelse |
| --- | --- | --- |
| `GET` | `/crm/v3/objects/contacts` | Vis kontakter |
| `POST` | `/crm/v3/objects/contacts` | Opret en kontakt |
| `PATCH` | `/crm/v3/objects/contacts/{id}` | Opdatér en kontakt |
| `GET` | `/crm/v3/objects/companies` | Vis virksomheder |
| `GET` | `/crm/v3/objects/deals` | Vis aftaler |
| `POST` | `/crm/v3/objects/deals` | Opret en aftale |
| `GET` | `/crm/v3/objects/tickets` | Vis tickets |

### Associationer

| Metode | Endpoint | Beskrivelse |
| --- | --- | --- |
| `GET` | `/crm/v4/objects/{objectType}/{objectId}/associations/{toObjectType}` | Hent associationer |
| `PUT` | `/crm/v4/objects/{objectType}/{objectId}/associations/{toObjectType}/{toObjectId}` | Opret association |

### Engagementer

| Metode | Endpoint | Beskrivelse |
| --- | --- | --- |
| `GET` | `/crm/v3/objects/calls` | Vis opkaldsengagementer |
| `GET` | `/crm/v3/objects/emails` | Vis e-mailengagementer |
| `GET` | `/crm/v3/objects/meetings` | Vis møder |
| `GET` | `/crm/v3/objects/notes` | Vis noter |
| `GET` | `/crm/v3/objects/tasks` | Vis opgaver |

## Hændelser

### Kontakthændelser

| Hændelse | Trigger | Anvendelse |
| --- | --- | --- |
| `contact.creation` | Ny kontakt oprettet | Trigger for velkomstflow |
| `contact.propertyChange` | Kontaktegenskab opdateret | Attributsynkronisering |
| `contact.merge` | Kontakter flettet | Håndtering af deduplikering |
| `contact.deletion` | Kontakt slettet | Oprydning i Brevo |

### Aftalehændelser

| Hændelse | Trigger | Anvendelse |
| --- | --- | --- |
| `deal.creation` | Ny aftale oprettet | Salgsnotifikation |
| `deal.propertyChange` | Aftalestadie ændret | Pipeline-automatisering |
| `deal.deletion` | Aftale fjernet | Omsætningsrapportering |

### Virksomhedshændelser

| Hændelse | Trigger | Anvendelse |
| --- | --- | --- |
| `company.creation` | Ny virksomhed tilføjet | Kontobaseret marketing |
| `company.propertyChange` | Virksomhedsdata opdateret | Firmografisk synkronisering |

## Kodeeksempler

### Initialisér connector

```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
});
```

### Kør kontaktsynkronisering

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

### Håndtér webhook-hændelser

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

## Rate limits

HubSpot anvender rate limits per privat app eller OAuth-app:

| Plan | Rate limit | Burst-limit |
| --- | --- | --- |
| Free/Starter | 100 anmodninger/10 sekunder | 150 anmodninger/10 sekunder |
| Professional | 150 anmodninger/10 sekunder | 200 anmodninger/10 sekunder |
| Enterprise | 200 anmodninger/10 sekunder | 250 anmodninger/10 sekunder |
| API-tilføjelse | 200 anmodninger/10 sekunder | 250 anmodninger/10 sekunder |

Yderligere grænser:

- **Search API**: 5 anmodninger/sekund pr. app
- **Batchoperationer**: 100 poster pr. batch-anmodning
- **Daglig grænse**: 500.000 anmodninger/dag (OAuth-apps)

Håndtering af rate limits

HubSpot returnerer et `429 Too Many Requests`-svar, når grænserne overskrides. Brug eksponentiel backoff og overvåg headerne `X-HubSpot-RateLimit-*`.

## Fejlfinding

### Almindelige problemer

| Problem | Årsag | Løsning |
| --- | --- | --- |
| 401 Unauthorized | Udløbet eller ugyldigt token | Regenerér token til privat app, eller opdatér OAuth-token |
| Kontakt ikke synkroniseret | Manglende e-mailegenskab | HubSpot-kontakter kræver en e-mail for Brevo-synkronisering |
| Duplikerede kontakter | Ingen deduplikeringsregel | Konfigurér fletteregler i HubSpot |
| Webhook ikke modtaget | Abonnement ikke aktivt | Genregistrér webhook-abonnementer |
| Egenskab ikke mappet | Brugerdefineret egenskab ikke oprettet | Opret først egenskaben i HubSpot |

### Debug-tilstand

Aktivér detaljeret logging:

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

### Testforbindelse

```bash
tajo connectors test hubspot
# ✓ API connection successful
# ✓ Contacts readable
# ✓ Companies readable
# ✓ Deals readable
# ✓ Webhooks registered
```

## Bedste praksis

1. **Brug private apps frem for API-nøgler** - API-nøgler er udfaset; brug private apps for bedre sikkerhed
2. **Implementér tovejssynkronisering omhyggeligt** - Undgå uendelige loops ved at spore synkroniseringskilden
3. **Kortlæg livscyklusstadier** - Brug HubSpot-livscyklusstadier til at segmentere kontakter i Brevo
4. **Batch API-anmodninger** - Brug batch-endpoints til masseoperationer for at holde dig inden for rate limits
5. **Overvåg webhook-levering** - Konfigurér retry-logik og dead letter-håndtering
6. **Brug inkrementel synkronisering** - Synkronisér kun ændrede poster ved hjælp af egenskaben `lastmodifieddate`

## Sikkerhed

- **Private app-tokens** - Scoped adgangstokens med granulære tilladelser
- **OAuth 2.0** - Industristandardautorisation med rotation af refresh-tokens
- **Webhook-signaturer** - HMAC-baseret signaturverifikation (v3)
- **TLS-kryptering** - Al API-kommunikation krypteres under overførsel
- **Scoped tilladelser** - Minimum nødvendig scope-adgang pr. integration

## Relaterede ressourcer

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