Migrating data from HubSpot to Bitrix24

Our company is engaged in the development, support and maintenance of Bitrix and Bitrix24 solutions of any complexity. From simple one-page sites to complex online stores, CRM systems with 1C and telephony integration. The experience of developers is confirmed by certificates from the vendor.
Our competencies:
Development stages
Latest works
  • image_website-b2b-advance_0.png
    B2B ADVANCE company website development
    1173
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Website development for FIXPER company
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Development based on Bitrix, Bitrix24, 1C for the company Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Development based on 1C Enterprise for MIRSANBEL
    745
  • image_crm_dolbimby_434_0.webp
    Website development on CRM Bitrix24 for DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Development based on Bitrix24 for the company TECHNOTORGKOMPLEKS
    976

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.