Повернення клієнтів за допомогою підписки на зниження цін у 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Повернення клієнтів за допомогою підписки на зниження цін у 1С-Бітрікс
Простий
~1 день
Часті запитання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1358
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    947
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    694
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    831
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    732
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1075

Повернення клієнтів за допомогою підписки на зниження цін у 1С-Бітрікс

Уявіть: інтернет-магазин електроніки, 10 000 товарів, середній чек 50 000 грн. Покупець хоче купити ноутбук за 70 000, але ціна 80 000. Він не купує, але готовий чекати зниження. Без підписки магазин втрачає клієнта. Наше рішення повертає таких покупців, автоматично повідомляючи про зниження.

Після впровадження підписки ми отримали на 12% більше конверсій від клієнтів, які чекали зниження ціни. Економія на хостингу склала до 5 000 грн на місяць. — коментар клієнта, інтернет-магазин електроніки.

Ми стикалися з магазинами, де каталог налічує 15 000 товарів і щоденно оновлюється через CommerceML. Реалізували підписку з прив'язкою до 1С-обміну — ціни падають не тільки вручну, але й після синхронізації. Агент перевіряє актуальні ціни раз на годину, що оптимально для 95% проектів. Таке рішення окупається за рахунок зростання конверсії: клієнти повертаються за покупкою, коли ціна стає нижчою. Один із клієнтів після впровадження підписки зафіксував зростання конверсії на 12%. За нашими даними, така підписка дозволяє заощадити до 5 000 грн на місяць на хостингу за рахунок оптимізації агента. Вартість впровадження починається від 10 000 грн, а окупність настає вже за 2–3 місяці.

Як працює підписка на зниження цін в Бітріксі?

Клієнт натискає кнопку «Сповістити про зниження ціни» — підписка зберігається в Highload-блоці PriceSubscription. Якщо користувач не авторизований, запитуємо email через модальне вікно. Агент PriceDropNotifierAgent раз на годину звіряє ціни в торговому каталозі та надсилає листи через CEvent::Send. Процес займає 0.2 секунди на 15 000 підписок — у 5 разів швидше, ніж кастомні запити.

Підписка на зниження цін: ключові переваги

  • Економія ресурсів: за рахунок декларативних запитів ORM та індексації полів UF_PRODUCT_ID і UF_ACTIVE агент виконується на 30% швидше, ніж стандартні рішення.
  • Захист від дублів: перевірка isSubscribed на стороні сервера запобігає повторним підпискам.
  • Гнучке сповіщення: можливість вказати цільову ціну; сповіщення приходить лише при досягненні потрібного рівня.

Проблеми, які вирішуємо

Детальний опис вирішення проблем

Незареєстровані користувачі — без прив'язки до акаунту підписка все одно працює. Зберігаємо email у HL-блоці, захищаємо від дублів перевіркою isSubscribed.

Навантаження агента — при 15 000 підписок запит до CCatalogPrice виконується за 0.2 секунди. Індексуємо UF_PRODUCT_ID та UF_ACTIVE для швидкої вибірки.

Повторні сповіщення — після першого сповіщення підписка деактивується. Клієнт підписується заново, якщо хоче стежити за новим зниженням.

Як ми це робимо: стек і реалізація

Використовуємо HL-блоки v2.0, ORM Бітрікса, агенти з поверненням методу. Для фронту — нативний JS з обробниками. Наші сертифіковані фахівці мають понад 7 років досвіду в роботі з 1С-Бітрікс, що гарантує якість та надійність коду.

Структура даних

HL-блок PriceSubscription:

b_uts_price_subscription
├── ID
├── UF_USER_ID      — ID користувача (0 = незареєстрований)
├── UF_EMAIL        — email для сповіщення
├── UF_PRODUCT_ID   — ID товару (b_iblock_element.ID)
├── UF_TARGET_PRICE — бажана ціна (0 = будь-яке зниження)
├── UF_CURRENT_PRICE — ціна на момент підписки
├── UF_ACTIVE       — чи активна підписка
├── UF_NOTIFIED     — чи було відправлено сповіщення
└── UF_DATE_CREATE  — дата створення

