
Інтеграція з API HubSpot для власних внутрішніх інструментів: Посібник Node + Python (2026)
Все ще шукаєте ключ API HubSpot, щоб налаштувати свою інтеграцію з API HubSpot? Припиніть пошуки. HubSpot припинив підтримку статичних ключів API 30 листопада 2022 року, і поточний Node SDK (@hubspot/api-client, версія 14) все одно їх не прийме. Правильним обліковим записом для внутрішнього інструменту, що працює з одним акаунтом, є токен доступу приватного додатка. У цьому посібнику ми побудуємо реальну синхронізацію даних між HubSpot та вашим внутрішнім інструментом як на Node, так і на Python — від вашого першого запиту create contact до вебхука з перевіркою підпису.
Коротка відповідь: Інтеграція з API HubSpot дозволяє власному внутрішньому інструменту читати та записувати дані CRM через REST API v3 від HubSpot. Для внутрішнього інструменту, прив’язаного до одного акаунта, використовуйте автентифікацію за допомогою токена доступу приватного додатка (HubSpot припинив підтримку ключів API у 2022 році), а зміни синхронізуйте в реальному часі через вебхуки замість постійного опитування сервера.
Ось що ми створимо:
- Автентифікацію через токен приватного додатка та ваш перший запит
create contactна Node та Python - Обробник вебхуків, який перевіряє заголовок
X-HubSpot-Signature-v3перед тим, як довіряти отриманим даним - Безпечну щодо помилок 429 пакетну синхронізацію (по 100 записів) у внутрішню систему тікетів або ERP
Як працює інтеграція з API HubSpot для власних внутрішніх інструментів?
Інтеграція з API HubSpot з’єднує ваш власний внутрішній інструмент (систему тікетів, ERP, панель білінгу або клієнтський портал) з CRM HubSpot через її REST API v3. Ваш інструмент читає та записує об’єкти CRM (контакти, угоди, компанії або кастомні об’єкти) через HTTPS, використовуючи токен доступу приватного додатка, а зміни в реальному часі надходять назад через вебхуки.
Уявляйте CRM HubSpot як базу даних, з якою ви спілкуєтеся через HTTP. Кожен запис є об’єктом із певним типом та ID. Інтеграція, яку ви будуєте (hubspot crm api integration), виконує дві задачі: вона надсилає дані в HubSpot (створює контакт, коли відкривається тікет) і витягує дані з нього (читає угоду, коли ваша внутрішня панель відображає інформацію).
Синхронізація може відбуватися в одному з двох напрямків. Одностороння синхронізація копіює зміни з HubSpot у ваш інструмент або навпаки. Двостороння синхронізація робить і те, й інше, але потребує захисту від циклічних повторень, про що ми поговоримо пізніше. Замість того щоб щохвилини запитувати HubSpot «чи є щось нове?» (опитування), ви реєструєте вебхук, щоб HubSpot повідомляв вам миттєво, як тільки зміниться запис.
Якщо ви волієте повністю контролювати свої дані, а не інтегрувати хмарну CRM, самостійне розміщення CRM з відкритим кодом є альтернативним шляхом, який варто розглянути перед тим, як робити остаточний вибір. Але якщо HubSpot уже є вашим єдиним джерелом правди, API — це спосіб, яким усі інші системи спілкуються з ним.
Для внутрішнього інструменту, прив’язаного до одного акаунта, вам не потрібні OAuth або публікація в маркетплейсі додатків. Токен приватного додатка та вебхук — це вся необхідна інтеграція.
Автентифікація у 2026 році: чому ключа API HubSpot більше не існує
Для автентифікації в API HubSpot у внутрішньому інструменті для одного акаунта використовуйте токен доступу приватного додатка. Це статичний bearer-токен, який ви генеруєте один раз у своєму акаунті HubSpot, обмежуючи його правами доступу саме до тих об’єктів, з якими працює ваш інструмент. Тут немає процесу оновлення токена і немає терміну дії. OAuth існує для публічних додатків, що працюють з багатьма акаунтами, а не для панелі керування, якою користується ваша операційна команда всередині компанії.
Токен приватного додатка проти застарілого ключа API
Ось підводний камінь, на який натикається половина розробників, які знаходять цю статтю. HubSpot припинив підтримку ключів API 30 листопада 2022 року, і зараз вони повністю непідтримувані. Автодоповнення все ще підказує «hubspot api key», тому що звичка ще не зникла, але ключа, який можна було б отримати, просто не існує. Натомість використовуйте приватний додаток HubSpot: створіть його в налаштуваннях, надайте необхідні області видимості (scopes) і скопіюйте токен доступу з вкладки Auth. Огляд приватних додатків HubSpot охоплює всі етапи налаштування.
| Метод | Варіант використання | Чи спливає чи потребує оновлення? | Найкраще для |
|---|---|---|---|
| Ключ API | Видалено | Припинено підтримку у листопаді 2022 | Нічого, метод застарів |
| Токен доступу приватного додатка | Внутрішній інструмент для одного акаунта | Ні, статичний, без оновлення | Ваш внутрішній інструмент, стандартний вибір тут |
| OAuth 2.0 | Публічний додаток або додаток для кількох акаунтів | Так, токени спливають приблизно за 6 годин і потребують оновлення | Додатки, які ви публікуєте для порталів інших компаній |
| Service Key (публічна бета-версія, лютий 2026) | Обліковий запис, облікові дані лише для даних | Область видимості на рівні акаунта, згідно з документацією | Серверні завдання, що працюють лише з даними, досі в бета-версії |
Два правила щодо самого токена. Надавайте мінімальні необхідні права: якщо ваш інструмент лише читає угоди та записує контакти, запросіть crm.objects.contacts.write та crm.objects.deals.read, нічого зайвого. І зберігайте токен у змінній середовища або менеджері секретів, передаючи його в заголовку Authorization: Bearer. Ніколи не жорстко кодуйте його і ніколи не надсилайте в браузер.
Висновок простий. Для внутрішнього інструменту використовуйте токен доступу приватного додатка. Звертайтеся до OAuth лише тоді, коли цей інструмент згодом стане публічним додатком для кількох акаунтів, який інші компанії встановлюватимуть у свої портали.
Ваш перший запит до API HubSpot: створення контакту в Node та Python
Канонічним першим запитом є create contact, і офіційні SDK роблять це за кілька рядків коду. Встановіть клієнт, ініціалізуйте його своїм токеном приватного додатка зі змінної середовища, потім створіть контакт і прочитайте дані угоди. Це той самий шаблон, який ви будете використовувати для компаній, тікетів і запитів до hubspot custom objects api, змінюватиметься лише тип об’єкта.
Ось версія для Node з використанням @hubspot/api-client (v14):
// npm i @hubspot/api-client (v14.x)
import { Client } from "@hubspot/api-client";
// Private app token from a secret manager or env var, never hard-coded
const hubspot = new Client({ accessToken: process.env.HUBSPOT_PRIVATE_APP_TOKEN });
// Create a contact
const { id } = await hubspot.crm.contacts.basicApi.create({
properties: {
email: "[email protected]",
firstname: "Ada",
lastname: "Lovelace",
lifecyclestage: "lead",
},
associations: [],
});
console.log("Created contact", id);
// Read a deal by ID
const deal = await hubspot.crm.deals.basicApi.getById(
"1234567890",
["dealname", "amount", "dealstage"],
);
console.log(deal.properties.dealname, deal.properties.amount);І те саме на Python з використанням hubspot-api-client (v12):
# pip install hubspot-api-client (v12.x)
import os
from hubspot import HubSpot
from hubspot.crm.contacts import SimplePublicObjectInputForCreate
# Private app token from the environment, not source control
client = HubSpot(access_token=os.environ["HUBSPOT_PRIVATE_APP_TOKEN"])
# Create a contact
contact = client.crm.contacts.basic_api.create(
simple_public_object_input_for_create=SimplePublicObjectInputForCreate(
properties={
"email": "[email protected]",
"firstname": "Ada",
"lastname": "Lovelace",
"lifecyclestage": "lead",
}
)
)
print("Created contact", contact.id)
# Read a deal by ID
deal = client.crm.deals.basic_api.get_by_id(
deal_id="1234567890",
properties=["dealname", "amount", "dealstage"],
)
print(deal.properties["dealname"], deal.properties["amount"])Порада професіонала: тестуйте в пісочницю розробника HubSpot, а не одразу в продакшені. Помилковий запит на створення в продакшені залишить справжні сміттєві записи, які вашій команді продажів доведеться очищати. Токен, області видимості та модель об’єктів працюють ідентично в пісочниці.
Як синхронізувати HubSpot із внутрішнім інструментом у реальному часі?
Використовуйте вебхуки, а не опитування. Зареєструйте підписку на вебхук у своєму приватному додатку для потрібного об’єкта та події (наприклад, deal.propertyChange), вкажіть HTTPS-ендпоінт, який ви розміщуєте, і HubSpot надішле вам невеликий масив JSON миттєво, як тільки станеться відповідна зміна. Опитування має сенс лише тоді, коли для потрібних вам подій не існує підписки.
Перевага полягає в ефективності. Опитування запитує «чи є щось нове?» щохвилини і витрачає ваш ліміт запитів; вебхук просто повідомляє вас у момент зміни угоди. Ця різниця важлива при масштабуванні, і вебхуки вже стали мейнстрімом, а не екзотикою: у звіті Postman State of the API Report 2025, основаному на опитуванні понад 5700 розробників, виявлено, що приблизно половина команд покладається на них.
Зареєструйте підписку на вкладці Webhooks вашого приватного додатка, встановіть цільову URL-адресу та виберіть події. HubSpot надсилає масив об’єктів подій, кожен із яких містить subscriptionType, objectId та інформацію про те, що змінилося. Ось заглушка обробника на Node з Express:
import express from "express";
const app = express();
// Capture the raw body: you need the exact bytes to validate the signature next
app.use(express.json({
verify: (req, _res, buf) => { req.rawBody = buf.toString("utf8"); },
}));
// HubSpot POSTs an array of events to this URL
app.post("/webhooks/hubspot", (req, res) => {
const events = req.body; // [{ subscriptionType: "deal.propertyChange", objectId: 1234, ... }]
for (const event of events) {
console.log("HubSpot event:", event.subscriptionType, event.objectId);
// Do NOT trust this payload yet. The next section validates it before we act.
}
res.sendStatus(200);
});
app.listen(3000, () => console.log("Listening on :3000"));Саме тут процес стає реальним. Скажімо, ви синхронізуєте угоду з записом ERP малого виробника: спрацьовує вебхук, ваш обробник створює або оновлює відповідний тікет в ERP, і ваша операційна команда бачить зміну, не заходячи в HubSpot. Це той самий підхід реального часу, який ми використовуємо для синхронізації голосового агента з CRM, тільки тригером є зміна властивості, а не телефонний дзвінок. Од попередження: наведена вище заглушка довіряє будь-яким даним, надісланим методом POST. Виправте це перед запуском у продакшен.
Перевірка підписів вебхуків (v3), щоб ніколи не довіряти підробленим даним
Перевіряйте кожен вхідний вебхук за допомогою підпису v3. HubSpot підписує кожен запит вашим секретом додатка і надсилає два заголовки: X-HubSpot-Signature-v3 та X-HubSpot-Request-Timestamp. Відхиляйте все, що старше 5 хвилин, відновлюйте вихідний рядок як method + повна URL-адреса + сирий body + timestamp, обчисліть HMAC-SHA256 із секретом додатка, закодуйте результат у base64 і порівняйте за постійний час.
Якщо ви пропустите цей крок, будь-хто, хто вгадає вашу URL-адресу вебхука, зможе підробити оновлення угоди. Перевірка не є опціональною. Документація HubSpot щодо перевірки запитів та changelog підписів v3 детально описують точний алгоритм. Ось готовий middleware для Express:
import crypto from "crypto";
const CLIENT_SECRET = process.env.HUBSPOT_APP_SECRET; // from your private app settings
const MAX_AGE_MS = 5 * 60 * 1000; // reject anything older than 5 minutes
export function validateHubSpotSignature(req, res, next) {
const signature = req.header("X-HubSpot-Signature-v3");
const timestamp = req.header("X-HubSpot-Request-Timestamp");
// 1. Reject stale requests (replay protection)
if (!signature || !timestamp || Date.now() - Number(timestamp) > MAX_AGE_MS) {
return res.sendStatus(401);
}
// 2. Rebuild the exact source string: method + full URL + raw body + timestamp
const uri = `https://${req.get("host")}${req.originalUrl}`;
const source = `${req.method}${uri}${req.rawBody}${timestamp}`;
// 3. HMAC-SHA256 with the app secret, base64-encoded
const hash = crypto
.createHmac("sha256", CLIENT_SECRET)
.update(source, "utf8")
.digest("base64");
// 4. Constant-time compare against the header
const expected = Buffer.from(hash);
const received = Buffer.from(signature);
if (expected.length !== received.length ||
!crypto.timingSafeEqual(expected, received)) {
return res.sendStatus(401);
}
next();
}Та сама перевірка у вигляді функції Python, щоб охопити обидва стеки:
import base64
import hashlib
import hmac
import os
import time
CLIENT_SECRET = os.environ["HUBSPOT_APP_SECRET"].encode("utf-8")
MAX_AGE_MS = 5 * 60 * 1000 # 5 minutes
def is_valid_signature(method, uri, body, signature, timestamp):
# 1. Reject stale requests
if not signature or not timestamp:
return False
if int(time.time() * 1000) - int(timestamp) > MAX_AGE_MS:
return False
# 2. method + full URL + raw body + timestamp
source = f"{method}{uri}{body}{timestamp}".encode("utf-8")
# 3. HMAC-SHA256, base64
digest = hmac.new(CLIENT_SECRET, source, hashlib.sha256).digest()
expected = base64.b64encode(digest).decode("utf-8")
# 4. Constant-time compare
return hmac.compare_digest(expected, signature)Підводний камінь, який коштує людям цілий день: HubSpot підписує повну цільову URL-адресу, включаючи схему, хост і шлях разом. За проксі, балансировщиком навантаження або тунелем ngrok req.get("host") може повертати внутрішній хост замість публічного, який підписав HubSpot. Якщо перевірка постійно не проходить дляpayload, у легітимності якого ви впевнені, залогуйте точний URI, який ви відновили, і порівняйте його з вашою публічною URL-адресою вебхука символ за символом.
Ліміти швидкості, помилки 429 та Batch API: що ми запускали в продакшені
Приватні додатки отримують приблизно 10 запитів на секунду (100 за 10 секунд на тарифах Free/Starter, 190 за 10 секунд на Pro/Enterprise) з добовим лімітом від 250 000 до 1 000 000. Пастка: CRM Search має окремий ліміт — 4 запити на секунду, а batch-ендпоінти приймають максимум 100 записів на запит. Рекомендації щодо використання від HubSpot перелічують усі тарифи.
| Тариф | За 10 сек | За секунду | Добовий ліміт | Примітки |
|---|---|---|---|---|
| Free / Starter (приватний додаток) | 100 | ~10 | 250 000 | CRM Search окремо обмежено 4 запитами/сек |
| Pro / Enterprise (приватний додаток) | 190 | ~19 | до 1 000 000 | Batch-ендпоінти макс. 100 записів на запит |
Ось де теорія зіткнулася з червоними показниками на staging-панелі. Під час заповнення даними цієї весни ми завантажили близько 8000 існуючих записів у HubSpot із внутрішньої системи тікетів і збагатили кожен із них через пошук у CRM. Ми використовували @hubspot/api-client v14 на стороні Node та hubspot-api-client v12 для Python-воркера збагачення. Масове записування пройшло добре. Запити Search впали менш ніж за хвилину, тому що наш воркер відправляв запити Search зі швидкістю близько 15 req/s проти жорсткої межі в 4 req/s, яку ми не врахували окремо.
Дві зміни виправили ситуацію. По-перше, обгортка для повторних спроб, яка читає заголовки відповіді X-HubSpot-RateLimit-* і робить паузу при отриманні помилки 429:
// Wrap any HubSpot call; retries on 429 with exponential backoff
async function withRetry(fn, maxRetries = 5) {
let attempt = 0;
while (true) {
try {
return await fn();
} catch (err) {
const status = err.code ?? err.response?.status;
if (status !== 429 || attempt >= maxRetries) throw err;
// Honor HubSpot's reset window if the header is present
const headers = err.response?.headers ?? {};
const resetMs = Number(headers["x-hubspot-ratelimit-interval-milliseconds"]) || 0;
const backoff = Math.max(resetMs, 2 ** attempt * 500); // 0.5s, 1s, 2s, 4s...
console.warn(`429 hit, retry ${attempt + 1} in ${backoff}ms`);
await new Promise((r) => setTimeout(r, backoff));
attempt++;
}
}
}По-друге, ми припинили записувати записи по одному. Batch-ендпоінт приймає до 100 записів на POST /crm/v3/objects/{objectType}/batch/create, тому ми розбили завантаження на 80 batch-викликів замість 8000 одиночних POST-запитів:
// HubSpot batch endpoints accept at most 100 records per request
function chunk(arr, size = 100) {
const out = [];
for (let i = 0; i < arr.length; i += size) out.push(arr.slice(i, i + size));
return out;
}
// POST /crm/v3/objects/contacts/batch/create, chunked to 100 at a time
async function batchCreateContacts(records) {
for (const group of chunk(records, 100)) {
const inputs = group.map((r) => ({
properties: { email: r.email, firstname: r.firstName, lastname: r.lastName },
associations: [],
}));
await withRetry(() => hubspot.crm.contacts.batchApi.create({ inputs }));
console.log(`Wrote ${group.length} contacts`);
}
}Обмеження воркера Search до 4 req/s і пакетне записування перетворили процес, який тонув у повторних спробах, на той, що тихо завершився. Якщо ви запам’ятаєте одне число з цього розділу, нехай це буде 4: ліміт CRM Search — це обмеження, яке боляче б’є в продакшені, і про нього забувають згадати майже всі оглядові статті. До речі, старий ліміт «10 для контактів» у batch-режимі зник; зараз це 100 для всіх типів об’єктів.
Двосторонній рух: запис змін назад у HubSpot без нескінченних циклів
Двостороння синхронізація записує зміни назад у HubSpot з вашого внутрішнього інструменту, а також читає їх звідти. Небезпека полягає в циклі зворотного зв’язку: ваш запис назад запускає той самий вебхук, який активував ваш обробник, який знову записує дані, і так нескінченно. Запобігти цьому можна за допомогою ключа ідемпотентності (пропускати зміни, які ви вже застосували) та прапорця джерела (ігнорувати вхідні події, спричинені вашим власним інструментом).
const processed = new Set(); // use Redis or a unique DB constraint in production
async function writeBackToHubSpot(record) {
// Dedup key: object id + a hash of the change we're about to apply
const key = `${record.id}:${record.updatedHash}`;
if (processed.has(key)) return; // already synced this exact change
processed.add(key);
await withRetry(() =>
hubspot.crm.contacts.basicApi.update(record.id, {
// Tag the source so the resulting webhook is ignored by our own receiver
// (check for source: "internal-tool" before acting on an inbound event)
properties: { internal_status: record.status, last_sync_source: "internal-tool" },
})
);
}Шаблон простий, але його ігнорування призводить до того, що синхронізація тихо подвоює обсяг ваших записів за ніч. Коли дані очищені в обох напрямках, команди часто передають їх далі в AI SDR pipeline або шар звітності. Посібник з інтеграції HubSpot від Nango є солідним посиланням лише для Node, якщо ви хочете отримати другий погляд на двосторонню синхронізацію, хоча ідею запобігання циклам вам доведеться адаптувати самостійно.
Чи варто розробляти це внутрішніми силами чи наймати партнера з інтеграції?
Розробляйте внутрішніми силами, якщо синхронізація невелика, стабільна і перебуває під вашим контролем: односторонній потік, кілька об’єктів і інженер, який може впоратися зі змінами, що ламають зворотну сумісність, які HubSpot вносить приблизно двічі на рік. Наймайте партнера, якщо вам потрібна двостороння синхронізація, моделювання кастомних об’єктів або якщо в команді немає людини, яка могла б взяти на себе поточне обслуговування. Вирішальним фактором рідко є початкова розробка; важливо те, хто буде стежити за системою через рік.
Ось чесний чек-лист. Розробляйте самі, якщо: напрямок односторонній, ви синхронізуєте стандартні об’єкти, у вас є розробник, який може розмістити ендпоінт вебхука, і хтось помітить, якщо payload почне давати збої. Все вищезазначене є вашим планом дій.
Найміть партнера, якщо: вам потрібна двостороння синхронізація із запобіганням циклів для кількох об’єктів, ви моделюєте кастомні об’єкти з типованими асоціаціями, ви підключаєте кілька систем (HubSpot плюс ERP плюс білінг) або людина, яка мала б це обслуговувати, вже перевантажена. HubSpot використовує версіонування API на основі дат із критичними змінами лише приблизно двічі на рік, що звучить м’яко, поки одна така зміна не трапиться під час вашого найзавантаженішого тижня, а відповідальної особи немає. Саме цей «хвіст» обслуговування, а не перший деплой, тихо топить внутрішні інтеграції. Якщо ви не хочете брати це на себе, тут на допомогу приходять наші послуги з кастомної інтеграції CRM.
Ключові висновки
- Ключа API HubSpot більше не існує. Використовуйте токен доступу приватного додатка для внутрішнього інструменту одного акаунта; OAuth потрібен лише для публічних додатків для кількох акаунтів.
- Завжди перевіряйте
X-HubSpot-Signature-v3перед тим, як довіряти payload вебхука. Відновлюйте вихідний рядок, використовуючи повну цільову URL-адресу. - Поважайте ліміт 4 req/s для CRM Search і пакетуйте великі записи групами по 100 із затримкою при помилці 429.
- Віддавайте перевагу вебхукам замість опитування для синхронізації в реальному часі, а інтеграція з HubSpot є лише частиною ширшого стеку AI-інструментів для бізнесу.
Застрягли на етапі обслуговування або хочете, щоб хтось ще раз переглянув код перед релізом? Запишіться на безкоштовну консультацію з інтеграції. Без тиску в будь-якому випадку; наведений вище код ваш, і ви можете використовувати його незалежно від рішення.
Про автора
Мерт Батур Гюрбюз — співзасновник Techsy.io, де команда створює AI-агентів, системи автоматизації та голосові/SDR-пайплайни для B2B-клієнтів. Він навчається в Бірмінгемському університеті та пише про стек інструментів LLM, який команда Techsy реально використовує в продакшені. Кваліфікація: Співзасновник, Techsy.io, Бірмінгемський університет. Підключайтеся на LinkedIn.
Часті запитання
Чи мені все ще потрібен ключ API HubSpot у 2026 році?
Ні. HubSpot припинив підтримку статичних ключів API 30 листопада 2022 року, і вони повністю непідтримувані. Автодоповнення все ще підказує «hubspot api key» через звичку, але отримати нічого. Для внутрішнього інструменту одного акаунта створіть приватний додаток у налаштуваннях і використовуйте його токен доступу.
Яка різниця між токеном приватного додатка та OAuth для HubSpot?
Токен доступу приватного додатка — це статичні облікові дані для одного акаунта HubSpot, без терміну дії та без процесу оновлення, ідеальні для внутрішнього інструменту. OAuth 2.0 призначений для публічних додатків для кількох акаунтів, які інші компанії встановлюють у свої портали; його токени спливають приблизно за шість годин і вимагають циклу оновлення.
Які ліміти швидкості API HubSpot у 2026 році?
Приватні додатки отримують близько 10 запитів на секунду (100 за 10 секунд на Free/Starter, 190 на Pro/Enterprise) з добовим лімітом від 250 000 до 1 000 000. API CRM Search окремо обмежено 4 запитами на секунду, а batch-ендпоінти приймають максимум 100 записів на запит.
Як перевірити підпис вебхука HubSpot?
Використовуйте рецепт v3: відхиляйте запити, де X-HubSpot-Request-Timestamp старший за п’ять хвилин, потім створіть вихідний рядок із методу, повної цільової URL-адреси, сирого body та timestamp. Обчисліть HMAC-SHA256 із вашим секретом додатка, закодуйте результат у base64 і порівняйте його з X-HubSpot-Signature-v3 за постійний час.
Який SDK HubSpot використовувати, Node чи Python?
Обидва є офіційними та підтримуються. Node використовує @hubspot/api-client (v14), а Python — hubspot-api-client (v12). Вони надають одну й ту саму модель об’єктів CRM v3, тому обирайте той, що відповідає вашому стеку. Цей посібник надає ідентичний код автентифікації та перевірки підпису для обох мов.
Як синхронізувати HubSpot із власним внутрішнім інструментом у реальному часі?
Зареєструйте підписку на вебхук у своєму приватному додатку для потрібного об’єкта та події, потім розмістіть HTTPS-ендпоінт, на який HubSpot надсилатиме дані методом POST, коли станеться відповідна зміна. Перевірте підпис, потім запишіть зміну у свій внутрішній інструмент. Використовуйте опитування лише тоді, коли жодна підписка на вебхук не покриває те, що вам потрібно.
Що таке Service Key від HubSpot і чи варто його використовувати?
Service Key — це облікові дані на рівні акаунта, призначені лише для роботи з даними, які HubSpot запустив у публічну бета-версію у лютому 2026 року. Він призначений для серверних завдань, які працюють лише з даними. Для стандартного внутрішнього інструменту сьогодні токен доступу приватного додатка все ще є безпечнішим і краще документованим варіантом за замовчуванням; ставтеся до Service Keys як до бета-версії, поки вони не стануть стабільними.
Чи можу я тестувати інтеграцію з HubSpot, не торкаючись продакшену?
Так. Створіть пісочницю розробника HubSpot і спрямуйте туди свій токен приватного додатка. Області видимості, модель об’єктів, вебхуки та ліміти швидкості працюють так само, як у продакшені, тому ви можете створювати тестові контакти та запускати вебхуки, не залишаючи сміттєвих записів, які вашій команді продажів доведеться очищати пізніше.
Скільки записів може прийняти batch API HubSpot за один раз?
Batch-ендпоінти (POST /crm/v3/objects/{objectType}/batch/create та його аналоги для оновлення та upsert) приймають максимум 100 записів на запит. Розбивайте більші payload на групи по 100. Старий ліміт «10 записів для контактів», який деякі посібники все ще згадують, скасовано; зараз це 100 для всіх типів об’єктів.
Чи варто розробляти це внутрішніми силами чи наймати агентство?
Розробляйте внутрішніми силами, якщо синхронізація одностороння, використовує стандартні об’єкти і має відповідального особу, яка може впоратися зі змінами, що ламають зворотну сумісність, які HubSpot вносить двічі на рік. Наймайте партнера для двосторонньої синхронізації, моделювання кастомних об’єктів або якщо ніхто не може взяти на себе обслуговування. Перший деплой легкий; реальна вартість — це рік підтримки після нього.