Data Migration from HubSpot to Bitrix24
HubSpot is an American CRM platform with a rich API and detailed documentation. This makes the technical side of the export relatively straightforward. The complexity of migrating to Bitrix24 lies in the conceptual differences between the systems: HubSpot is built around "Contacts" and "Companies" as central objects, whereas Bitrix24 adds the concept of a "Lead" as a primary inquiry.
HubSpot API: What Is Available
HubSpot provides a REST API v3 with full access to all data. Main objects:
-
contacts— contacts (individuals) -
companies— companies -
deals— deals with pipelines and stages -
tickets— support tickets -
engagements/activities— activities (emails, calls, meetings, tasks) -
owners— owners (managers) -
properties— custom fields (schema)
Retrieving data via HubSpot API v3:
// Retrieve contacts with pagination (cursor-based)
$after = null;
$contacts = [];
do {
$params = ['limit' => 100, 'properties' => 'firstname,lastname,email,phone,company'];
if ($after) $params['after'] = $after;
$response = $hubspot->get('/crm/v3/objects/contacts', $params);
$contacts = array_merge($contacts, $response['results']);
$after = $response['paging']['next']['after'] ?? null;
} while ($after);
HubSpot uses cursor-based pagination (via the after field), unlike the offset-based approach used by many other systems.
Object Mapping
| HubSpot | Bitrix24 | Notes |
|---|---|---|
| Contact | Contact | email → EMAIL, phone → PHONE (array) |
| Company | Company | Contact → Company link via COMPANY_ID |
| Deal | Deal | Pipeline → deal direction |
| Ticket | Lead or helpdesk ticket | Depends on business processes |
| Owner | Bitrix24 User | Mapped by email |
| Engagement (note) | Timeline comment | crm.timeline.comment.add |
| Engagement (email) | Activity of type "Email" | crm.activity.add |
| Engagement (call) | Activity of type "Call" | crm.activity.add |
HubSpot Custom Properties
HubSpot allows creating arbitrary properties for each object. The property schema is retrieved via /crm/v3/properties/contacts (and similarly for other objects). For each custom property, a user field must be created in Bitrix24 via crm.userfield.add.
HubSpot property types and their Bitrix24 equivalents:
| HubSpot fieldType | Bitrix24 USER_TYPE_ID |
|---|---|
text |
string |
number |
double |
date |
date |
datetime |
datetime |
checkbox |
boolean |
select, radio |
enumeration |
textarea |
string |
Associations Between Objects
HubSpot stores relationships between objects via the associations API (/crm/v3/associations). A contact can be linked to multiple companies; a deal can be linked to multiple contacts. In Bitrix24 the model is simpler: a contact has one primary company (COMPANY_ID), while multiple links are handled through CRM relationships.
During migration, multiple associations must be prioritized: select the primary company for a contact and the primary contact for a deal.
Email and Communication History
Emails in HubSpot are stored as engagements of type EMAIL. They contain the subject, email body, date, and contact ID. In Bitrix24 these become activities of type EMAIL via crm.activity.add:
$bitrix->call('crm.activity.add', [
'fields' => [
'TYPE_ID' => 4, // EMAIL
'SUBJECT' => $engagement['metadata']['subject'],
'DESCRIPTION' => $engagement['metadata']['html'] ?? $engagement['metadata']['text'],
'START_TIME' => date('d.m.Y H:i:s', $engagement['createdAt'] / 1000),
'BINDINGS' => [['ENTITY_TYPE_ID' => 3, 'ENTITY_ID' => $contactId]],
'DIRECTION' => $engagement['metadata']['from'] ? 2 : 1, // inbound/outbound
],
]);
Typical Timelines
| Scale | Duration |
|---|---|
| Up to 10,000 contacts, basic data | 2–3 weeks |
| 10,000–50,000 records, activities | 4–8 weeks |
| 50,000+ records, full communication history | 2–4 months |
HubSpot Marketing Hub (email campaigns, landing pages) does not migrate to Bitrix24 — this is a separate class of tools with no direct equivalent.