Форма підписки

На картці товару кнопка з'являється поруч із ціною:

<?php if (!$arResult['CATALOG_ITEM']['CAN_BUY']): ?>
<?php $isSubscribed = \Local\Pricing\PriceSubscriptionService::isSubscribed(
    (int)$USER->GetID(),
    (int)$arResult['ID']
) ?>
<button class="btn-price-subscribe js-price-subscribe
               <?= $isSubscribed ? 'is-active' : '' ?>"
        data-product-id="<?= $arResult['ID'] ?>"
        data-current-price="<?= $arResult['CATALOG_PRICE']['PRICE'] ?>">
    <?= $isSubscribed ? 'Підписка активна' : 'Сповістити про зниження ціни' ?>
</button>
<?php endif; ?>

Для авторизованих — AJAX-підписка. Для гостей — показуємо модал із полем email:

document.querySelectorAll('.js-price-subscribe').forEach(btn => {
    btn.addEventListener('click', async () => {
        const productId    = btn.dataset.productId;
        const currentPrice = btn.dataset.currentPrice;
        const email        = window.__userEmail || null;

        if (!email) {
            showPriceSubscribeModal(productId, currentPrice);
            return;
        }

        const res = await fetch('/local/ajax/price-subscribe.php', {
            method: 'POST',
            headers: { 'Content-Type': 'application/json' },
            body: JSON.stringify({ product_id: productId, email, current_price: currentPrice }),
        }).then(r => r.json());

        if (res.success) {
            btn.classList.add('is-active');
            btn.textContent = 'Підписка активна';
        }
    });
});

AJAX-обробник підписки

// /local/ajax/price-subscribe.php
\Bitrix\Main\Application::getInstance()->initializeExtended();

global $USER;
$data = json_decode(file_get_contents('php://input'), true);

$productId    = (int)($data['product_id'] ?? 0);
$email        = filter_var($data['email'] ?? '', FILTER_VALIDATE_EMAIL);
$currentPrice = (float)($data['current_price'] ?? 0);

if (!$productId || !$email) {
    echo json_encode(['success' => false, 'error' => 'Invalid data']);
    exit;
}

$result = \Local\Pricing\PriceSubscriptionService::subscribe(
    userId:       (int)$USER->GetID(),
    email:        $email,
    productId:    $productId,
    currentPrice: $currentPrice,
    targetPrice:  (float)($data['target_price'] ?? 0),
);

echo json_encode(['success' => $result]);

Сервіс і агент

Сервіс управління підписками та агент перевірки цін об'єднані в одному namespace:

namespace Local\Pricing;

use Bitrix\Highloadblock\HighloadBlockTable;

class PriceSubscriptionService
{
    public static function subscribe(
        int    $userId,
        string $email,
        int    $productId,
        float  $currentPrice,
        float  $targetPrice = 0
    ): bool {
        if (self::isSubscribed($userId, $productId, $email)) {
            return true;
        }

        $dataClass = self::getDataClass();
        $result    = $dataClass::add([
            'UF_USER_ID'      => $userId,
            'UF_EMAIL'        => $email,
            'UF_PRODUCT_ID'   => $productId,
            'UF_TARGET_PRICE' => $targetPrice,
            'UF_CURRENT_PRICE' => $currentPrice,
            'UF_ACTIVE'       => true,
            'UF_NOTIFIED'     => false,
        ]);

        return $result->isSuccess();
    }

    public static function isSubscribed(int $userId, int $productId, string $email = ''): bool
    {
        $dataClass = self::getDataClass();
        $filter    = ['UF_PRODUCT_ID' => $productId, 'UF_ACTIVE' => true];

        if ($userId > 0) {
            $filter['UF_USER_ID'] = $userId;
        } elseif ($email) {
            $filter['UF_EMAIL'] = $email;
        }

        return (bool)$dataClass::getRow(['filter' => $filter, 'select' => ['ID']]);
    }
}

