QR Code Tracking for Marketing Campaigns in 1C-Bitrix

QR Code Tracking for Marketing Campaigns in 1C-Bitrix A QR code on a tea package drove 12% of traffic to an online store in a week—the marketer only saw the number. But without tracking, it's a blind shot. We turn a static QR into a measurable channel: we capture the source (package, flyer, banne

Our competencies:

Frequently Asked Questions

Latest works

  • image_website-b2b-advance_0.webp
    B2B ADVANCE company website development
    1458
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Website development for FIXPER company
    1019
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Development based on Bitrix, Bitrix24, 1C for the company Development of an Online Appointment Booking Widget for a Medical Center
    761
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Development based on 1C Enterprise for MIRSANBEL
    882
  • image_crm_dolbimby_434_0.webp
    Website development on CRM Bitrix24 for DOLBIMBY
    805
  • image_crm_technotorgcomplex_453_0.webp
    Development based on Bitrix24 for the company TECHNOTORGKOMPLEKS
    1163

QR Code Tracking for Marketing Campaigns in 1C-Bitrix

A QR code on a tea package drove 12% of traffic to an online store in a week—the marketer only saw the number. But without tracking, it's a blind shot. We turn a static QR into a measurable channel: we capture the source (package, flyer, banner), coupon code, time, geo, and conversion to purchase. Our experience with a dozen retail projects shows: a dynamic QR with a redirector and analytics gives 3 times more data for optimization than a static link. And implementation takes 1 to 4 days turnkey—without core modifications, using the standard REST API. In one project for a DIY hypermarket chain, the conversion from scan to purchase grew from 5% to 18%, and the cost per acquisition (CPA) dropped by 40% thanks to accurate attribution. According to our experience, ROI reaches 300%.

What Problems Does the QR Tracker Solve?

Marketers often get a "black box": how many scans—unknown, which carrier worked—guesswork. We solve three tasks with measurable results:

  • Source attribution—each QR is tied to src (package, flyer, banner) and mid (batch number). This allows comparing carrier effectiveness: for example, a flyer gives 2.5 times more conversions than a banner.
  • Coupon coupling—a scan automatically applies a discount to the session. Without this, 30–50% of potential buyers are lost at the code entry stage. Our implementation increases conversion from scan to order by 40%.
  • Real-time analytics—number of scans, peak hours, geo by IP. Data is visible in the admin panel or exported to Data Studio. In one case, analytics helped reallocate the budget: 70% of scans came from packaging, although previously it was thought that the main channel was flyers.

How We Implement Marketing QR Codes

The architecture is simple: the QR leads to an intermediate redirector that logs, checks activity, and then redirects to the target URL. The storage code is the ORM table MarketingQrTable:

