Automatically populating product descriptions from external 1C-Bitrix sources

Our company is engaged in the development, support and maintenance of Bitrix and Bitrix24 solutions of any complexity. From simple one-page sites to complex online stores, CRM systems with 1C and telephony integration. The experience of developers is confirmed by certificates from the vendor.
Our competencies:
Development stages
Latest works
  • image_website-b2b-advance_0.png
    B2B ADVANCE company website development
    1177
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Website development for FIXPER company
    811
  • 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
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Development based on 1C Enterprise for MIRSANBEL
    747
  • image_crm_dolbimby_434_0.webp
    Website development on CRM Bitrix24 for DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Development based on Bitrix24 for the company TECHNOTORGKOMPLEKS
    976

Auto-Filling Product Descriptions from External Sources in 1C-Bitrix

Auto-filling descriptions differs from a one-off scraping run: the system must operate in the background, process new products as they appear in the catalog, and not overwrite text that has been manually edited. This requires a well-designed trigger and priority architecture — not simply a script that loops over all products.

Triggers for Filling Descriptions

Auto-filling is initiated in three situations:

When a new product is added — the OnAfterIBlockElementAdd event handler fires. The product has just been created with empty fields; the system goes to the sources to fetch a description.

On a schedule for unfilled items — a cron job finds elements with an empty DETAIL_TEXT and adds them to the queue.

On manual request — a manager clicks "Fetch description" for a specific product in the admin panel.

Source Chain with Fallback

Descriptions are sought in sequence: if the first source yields no result, the next one is tried:

  1. Manufacturer API by VENDOR_CODE
  2. Icecat database by EAN/barcode
  3. Manufacturer website scraping
  4. AI generation based on name and attributes (last resort)

Each source implements DescriptionProviderInterface::getDescription(string $sku): ?string. The orchestrator iterates through providers in priority order.

Protecting Manual Edits

The key element is a DESCRIPTION_LOCKED property (type S, values Y/N). When a manager manually edits a description in the admin panel:

  • DESCRIPTION_LOCKED = Y is set
  • The auto-fill system skips that element

The flag is set via the OnBeforeIBlockElementUpdate handler — the system checks whether DETAIL_TEXT has changed relative to its previous value. If it has, and the change did not originate from the auto-fill system, the flag is set.

Queue and Prioritization

Not all products are equally important. Queue priority:

  • High: products with active orders or views (data from b_sale_order_item, b_stat_session)
  • Medium: new products without descriptions
  • Low: old products not viewed in more than 30 days

Implemented via a priority field in the queue table; workers select tasks ORDER BY priority DESC.

Project Timeline

Phase Duration
Provider architecture, interfaces 4–8 hours
Provider development (1–2 days each) 2–6 days
Triggers, queue, prioritization 1–2 days
Manual edit protection 4–6 hours
Admin management interface 1 day

Total: 6–12 working days depending on the number of sources.