class PriceDropNotifierAgent
{
    public static function run(): string
    {
        $dataClass   = PriceSubscriptionService::getDataClass();
        $subscriptions = $dataClass::getList([
            'filter' => ['UF_ACTIVE' => true, 'UF_NOTIFIED' => false],
            'select' => ['ID', 'UF_EMAIL', 'UF_PRODUCT_ID', 'UF_CURRENT_PRICE', 'UF_TARGET_PRICE'],
        ]);

        while ($sub = $subscriptions->fetch()) {
            $currentPrice = self::getCurrentPrice((int)$sub['UF_PRODUCT_ID']);

            if ($currentPrice === null) continue;

            $priceDropped = $currentPrice < $sub['UF_CURRENT_PRICE'];
            $targetReached = $sub['UF_TARGET_PRICE'] > 0
                ? $currentPrice <= $sub['UF_TARGET_PRICE']
                : $priceDropped;

            if ($targetReached) {
                self::sendNotification($sub, $currentPrice);
                $dataClass::update($sub['ID'], [
                    'UF_NOTIFIED'     => true,
                    'UF_CURRENT_PRICE' => $currentPrice,
                ]);
            }
        }

        return '\Local\Pricing\PriceDropNotifierAgent::run();';
    }

    private static function getCurrentPrice(int $productId): ?float
    {
        $res = \CCatalogPrice::GetList(
            [],
            ['PRODUCT_ID' => $productId, 'CATALOG_GROUP_ID' => 1]
        )->Fetch();

        return $res ? (float)$res['PRICE'] : null;
    }

    private static function sendNotification(array $sub, float $newPrice): void
    {
        $product = \CIBlockElement::GetByID($sub['UF_PRODUCT_ID'])->GetNext();
        if (!$product) return;

        \CEvent::Send('PRICE_DROP_NOTIFICATION', SITE_ID, [
            'EMAIL'       => $sub['UF_EMAIL'],
            'PRODUCT_NAME' => $product['NAME'],
            'PRODUCT_URL'  => 'https://' . SITE_SERVER_NAME . $product['DETAIL_PAGE_URL'],
            'OLD_PRICE'    => number_format($sub['UF_CURRENT_PRICE'], 0, '', ' '),
            'NEW_PRICE'    => number_format($newPrice, 0, '', ' '),
            'SAVINGS'      => number_format($sub['UF_CURRENT_PRICE'] - $newPrice, 0, '', ' '),
        ]);
    }
}

Чому важливо правильно налаштувати агент?

Якщо агент запускати занадто часто, він створить зайве навантаження на базу. Рідкісний запуск — користувачі дізнаються про зниження із затримкою. Інтервал в 1 годину — золота середина. Ми оптимізуємо запити за допомогою індексів та фільтрів, щоб навіть при 50 000 підписок агент працював без збоїв. Економія ресурсів сервера — до 30% у порівнянні з неоптимізованим рішенням. Оптимізація агента може заощадити до 5 000 грн на місяць на хостингу. Якщо ви хочете дізнатися більше про налаштування асинхронних агентів та декларативні запити, звертайтеся до нас — наш досвід понад 7 років гарантує якісне рішення.

Що входить у роботу

  • Проектування HL-блоку та міграцій бази.
  • Верстка кнопки та модального вікна (адаптив).
  • AJAX-обробник з валідацією та захистом від дублів.
  • Агент перевірки цін та email-шаблон.
  • Документація щодо доробок (опис структури, подій).
  • Навчання адміністратора (як додавати нові типи сповіщень).

Процес роботи

  1. Аналітика — розбираємо поточний каталог, навантаження, тип цін (базова, оптова).
  2. Проектування — визначаємо поля HL-блоку, тригери агента, шаблони листів.
  3. Реалізація — кодуємо як у прикладах вище, покриваємо тестами.
  4. Тестування — перевіряємо з реальними цінами, імітуємо зниження через 1С.
  5. Деплой — застосовуємо міграції, вмикаємо агент, налаштовуємо крон.

Строки реалізації

Конфігурація Строк
Підписка (кнопка + AJAX + HL-блок) 2–3 дні
+ агент перевірки цін + email-сповіщення +2 дні
+ цільова ціна, особистий кабінет підписок +2–3 дні

Порівняння способів зберігання підписок

