Data Migration from amoCRM to Bitrix24: Complete Guide
We have been migrating CRM systems for over 5 years and have completed more than 50 projects transferring data from amoCRM to Bitrix24. This process requires deep understanding of both platforms: without a sound strategy, you risk losing deal history or creating duplicates. In this article, we’ll cover the technical nuances and show how we ensure data integrity.
amoCRM and Bitrix24 are close competitors on the Russian market, but their data models differ significantly. amoCRM is built around deals (pipeline-centric model), while Bitrix24 is a more complex system with separate leads, deals, contacts, and companies. This difference defines the entire migration strategy.
Key Differences Between the Models
| Aspect | amoCRM | Bitrix24 |
|---|---|---|
| Central entity | Deal (lead) | Lead → Contact + Deal |
| Contacts | Attached to deals | Independent entity |
| Companies | Attached to deals | Independent entity |
| Tags | On deals and contacts | UF fields or categories |
| Pipelines | Multiple, with stages | Pipelines (directions) with statuses |
| Custom fields | Simple setup | UF fields with types |
In amoCRM, a "deal" (lead) is both a lead and a deal simultaneously. During migration, you must decide: transfer everything into Bitrix24 deals, or split into leads + converted deals. We recommend the second option, as it opens access to business processes and pipelines of Bitrix24.
Why Proper Migration Matters
Errors during the mapping phase lead to lost deals and dissatisfied clients. Poorly transferred custom fields can break reports. Unpreserved call history deprives managers of context. We guarantee that after migration, all data is available and correct. Request a preliminary project assessment — it’s free of charge.
How We Extract Data from amoCRM
amoCRM provides REST API v4. Authentication via OAuth 2.0. API limits: no more than 7 requests per second — when exporting a large database, a delay between requests is mandatory.
Client for paginated contact export (250 records per request):
class AmoCrmClient {
public function getContacts(int $page = 1): array {
$url = "https://{$this->domain}.amocrm.ru/api/v4/contacts"
. "?page={$page}&limit=250&with=leads,companies";
$http = new \Bitrix\Main\Web\HttpClient();
$http->setHeader('Authorization', 'Bearer ' . $this->accessToken);
return json_decode($http->get($url)->getResult(), true);
}
}
Mapping Pipelines and Statuses
Pipelines in amoCRM map to directions (pipelines) in Bitrix24. They are created in advance via crm.category.add, then for each pipeline, statuses are created via crm.status.add.
Mapping is saved in a file or table for use when transferring deals:
$pipelineMapping[$pipeline['id']] = $b24CategoryId;
$statusMapping[$status['id']] = 'STAGE_' . $status['id'];
How Custom Fields Are Created in Bitrix24?
In amoCRM, custom fields are created arbitrarily. Before migration, we create corresponding UF fields in Bitrix24 via crm.deal.userfield.add. The field type is determined by the field_type from the amoCRM API:
-
TEXT→ string -
NUMERIC→ integer -
DATE→ date -
MULTISELECT→ list (enumeration)
Transferring Contacts
Each amoCRM contact becomes a contact in Bitrix24. Phone numbers and emails are stored in PHONE and EMAIL fields with codes WORK and HOME. Creation date is transferred via the DATE_CREATE field.
After creating a contact, we save the mapping contact_id (amo) → contact_id (B24) for linking deals.
Transferring Deals with Notes
Deals are the core of migration. Each amoCRM deal is transferred to Bitrix24 via crm.deal.add with links to contacts and companies based on the mapping. We preserve the original ID in a user field UF_CRM_AMO_ID for verification and debugging.
Notes from amoCRM are transferred as timeline comments via crm.timeline.comment.add. This preserves the negotiation history, visible to the manager in the deal card.
Tasks and Calls
Tasks from amoCRM are transferred via crm.activity.add with type=2. Call recordings (if telephony is connected) are transferred via crm.activity.add with type=4 (CALL). This is valuable historical information for resuming work with the client.
How to Avoid Duplicates on Re-Run?
During re-runs of the migration script (due to errors or restarts), we check: do not create a record if UF_CRM_AMO_ID already exists in Bitrix24.
$existing = $b24->call('crm.deal.list', [
'filter' => ['UF_CRM_AMO_ID' => $amoLead['id']],
'select' => ['ID'],
]);
if (!empty($existing['result'])) {
continue; // Already transferred
}
Validation Results
| Metric | Verification Method |
|---|---|
| Number of contacts | amoCRM count vs B24 crm.contact.list |
| Number of deals | Comparison by pipelines |
| Custom fields | Spot-check 50 records |
| Notes | Chronology for 10-15 deals |
What’s Included in the Work?
- Technical documentation: mapping schema, transfer logs, admin instructions.
- Team training: 2 webinars on working in Bitrix24, Q&A in chat.
- Test run: migration of a database copy for verification.
- Warranty: 2 weeks of free support after transfer — we fix any issues that arise.
Timelines
| Data Volume | Timeline |
|---|---|
| Up to 3,000 contacts and deals | 1-2 weeks |
| 3,000-20,000 records + custom fields | 3-5 weeks |
| 20,000+ records + call and task history | 2-3 months |
Switching from amoCRM to Bitrix24 is a change in the team’s work paradigm. Alongside data migration, training on new business processes is required — a task no less important than the technical transfer. Bitrix24 offers a more flexible system: according to Wikipedia, modern CRM can increase sales by 29%. With our experience, you will get the maximum from the new platform.
Get a consultation for your project — we will assess the scope and propose an optimal migration plan. Contact us: send an email or leave a request on our website.







