Skip to content
Creatuity
Back to Insights

Source of Truth in B2B Commerce: ERP vs PIM vs OMS (Field-by-Field Guide)

When your ERP says you have 500 units and your ecommerce says 483, which one is right? This field-by-field guide shows how to assign data ownership across ERP, PIM, OMS, and ecommerce systems to eliminate conflicts.

February 6, 2026

The call comes in at 9 AM. A customer placed an order for 200 units overnight. The ecommerce platform shows 312 units available. The ERP shows 47. The warehouse management system shows 194.

Which number is right?

If you can’t answer that question in under 60 seconds, you have a source-of-truth problem. And it’s costing you more than you realize—in customer trust, in operational labor, and in missed sales.

This guide is the reference we use when architecting data ownership for B2B manufacturers and distributors. It covers every major data domain, explains why conflicts arise, and gives you a concrete model for assigning ownership.

Why Source of Truth Gets Murky

Most B2B operations accumulate systems over years, not months. You started with an ERP. Then you added ecommerce. Then a PIM for product content. Then an OMS for order orchestration. Maybe a WMS. Maybe a CPQ for complex pricing.

Each system has opinions about the same data. The ERP thinks it owns pricing. The PIM thinks it owns product descriptions. The ecommerce platform thinks it owns both.

When nobody explicitly decides who wins, the answer becomes “whoever wrote last”—which is a recipe for chaos.

The Master Data Ownership Matrix

Here’s how we assign data ownership in a typical B2B commerce architecture. This isn’t universal—your specific setup may vary—but it’s a starting point that works for most manufacturers and distributors.

Inventory Data

FieldSource of TruthWhy
Quantity on handWMS (or ERP if no WMS)Physical location is ground truth
Quantity available to promiseOMSMust account for allocations, reserves
Reorder pointERPTied to procurement planning
Safety stockERPBusiness policy decision
Lead timeERPSupplier data lives here

Common conflict: Ecommerce shows available inventory that’s already allocated to a backorder. Fix: OMS must be the authority for ATP (available to promise), not raw on-hand from ERP.

Pricing Data

FieldSource of TruthWhy
List priceERPFinancial system of record
Customer-specific pricingERP (or CPQ)Negotiated agreements live here
Promotional pricingEcommerceMarketing controls promotions
Real-time pricing rulesEcommercePerformance reasons—can’t hit ERP for every page load

Common conflict: Customer sees list price instead of negotiated pricing. Fix: Login triggers a pricing sync from ERP; ecommerce caches customer-specific prices for session.

Product Content

FieldSource of TruthWhy
SKU / Part numberERPFinancial transactions require consistency
Product namePIMMarketing controls messaging
DescriptionPIMOptimized for sales, not warehouse
SpecificationsPIMStructured attribute data
Images / AssetsPIM (or DAM)Asset management is its job
Weight / DimensionsERP or WMSNeeded for shipping calculation
Category / TaxonomyEcommerceSite navigation is a UX decision
SEO metadataEcommerceOwned by marketing/SEO team

Common conflict: Product updates in PIM don’t appear on website. Fix: PIM pushes to ecommerce on publish; ecommerce never writes back to PIM.

Customer Data

FieldSource of TruthWhy
Account numberERPFinancial identity
Billing addressERPTied to AR/credit
Shipping addressesERP (synced to ecommerce)May have multiple ship-tos
Payment termsERPCredit policy
Account contactsCRMRelationship data
Login credentialsEcommercePlatform handles authentication
Communication preferencesCRM or EcommerceDepends on who sends emails

Common conflict: Customer updates address on ecommerce; update doesn’t reach ERP; shipment goes to old address. Fix: Bidirectional sync with conflict rules (most recent wins, or ERP wins for billing).

Order Data

FieldSource of TruthWhy
Order creationEcommerce (or OMS)Capture happens here
Order statusOMSOrchestrates across fulfillment
AllocationOMSDecides which warehouse ships
Shipment trackingWMS or 3PLCarrier provides data
InvoiceERPFinancial transaction
Payment statusPayment processor → ERPFlows through to financials

Common conflict: Order shows “processing” for days because OMS status doesn’t sync to ecommerce. Fix: OMS pushes status updates to ecommerce; ecommerce displays but doesn’t modify order state.

Implementation Patterns