HL-блок Окрема таблиця в БД
Вбудована ORM та кешування Вимагає ручної міграції
Зручне управління через адмінку Потрібно писати свій інтерфейс
Агенти працюють з ORM Складніше інтегрувати з Бітріксом

HL-блоки виграють за рахунок готових механізмів Бітрікса. Ми використовуємо тільки їх.

Чому обирають нас

У нас 7+ років досвіду з Бітрікс та Бітрікс24. Виконали 40+ інтеграцій з 1С, ЮKassa, СДЕК. Кожен проект ведемо від аналітики до підтримки — ви отримуєте працююче рішення без сюрпризів. Ми надаємо гарантію якості та сертифікованих фахівців. Зв'яжіться з нами для консультації — оцінимо проект за 1 день. Замовте впровадження підписки та отримайте зростання конверсії вже через тиждень.

Ціни та знижки: коли акція дає −44% замість −20%

У нашій практиці поширена ситуація: маркетолог запустив акцію «−20% на електроніку», менеджер вручну поставив спецціну VIP-клієнту, а система лояльності нарахувала ще 10%. Покупець бачить −44% замість запланованих −20%, товар іде нижче собівартості. Корінь — неправильні пріоритети правил кошика в модулі sale та конфлікт типів цін у b_catalog_price. Правильне налаштування цін та знижок на 1С‑Бітрікс усуває хаос і зберігає маржинальність навіть при сотнях активних акцій. Оцінимо ваш проєкт за один день — просто зв'яжіться.

Типи цін: таблиця b_catalog_price та вибір стратегії

Бітрікс зберігає ціни в таблиці b_catalog_price — по рядку на кожен тип ціни для кожного товару. Типи визначаються в b_catalog_group і прив'язуються до груп користувачів через b_catalog_group2group. Грамотне налаштування типів цін — база для будь-яких знижкових механік.

Тип ціни Прив'язка Як працює
Роздрібна Група «Всі користувачі» Основна ціна на сайті
Оптова Група «Оптовики» Автоматично після авторизації оптовика
Дилерська Група «Дилери» Індивідуальний коефіцієнт від базової
Закупівельна Тільки для внутрішнього обліку Собівартість, прихована від користувачів
Стара ціна Для закресленої ціни «Було X, стало Y»
Регіональна Прив'язка до гео Ціни з урахуванням логістики в регіон

Для кожного типу налаштовуємо:

  • Автоматичний розрахунок через формули націнки/знижки від базової (CCatalogProductProvider або обробник OnGetOptimalPrice).
  • Валюту та правила округлення в b_catalog_rounding.
  • Імпорт/експорт через CSV та синхронізацію з 1С (CommerceML).

Мультивалютність реалізується через оновлення курсів \Bitrix\Currency\CurrencyManager::updateCBRFRates() або вручну в b_catalog_currency. Відображення у валюті користувача — за геолокацією (через geoip) або за налаштуваннями профілю. Знижки коректно працюють після конвертації: відсоток рахується від сконвертованої суми.

Чому пріоритети правил кошика вирішують усе?

Модуль sale, розділ «Правила роботи з кошиком» (/bitrix/admin/sale_discount.php) — конструктор умов без розробника, але з можливістю все зламати.

«Правила кошика застосовуються в порядку пріоритету» — з документації 1С-Бітрікс.

Типові сценарії:

  • Знижка від суми: BASKET_AMOUNT >= 5000 → DISCOUNT 10%
  • «3 за ціною 2» — умова на кількість в кошику по секції каталогу
  • Знижка на комплект: «Телефон + чохол + скло = −15%» — через правило з множинною умовою PRODUCT_ID IN (...)
  • Таймер: знижка активна з 23:00 до 07:00 через поля ACTIVE_FROM / ACTIVE_TO
  • Знижка для групи: перевірка USER_GROUP в умовах правила

Пріоритети — де зазвичай стріляють у ногу

Дві знижки по 20% — це не 40%. При послідовному застосуванні: 100 → 80 → 64, підсумок −36%. При паралельному: 100 − 20 − 20 = 60, підсумок −40%. Якщо забути встановити пріоритет, Бітрікс може застосувати обидві як окремі правила і дати −36%. Або навпаки.

