Из 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) — события и задачи внутри сделки или контакта.
Таблица маппинга объектов
| Salesforce | Kommo | Что теряется |
|---|---|---|
| Lead (unconverted) | Lead (сделка) | Поля конвертации, история до конвертации |
| Contact | Contact | Роли в Opportunity |
| Account | Company | Account как центральный объект |
| Opportunity | Lead (сделка) | Roles on Opportunity, multiple contacts |
| Task | Task | Некоторые типы задач |
| Event | Note (note_type=meeting) | Участники встречи |
| Call | Note (note_type=call) | Запись звонка |
| Custom Object | — | Нет аналога |
| Opportunity Contact Role | — | Потеря ролей |
| Account Hierarchy | — | Нет иерархии компаний |
Самые болезненные потери:
- Opportunity Contact Roles. В Salesforce к одной Opportunity привязаны несколько Contacts с ролями. В Kommo — один основной контакт на сделку (остальные как дополнительные, без ролей). Роли теряются.
- Account как центральный объект. В Salesforce Account — это компания с собственными активностями, контактами, историей. В Kommo Company — вторичный объект без собственной ленты событий. История на уровне компании, а не сделки, не переносится структурированно.
- 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 оценит сложность маппинга и предложит конкретный план.