Konektor HubSpot
Status konektor: Dalam pengerjaan Sedang dibangun. Belum terverifikasi.
Ilustrasi · data contoh
Contoh sinkronisasi
Sumber
HubSpot
Status konektor: Dalam pengerjaan
Tujuan
Alat Anda yang lain
Status konektor: Alat khusus
Pemetaan field
| Field sumber | Field tujuan | Nilai contoh |
|---|---|---|
record.id | source_id | record_1042 |
record.updated_at | updated_at | 2026-10-18T08:00:00Z |
record.value | value | sample_value |
- Susun draf
- Tinjau satu data
- Setujui versi ini
Status berlaku untuk masing-masing konektor dan tidak menjamin sinkronisasi ini siap. Field ini hanya ilustrasi. Periksa skema dan izin sebenarnya sebelum sinkronisasi berjalan.
Hubungkan HubSpot CRM Anda ke Brevo melalui Tajo untuk sinkronisasi kontak dua arah, pelacakan deal, data engagement, dan otomatisasi marketing terpadu di kedua platform.
Ikhtisar
| Properti | Nilai |
|---|---|
| Platform | HubSpot |
| Kategori | CRM |
| Kompleksitas setup | Sedang |
| Integrasi resmi | Tidak |
| Data yang disinkronkan | Kontak, Perusahaan, Deal, Tiket, Event |
| API Base URL | https://api.hubapi.com |
Fitur
- Sinkronisasi kontak dua arah - Jaga kontak tetap sinkron antara HubSpot dan Brevo secara real-time
- Pelacakan pipeline deal - Sinkronkan tahap dan nilai deal untuk segmentasi berbasis pendapatan
- Sinkronisasi data perusahaan - Kaitkan kontak dengan record perusahaan dan data firmografis
- Integrasi tiket - Lacak tiket support untuk penilaian kesehatan pelanggan
- Pelacakan engagement - Sinkronkan email dibuka, klik, meeting, panggilan, dan catatan
- Dukungan custom object - Petakan custom object HubSpot ke atribut Brevo
- Pemicu workflow - Gunakan perubahan lifecycle stage HubSpot untuk memicu otomatisasi Brevo
- Event webhook - Notifikasi real-time untuk setiap perubahan data CRM
Prasyarat
Sebelum memulai, pastikan Anda memiliki:
- Akun HubSpot (Free, Starter, Professional, atau Enterprise)
- Private app atau OAuth app HubSpot dengan scope yang diperlukan
- Akun Brevo dengan akses API
- Akun Tajo
Autentikasi
Access token private app (direkomendasikan)
Buat private app di HubSpot untuk akses API langsung dengan kontrol scope yang granular.
- Buka HubSpot Settings > Integrations > Private Apps
- Buat private app baru
- Konfigurasikan scope yang diperlukan
- Salin access token
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
Gunakan OAuth 2.0 untuk integrasi multi-akun yang membutuhkan otorisasi pengguna.
# Authorization URLhttps://app.hubspot.com/oauth/authorize?client_id={client_id}&scope=crm.objects.contacts.read&redirect_uri={redirect_uri}Scope yang diperlukan
crm.objects.contacts.readcrm.objects.contacts.writecrm.objects.companies.readcrm.objects.deals.readcrm.objects.deals.writecrm.objects.custom.readcrm.schemas.custom.readKonfigurasi
Setup dasar
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: 12Pemetaan field
Petakan properti HubSpot ke atribut kontak Brevo:
Pemetaan Bawaan
| Parameter | Type | Description |
|---|---|---|
email required | string | Email kontak (pengenal utama) |
firstname optional | string | Dipetakan ke atribut FIRSTNAME di Brevo |
lastname optional | string | Dipetakan ke atribut LASTNAME di Brevo |
phone optional | string | Dipetakan ke atribut SMS untuk WhatsApp/SMS |
company optional | string | Nama perusahaan yang terkait |
lifecyclestage optional | string | Lifecycle stage HubSpot (subscriber, lead, MQL, SQL, customer) |
hs_lead_status optional | string | Status kualifikasi lead |
hubspot_owner_id optional | string | ID sales owner yang ditugaskan |
Pemetaan properti kustom
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: SEGMENTEndpoint API
Objek CRM
| Method | Endpoint | Deskripsi |
|---|---|---|
GET | /crm/v3/objects/contacts | Menampilkan daftar kontak |
POST | /crm/v3/objects/contacts | Membuat kontak |
PATCH | /crm/v3/objects/contacts/{id} | Memperbarui kontak |
GET | /crm/v3/objects/companies | Menampilkan daftar perusahaan |
GET | /crm/v3/objects/deals | Menampilkan daftar deal |
POST | /crm/v3/objects/deals | Membuat deal |
GET | /crm/v3/objects/tickets | Menampilkan daftar tiket |
Asosiasi
| Method | Endpoint | Deskripsi |
|---|---|---|
GET | /crm/v4/objects/{objectType}/{objectId}/associations/{toObjectType} | Mengambil asosiasi |
PUT | /crm/v4/objects/{objectType}/{objectId}/associations/{toObjectType}/{toObjectId} | Membuat asosiasi |
Engagement
| Method | Endpoint | Deskripsi |
|---|---|---|
GET | /crm/v3/objects/calls | Menampilkan daftar engagement panggilan |
GET | /crm/v3/objects/emails | Menampilkan daftar engagement email |
GET | /crm/v3/objects/meetings | Menampilkan daftar meeting |
GET | /crm/v3/objects/notes | Menampilkan daftar catatan |
GET | /crm/v3/objects/tasks | Menampilkan daftar tugas |
Event
Event kontak
| Event | Pemicu | Kasus penggunaan |
|---|---|---|
contact.creation | Kontak baru dibuat | Pemicu alur welcome |
contact.propertyChange | Properti kontak diperbarui | Sinkronisasi atribut |
contact.merge | Kontak digabungkan | Penanganan deduplikasi |
contact.deletion | Kontak dihapus | Pembersihan di Brevo |
Event deal
| Event | Pemicu | Kasus penggunaan |
|---|---|---|
deal.creation | Deal baru dibuat | Notifikasi sales |
deal.propertyChange | Tahap deal berubah | Otomatisasi pipeline |
deal.deletion | Deal dihapus | Pelaporan pendapatan |
Event perusahaan
| Event | Pemicu | Kasus penggunaan |
|---|---|---|
company.creation | Perusahaan baru ditambahkan | Account-based marketing |
company.propertyChange | Data perusahaan diperbarui | Sinkronisasi firmografis |
Contoh kode
Inisialisasi konektor
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});Menjalankan sinkronisasi kontak
// 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// }Menangani event webhook
// 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');});Rate limit
HubSpot menerapkan rate limit per private app atau OAuth app:
| Paket | Rate limit | Burst limit |
|---|---|---|
| Free/Starter | 100 request/10 detik | 150 request/10 detik |
| Professional | 150 request/10 detik | 200 request/10 detik |
| Enterprise | 200 request/10 detik | 250 request/10 detik |
| Add-on API | 200 request/10 detik | 250 request/10 detik |
Batasan tambahan:
- Search API: 5 request/detik per app
- Operasi batch: 100 record per request batch
- Batas harian: 500.000 request/hari (OAuth app)
Penanganan rate limit
HubSpot mengembalikan respons 429 Too Many Requests saat batas terlampaui. Gunakan exponential backoff dan pantau header X-HubSpot-RateLimit-*.
Pemecahan masalah
Masalah umum
| Masalah | Penyebab | Solusi |
|---|---|---|
| 401 Unauthorized | Token kedaluwarsa atau tidak valid | Buat ulang token private app atau segarkan token OAuth |
| Kontak tidak tersinkronisasi | Properti email tidak ada | Kontak HubSpot memerlukan email untuk sinkronisasi ke Brevo |
| Kontak duplikat | Tidak ada aturan deduplikasi | Konfigurasikan aturan merge di HubSpot |
| Webhook tidak diterima | Langganan tidak aktif | Daftarkan ulang langganan webhook |
| Properti tidak terpetakan | Properti kustom belum dibuat | Buat properti tersebut di HubSpot terlebih dahulu |
Mode debug
Aktifkan logging terperinci:
connectors: hubspot: debug: true log_level: verbose log_webhooks: trueUji koneksi
tajo connectors test hubspot# ✓ API connection successful# ✓ Contacts readable# ✓ Companies readable# ✓ Deals readable# ✓ Webhooks registeredPraktik terbaik
- Gunakan private app, bukan API key - API key sudah tidak digunakan lagi; gunakan private app untuk keamanan yang lebih baik
- Terapkan sinkronisasi dua arah dengan hati-hati - Hindari loop tak terbatas dengan melacak sumber sinkronisasi
- Petakan lifecycle stage - Gunakan lifecycle stage HubSpot untuk melakukan segmentasi kontak di Brevo
- Kelompokkan request API - Gunakan endpoint batch untuk operasi massal agar tetap berada dalam rate limit
- Pantau pengiriman webhook - Siapkan logika retry dan penanganan dead letter
- Gunakan sinkronisasi inkremental - Sinkronkan hanya record yang berubah menggunakan properti
lastmodifieddate
Keamanan
- Token private app - Access token dengan scope dan izin yang granular
- OAuth 2.0 - Otorisasi standar industri dengan rotasi refresh token
- Tanda tangan webhook - Verifikasi tanda tangan berbasis HMAC (v3)
- Enkripsi TLS - Seluruh komunikasi API terenkripsi saat transit
- Izin ber-scope - Akses dengan scope minimum yang diperlukan per integrasi