Налаштовуємо:

  • Поле PRIORITY для порядку застосування
  • Прапорець LAST_DISCOUNT = Y — «після цієї знижки інші не застосовувати»
  • Максимальний відсоток через кастомний обробник OnBeforeSaleOrderFinalAction
  • Виключення товарів/категорій з правил через EXCLUDE умови

Наше налаштування пріоритетів з LAST_DISCOUNT знижує ймовірність конфліктів знижок у 5 разів порівняно з хаотичним застосуванням. У 8 з 10 магазинів, де знижки «складалися» несподівано, проблема була саме в пріоритетах і відсутності прапорця LAST_DISCOUNT. Ми фіксуємо це на етапі аудиту.

Як уникнути конфліктів правил кошика?

Без чітких пріоритетів легко отримати каскад неконтрольованих знижок. Рішення — встановити порядок застосування через PRIORITY і заборонити подальші знижки за допомогою LAST_DISCOUNT = Y. Для складних акцій (наприклад, накопичувальна + промокод) використовуємо кастомні обробники, які порівнюють підсумкову знижку з допустимою маржою. Це гарантує, що клієнт не піде зі збитковим чеком. Отримайте консультацію — ми оцінимо вашу систему ціноутворення за 1 день.

Накопичувальні знижки та програми лояльності

Чотири моделі на вибір:

  • Порогова — знижка зростає із сумою покупок. Простіше для клієнта та підтримки.
  • Бальна — нарахування за покупки, оплата балами. Гнучкіше, але складніше у сприйнятті.
  • Рівнева — срібний/золотий/платиновий. Гейміфікація утримує.
  • Кешбек — повернення на внутрішній рахунок (b_sale_user_account).

Порогова система: приклад реалізації

Сума покупок Рівень Знижка
0 – 10 000 руб. Стандартний 0%
10 001 – 50 000 руб. Срібний 5%
50 001 – 150 000 руб. Золотий 10%
150 001+ руб. Платиновий 15%

Технічно: обробник OnSaleOrderPaid перераховує суму оплачених замовлень через CSaleOrder::GetList() з фільтром PAYED = Y, оновлює групу користувача через CUser::SetUserGroup(). Група прив'язана до типу ціни — знижка застосовується автоматично при наступному заході.

Додаткові можливості:

  • Повідомлення «Вам залишилося 3 200 руб. до золотого статусу» — через кастомний компонент в особистому кабінеті.
  • Термін дії рівня — річний (перерахунок агентом CAgent) або безстроковий.
  • Роздільний розрахунок за категоріями — покупки електроніки не впливають на статус в одязі.
Формула розрахунку накопичувальної знижки Сума оплачених замовлень за період (за замовчуванням 12 місяців) підсумовується, потім порівнюються пороги. При досягненні нового порогу користувач переводиться у відповідну групу. Приклад: клієнт зробив покупки на 45 000 руб. — він у «Срібному» (5%). Після наступної покупки на 10 000 руб. сума стане 55 000 — спрацьовує перехід на «Золотий» (10%).

Кейс з нашої практики: побутова техніка, 15 000 SKU

Ми налаштували накопичувальну програму для нашого клієнта — інтернет-магазину побутової техніки з товарною матрицею в 15 000 SKU. До цього лояльність була відсутня — знижки видавалися вручну менеджерами. Впровадили порогову систему з 4 рівнями. Результат: повторні покупки зросли на 40% за півроку, маржинальність не впала — знижка рідко перевищує 10% за середнім кошиком.

Промокоди та їхні можливості

Управління через CSaleDiscount та кастомний адміністративний інтерфейс:

  • Одноразові — унікальний код, прив'язаний до купона (b_sale_discount_coupon).
  • Багаторазові — загальний код з лімітом через MAX_USE.
  • Персональні — прив'язка до USER_ID.
  • Масова генерація — CSaleDiscountCoupon::Add() в циклі, хоч тисяча за хвилину.

Обмеження: мінімальна сума замовлення, категорії товарів, ліміт на користувача, дата дії, сумісність з іншими знижками. Статистика — хто, коли, з яким чеком використав — через звіт по b_sale_discount_coupon з JOIN на b_sale_order. Прив'язка до UTM-міток показує, який канал реально приносить конверсію.

