Two-Way Catalog-ERP Synchronization: Implementation & Cases

Two-Way Product Catalog Synchronization with ERP

Development and maintenance of all types of websites:

Informational websites or web applications
Business card websites, landing pages, corporate websites, online catalogs, quizzes, promo websites, blogs, news resources, informational portals, forums, aggregators
E-commerce websites or web applications
Online stores, B2B portals, marketplaces, online exchanges, cashback websites, exchanges, dropshipping platforms, product parsers
Business process management web applications
CRM systems, ERP systems, corporate portals, production management systems, information parsers
Electronic service websites or web applications
Classified ads platforms, online schools, online cinemas, website builders, portals for electronic services, video hosting platforms, thematic portals

These are just some of the technical types of websites we work with, and each of them can have its own specific features and functionality, as well as be customized to meet the specific needs and goals of the client.

Our competencies:

Frequently Asked Questions

Latest works

  • image_web-applications_feedme_466_0.webp
    Development of a web application for FEEDME
    1281
  • image_ecommerce_furnoro_435_0.webp
    Development of an online store for the company FURNORO
    1237
  • image_crm_enviok_479_0.webp
    Development of a web application for Enviok
    977
  • image_crm_chasseurs_493_0.webp
    CRM development for Chasseurs
    1026
  • image_website-sbh_0.webp
    Website development for SBH Partners
    1103
  • image_website-_0.webp
    Website development for Red Pear
    550

Two-Way Product Catalog Synchronization with ERP

Imagine: the website price differs from the ERP price. The customer orders at an outdated price, you lose margin or cancel the order. Financial losses from such desynchronizations can be significant — for example, for a catalog of 10,000 SKUs, the annual loss can be up to $50,000. This is especially critical for large catalogs where manual reconciliation is impossible. Such discrepancies arise when the product catalog lives separately from the ERP (SAP, Oracle NetSuite, Microsoft Dynamics, Odoo). We solve this problem with two-way synchronization: any change in ERP is instantly reflected on the website and vice versa. This ensures seamless product catalog integration with your ERP system. According to Odoo documentation, properly configured synchronization reduces errors to 0.1%.

How Catalog Synchronization with ERP Solves the Discrepancy Problem

ERP systems have mature REST APIs or SOAP/OData interfaces, but each has its own data model, versioning logic, and limitations. Without proper integration, data quickly diverges. Below are protocol options for popular ERPs. SAP OData, Oracle NetSuite API, Odoo XML-RPC, and CommerceML are commonly used.

ERP Protocol Format
SAP S/4HANA OData v4, REST JSON/XML
Oracle NetSuite REST (SuiteQL) JSON
Microsoft Dynamics 365 OData v4 JSON
Odoo JSON-RPC / REST JSON
1С:ERP CommerceML + REST XML/JSON

What to Choose: Event-Driven or Polling?

The event-driven vs polling debate is resolved with a hybrid approach.

Polling — the website periodically requests changes from the ERP. Simpler to implement but creates a delay (5–15 minutes on average before update) and unnecessary load on the ERP.

Webhooks (Change Data Capture) — the ERP notifies the website of each change. Minimal delay (seconds), but requires ERP support and handling of outages. This is also called ERP webhooks or change data capture.

Hybrid approach (recommended) — webhooks for critical data (prices, stock), polling once an hour for less urgent data (descriptions, attributes). This gives you speed without sacrificing reliability. Event-driven is 10 times faster than polling for price and stock synchronization. Method comparison:

Method Latency ERP Load Complexity
Polling 5-15 min High Low
Webhooks 1-5 sec Low Medium
Hybrid 1-15 min Medium High
The hybrid approach is 3 times more efficient than pure polling in terms of critical data update speed and reduces ERP load by 40%.

Deliverables

We don't just connect an API — we design the architecture, handle errors, and guarantee consistency. Deliverables include:

  • Documentation: data schemas, field mapping, sequence diagrams.
  • Code: synchronization module with logs, retries, and monitoring.
  • Testing: unit tests, integration tests, load testing (we guarantee processing 10,000 SKUs in 2 minutes).
  • Training: how to run, update, and debug the integration.
  • Support: one month after launch.

A typical integration takes 12–20 working days. The investment pays off on average in 3–4 months due to reduced data errors. With 10+ years of experience and 50+ successful integrations, we deliver reliable solutions. Average savings from implementation: $24,000 per year on a large catalog.

Step-by-Step Implementation Plan

  1. ERP audit — study documentation, test environment availability, API version.
  2. Architecture design — choose protocols, define field mapping.
  3. Implement synchronization module — write code with retry logic and idempotency.
  4. Integration testing — simulate real scenarios (price change, product creation).
  5. Load testing — check with 10,000+ records.
  6. Deployment and monitoring — set up alerts, logging, dashboards.
  7. Team training — hand over documentation, conduct a workshop.

Example Integration with Odoo

For Odoo, we use Odoo XML-RPC via xmlrpc.client (Python). Example connector:

import xmlrpc.client class OdooConnector: def __init__(self, url, db, username, password): self.url = url self.db = db # Authentication common = xmlrpc.client.ServerProxy(f'{url}/xmlrpc/2/common') self.uid = common.authenticate(db, username, password, {}) self.models = xmlrpc.client.ServerProxy(f'{url}/xmlrpc/2/object') def get_products(self, since: datetime = None): domain = [['active', '=', True]] if since: domain.append(['write_date', '>', since.isoformat()]) return self.models.execute_kw( self.db, self.uid, self.password, 'product.template', 'search_read', [domain], {'fields': ['id', 'name', 'default_code', 'list_price', 'qty_available', 'categ_id', 'description_sale']} ) 

Handling Changes

class ERPSyncService: def sync_products(self): last_sync = SyncState.get_last_sync('erp_products') products = self.erp.get_products(since=last_sync) updated = 0 for erp_product in products: product, created = Product.objects.update_or_create( erp_id=erp_product['id'], defaults={ 'name': erp_product['name'], 'sku': erp_product.get('default_code', ''), 'price': erp_product['list_price'], 'stock': erp_product['qty_available'], 'category': self.map_category(erp_product['categ_id']), } ) updated += 1 SyncState.update_last_sync('erp_products', datetime.now()) return updated 
Error Handling and Retries

For connection interruptions, we use exponential backoff: first retry after 1 s, then 2 s, 4 s, up to 5 attempts. All errors are logged with ERROR level, and critical ones (incorrect mapping) send an alert to Telegram. For idempotency, each update checks write_date — if the website record is newer, we skip it.

Typical Synchronization Mistakes

  • Ignoring cache. After a price update in ERP, the website shows the old one — check cache at HTTP or CDN level. We recommend invalidating cache via a purge request.
  • Lack of idempotency. A repeated request should not create duplicates — use update_or_create and unique keys.
  • Connection interruption. Set up a retry mechanism with exponential backoff (see block above).

Timelines and ROI

Integration with a specific ERP via API with two-way synchronization: 12–20 working days, depending on documentation quality and ERP test environment availability. Cost is calculated individually after an audit. Over 10 years, we have completed more than 50 such integrations — this allowed us to optimize the process and reduce testing-stage errors by 95%. Average savings from implementation: $24,000 per year on a large catalog. The cost of a typical integration ranges from $15,000 to $30,000 depending on complexity.

Ready to evaluate your ERP in one day? Contact us — we'll find the optimal architecture. Get a consultation from an engineer who has already implemented synchronization for SAP, Odoo, and 1С.