Adobe Commerce ERP integration: a build plan for SAP, Dynamics and NetSuite

A distributor's buyer adds 40 cases to the cart. The product detail page says it's in stock. The ERP knows the warehouse shipped its last pallet an hour ago. And the contract price on the invoice won't match the price in the cart either. Nobody notices until customer service gets the call, or until the buyer quietly orders from someone else. That's lost revenue from one stale number.
That gap is what an Adobe Commerce ERP integration closes. The enterprise resource planning (ERP) system keeps owning products, prices, inventory and customer data. Adobe Commerce becomes the place buyers see that data and place orders, and order data flows back to the ERP with no manual data entry. The work is less about the connector you buy and more about deciding which system owns each record, and how fresh each record has to be.
This plan starts with the decisions to make before you build. Then it covers the integration patterns, the Adobe Commerce hooks for each flow and the extra work SAP brings. It ends with what to check when the two systems disagree. It's written for ecommerce, IT and operations leads who run Adobe Commerce next to an ERP, especially in B2B.
Before you build: settle three decisions
1. Which Adobe Commerce you run
Adobe now sells Commerce two ways, and the integration rules differ between the self-managed edition and the cloud-native SaaS one. Adobe's feature comparison (updated October 20, 2026) sets them side by side.
| PaaS (Adobe Commerce on cloud infrastructure or on-premises) | SaaS (Adobe Commerce as a Cloud Service) | |
|---|---|---|
| Extensibility model | In-process PHP plus out-of-process (APIs, events, App Builder), with out-of-process recommended | Out-of-process only |
| Upgrades | You upgrade and patch | Adobe upgrades it, versionless |
| Web API extensibility | Native REST and GraphQL extensibility plus API Mesh | API Mesh with custom resolvers |
| Custom data storage | Database, file, cache, queue | App Builder state library (file only) |
The practical upshot: an ERP connector built as a PHP module inside Magento works on PaaS but has no place on SaaS. If a move to the Cloud Service is on your roadmap, build the integration out-of-process now and you won't rebuild it later. The trade-offs of that move are covered in detail on the Adobe Commerce PaaS to SaaS migration page.
2. Which system owns each record
Write this down before anyone opens an IDE. It's a business requirements question before it's a technical one, and each record needs a single source of truth or the two systems drift. In an Experience League article on SAP and Adobe Commerce for B2B (Christian Münch, updated May 19, 2026), the author's rule is blunt. "SAP is the system of record; Commerce is the interface," and that holds for most ERPs, whether it's SAP S/4HANA, Microsoft Dynamics 365, Oracle NetSuite or Odoo.
3. How fresh each flow must be
Not every flow needs real time. Product descriptions can arrive overnight. Stock and price can't, because shoppers act on what product pages show right away. The same article splits the flows by how much lag each can tolerate.
| Data | Direction | Timing | Lag tolerance |
|---|---|---|---|
| Product (material) master | ERP to Commerce | Batch, hourly or nightly | High |
| Customer master and accounts | ERP to Commerce | Batch, hourly or nightly | High |
| Inventory and pricing | Both ways | Event-driven or real time | Low |
| Sales orders | Commerce to ERP | Real time on submit | Low |
Order status, shipments, invoices and refunds usually travel back from the ERP too. Add them to the table with your own timing.
Step 1: map every record to its owner and its key
Integrating Adobe Commerce with an ERP starts on paper. List each entity (product, price list, customer, company account, stock source, order, shipment, invoice, refund) and give it an owner, a direction and a matching key. Note when the data moves and what triggers it. The key is the part teams skip. Without a shared ID, the same customer gets created twice and the order history splits between two records.
The SAP article is specific about this. Its advice: store the SAP customer number as a dedicated attribute on the Adobe Commerce company account from day one. It recommends a mapping matrix that runs from the ERP customer number to the Commerce company account, then to the shared catalog, then to the pricing source. The same habit works for any ERP: carry the ERP's ID on the Commerce record, never the other way around.
Map the business processes around each record as well: who approves a new B2B account, and who fixes an order the ERP rejects. Do the same for SKUs and units of measure. An ERP that sells by the case and a storefront that sells by the each will disagree on every order until someone writes down the conversion.
Step 2: choose how to connect Adobe Commerce to your business systems
There are four realistic ways to integrate Adobe Commerce with ERP systems. Most enterprises end up with a mix.
| Pattern | Good fit | Trade-off |
|---|---|---|
| Prebuilt connector | A common ERP, standard flows, little custom pricing | You live inside the vendor's data model and release schedule |
| iPaaS or middleware | Several systems (ERP, CRM, PIM, 3PL) sharing the same data | Another platform to license, monitor and staff |
| App Builder app, often from the integration starter kit | Out-of-process code you own, PaaS or SaaS | Needs JavaScript and Node.js skills, and an App Builder entitlement |
| Custom in-process PHP module | Legacy PaaS stores with deep custom logic | Ties the integration to Commerce upgrades; not possible on SaaS |
Prebuilt connectors
Connectors exist for the common pairs. Celigo's NetSuite to Magento 2 integration app is one example. It syncs customers and sales orders from Magento to NetSuite. In the other direction, it sends fulfillments, inventory levels, item data, billing information, canceled orders and refunds. Adobe also lists a Microsoft Dynamics 365 Finance and Operations accelerator that Adobe and its partners built on the integration starter kit. It syncs customers, products, prices and stock from D365 F&O to Commerce, sends orders the other way and notifies customers when D365 marks an order shipped.
Before you sign, check three things. Which Adobe Commerce versions and editions does it support? Who maintains it when either side upgrades? And does it handle your pricing rules, not just the demo's?
iPaaS and middleware
If the ERP is one of multiple systems, alongside a CRM, a PIM and a 3PL, a middleware layer stops every system from talking to every other one. It also keeps integration logic out of the Commerce codebase, which makes upgrades safer. The big integration platforms have Adobe Commerce adapters. MuleSoft's Anypoint Exchange lists an Adobe Commerce Connector for Mule 4, built by partner TA Digital and certified by MuleSoft. Oracle Integration 3 has a Magento Commerce Cloud Adapter, which works as an invoke connection that creates, updates, queries and deletes records in Commerce.
Note the limit in that last one. An invoke-only adapter can write to Commerce, but something else has to tell the middleware that an order arrived. That's where Adobe's events come in.
The Adobe Commerce integration starter kit
Adobe's own answer is the integration starter kit, a scaffold for an app that connects Commerce to an ERP, order management system or CRM. The app runs on Adobe App Builder, which hosts the code on Adobe's infrastructure rather than inside the store. Adobe says the kit cuts the cost of ERP integration and makes real-time connections more reliable. It ships reference data flows for customers, orders, products, shipments and stock, plus onboarding scripts and a standard architecture. Adobe's guides split the work into exposing Commerce data to the back office and enriching Commerce with back-office data. The scaffolding saves development time on the plumbing every integration repeats.
Read the fine print, though. Adobe supports the starter kit's basic functionality and configuration. Beyond that, Adobe states it "does not provide support services for modified code or your custom integrations," so once you adapt it, the code is yours. App Builder itself is available only to Adobe enterprise customers and partners, and the same FAQ notes that Adobe Commerce on Cloud includes one or several App Builder packs. A separate guide to Adobe App Builder covers how those apps are built and deployed.
Custom code
Custom work makes sense when complex pricing or approval logic is unusual enough that no connector fits. On PaaS, that can still be a PHP module. For anything new, Adobe's direction is out-of-process code, which survives upgrades and moves to SaaS intact.
Want an outside view before you commit? Our Adobe Commerce development team can review the ownership map and the pattern choice against the flows you've listed.
Step 3: use the right Adobe Commerce integration hook for each flow
Whichever pattern you pick, data enters and leaves Commerce through a small set of hooks. Matching each flow to the right one is most of the system architecture work.
| Flow | Hook | Why |
|---|---|---|
| New order to ERP | Adobe I/O Events | Asynchronous: checkout doesn't wait for the ERP |
| Live stock or price check in the cart | Webhooks | Synchronous: Commerce waits for the answer |
| Large product, price or stock loads | Asynchronous and bulk REST endpoints | Requests are queued and processed by a consumer |
| One API over Commerce plus ERP data | API Mesh | Combines several sources into one GraphQL endpoint |
Events for orders. Adobe's events documentation uses an ERP as its main example. When a shopper places an order, Commerce sends the event to Adobe I/O Events, which routes it to an App Builder app. The app pulls the order details from Commerce, pushes them to the ERP and writes any response back. Adobe notes that polling lags "could result in merchants missing real-time activities," which events avoid.
Webhooks for answers you need now. Commerce webhooks make a synchronous call when something happens, such as a shopper adding a product to the cart. Adobe's own example is a stock check: if the external system says the item isn't available, the shopper can't add it. Adobe also warns that synchronous calls should be the exception. Because a webhook sits in the shopper's path, a slow ERP now means a slow cart and a worse customer experience.
Bulk endpoints for volume. The asynchronous web endpoints write requests to a message queue and return a bulk_uuid you can use to check status. A consumer then works through the queue one message at a time. That's the right shape for a nightly price load of 200,000 rows. After the first full load, send only what changed. The starter kit's stock flow works the same way, with a daily full sync plus delta updates when quantities change.
API Mesh for combined reads. Adobe's Cloud Service overview describes API Mesh as a way to combine REST, GraphQL and other sources into one queryable GraphQL endpoint. It suits a storefront that needs Commerce product data and ERP delivery dates in one call.
Step 4: plan for the SAP-specific work
Adobe Commerce integration with SAP follows the same steps, with three areas that need extra design. These recommendations come from the same Experience League article, written by an external author for Adobe Commerce PaaS and B2B.
Available-to-promise checks
SAP returns a confirmed quantity and delivery date through BAPI_MATERIAL_AVAILABILITY or its S/4HANA equivalent. The article notes that Adobe Commerce has no native ATP batching or cart-level caching, so both belong in middleware. It recommends one batched call per cart, not per product, and a short cache of 2–5 minutes.
Contract pricing through order simulation
For contract pricing, Commerce can send a simulated order (BAPI_SALESORDER_SIMULATE or the S/4HANA equivalent) and display the price SAP returns. The article puts the cost at roughly 300–900 ms per call. It also notes that Commerce has no native hook to show simulated prices. You'll need a fallback, such as last-known prices, for when SAP is down.
Catalogs, company accounts and purchase orders
Commerce shared catalogs hold simple fixed prices per SKU. SAP pricing conditions, scales and sales-area logic have to be resolved in middleware and written to Commerce as flat values. Company hierarchies enable parent accounts to see and manage child accounts, but don't pass shared catalogs, pricing or credit limits down. Each account needs its own setup. For purchase orders, the article stores the Commerce PO number as the SAP purchase order reference, so both systems can find the same Adobe Commerce orders.
Where SAP events come from
On the SAP side, events can come from IDoc, BAPI or RFC calls, or from the SAP BTP event mesh on S/4HANA. The article names App Builder, MuleSoft or a custom API layer as the orchestrator and suggests SAP Integration Suite as a managed option to evaluate. Even with live pricing and ATP, the product catalog still has to exist in Commerce.
Step 5: test with the orders that break things
Happy-path tests prove very little. Ask the business users who handle exceptions to build a test set from the orders they dread:
- A partial shipment, then the rest of the order canceled
- A refund on an order with a line-level discount
- A price change in the ERP while the item sits in a cart
- A new B2B buyer whose company account doesn't exist in the ERP yet
- The ERP offline for an hour during checkout
Log every message with both the ERP and the Commerce ID, and make order posting idempotent, so a retry can't create the same order twice. Run a full product and price load at production volume before go-live, and time it. Check that cached prices and stock hold up under peak traffic, then schedule the cutover away from your peak. Nobody should switch on a new ERP integration the week before Black Friday.
When Commerce and the ERP disagree
Most production issues trace back to a decision skipped in the early steps.
- The site shows stock the ERP doesn't have. The stock flow runs on a schedule that's too slow for your sell-through rate. Move it to events or add a live check at the cart.
- Cart prices differ from invoice prices. Pricing logic lives in two places. Resolve it in the ERP or the middleware, and write flat values to Commerce.
- Duplicate customers appear in the ERP. There's no shared key. Add the ERP customer number to the Commerce account and backfill existing records.
- Order processing stalls and orders never post. On PaaS, asynchronous requests need a running consumer. Adobe's docs show it started with
bin/magento queue:consumers:start async.operations.all. - A connector stops working after an upgrade. It was built in-process, or its vendor hasn't certified the new version. Check the vendor's compatibility list before every Commerce upgrade.
One more caveat. If you sell a few hundred SKUs at list price and ship from one warehouse, you may not need any of this. A scheduled export and import can run that business fine. Integration work earns its cost in operational efficiency when contract pricing, multiple warehouses or B2B accounts make manual updates impossible to keep accurate. It also earns its cost when order volume grows faster than the team keying orders in.
FAQ
Does Adobe make an ERP?
No. Adobe Commerce is a commerce platform, and Adobe's integration starter kit documentation treats the ERP as a separate back-office system that Commerce connects to. Common ERP platforms such as SAP, Microsoft Dynamics 365 and Oracle NetSuite all have documented connection routes, through Adobe's own accelerators or third-party connectors.
Is Salesforce an ERP?
No. Salesforce describes itself as a CRM. Adobe Commerce can connect to Salesforce for customer, sales and service data, but invoices, inventory valuation and the general ledger stay in an ERP. Many enterprises connect Commerce to both, plus other business systems such as a PIM.
How long does an Adobe Commerce ERP integration take?
It depends on the number of flows, the pricing rules and the ERP. Adobe says its starter kit setup tutorial can be finished in under an hour, but that's the scaffolding. The timeline is driven by the record mapping, custom pricing and the edge-case testing in steps 1, 4 and 5.
Can Magento Open Source use the same approach?
Partly. Third-party connectors such as Celigo's NetSuite app work with Magento 2, and the REST APIs are the same. App Builder and the integration starter kit, though, are available only to Adobe enterprise customers and partners. An Open Source store would use a connector, middleware or custom code instead.
Start with the ownership map
Before you compare connectors, fill in the table from step 1: every record, its owner, its key and how fresh it must be. That one page settles most of the arguments that come later.
Brainvire is an Adobe Solution Partner specialized in Adobe Commerce. To have that map checked against your ERP, send us your current flows.