Pattern 1: Read From Source, Cache Locally

For data that changes infrequently (product content, customer pricing tiers), pull from the source of truth on a schedule and cache locally.

Example: PIM exports product data nightly; ecommerce imports and stores locally for fast page rendering.

Tradeoff: Latency between update and visibility. Acceptable for most content changes; problematic for time-sensitive pricing.

Pattern 2: Read-Through on Demand

For data that must be current (inventory ATP, customer-specific pricing), query the source of truth at request time.

Example: Cart page calls OMS for current ATP before allowing checkout.

Tradeoff: Performance and availability. If OMS is slow or down, checkout is slow or broken. Mitigate with timeouts, fallbacks, and caching with short TTL.

Pattern 3: Event-Driven Push

For data that changes frequently and must be consistent (order status, shipment tracking), source system pushes updates as they happen.

Example: WMS fires webhook when shipment is created; ecommerce updates order status and emails customer.

Tradeoff: Complexity and reliability. Need message queuing, retry logic, and dead letter handling. More infrastructure to maintain.

Pattern 4: Saga for Cross-System Writes

When a user action must update multiple systems (place order → decrement inventory → create pick task → authorize payment), use a saga pattern with compensation.

Example: Order placement saga: reserve inventory in OMS → authorize payment → if payment fails, release inventory reservation.

Tradeoff: Requires explicit compensation logic. Every step needs a rollback. Complex to implement correctly.

Making the Decisions

Here’s a process for assigning source of truth when you don’t have an existing architecture:

1. Inventory Existing Systems

List every system that touches the data in question. Include unofficial sources like spreadsheets and email threads.

2. Identify the Authoritative Process

Where does the data originate? That system is usually the source of truth. Customer-specific pricing is negotiated by sales and entered in ERP → ERP is source of truth.

3. Define Update Flows

For each consumer of the data, define: pull or push? Real-time or batch? What happens on failure?

4. Document Conflict Resolution

When two systems disagree, which wins? Options:

  • Most recent timestamp
  • Designated master always wins
  • Human review required

5. Build Observability

You need to detect conflicts quickly. Implement reconciliation checks that compare counts across systems daily.

Common Anti-Patterns

Bidirectional sync for everything: Leads to circular updates and race conditions. Avoid unless absolutely necessary; when necessary, implement clear conflict resolution.

ERP as the only source of truth: Doesn’t scale. ERPs are optimized for financial transactions, not content management or real-time pricing.

No designated source of truth: “Both systems can update it” means neither is authoritative. Someone has to win.

Manual reconciliation as a feature: If humans regularly fix data discrepancies, that’s not a process—it’s a failure mode.

Case Study: Manufacturer With SAP + PIM + Adobe Commerce

A building materials manufacturer was running SAP ECC for ERP, Akeneo for PIM, and Adobe Commerce for B2B ecommerce. Constant conflicts:

  • Product specs updated in PIM didn’t appear on website
  • Customer pricing from SAP showed list price instead of contract price
  • Inventory counts were always wrong

We mapped ownership:

DomainSource of Truth
Product contentAkeneo PIM
Pricing (list + customer)SAP
Inventory ATPSAP (via integration layer)
Order captureAdobe Commerce
Order fulfillment statusSAP

Then implemented flows:

  • Akeneo → Adobe Commerce: nightly product export
  • SAP → Adobe Commerce: real-time pricing API (cached per session)
  • SAP → Adobe Commerce: hourly inventory sync
  • Adobe Commerce → SAP: order transmission on checkout
  • SAP → Adobe Commerce: status push via middleware

Result: Eliminated manual reconciliation entirely. Product updates visible within 24 hours. Pricing accurate on login. Inventory discrepancies dropped from daily occurrence to rare edge cases.

Next Steps

If you don’t have a documented data ownership matrix, start there. Get the stakeholders who own each system in a room. Map who writes what, who reads what, and what happens when they disagree.

The conversation will be uncomfortable. Someone’s “workaround” will turn out to be the actual process. Someone’s system will be revealed as vestigial.

That’s the point. You can’t fix source-of-truth problems without first admitting you have them.


Need help mapping your data architecture? We facilitate data ownership workshops for B2B commerce teams. We’ll document your current flows, identify conflicts, and design a clean ownership matrix. Schedule a workshop.

Related Insights