Website Migration from OpenCart to 1C-Bitrix
OpenCart is a solid engine for small stores. But when the catalog grows to tens of thousands of items, 1C integration appears, complex promotions logic or marketplace integration needed — OpenCart hits its ceiling. Migration to 1C-Bitrix solves these limitations, but requires careful work with data: storage structures are fundamentally different.
What Exactly Migrates
Everything accumulated in the OpenCart database:
-
Products — tables
oc_product,oc_product_description,oc_product_image,oc_product_attribute. Each product has main image and gallery, SEO fields (oc_product_description.meta_title,meta_description), arbitrary attributes. -
Categories —
oc_category,oc_category_description. Category tree with unlimited nesting. -
Orders —
oc_order,oc_order_product,oc_order_history. Order history with products, statuses, delivery addresses. -
Customers —
oc_customerwith addresses fromoc_address. -
Reviews —
oc_review. -
Manufacturers —
oc_manufacturer.
Additionally check installed extensions: store often has third-party modules storing data in custom oc_* tables.
How Storage Works in Bitrix
Bitrix has no direct "product table" analog. Products stored as iblock elements (b_iblock_element, b_iblock_element_property), properties — flexibly through types. Catalog is implemented by catalog module on top of infoblocks: prices in b_catalog_price, stock in b_catalog_store_product (if warehouse connected), product offers as separate iblock.
This fundamental difference defines entire migration logic.
Migration Stages
1. Analysis and Preparation
Take OpenCart database dump. Inventory: how many products, category tree depth, number of attributes, unique options (product variants). If OpenCart used products with options (oc_option, oc_product_option) — design product offers structure in Bitrix.
2. Bitrix Deployment
Install 1C-Bitrix of required edition. For online store minimum — "Small Business", for full catalog with multiple price lists and warehouses — "Business". Configure catalog infoblocks, create properties for OpenCart attributes.
3. Data Import
Write PHP migration script. Structure: read from OpenCart MySQL dump via PDO, create elements in Bitrix via CIBlockElement::Add() or, for speed, direct insert into b_iblock_element with subsequent \Bitrix\Iblock\IblockTable call. For large catalogs (50,000+ items) direct insert via batch queries is 10–20x faster than API.
Transfer categories first — form sections tree via CIBlockSection::Add(), save oc_category_id → IBLOCK_SECTION_ID mapping for subsequent product binding.
4. Image Transfer
Copy images from OpenCart's /image/catalog/ to Bitrix server. Register each image via \CFile::MakeFileArray() and attach to element via MORE_PHOTO property. Main image — PREVIEW_PICTURE field of iblock element.
5. Orders and Customers
Transfer orders to b_sale_order / b_sale_order_props_value / b_sale_basket. Create customers as users via CUser::Add() in "Customers" group. OpenCart passwords stored in MD5 with salt (oc_customer.salt) — these hashes incompatible with Bitrix. Send users password reset emails.
6. SEO and Redirects
Map old OpenCart URLs to new ones. OpenCart builds URL by template /index.php?route=product/product&product_id=42 or via SEO filter /product-slug. In Bitrix URL determined by component's URL structure. Form 301-redirect table, upload via main module (\Bitrix\Main\UrlRewriter) or via .htaccess / nginx config.
Pitfalls
OpenCart attributes → Bitrix properties. OpenCart attributes (oc_attribute) are just text "name: value" pairs. Bitrix properties are typed. Before migration, inventory attributes and decide: what becomes "List" property, what — "String", what — "Number".
Product options. If OpenCart had options (color, size) with separate prices and stock — in Bitrix these are product offers (PO). Create PO iblock and transfer options as separate elements bound to parent product via PROPERTY_CML2_LINK.
Multi-currency. OpenCart stores multiple currencies in oc_currency. In Bitrix currencies configured in currency module, each price type (b_catalog_price_type) can have its currency.
Extensions. Third-party OpenCart modules — subscription form, loyalty program, shipping — don't migrate automatically. Each needs Bitrix analog or custom development.
Timeline
| Stage | Typical Duration |
|---|---|
| Data analysis and structure design | 1–2 days |
| Writing migration script and testing on copy | 3–5 days |
| Image transfer | 1–2 days |
| Orders, customers, history | 1–2 days |
| SEO-redirects and URL verification | 1 day |
| Final verification and launch | 1 day |
| Total | 8–13 working days |
Timeline depends on catalog volume and number of non-standard extensions in source store.
What Remains Client's Responsibility
After migration, you'll need to configure design (OpenCart theme doesn't transfer), payment systems via sale module, shipping services. If store works with 1C — configure exchange via CommerceML and standard /bitrix/admin/1c_exchange.php handler. This goes beyond data migration, but logically done in same project.