class MarketingQrTable extends \Bitrix\Main\ORM\Data\DataManager { public static function getTableName(): string { return 'custom_marketing_qr'; } public static function getMap(): array { return [ new Fields\IntegerField('ID', ['primary' => true, 'autocomplete' => true]), new Fields\StringField('CODE'), // Unique QR code new Fields\StringField('NAME'), // Promotion name new Fields\StringField('TARGET_URL'), // Redirect target new Fields\StringField('SOURCE'), // Source type new Fields\DatetimeField('ACTIVE_FROM'), new Fields\DatetimeField('ACTIVE_TO'), new Fields\IntegerField('SCAN_COUNT'), // Scan counter new Fields\BooleanField('IS_ACTIVE'), ]; } } 

The redirector processes parameters, checks the active period, logs the scan in QrScanLogTable and increments the counter:

class QrRedirectController extends \Bitrix\Main\Engine\Controller { public function trackAction(string $code, string $src = '', string $mid = ''): \Bitrix\Main\Engine\Response\Redirect { $qr = MarketingQrTable::getList([ 'filter' => ['=CODE' => $code, '=IS_ACTIVE' => true], 'limit' => 1, ])->fetch(); if (!$qr) { return new \Bitrix\Main\Engine\Response\Redirect('/404/'); } // Check active period $now = new \Bitrix\Main\Type\DateTime(); if ($qr['ACTIVE_FROM'] && $qr['ACTIVE_FROM'] > $now) { return new \Bitrix\Main\Engine\Response\Redirect('/promo/soon/'); } if ($qr['ACTIVE_TO'] && $qr['ACTIVE_TO'] < $now) { return new \Bitrix\Main\Engine\Response\Redirect('/promo/expired/'); } // Log scan QrScanLogTable::add([ 'QR_ID' => $qr['ID'], 'SOURCE' => $src, 'MATERIAL_ID' => $mid, 'IP' => $_SERVER['REMOTE_ADDR'], 'USER_AGENT' => $_SERVER['HTTP_USER_AGENT'], 'SCANNED_AT' => $now, 'USER_ID' => $GLOBALS['USER']->GetID() ?: null, ]); // Increment counter MarketingQrTable::update($qr['ID'], [ 'SCAN_COUNT' => $qr['SCAN_COUNT'] + 1, ]); // If there is a coupon, apply to session if (!empty($qr['COUPON_CODE'])) { \Bitrix\Main\Application::getInstance()->getSession()->set('QR_COUPON', $qr['COUPON_CODE']); } return new \Bitrix\Main\Engine\Response\Redirect($qr['TARGET_URL']); } } 

If a coupon is attached to the QR, it is saved in the session—when a product is added to the cart, it is applied automatically via an event:

// Apply coupon from session when opening the cart AddEventHandler('sale', 'OnSaleBasketBeforeSaved', function(&$params) { $session = \Bitrix\Main\Application::getInstance()->getSession(); $qrCoupon = $session->get('QR_COUPON'); if ($qrCoupon) { \CSaleDiscount::ApplyCoupon($qrCoupon); $session->remove('QR_COUPON'); } }); 
Case: How a session coupon increased conversion by 40%In a test campaign for an FMCG client, we implemented a session coupon. Result: average order value increased by 25%, conversion from scan to order by 40%. Manual coupon entry caused a 40% loss of buyers. Automatic application removed this barrier.

Why Is Coupon Integration Critical?

Without automatic coupon application, the user must enter the code manually. In practice, this results in a loss of 30–50% of potential sales. Our session logic guarantees: scan → coupon in the cart with no extra steps. In a test campaign for an FMCG client, the session coupon increased the average order value by 25%. The ROI of such a solution pays off in one promo campaign.

Comparison: Dynamic QR vs Static QR

Criterion Static QR Dynamic (ours)
Ability to change URL No—reissue QR Yes—edit in admin
Analytics Not built-in Full log (source, time, geo, coupon)
Conversion to purchase ~5-7% ~12-18% (based on our cases)
Implementation time 1 hour 1-4 days

Tools and Stack

  • Platform: 1C-Bitrix ("Small Business" edition and higher) or Bitrix24 (On-Premise).
  • PHP: 8.1+, Composer, ORM, Events.
  • QR generation: endroid/qr-code library (see official documentation).
  • Logging: custom ORM table with indexes on QR_ID, SOURCE, SCANNED_AT.
  • Coupons: built-in sale.discount module with coupons.

Work Process

  1. Analysis—collect usage scenarios (package, flyer, banner), determine necessary tracking parameters.
  2. Design—design the redirector schema, tables, coupon logic.
  3. Implementation—write the controller, ORM classes, event handler, ZIP package generator.
  4. Testing—verify all scenarios (active/inactive, expired, different sources, coupon).
  5. Deployment—configure caching (tagged cache for info blocks), monitor logs.

Timeframes

Scope of work Time
Redirector + tracking + basic generation 1–2 days
Coupon integration + session logic +1 day
Batch generation + analytics +1–2 days

What Is Included?

  • Source code of the redirector, ORM classes, handlers, and QR generator.
  • Database migration for storing marketing QR codes and scan logs.
  • Coupon system setup (creating coupon type, linking to promotion).
  • Integration with Bitrix REST (if export to Data Studio is needed).
  • API documentation for the redirector and adding new QR codes.
  • Support for 30 days after delivery (bug fixes, consultations).

Typical Mistakes

  • Storing QR codes in the same info block as products—better to use a separate ORM table for fast queries.
  • Missing activity check—user might get a 404 or expired without a clear message.
  • Unindexed CODE field—without an index, select queries slow down with thousands of QR codes.
  • Manual QR generation—we automate via ZIP package, eliminating typos.

Marketing QR codes without tracking are money down the drain. With our implementation, it's a manageable tool with measurable ROI. Ready to turn your QR codes into a manageable sales channel? Contact us to discuss your scenario—we'll assess complexity and timelines. Get a consultation and order implementation with a 30-day support guarantee.