Из Salesforce в Kommo: data model gap и как его закрыть при миграции

Из Salesforce в Kommo: data model gap и как его закрыть при миграции

Mиграция из Salesforce в Kommo — это не просто перенос строк из одной базы в другую. Salesforce строится вокруг четырёх самостоятельных объектов: Leads, Contacts, Accounts и Opportunities, каждый с собственными полями и связями. Kommo строит всё вокруг сделки (Lead) как главного объекта. Эта архитектурная разница означает, что часть данных Salesforce не имеет прямого аналога в Kommo — их нужно перепроектировать, а не просто скопировать.

Компании переходят с Salesforce на Kommo, когда уходят из крупного enterprise в более гибкий и дешёвый стек, или когда им нужны нативные мессенджеры и простая воронка вместо сложного CRM-комбайна. Главный риск при этом — потерять данные, которые копились годами.

Почему компании переходят с Salesforce на Kommo

Salesforce — мощная система, оптимизированная под enterprise B2B. При этом компании уходят с неё по конкретным причинам:

  • Цена. Salesforce Sales Cloud Professional — от $80 на пользователя в месяц. Kommo — от $15. При команде 10 человек это разница в $7,800 в год только на лицензиях.
  • Сложность. Salesforce требует выделенного администратора или Salesforce Developer для настройки и поддержки. Kommo настраивается менеджером без технической помощи.
  • Мессенджеры. Нативной интеграции Salesforce с WhatsApp Business API, Telegram, Instagram нет. В Kommo это встроено.
  • Размер команды. Salesforce проектировался под 100+ пользователей. Kommo — под команды до 50 человек. Для небольших команд Salesforce избыточен.

При переходе: чаще всего компания накопила в Salesforce 2–5 лет данных. История активностей (Tasks, Events, Calls), заметки, вложения — всё это нужно сохранить.

Data model gap: где принципиальный разрыв

Salesforce использует строгое разделение:

  • Lead — необработанный лид (входящая заявка, не квалифицированная). После квалификации Lead конвертируется в Contact + Account + Opportunity.
  • Contact — человек, привязанный к Account. Существует независимо от Opportunity.
  • Account — компания или организация. Центральный объект для B2B.
  • Opportunity — сделка. Привязана к Account, может иметь несколько Contacts с ролями (Decision Maker, Economic Buyer и т.д.).
  • Activities (Tasks, Events, Calls) — самостоятельные объекты, ассоциированные с Contact, Account или Opportunity.
  • Custom Objects — произвольные бизнес-объекты (Products, Projects, Locations).

Kommo строит всё иначе:

  • Lead (сделка) — главный объект. Всё происходит внутри сделки.
  • Contact — вторичный объект, привязывается к сделке.
  • Company — привязывается к сделке или контакту.
  • Нет аналога Salesforce Account как центральной сущности.
  • Нет ролей контактов в сделке.
  • Нет кастомных объектов.
  • Активности (tasks, notes, calls) — события и задачи внутри сделки или контакта.

Таблица маппинга объектов

SalesforceKommoЧто теряется
Lead (unconverted)Lead (сделка)Поля конвертации, история до конвертации
ContactContactРоли в Opportunity
AccountCompanyAccount как центральный объект
OpportunityLead (сделка)Roles on Opportunity, multiple contacts
TaskTaskНекоторые типы задач
EventNote (note_type=meeting)Участники встречи
CallNote (note_type=call)Запись звонка
Custom ObjectНет аналога
Opportunity Contact RoleПотеря ролей
Account HierarchyНет иерархии компаний

Самые болезненные потери:

  1. Opportunity Contact Roles. В Salesforce к одной Opportunity привязаны несколько Contacts с ролями. В Kommo — один основной контакт на сделку (остальные как дополнительные, без ролей). Роли теряются.
  2. Account как центральный объект. В Salesforce Account — это компания с собственными активностями, контактами, историей. В Kommo Company — вторичный объект без собственной ленты событий. История на уровне компании, а не сделки, не переносится структурированно.
  3. Custom Objects. Если в Salesforce использовались Custom Objects (например, Products, Projects, Service Requests), в Kommo для них нет аналога. Данные придётся либо архивировать, либо моделировать через кастомные поля.

Что переносится полностью, что частично, что нет

ДанныеПереноситсяСпособ
Contacts -> ContactsПолностьюAPI
Accounts -> CompaniesПолностью (без иерархии)API
Opportunities -> LeadsПолностью (без ролей)API
Leads (unconverted) -> LeadsПолностьюAPI
Tasks -> TasksПолностьюAPI
Events -> NotesЧастично (без участников)API
Calls -> NotesЧастично (без записи)API
Custom FieldsС маппингомAPI
Opportunity Contact RolesНет
Account HierarchyНет
Custom ObjectsНет (архив)
Files/AttachmentsЧастичноAPI + download
Email (Salesforce Inbox)Нет

