Integration of 1C-Bitrix with Deal.by (Belarus)
Deal.by is a Belarusian marketplace and price aggregator for online stores. For a store running on 1C-Bitrix, integration means automatically exporting a product feed in the format Deal.by accepts, and synchronising prices and stock without manual intervention. Without automation, updating a catalogue of 5,000+ SKUs by hand means daily data staleness and a potential ban for inaccurate prices.
Deal.by feed format
Deal.by accepts feeds in YML (Yandex Market Language) format — the same XML format used by Yandex Market. This simplifies things: if a Yandex Market export has already been configured for the store, the base structure can be reused. However, Deal.by has its own requirements for additional parameters.
Minimum offer structure in Deal.by YML:
<offer id="12345" available="true">
<url>https://yourshop.by/catalog/product-123/</url>
<price>149.90</price>
<currencyId>BYN</currencyId>
<categoryId>42</categoryId>
<picture>https://yourshop.by/img/product-123.jpg</picture>
<name>Product name</name>
<vendor>Brand</vendor>
<description>Product description</description>
<param name="Color">Red</param>
</offer>
The currency for the Belarusian market is BYN (Belarusian ruble). If the Bitrix catalogue is maintained in RUB or USD, the feed must include conversion at the current exchange rate. The National Bank of Belarus rate is updated daily — the agent must fetch the current rate before generating the feed.
Feed generation in 1C-Bitrix
Bitrix has no dedicated Deal.by module, but the YML feed for Yandex Market is generated by the standard catalog.export module. We adapt this approach for Deal.by.
Create a custom export handler that extends \Bitrix\Catalog\Export\Setup. Override the following methods:
-
getTemplate()— the XML document template for Deal.by -
getOfferFields()— the set of offer fields with infoblock property mapping
Product properties from b_iblock_element_property are mapped to <param> tags in the XML. Some properties require normalisation — for example, "Color: Red/red/RED" should be brought to a consistent case, otherwise filtering on Deal.by will not work correctly.
Feed generation is triggered by an agent once an hour (or more frequently for stores with rapidly changing prices). The feed is saved to upload/ with public access — Deal.by periodically fetches it by URL.
Price and stock synchronisation
For Deal.by, feed accuracy is critical: if the price in the feed is lower than the actual price, the marketplace may penalise the store. Therefore:
-
The feed is generated only for items with non-zero stock — the
available="true"flag is set by checkingb_catalog_product.QUANTITY > 0. -
Items out of stock are included with
available="false"— they remain in the Deal.by catalogue but are marked as unavailable. This is better than full deletion: review history and ratings are preserved. -
Prices are taken from the "retail" price type (
b_catalog_pricewithCATALOG_GROUP_ID = 1). If multi-currency is used, convert to BYN using the current National Bank of Belarus rate.
Categorisation: mapping to the Deal.by category tree
Deal.by has its own category tree. The store must map its own categories to the marketplace's categories. This is done via the feed management section: a mapping table own_section_id → deal_by_category_id.
If the mapping is not configured, products fall into a general "Miscellaneous" category and are virtually impossible to find via the marketplace's search.
Estimated timelines
| Task | Timeline |
|---|---|
| YML feed setup for Deal.by | 3–7 days |
| + BYN currency conversion + stock updates | 1–2 weeks |
| + full category mapping (100+ sections) | 2–3 weeks |
Pricing is calculated individually after analysing the catalogue structure and current export configuration.