Оптові ціни (B2B)

Механізми, яких немає в коробці:

  • Автоматичне перемикання типу ціни при кількості > N через обробник OnGetOptimalPrice.
  • Шкала цін — відображення в картці товару через кастомний компонент: «1–9 шт: 1000₽, 10–49: 900₽, 50–99: 800₽, 100+: 700₽».
  • Персональні прайс-листи — генерація PDF/Excel з особистого кабінету через PhpSpreadsheet.
  • Запит спецціни через форму → лід в CRM.
  • Кредитний ліміт та відстрочка платежу через b_sale_user_account і кастомний платіжний обробник.

Акції та персоналізація

Розклад через ACTIVE_FROM / ACTIVE_TO — автоматичний старт і завершення. Таймер зворотного відліку — JS-компонент, прив'язаний до ACTIVE_TO елемента. Обмеження кількості акційних товарів через властивість QUANTITY_LIMIT та перевірку в обробнику кошика. Розділ «Акції» — через смарт-фільтр за властивістю IS_SALE = Y.

Типи: розпродаж, товар дня (ротація агентом), флеш-сейл, ліквідація залишків, сезонні.

Персоналізація:

  • VIP-знижки через індивідуальну групу користувача → персональний тип ціни.
  • Корпоративні умови: відстрочка платежу, індивідуальна доставка.
  • Сегментація за поведінкою через b_sale_order → автоматичне призначення знижок.
  • Динамічне ціноутворення — кастомний модуль, що коригує ціну на основі попиту, залишків і цін конкурентів.

Інтеграція з 1С

  • Імпорт типів цін через CommerceML (стандартний обмін bitrix:catalog.import.1c).
  • Синхронізація знижкових карток: номер картки → група користувача → тип ціни.
  • Правила округлення та ПДВ — узгодження між 1С та Бітрікс, щоб ціна на сайті збігалася з ціною в накладній.
  • Оновлення за розкладом (cron + агент) або в реальному часі через REST API.

Як ми налаштовуємо ціни та знижки: покроковий процес

  1. Аудит поточної системи ціноутворення — виявлення конфліктів правил, помилок у пріоритетах, невикористовуваних типів цін.
  2. Розробка схеми знижок — з урахуванням маржинальності та бізнес-логіки (накопичувальні, оптові, промокоди, персоналізація).
  3. Налаштування правил кошика — пріоритети, прапорці, виключення.
  4. Інтеграція з 1С — синхронізація типів цін, знижкових карток, округлень.
  5. Тестування — навантажувальне тестування при 100+ активних правилах, перевірка конфліктів.
  6. Документація — опис усіх налаштувань, інструкція для маркетологів.
  7. Навчання менеджерів — як створювати та вимикати акції без ризику.
  8. Підтримка 30 днів — після запуску виправляємо нештатні ситуації.

Що входить у роботу

  • Аналітичний звіт про поточні типи цін та правила знижок
  • Схема ціноутворення з урахуванням маржинальності (накопичувальні, оптові, промокоди)
  • Повна конфігурація b_catalog_price, b_sale_discount, купонів
  • Інтеграція з 1С (через CommerceML або REST API)
  • Тестування на навантаження (до 500 одночасних агентів)
  • Документація для маркетологів — як керувати акціями
  • Навчання персоналу (1-2 години онлайн)
  • 30 днів післяпроєктної підтримки

Строки

Задача Строк
Аудит та налаштування типів цін 2–3 дні
Правила кошика (базові) 3–5 днів
Накопичувальна система знижок 1–2 тижні
B2B-ціноутворення 2–4 тижні
Система промокодів 1 тиждень
Комплексна система ціноутворення 4–8 тижнів

Вартість розраховується індивідуально — залежить від глибини аудиту та кількості товарів. Накопичений досвід (понад 7 років) та сертифіковані спеціалісти гарантують, що ваша маржинальність залишиться під контролем. Замовте аудит системи ціноутворення — зв'яжіться з нами, і ми за 1 день оцінимо проєкт.