July 3, 2026
12
min read

Why we almost never connect Shopify directly to the ERP

Table of contents

  1. The misconception: fewer systems mean less complexity
  2. Shopify and ERP have different roles
  3. The integration is rarely the real problem
  4. Why middleware is often useful
  5. A practical example: PGM
  6. Where business logic should live
  7. Example: inventory and availability
  8. Example: B2B prices
  9. When direct ERP integrations can still make sense
  10. The long-term view matters
  11. Our view on Shopify Plus integrations
  12. Conclusion

In many Shopify Plus projects, the ERP integration initially looks like a fairly straightforward technical task: Shopify needs product data, prices, inventory, customer data and orders, while the ERP already contains much of this information. The obvious idea is therefore to connect both systems directly.

In simple setups, this can work well, especially for smaller shops, few markets, manageable processes and stable data flows. In those cases, a direct integration can be the most pragmatic path because it involves fewer systems, less infrastructure and a smaller project scope.

In enterprise Shopify projects, however, the situation is often different because the challenge is not only to move data from A to B. It is about different responsibilities, clear system boundaries, process logic, error handling, scaling, maintainability and the question of which team can own which part of the platform in the long term.

That is why we almost never connect Shopify directly to the ERP in more complex projects. Not because middleware is always better, but because a direct integration often only looks simpler on the architecture diagram.

The misconception: fewer systems mean less complexity

A direct connection between Shopify and the ERP sounds reasonable at first. There is Shopify, there is the ERP, and there is an interface between them. It looks lean and efficient.

In practice, complexity does not only come from the number of systems. It mainly comes from business logic, data quality, process exceptions and later changes. A setup with only two systems can be very hard to maintain if both systems constantly have to make assumptions about each other.

A typical example is pricing logic in B2B commerce. On paper, Shopify simply needs the right price for the right customer, but in reality, prices often depend on customer groups, contracts, regions, minimum quantities, discounts, currencies, delivery terms or internal approvals. Some information comes from the ERP, some from the CRM, some from manual processes and some from historical exceptions that have grown over many years.

If Shopify is connected directly to the ERP, this logic has to live somewhere. Either Shopify takes on more responsibility than makes sense for the platform, or the ERP has to fulfill commerce requirements it was not built for. A third possibility is that the integration itself becomes more complex with every new rule until it is no longer just an interface, but a hidden business logic system without clear ownership.

That is the point where the seemingly simple architecture becomes difficult.

Shopify and ERP have different roles

In a modern commerce setup, Shopify is usually the platform for the storefront, cart, checkout, orders, customer interaction, promotions, markets and operational commerce functionality. The ERP, on the other hand, is often the leading system for financial data, inventory management, order processing, stock, invoices, purchasing, logistics or master data.

Both systems are important, but they solve different problems. An ERP is not automatically a good commerce API, and Shopify is not automatically the right place for every internal business rule.

Problems usually begin when one system is asked to take on responsibilities that actually sit between systems. This includes translating between internal data models and Shopify data models, combining data from ERP, PIM, CRM, OMS or other systems, calculating or preparing prices and availability, handling errors, timeouts and inconsistent data, caching data that should not be requested live on every page view, as well as monitoring and traceability of data flows.

These are not edge cases. In many enterprise projects, these are exactly the points that determine whether a system can be operated reliably after launch.

The integration is rarely the real problem

When companies talk about ERP integrations, the discussion often starts with technical questions. Is there an API? Which endpoints do we need? How are orders transferred? How often is inventory updated? Which data formats are available?

These questions matter, but they are rarely the hardest part. The harder part is usually the business clarification: Which system owns which data, which data may be changed in Shopify, and what happens if a product is active in the PIM but has no valid stock in the ERP? Which prices apply to logged-in B2B customers, how do we deal with markets that have different assortments, currencies or tax rates, and what happens if the ERP is unavailable for ten minutes?

A direct integration often forces both systems into real-time processes. This can make sense for certain operations, for example a critical availability check before checkout, but for many other data flows it is more robust to work with clear synchronization processes, intermediate storage, retry logic and monitoring.

