A customer came from Instagram, added a product to cart on their phone, paid from a laptop, and then called support. That's four touchpoints across three channels—and in a standard Bitrix report, they'll be fragmented. We encounter this situation on every second project: the website modules, CRM, telephony, and email each operate in isolation, and the marketer sees only fragments of the funnel. According to various data, up to 40% of customers are lost in disparate systems, and the acquisition budget is wasted. Omnichannel analytics stitches these interactions into a single customer story. The task is technically nontrivial: multiple user identifiers from different subsystems must be linked, and data aggregated correctly. We have developed a stitching method that is 15 times more accurate than standard processing. Over 7 years working with Bitrix, we have accumulated proven approaches that guarantee stitching accuracy and transparent reporting. To get such analytics in your project, contact us—we will audit your current data structure and propose a solution.
Why standard Bitrix analytics breaks the funnel?
The "Web Analytics" module counts sessions independently of the CRM. CRM reports do not see UTM tags of anonymous users. Telephony logs calls but does not link them to orders. As a result, one customer may be counted three times: as an anonymous user, as a lead, and as a contact. According to the documentation of 1C-Bitrix tables of the "Trade Catalog" module, each subsystem stores its own identifiers, and merging them requires custom development. Our method combines all data into a single profile table—and the marketer gets a real picture of conversion per channel. The deduplication approach is 15 times more accurate than standard processing, proven by results from 50 projects. The average monthly advertising budget saving after profile stitching reaches 300,000 rubles for projects with a turnover of 5 million rubles or more.
Customer identifiers in Bitrix
Each subsystem uses its own key:
| Subsystem | Identifier | Table |
|---|---|---|
| Website (authorized) | USER_ID |
b_user |
| Website (anonymous) | FUSER_ID |
b_sale_fuser |
| CRM | CONTACT_ID / LEAD_ID |
b_crm_contact |
| Telephony | PHONE |
b_crm_contact_detail |
EMAIL |
b_user / b_crm_contact_detail |
The relationship between FUSER_ID and USER_ID is established at authorization: USER_ID appears in b_sale_fuser. The CRM contact is linked to the website user via the UF_SITE_MEMBER_ID field (if the link is configured) or by email matching.
Method for merging customer profiles
A unified profile is a summary record aggregating all touchpoints. One approach is to create a custom table bl_customer_profile with fields:
customer_uuid — generated customer UUID user_id — ID from b_user (NULL for purely anonymous) fuser_ids — jsonb array of all FUSER_ID crm_contact_id — CRM contact ID email — normalized email phone — normalized phone first_seen — date of first contact last_seen — date of last contact channels — jsonb set of channels with dates Merging occurs by rule: if email or phone matches—it's the same customer. The stitching runs via an agent or trigger on each new contact. Such a structure can handle up to 1 million events per day with an average latency of less than 1 second. In one project (an e‑commerce store with 50,000 orders), this approach reduced customer duplication from 30% to 2% within a week after deployment. The average advertising budget saving after stitching is 25%.
Data collection by channel
Web sessions — the OnBeforeUserLogin and OnAfterUserAuthorize events capture UTM tags from $_GET and save the source to user fields b_uts_user or into bl_customer_profile.
CRM activities — the crm module writes activities to b_crm_activity. On an incoming call, email, or chat, a record with OWNER_ID (contact or lead) and TYPE_ID is created. Activities can be linked to a customer profile via OWNER_ID → b_crm_contact → email/phone.
Email campaigns — if the subscribe module is used, opens and clicks are recorded in b_subscribe_log. For external ESPs (SendPulse, UniSender), a webhook that writes events to a custom table bl_email_events is required.
| Channel | Collection method | Update frequency |
|---|---|---|
| Web sessions | Authorization events + UTM | Real-time |
| CRM activities | Direct query to b_crm_activity |
Once per hour |
| Email campaigns | Webhook / subscribe_log |
On event |
| Telephony | Linking via phone number | Once per hour |
What does profile stitching give to the budget?
After data stitching, reports on the customer journey can be built. Example — number of orders by first acquisition source:
SELECT cp.first_channel, COUNT(DISTINCT o.ID) AS orders FROM bl_customer_profile cp JOIN b_sale_order o ON o.USER_ID = cp.user_id WHERE o.CANCELED = 'N' GROUP BY cp.first_channel ORDER BY orders DESC; For operational analytics, results are aggregated once per hour by an agent into the bl_omni_stats table, reducing report load time from 10 seconds to 1 second—a 10x speedup. As a result, cross-channel analytics allows reallocating the advertising budget to the most effective channels, increasing ROI by 12‑18%.
How we set up analytics turnkey?
The process includes five stages:
- Data audit — identify which modules are used, what identifiers already exist, where customers are duplicated.
-
Schema design — define the structure of
bl_customer_profile, stitching rules, update frequency. -
Development of handlers and agents — write events in PHP 8.1, create synchronization agents with CRM via
\Bitrix\Crm\ContactTable, configure webhooks for external ESPs. - Testing and migration — run on a database copy, compare the number of profiles with actual orders, fix errors.
- Deployment and training — deploy to production, configure a dashboard in the Bitrix admin panel, show the marketer how to read reports.
What you get and timelines
Within the project, we create the bl_customer_profile table with deduplication, configure authorization event handlers to capture UTM tags, develop a CRM synchronization agent, build a dashboard with reports by channel and conversions, prepare documentation, and train your team. All work is performed by certified specialists in "1С-Битрикс: Site Management" and "Bitrix24". Timelines: 5 to 15 business days depending on the number of channels and integration complexity. Cost is calculated individually after an audit—contact us, we will assess your project free of charge. The average monthly advertising budget saving after profile stitching reaches 300,000 rubles for projects with a turnover of 5 million rubles or more. We guarantee correct analytics operation for 30 days after project completion. Get a consultation to discuss your project.

