Manual import of a supplier XML feed into 1C-Bitrix becomes a nightmare when the catalog has tens of thousands of items. Mapping errors, duplicates, lost stock — sound familiar? We are a team of certified Bitrix developers with 5+ years of experience and over 50 successful integrations — we automate this process turnkey. Our supplier XML feed parsing for 1C-Bitrix integration ensures automatic product synchronization with 99% mapping accuracy. For example, with 50,000 items, manual import takes 2-3 days, while automated parsing takes 15 minutes. Typical setup costs from $399 and saves $500 per month in employee time — that's $6,000 per year.
What is a supplier XML feed and why is it better than Excel?
An XML feed is a structured file with up-to-date product data: prices, stock, descriptions, attributes. Unlike an Excel price list, XML is predictable: it has a schema and can be parsed reliably with minimal errors. But "predictable" doesn't mean "standard" — each supplier invents their own XML format.
| Format |
Features |
Memory |
Parsing Speed |
| Flat |
All items at one level |
Low |
High |
| Hierarchical |
Nested categories |
Medium |
Medium |
| Namespaced |
Prefixes like g:id |
High |
Low (requires namespace handling) |
Choosing a parser for large XML feeds
For files up to 50 MB, SimpleXML is sufficient. It loads the entire document into memory, providing maximum speed. For feeds with hundreds of thousands of items (e.g., 500,000 positions), SimpleXML consumes over 1 GB of RAM — XMLReader processes streams and uses 10x less memory. Example of XMLReader usage:
$reader = new XMLReader();
$reader->open($filePath);
while ($reader->read()) {
if ($reader->nodeType === XMLReader::ELEMENT && $reader->name === 'offer') {
$node = new SimpleXMLElement($reader->readOuterXml());
// process one item
}
}
Proper parser selection reduces server load by 70% and saves up to 70% processing time. XMLReader is the standard choice for catalogs of 100,000+ items.
How to map feed attributes to infoblock properties?
Many suppliers store attributes as a list of <param> elements with a name attribute. Extract into an array:
$params = [];
foreach ($offer->param as $param) {
$name = (string)$param['name'];
$value = (string)$param;
$params[$name] = $value;
}
Then save to the infoblock via CIBlockElement::SetPropertyValueCode. For list properties, create a list element beforehand if it doesn't exist.
Integration workflow
- Analysis — examine the XML structure, identify features, agree on mapping.
- Design — choose parser, storage architecture (infoblocks / HL-blocks).
- Development — write the parser, configure mapping, error handling.
- Testing — load a test feed, verify data correctness and performance.
- Deployment — set up cron, logging, error notifications.
Implementation details: configurable mapping and error handling
Suppliers often change the XML structure without notice. We develop the parser with configurable mapping in a YAML file — adapting only requires changing settings, not code. Logging all errors and notifications via Telegram or email ensure no issue goes unnoticed.
What's included in the result
- XML feed analysis and consultation
- Parser development accounting for all features
- Mapping into Bitrix infoblocks
- Scheduled synchronization setup
- Testing and bug fixing
- Documentation and admin instructions
- Warranty support after launch
| Option |
Scope |
Typical timeline |
| Single supplier, simple XML |
Parser + price/stock update |
from 2 days |
| Complex XML with parameters |
Mapping attributes to infoblock properties |
from 4 days |
| Multi-supplier system |
Configurable mappings, UI for settings |
from 7 days |
Timeline and cost are assessed individually after feed analysis. Get a consultation — we'll send a standard work plan and estimate effort.
Common parsing mistakes and how to avoid them
A common issue: the supplier changes attributes without notice. Solution: configurable mapping via YAML file or separate class to adapt without redeployment. Another mistake is ignoring encoding: XML is UTF-8, but the site may be CP1251. We convert strings immediately upon reading.
Benefits of incremental synchronization
Full reload is simpler, but with 50,000+ items it takes hours. Incremental sync updates only changed rows based on hash or modified field. We recommend incremental approach for catalogs updated more than once a day: it reduces server load and sync window time.
Case study: we processed a supplier feed with 150,000 items and 30 parameters each. Used XMLReader, mapping via XPath. Load time: 15 minutes vs 3 hours for full reload. According to 1C-Bitrix documentation, "for large volumes of data, it is recommended to use the streaming XMLReader parser."
Set up cron:
0 */3 * * * /usr/bin/php /home/bitrix/www/local/cron/supplier_xml_import.php
Prices and stock every 2-4 hours, descriptions once daily. After each run — detailed log with update counts and errors; on failure — notification to admin.
Want to forget about manual price list uploads? Contact us — we will analyze your XML and offer the optimal solution within 1 day. Get a consultation: we will assess the complexity and propose a solution for your budget.
Parser Development for 1C-Bitrix: Where to Start?
XMLReader, not SimpleXML — the choice of tool determines the project's fate. SimpleXML loads the entire XML into memory, and with an 800 MB supplier file, PHP will crash with a fatal error on a 512 MB limit. XMLReader processes streamingly, node by node, consuming 20–30 MB — 30 times more efficient. This detail starts any parser development for Bitrix. With over 10 years of Bitrix development and 50+ parser projects delivered, we know the pitfalls. Contact us to start your parser development today.
What Problems Does Parsing Solve?
- Primary catalog filling — 15,000 cards with descriptions, characteristics, photos. Manually, that's three months of content manager work; a parser takes a week with debugging.
- Competitor price monitoring — collecting data from Ozon, Wildberries, competitor sites. A competitor drops the price on a hot item — you find out in two hours, not two weeks.
- Supplier aggregation — five price lists in different formats (CSV with CP1251, XML in CommerceML, Excel with merged cells) become a single catalog with a unified property system.
- Card enrichment — pulling characteristics, instructions, 3D models from manufacturer sites. Without this, a product card is an SEO empty shell.
- Assortment update — products missing from the supplier feed are deactivated via
CIBlockElement::Update($ID, ['ACTIVE' => 'N']). New ones are created. The catalog stays synchronized.
What Tools Do We Use in Parser Development?
Static websites — PHP (Goutte, Symfony DomCrawler) or Python (Scrapy, lxml). Speed: 50–100 pages/sec. Sufficient for catalogs without JS rendering.
SPA and dynamic websites — Puppeteer or Playwright. Infinite scroll, AJAX filters, lazy-load images — headless browser handles it all. Speed drops to 1–10 pages/sec, but there is no alternative: data exists only after JavaScript execution.
Supplier files:
- Excel (XLS, XLSX) — PhpSpreadsheet. Beware of merged cells and formulas — they break automatic mapping.
- CSV —
fgetcsv() with correct encoding. Suppliers love CP1251, BOM in UTF-8, and semicolons instead of commas. All need detection and handling.
- XML/YML — XMLReader for large files, SimpleXML for feeds up to 50 MB.
- CommerceML — standard exchange format with 1C. We parse
import.xml and offers.xml, map to information block structure.
API — Supplier REST endpoints, marketplace APIs (Ozon Seller API, Wildberries API). We work within rate limits, handle pagination.
How Is the Auto-Population Pipeline Structured?
Four stages. Each can break in its own way.
-
Collection. Parser crawls sources via cron schedule. Raw data goes to an intermediate table — not directly into b_iblock_element. Log everything: pages visited, elements parsed, where we got 403 or timeout. Without logs, debugging a parser is like fortune-telling.
-
Normalization. Main work here:
- Clean HTML tags, extra spaces, Unicode garbage
- Units: "mm" → "mm", "millimeters" → "mm", "миллиметр" → "mm"
- Map supplier categories to Bitrix information block sections. One supplier has "Notebooks", another "Notebooks and tablets", third "Laptops" — all into one section
- Deduplication by SKU, EAN/GTIN. One product from three suppliers should not appear three times
-
Load into Bitrix. Via CIBlockElement::Add() for new elements, CIBlockElement::Update() for existing. Images: download, resize via CFile::ResizeImageGet(), convert to WebP. Properties via CIBlockElement::SetPropertyValuesEx(). SEO meta via \Bitrix\Iblock\InheritedProperty\ElementValues. SEF URLs generated from name transliteration.
-
Update. Key point — not overwrite manual edits by content manager. Update only price, stock, activity. Description and photos manually edited are flagged with UF_MANUAL_EDIT property and skipped during import. Products missing from feed are deactivated, not deleted.
Why Is Competitor Price Monitoring Necessary?
A separate subsystem with its own specifics:
| Parameter |
How It Works |
| Frequency |
From once a day to every 2 hours — depends on market volatility |
| Matching |
By SKU, EAN, fuzzy name comparison via Levenshtein distance |
| Storage |
Separate vendor_price_monitor table with history, not information blocks |
| Alerts |
Telegram/email when competitor price deviation exceeds X% |
| Auto-rules |
"Keep price 3% below competitor minimum, but not below cost + 15%" |
Result — dashboard: your product vs competitors, price history, trends. The manager sees where to raise price without losing position, and where to react.
CSV/XML Import Module: Customization for Your Format
For supplier files — custom module with admin panel:
- Configurable mapping: "column B in file → BRAND property of information block"
- Auto-detect encoding (CP1251, UTF-8, UTF-16) via
mb_detect_encoding() with validation
- Download images from URL with queue — to avoid channel saturation
- Incremental update by row hash: row changed — update, no — skip
- Cron schedule, report: created 145, updated 892, errors 3 (with details)
Large files: CSV processed in batches of 1000 rows via fgetcsv() (10 times faster than row-by-row), XML streamed via XMLReader, background execution via Bitrix agent queue — no PHP timeouts.
Legal Aspects to Consider
-
robots.txt — respect it. Crawl-delay — comply.
- Request frequency — 1–2 per second, no more. Don't DDoS someone else's site.
- Manufacturer content — use it. Unique author texts — don't copy.
- Personal data — don't collect.
What Is Included in a Turnkey Parser Development?
| Component |
Description |
| Prototype |
Parser for 1–2 sources in 2–3 days to assess data quality |
| Main parser |
Full data collection from one source (static/dynamic) |
| Bitrix import module |
Normalization, loading, update, mapping admin panel |
| Price monitoring |
If needed — collection and alert system (up to 10 competitors) |
| Documentation |
Architecture description, selector update instructions |
| Support |
3-month guarantee for uninterrupted operation, fix for donor layout changes |
How We Work and Deadlines
- Prototype — parser for 1–2 sources in 2–3 days. Assess data quality, pitfalls (Cloudflare protection, captcha, dynamic loading).
- Development — full pipeline: parser → normalization → import into Bitrix → admin panel for management.
- Testing — run on full catalog volume, check edge cases (empty fields, malformed HTML, broken images).
- Launch — configure cron, error monitoring via Telegram bot.
- Support — competitor changed layout? Update CSS selectors in parser.
| Task |
Deadlines |
| Single site parser (static HTML) |
3–5 days |
| SPA site parser (Puppeteer/Playwright, bypass protection) |
1–2 weeks |
| CSV/XML import module for Bitrix |
1–2 weeks |
| Price monitoring system (5–10 competitors) |
2–4 weeks |
| Comprehensive auto-population system |
4–8 weeks |
| Parser support and adaptation |
by subscription |
Get in touch for a free consultation — we will analyze your data sources and propose the optimal parser architecture. Request a project assessment today and get a fixed deadline. We guarantee stable parser operation and full support throughout the usage period.