This does not mean that everything should be asynchronous. It only means that every data problem has to be considered individually, because some information must be live, some can be a few minutes old, some should be stored in Shopify and some should only be referenced. This distinction is more important than the general question of whether an integration is direct or indirect.

Why middleware is often useful

Middleware is not an end in itself, because an additional layer does not automatically make a system better. On the contrary, it can also create unnecessary complexity if it is only introduced because it makes architecture diagrams look more modern.

In many enterprise Shopify projects, however, middleware is the place where the real translation work can happen. It does not only connect systems, it also protects them from each other.

Good middleware can transform data from the ERP into a Shopify-compatible format without requiring the ERP to know Shopify. It can enrich orders from Shopify before they are transferred to the ERP, catch errors, control retries, log data flows and create clear responsibilities. It can also prevent every new commerce requirement from immediately requiring a change in the ERP or the storefront.

This is especially important when multiple systems are involved. In an enterprise setup, Shopify and the ERP are often joined by PIM, CRM, OMS, WMS, analytics, consent management, marketplaces or internal tools. Without an intermediate layer, the system landscape can quickly turn into a network of point-to-point connections where every new requirement has to be implemented in several places and every change in one system can affect several others.

Middleware does not reduce this complexity by making it disappear. It makes it more visible and easier to control.

A practical example: PGM

A concrete example is our work for PGM. In that project, we built middleware between a headless Shopify architecture and the ERP because the requirements could not have been solved cleanly through a direct connection between the storefront, Shopify and the ERP.

The middleware takes on several responsibilities in this setup. It caches relevant data, prepares it for the headless storefront and handles business logic that should not live directly in the frontend, the ERP or Shopify itself. One example is assigning customer-specific discounts to Shopify catalogs.

Cases like this show why middleware in enterprise Shopify projects is often more than just a technical layer in between. It becomes the place where systems are decoupled, data is prepared and company-specific rules can be handled in a controlled way. For the project, this does not only mean more flexibility during implementation, but also an architecture that remains easier to maintain in the long term.

Where business logic should live

One of the most important architecture questions in Shopify Plus projects is: Where does the business logic live?

This question is often asked too late. First, the system is implemented, then teams realize that pricing rules appear in several systems, product logic partly lives in the theme, B2B exceptions are maintained in the ERP, customer groups live in the CRM and certain special cases were hardcoded directly into an integration.

Sometimes this works in the beginning, but later it becomes expensive. When business logic is distributed across multiple places, every change becomes riskier because nobody knows exactly which system is responsible for which decision. Teams have to check several dependencies for every adjustment, errors become harder to trace, and new markets, customer groups or sales channels increase complexity further.

That is why we try to clarify early in enterprise Shopify projects which logic belongs in Shopify, which should remain in the ERP and which should deliberately be moved into middleware or a custom app layer.

Shopify should handle commerce processes natively where this makes sense. This includes products, variants, markets, cart, checkout, customer accounts, orders and many B2B functions. The ERP should remain the leading system where it is the leading system from a business perspective, but between the two, there often needs to be a layer that translates rules, prepares data and decouples processes.

The most important question is therefore not whether something can be integrated directly. The better question is whether the team will still be able to understand, change and operate this decision in two or three years.

Example: inventory and availability

Inventory looks simple at first. A product is available or not, Shopify displays the stock, customers buy, and the ERP processes the order.

In practice, availability is often more complex than a single number. A company can have multiple warehouses, stock can be reserved for certain customer groups, some products are sold on request, some items are only available in certain markets, and some stock should be visible in the shop while other stock is used internally only. In B2B, minimum quantities, delivery windows or customer-specific assortments are often added on top.

A direct live request to the ERP at every relevant storefront or checkout step sounds precise at first, but it can create performance issues, failure scenarios and hard dependencies. If the ERP is slow, the shop becomes slow. If the ERP is unavailable, an internal system issue quickly becomes a commerce issue. And when the availability logic changes, the integration has to be adjusted.

Middleware can help here by preparing, caching and updating different availability information and making it available to Shopify in a form that fits the commerce process. Critical checks can still happen live, but not every decision has to be directly coupled to the ERP.

The goal is not to duplicate data artificially, but to have the right availability at the right point in the process.