Пошаговый процесс правильной миграции

Шаг 1 — Аудит Salesforce через API и SOQL

Salesforce предоставляет мощный API (REST API, Bulk API 2.0) и язык запросов SOQL.

SELECT COUNT(Id) FROM Contact
SELECT COUNT(Id) FROM Account
SELECT COUNT(Id) FROM Opportunity
SELECT COUNT(Id) FROM Task
SELECT COUNT(Id) FROM Event
SELECT COUNT(Id) FROM Lead WHERE IsConverted = false

Дополнительно: список всех кастомных полей на объектах, список Custom Objects, количество записей в каждом.

GET /services/data/v57.0/sobjects/Opportunity/describe
-> fields[] - все поля, включая кастомные

Шаг 2 — Проектирование схемы маппинга

Ключевые решения, которые нужно принять до начала переноса:

Unconverted Leads. Нужно ли переносить? Если да — как отдельные сделки в отдельной воронке «Новые лиды».

Opportunity Contact Roles. Роли теряются. Решение: добавить в примечание к сделке список участников с ролями — «[Decision Maker] Иван Иванов, [Economic Buyer] Мария Петрова».

Account hierarchy. Если в Salesforce есть Parent Account -> Child Account — в Kommo это два независимых Company. Связь можно обозначить через кастомное поле «Материнская компания».

Custom Objects. Решение по каждому: архивировать в CSV + ссылка в примечании к сделке, или создать набор кастомных полей в Kommo как суррогат.

Шаг 3 — Создание структуры в Kommo

  • Воронки (pipelines) соответствующие Opportunity Stage в Salesforce
  • Кастомные поля для всех смапированных Salesforce fields
  • Пользователи (User mapping: Salesforce Owner ID -> Kommo User ID)

Шаг 4 — Перенос базовых объектов

Contacts:

SELECT Id, FirstName, LastName, Email, Phone, AccountId, [custom fields]
FROM Contact
-> POST /api/v4/contacts (Kommo)
   Сохранить: salesforce_id -> kommo_contact_id

Accounts -> Companies:

SELECT Id, Name, BillingCity, Phone, [custom fields]
FROM Account
-> POST /api/v4/companies (Kommo)

Opportunities -> Leads:

SELECT Id, Name, Amount, StageName, CloseDate, AccountId, OwnerId,
       (SELECT ContactId, Role FROM OpportunityContactRoles)
FROM Opportunity
-> POST /api/v4/leads (Kommo)
   _embedded.contacts - основной контакт
   _embedded.companies - через AccountId -> kommo_company_id

Contact Roles — добавить первым POST-запросом после создания сделки:

POST /api/v4/leads/{id}/notes
{ note_type: "common",
  params: { text: "Участники сделки:\n[Decision Maker] Имя\n[Economic Buyer] Имя" }}

Шаг 5 — Перенос активностей

Tasks (Salesforce) -> Tasks (Kommo):

SELECT Id, Subject, Description, ActivityDate, Status, WhoId, WhatId
FROM Task
-> POST /api/v4/tasks
   { text, complete_till, entity_id, entity_type }

Events -> Notes:

SELECT Id, Subject, Description, StartDateTime, EndDateTime
FROM Event
-> POST /api/v4/leads/{id}/notes
   { note_type: "common", params: { text: "[Встреча] дата\nОписание..." } }

Calls (через Salesforce CTI или Activity History):

SELECT Id, Subject, Description, ActivityDate, CallType, CallDurationInSeconds
FROM Task WHERE TaskSubtype = 'Call'
-> POST /api/v4/leads/{id}/notes
   { note_type: "call_in" или "call_out",
     params: { text: "[звонок] длительность, описание" } }

Шаг 6 — Валидация

  • Количественная: записи в Salesforce vs Kommo по каждому типу
  • Качественная: 30–50 карточек side by side
  • Проверка ответственных: у каждой сделки есть ответственный
  • Проверка что Converted Leads не задвоились с Contacts

Типичные проблемы

Salesforce Bulk API лимиты. Salesforce Bulk API 2.0 позволяет выгружать до 100 million записей в день, но при большом объёме нужны batches. Стандартный REST API — 2000 записей за запрос.

Формат телефонов. Salesforce хранит телефоны в произвольном формате. Kommo ожидает международный формат (+1…). Нужна нормализация перед переносом.

Multi-currency Salesforce. Если в Salesforce включена мультивалютность — Opportunity.Amount хранится в валюте записи. При переносе в Kommo нужно привести к одной валюте или добавить кастомное поле «Валюта сделки».

