Automated Catalog Synchronization with Ozon, Wildberries, Yandex.Market
Automated catalog synchronization with Ozon, Wildberries, and Yandex.Market solves the problem of product desynchronization. Imagine: you have 5000 SKUs, three marketplaces, and managers manually edit descriptions and prices. After a month, there is desynchronization: on Ozon the product is missing, on Wildberries the price is outdated, on Yandex.Market the photo is wrong. Every day, managers spend hours checking cards, and clients complain about duplicates and incorrect stock. This situation is familiar to many: according to our statistics, manual catalog management on three platforms takes up to 20 hours per week and results in 15–20% erroneous cards. Our team of engineers with over 7 years of experience in e-commerce has implemented more than 50 projects for integrating catalogs with marketplaces. The system automatically transfers new products, updates changes, and removes deleted items — without manual effort. We use a change detector based on hashing, which allows processing 10,000 products in 15 minutes — 5 times faster than full enumeration.
According to Ozon documentation
Why Manual Synchronization Doesn't Work?
Each marketplace has its own data format: Ozon requires a unique identifier in the offer_id field, Wildberries uses article, Yandex.Market — its own SKU. Categories and attributes differ: on Ozon you need to specify a product type (e.g., 'Shoes' in category 17032750), while on Wildberries you need to link to a subject. Manual mapping of 5000 products takes a week and gives 20% errors. Automation with our mapper reduces time to 3 hours and errors to 1%.
How Does Change Detection Work?
We use field hashing: name, description, brand, price, images, dimensions. On each product update in your CMS or ERP, a SHA-256 hash is computed and compared with the stored one in the marketplace_product_mappings table. If the hash differs — the product goes into the sync queue. This reduces load on marketplace APIs: a typical store with 10,000 products and 100 changes per day makes only 100 requests instead of 10,000. For speed, we use Laravel Horizon queues with delays between requests to stay within limits (e.g., Wildberries — 1 request/sec).
Why Category Mapping Is a Bottleneck?
Without category mapping, it's impossible to upload a product: each platform has its own tree. We store mappings in the database and provide a UI for linking. For Ozon we use category search by name via API. For Wildberries — manual mapping with autocomplete. Example:
class CategoryMapper { public function getMarketplaceCategory(int $siteCategoryId, string $marketplace): ?int { return DB::table('category_mappings') ->where('site_category_id', $siteCategoryId) ->where('marketplace', $marketplace) ->value('marketplace_category_id'); } public function suggestOzonCategory(string $categoryName): array { return Http::withHeaders($this->ozonHeaders) ->post('https://api-seller.ozon.ru/v1/description-category/search', [ 'language' => 'DEFAULT', 'query' => $categoryName, ]) ->json('result'); } } Process: From Audit to Deployment
- Analysis — we break down current integrations (CMS, ERP, marketplace APIs).
- Design — data schema, mapping, task queues (Laravel Horizon + Redis).
- Implementation — we write adapters for each marketplace using the REST API.
- Testing — we test on a catalog copy: change detection, error handling, load.
- Deployment — we deploy on your server or cloud (AWS, Vercel).
What's Included in the Final Solution?
In addition to adapters, we supply a monitoring dashboard based on Laravel Telescope. It shows counts of active, pending, and erroneous products per marketplace. If the error count exceeds 5% of total products, the system sends a notification to Telegram or Slack. We also configure logging of all operations in the sync_logs table for audit.
-- Current catalog state per marketplace SELECT marketplace, COUNT(*) FILTER (WHERE status = 'active') AS active, COUNT(*) FILTER (WHERE status = 'pending') AS pending, COUNT(*) FILTER (WHERE status = 'error') AS errors, MAX(last_synced_at) AS last_sync FROM marketplace_product_mappings GROUP BY marketplace; Timeline and What's Included
| Stage | Duration | Result |
|---|---|---|
| Analysis | 2–3 days | Documentation with requirements and API schema |
| Design | 3–4 days | ER diagram, queue structures |
| Adapter development | 8–12 days | Working adapters for 3 marketplaces |
| Testing | 3–5 days | Test report, fixed bugs |
| Deployment and training | 2–3 days | System in production, manual for managers |
Total: 18–24 business days. Warranty support — 1 month after delivery. The cost includes documentation, dashboard setup, and employee training. Such automation saves from 30,000 to 50,000 rubles monthly on manual management.
Marketplace Requirements Comparison
| Parameter | Ozon | Wildberries | Yandex.Market |
|---|---|---|---|
| Image format | JPEG, PNG, max 10 MB | JPEG, max 8 MB | JPEG, PNG, max 5 MB |
| Required fields | offer_id, name, price, stock | article, brand, price | SKU, name, image URL |
| API request limit | 10 requests/sec | 1 request/sec | 5 requests/sec |
Typical Synchronization Errors
Incorrect category mapping — product goes to wrong category. Solution: upload a test batch and manually verify.
API rate limit exceeded — marketplaces block requests. Solution: queue with delays and retry after 5 minutes.
Different image formats — platforms require specific dimensions. Solution: configure compression presets.
Technical details of queue implementation
We use Laravel Horizon with configuration: each sync job goes to queue "marketplace-sync". Between requests, a delay is set depending on platform limits. For Wildberries, where limit is 1 request/sec, the delay is 1.2 seconds.
Get a consultation on catalog automation today. Contact us and we will prepare a custom solution.







