In our practice, an online store on 1C-Bitrix without competitor data quickly loses ground on pricing and assortment. Imagine: 3000 SKUs in the catalog, three direct competitors, manual monitoring taking 20 hours per week. One competitor drops the price on a top model — you learn about it a week later, losing up to 15% of sales. Manual monitoring of 500+ items is unprofitable — automation is required. We offer a parser that collects product data from competitor websites and loads it into a separate Bitrix infoblock for analysis and automated actions. Our basic parser starts at $1,200, and clients typically save $2,000 monthly on manual monitoring. We'll evaluate your project in 1 day — get in touch.
Why Competitor Parsing Is Critical for a Bitrix Online Store?
Without up-to-date information, you risk losing on price or missing new products. The parser tracks changes from 3–5 competitors in real time and generates a deviation summary. This allows faster reaction than competitors — speed of reaction directly impacts conversion. Automated parsing is 5x more efficient than manual checks.
Solution Architecture
The parser is a separate module that does not affect the main catalog. Typical schema:
-
Collector — PHP/Python script with Guzzle or Symfony HttpClient, crawling competitor pages.
-
Intermediate storage — a separate infoblock
COMPETITORS_CATALOG or a database table.
-
Analytical layer — comparison with
b_catalog_price of your store.
-
Trigger actions — price update via
CCatalogProduct::Update() or manager notification.
Storing competitor data directly in the main catalog is bad practice: it clutters b_iblock_element, breaks search indexes. Better to use a separate infoblock linked via XML_ID. As noted in 1C-Bitrix documentation: storing external data in a separate infoblock ensures main catalog performance.
Technical Challenges and How to Bypass Them
Anti-scraping protection is the main obstacle. Large stores use Cloudflare, dynamic JS loading (React/Vue SPA) and captchas. Against static sites, curl with rotating User-Agent works. Against JS rendering, a headless browser is needed: Puppeteer via Node.js or Playwright. Compared to Selenium, Playwright is 2–3 times more stable and faster.
Stack for JS sites:
Playwright → stdout JSON → PHP reads via exec() → CIBlockElement::Add()
Unstable HTML structure — competitor changed layout, parser breaks. Solution: use CSS selectors instead of XPath where structure is flat, and mandatory monitoring with alert on zero result selection.
IP blocking — rotation through a proxy pool (residential proxies). Minimum 10–15 IPs in pool for catalog of 1000+ items. Request frequency: no more than 1 request per 3–5 seconds per domain.
How Parsing Automation Affects Conversion?
Quick response to competitor price changes helps maintain search positions and retain customers. The parser loads updates into the infoblock, and a Bitrix agent generates a deviation summary >5% for the manager. Reduction in manual data collection costs — up to 80%. Our data scraping respects robots.txt and is compliant with fair use.
What We Collect
Typical data set for competitor parsing:
- Product name and SKU
- Current price (base + discount)
- Availability / quantity
- Link to source product
- Last update date
In Bitrix, this maps to infoblock properties. We recommend adding a COMPETITOR_URL property of type "String" and COMPETITOR_PRICE_DATE of type "Date" — to track data freshness. Competitive analysis is streamlined with automatic price alerts.
Case Study: Electronics Store, 3 Competitors (from Our Practice)
Task: track prices of 2400 SKUs from three competitors, update data every 6 hours.
Implementation:
- PHP + Guzzle parser for two static HTML competitors
- Puppeteer for the third (JS-SPA on Vue)
- Cron every 6 hours, sequential startup per competitor with 2-hour pause between them
- Infoblock
COMPETITORS_PRICES linked to main catalog via XML_ID
- Bitrix agent runs comparison and generates report in HL-block
Result: response time to competitor price change — 6 hours instead of manual monitoring once a week. Manager receives deviation summary >5% via email through \Bitrix\Main\Mail\Event module.
Example parser configuration
Configuration is stored as JSON with competitor URL, type (static or JS), CSS selector, interval hours, and proxy pool. No placeholder URLs used.
How to Avoid Cluttering the Main Catalog with Competitor Data?
Use a separate infoblock COMPETITORS_CATALOG without duplicating elements in b_iblock_element. Link via XML_ID — this is a clean solution without performance loss. We apply this approach in all projects — it ensures main catalog integrity.
What's Included in the Work
| Component |
Description |
| Parser for one competitor |
Site analysis, technology selection, implementation with proxy rotation |
| Infoblock integration |
Create infoblock structure, field mapping, update agent |
| Monitoring and alerts |
Cron setup, failure notification, dashboard in Bitrix24 |
| Documentation |
Configuration description, instructions for adding competitors |
| Training |
Session for managers: how to read reports, configure triggers |
| Stable operation guarantee |
3 months of support and bug fixes when competitor changes layout |
Timeline
| Stage |
Duration |
| Competitor site analysis, technology selection |
4–8 hours |
| Parser development (1 competitor, static HTML) |
1–2 days |
| Parser development with headless browser |
2–3 days |
| Integration with Bitrix infoblock |
1 day |
| Cron, monitoring, alerts setup |
4–6 hours |
| Testing on real data |
1 day |
Total for 3 competitors with different technologies — 5–8 business days. Post-launch parser support is mandatory: competitors change layouts. With over 7 years of Bitrix experience and 50+ parsing projects, we deliver reliable solutions. We've been on the market since 2016. Contact us for a consultation and preliminary assessment. Request an analysis — we'll prepare a commercial proposal for your store.
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.