Typical situation: an online store on Bitrix with a catalog of 50,000 items. Conversion from visitors to buyers is 1.2%, but we could achieve 3% with personalized recommendations. Custom ML solutions on PHP/SQL require a powerful server and months of development. Ready cloud services—RetailRocket, Mindbox, Exponea, Segmentify—are already trained on millions of transactions and deliver results immediately after integration. We have been handling such integrations for over 10 years and have completed over 50 projects. Our goal is to set up two-way data exchange so that recommendations appear within days, not a month. We guarantee stable operation and an increase in average check by 15–20%.
Recently, on a project with a catalog of 120,000 items, we integrated RetailRocket in 5 days. After configuring server-side recommendations, conversion grew from 1.8% to 3.2% in one month. This result is achieved through proper transmission of all data types and using server-side rendering.
How to choose a predictive analytics service for Bitrix?
The choice depends on tasks. RetailRocket is better for medium-sized stores (1,000–100,000 items) with Russian-speaking audience: it offers a ready module and Russian-language support. Mindbox wins in depth of analytics and email/SMS integration, but costs 2–3 times more and is suitable for omnichannel projects. Segmentify focuses on real-time content personalization, while Exponea (Bloomreach) is a European vendor with strict GDPR, powerful segmentation, and analytics. For stores serving Europe, Exponea is a must.
| Service | Specialization | Price Segment | Best for |
|---|---|---|---|
| RetailRocket | Personalization, recommendations | Mid | Medium stores (1–100k items) |
| Mindbox | Omnichannel analytics, mailings | High | Large projects, email/SMS integration |
| Exponea (Bloomreach) | Real-time personalization, GDPR | High | European projects, strict requirements |
| Segmentify | Real-time content | Mid | Media, content projects |
Data for transfer to the analytics service
Transfer of events from the browser
Most services use JavaScript SDK to collect behavioral events. The SDK is installed in the <head> of the site template. The standard set of events includes product view, add to cart, and purchase. Here is a step-by-step instruction:
- Install the JavaScript SDK in the
<head>template. Connect the service script. - Define the product view event in the
catalog.elementtemplate:
// Example for a RetailRocket-like service analytics.push(['trackProductView', { id: <?= (int)$arResult['ID'] ?>, groupId: <?= (int)$arResult['IBLOCK_SECTION_ID'] ?>, price: <?= (float)($arResult['CATALOG_PRICE_1']['PRICE'] ?? 0) ?>, isAvailable: <?= $arResult['CATALOG_QUANTITY'] > 0 ? 'true' : 'false' ?> }]); - Add to cart—in the "Buy" button handler or via the
OnSaleBasketItemAddBeforeevent. - Purchase—on the order success page via
$arResult['ORDER_ID']of thesale.order.ajaxcomponent.
Transfer of the product catalog
The service must know the current catalog to show recommendations. Transfer is via a feed (YML, CSV, or custom format) or via API. A Bitrix agent generates the feed and publishes it at a URL. Example of feed generation in JSON:
function generateAnalyticsFeed(): void { $elements = \CIBlockElement::GetList( ['SORT' => 'ASC'], ['IBLOCK_ID' => CATALOG_IBLOCK_ID, 'ACTIVE' => 'Y'], false, false, ['ID', 'NAME', 'IBLOCK_SECTION_ID', 'DETAIL_PAGE_URL', 'PREVIEW_PICTURE', 'CATALOG_PRICE_1', 'CATALOG_QUANTITY'] ); $rows = []; while ($el = $elements->GetNext()) { $rows[] = [ 'id' => $el['ID'], 'name' => $el['NAME'], 'categoryId' => $el['IBLOCK_SECTION_ID'], 'url' => 'https://' . SITE_SERVER_NAME . $el['DETAIL_PAGE_URL'], 'imageUrl' => 'https://' . SITE_SERVER_NAME . \CFile::GetPath($el['PREVIEW_PICTURE']), 'price' => $el['CATALOG_PRICE_1'], 'inStock' => $el['CATALOG_QUANTITY'] > 0, ]; } file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/upload/analytics_feed.json', json_encode($rows)); } The feed is updated by an agent once per hour. The URL is registered in the analytics service dashboard. For an online store with 50,000 products, generation takes about 3 seconds.
Transfer of user data
On registration and profile update—send data to the service via API. Event handlers OnAfterUserRegister and OnAfterUserUpdate:
AddEventHandler('main', 'OnAfterUserRegister', function($fields) { if ($fields['EMAIL']) { AnalyticsService::identifyUser([ 'email' => $fields['EMAIL'], 'userId' => $fields['USER_ID'], 'firstName' => $fields['NAME'], 'phone' => $fields['PERSONAL_PHONE'], ]); } }); AnalyticsService::identifyUser() makes a POST request to the service API to identify the user.
Why server-side recommendations are better than client-side?
The client widget of the service is the simplest path: insert a <div> and get ready-made markup, but it has drawbacks: loading external JS delays rendering, customization is not possible. Server-side API gives full control: data comes in PHP, can be cached, mixed with promotional items, inserted directly into the HTML response. Tests show server-side rendering speeds up loading of the recommendation block by 40% compared to the client-side approach.
Example of getting recommendations in the catalog.element template:
$recommendations = AnalyticsService::getRecommendations([ 'type' => 'similar', 'productId' => $arResult['ID'], 'userId' => $USER->GetID(), 'limit' => 8, ]); // Pass to template for rendering with standard Bitrix tools $arResult['ANALYTICS_RECOMMENDATIONS'] = $recommendations; What's included in the work
- Installing and configuring the JavaScript SDK of the service in the site template: view, cart, purchase events.
- Catalog feed generator in the format required by the service, with an update agent (once per hour or more often).
- PHP event handlers for user identification on registration/profile update.
- Server-side API client for requesting recommendations and integration into catalog components.
- Transfer of order data via API or webhook on successful payment.
- Integration monitoring: error logging, alerts, Grafana dashboard.
- Documentation: description of settings, data schemas, support contacts.
For each stage, we provide written guarantees and fix SLA in the contract. On average, after configuring recommendations, clients see an increase in average check by 15–20% and conversion growth by 30–40%. Time savings on manual data collection and report generation amount to up to 20 hours per month. Contact us—we will select the optimal solution and show examples of our integrations. Order an audit of your current analytics system—we will find out which data is already ready for transfer and what needs refinement.
Timeline
| Stage | Timeframe |
|---|---|
| SDK installation and basic events (view/cart/purchase) | 2–3 days |
| Catalog feed with update agent | 1–2 days |
| User identification and profile transfer | 1–2 days |
| Server-side recommendations on catalog pages | 2–3 days |
| Triggered mailings via the service | 3–5 days |
Cost is calculated individually—depends on the number of products, update frequency, whether triggered mailings are needed. Get a consultation on your project—it's free.
Data transfer standards via CommerceML are described in Bitrix documentation.