Salesforce Formula Fields. Вычисляемые поля (formula fields) не хранят данные — они вычисляются на лету. При экспорте через API они отдают текущее значение, но при изменении данных в Salesforce оно может меняться. Переносить нужно как snapshot-значение, не как формулу.

Inactive Users. Если сделка в Salesforce принадлежит неактивному пользователю — в Kommo её нельзя создать без активного ответственного. Нужно решение: переназначить на администратора или на нового ответственного.

Реальный кейс

В типовом проекте миграции для SaaS-компании (15 человек, Salesforce Professional 3 года):
— 6,200 Contacts, 890 Accounts, 1,400 Opportunities
— 34,000 Tasks и Events
— 8 Custom Objects (не переносились — заархивированы в CSV)
— 31 кастомное поле на Opportunity, 22 на Contact

Общий срок: 5 недель. Из них 2 недели — проектирование маппинга (самая длинная фаза). Custom Objects стали главным вопросом для обсуждения с командой клиента: в итоге 3 из 8 смоделировали через кастомные поля, 5 — заархивировали.

По итогу: 97% контактов, сделок и активностей перенесены. Потери: Opportunity Contact Roles (перенесены как текстовые примечания), иерархия аккаунтов, файлы из Salesforce Files (оставлены в S3 с ссылками в примечаниях).

Для кого актуален переход с Salesforce на Kommo

Переход оправдан если:
— Команда продаж 5–30 человек, Salesforce используется на 30–40% от реальных возможностей
— Основной канал — мессенджеры или телефония, а не email-кампании
— Нет выделенного Salesforce-администратора (или он уходит)
— Стоимость Salesforce стала болью при текущем объёме сделок

Подробнее о том, как Kommo работает с кастомными интеграциями и API — в разделе кастомных интеграций для Kommo CRM.

Если нужен обратный вектор — из Kommo в более сложную систему — читайте про миграцию из Kommo в HubSpot: там тот же принцип data model gap, но в другую сторону.

Часто задаваемые вопросы

Можно ли перенести Salesforce Custom Objects в Kommo?

Прямого аналога Custom Objects в Kommo нет. Есть три варианта: (1) смоделировать как набор кастомных полей в сделке или контакте — подходит если объект простой; (2) заархивировать в CSV и хранить как справочник вне CRM; (3) связать Kommo с внешней БД через кастомную интеграцию. Выбор зависит от того, насколько активно команда обращается к этим данным в работе.

Что делать с Salesforce Leads, которые не были сконвертированы?

Uncoverted Leads в Salesforce — это квалифицированные или неквалифицированные лиды, не превратившиеся в Opportunity. В Kommo их переносят как отдельные сделки — либо в отдельную воронку «Неквалифицированные», либо в общую с нулевым этапом. После переноса команда разбирает их вручную.

Переносится ли история email-переписки из Salesforce?

Письма, захваченные через Salesforce Inbox или Lightning Email, хранятся как EmailMessage объекты. Они доступны через API, но перенести их в Kommo как полноценные письма невозможно — Kommo не имеет Email-объекта с той же структурой. Решение: перенести как текстовые примечания с датой и содержимым, или оставить в архиве Salesforce.

Сколько стоит миграция из Salesforce в Kommo?

Стоимость зависит от объёма данных, количества кастомных полей и наличия Custom Objects. Простая миграция (до 5,000 записей, без Custom Objects) — от $2,000–3,000. Полная миграция с историей активностей и сложным маппингом — от $5,000. Это в разы меньше стоимости годовой подписки Salesforce Professional для команды 10 человек ($9,600).

Как долго идёт параллельная работа в двух системах?

Рекомендуем не более 2 недель. Длинный параллельный период создаёт путаницу: менеджеры обновляют данные в разных местах, дублируют активности. Лучший подход: финальная синхронизация данных за последние 2 недели перед cutover-датой, потом переключение.

Итого

  • Salesforce и Kommo используют принципиально разные архитектуры: объект-центричная vs сделка-центричная
  • Opportunity Contact Roles, Account Hierarchy и Custom Objects не имеют аналогов в Kommo — их нужно проектировать заново
  • Контакты, сделки, задачи и события переносятся через API с маппингом
  • Главная фаза — не технический перенос, а проектирование маппинга: 2 из 5 недель типового проекта
  • 97%+ данных переносимы при правильном подходе; исключение — объекты без аналога в Kommo

Если вы рассматриваете переход с Salesforce на Kommo — опишите объём базы и какие Custom Objects использовались. Exceltic.dev оценит сложность маппинга и предложит конкретный план.

Ещё статьи

Все →