Example: B2B prices

B2B prices are a similar topic. Many companies start with the assumption that Shopify simply has to display prices from the ERP, but the difficulty is rarely displaying a price. The harder part is the combination of customer assignment, price lists, contract logic, quantity tiers, discounts, markets and checkout behavior.

If the pricing logic is very simple, native Shopify B2B features, price lists and Markets can already cover a lot. If the pricing logic is highly company-specific, however, it needs to be decided more carefully which rules can be managed in Shopify and which rules have to come from existing systems.

A direct ERP request for every price may be technically possible, but it is not always sensible. It can affect storefront performance, increase caching complexity and create very tight dependencies between commerce and the ERP.

Middleware can precompute, synchronize or validate prices at certain critical moments. It can also make it more transparent why a customer sees a specific price. In B2B commerce, this is often more important than the technical connection itself because sales, support and ecommerce teams need to understand pricing decisions. Otherwise, every deviation becomes a support case.

At PGM, we worked in exactly this kind of environment: the middleware between headless Shopify and the ERP caches data and, among other things, handles the logic that assigns customer-specific discounts to the right Shopify catalogs. This is a good example of why B2B pricing logic often does not simply “come from the ERP”, but needs to be embedded in an architecture that connects Shopify, the storefront and internal systems cleanly.

When direct ERP integrations can still make sense

It would be wrong to say that direct ERP integrations are always bad. In some cases, they are exactly right.

A direct integration can make sense when processes are manageable, the ERP provides stable and modern APIs, only a few data flows are needed and the business logic clearly lives in one system. For smaller Shopify setups or clearly limited workflows, a direct connection can also be the simplest and most economical solution.

Sometimes an existing iPaaS solution is sufficient as well. If standard processes such as product import, inventory synchronization or order transfer are well covered, custom middleware does not have to be built immediately. Good architecture does not mean building as much as possible yourself, it means deliberately deciding where standard solutions are enough and where your own business processes require a more individual layer.

The problem is therefore not the direct integration itself, but treating it as the default answer for every enterprise setup.

The long-term view matters

Many architecture decisions look like project decisions at the beginning, but after launch they become operational decisions.

Who monitors the interface? Who is alerted when orders are not transferred? How are failed jobs retried? Who explains to customer service why a price is wrong? How can the ecommerce team roll out a new assortment without blocking on IT every time? And what happens if the ERP is replaced or extended in two years?

These questions are no less important than the initial implementation. In enterprise commerce projects, launch is not the end of complexity because the real test often begins afterwards: more markets, more customer groups, new requirements, new systems and new internal responsibilities.

A direct integration may feel faster for the first launch, while a cleanly separated integration architecture can be cheaper over the following years. That is the real tradeoff.

Our view on Shopify Plus integrations

At Especial, we usually look at Shopify Plus integrations from three perspectives: risk, ownership and long-term adaptability.

Risk means asking early what happens when a system is slow, provides wrong data or is temporarily unavailable. Ownership means being clear about which team understands and owns which part of the system. Adaptability means that a company should be able to add new markets, new processes, new customer groups or new systems without rebuilding the entire architecture.

From this perspective, middleware is often not additional complexity, but a way to move complexity to the right place. It does not make every project easier, but it can prevent Shopify, the ERP, the storefront and internal processes from becoming too tightly coupled.

This is especially important for companies that use Shopify Plus not only as a shop system, but as part of a larger commerce landscape. In these projects, the work is not only about frontend, checkout or data transfer. It is about building a platform that can continue to grow with the company.

Conclusion

The question is not whether Shopify can be connected directly to the ERP. In many cases, it can.

The better question is whether a direct connection will still be the right decision in two or three years.

In simple setups, it can be pragmatic. In more complex enterprise Shopify projects, however, it quickly becomes tight coupling between systems, teams and processes. In that case, middleware is not just a technical layer, but an architecture tool. It helps place business logic more cleanly, decouple systems, handle errors better and make future changes more realistic.

The best architecture is not the one with the fewest boxes in the diagram, but the one a company can understand, operate and change in the long term.

Daniel Kolb
Founder & Enterprise Shopify Architect
July 3, 2026
12
min read