All Posts
EngineeringMarch 23, 2026

Integrating ERPs with Shopify Plus: Why Shopify's API is Winning the Mid Market

Mid market brands running ERPs alongside Shopify Plus face a surprisingly complex integration landscape. Most teams assume the hard part is the ERP side. It isn't. Shopify's API surface has matured dramatically, and the brands that understand its architecture can build clean, real time sync without six figure middleware platforms.

Mid market brands running ERPs alongside Shopify Plus face a surprisingly complex integration landscape. Most teams assume the hard part is the ERP side. It isn't. Shopify's API surface has matured dramatically, and the brands that understand its architecture can build clean, real time sync without six figure middleware platforms.

The ones that don't understand it end up with oversold iPaaS contracts, brittle webhook chains, and inventory that's perpetually two hours out of date.

Why ERP Integration Breaks Down at Mid Market Scale

The mid market sits in an awkward position. You're past the point where manual data entry is survivable, but you're not yet at the scale that justifies a full Oracle Commerce + Mulesoft stack. Most ERP integrations at this tier get built in one of three ways: a one size fits all connector from the ERP vendor, a generic iPaaS platform like Celigo or Boomi, or a bespoke internal build that ships late and gets abandoned after the lead developer leaves.

Each of these approaches fails for the same underlying reason: they treat Shopify as a passive data sink. Push orders in, pull inventory out. That worked when Shopify's API was simpler. It doesn't work now that a single Shopify Plus store can have B2B price lists, multi location inventory, metafield driven product data, and draft orders living alongside standard checkout flows.

The integration layer has to understand Shopify's data model, not just its endpoints.

The Technical Foundation: How Shopify's API Surface Has Changed

Shopify's REST Admin API has been progressively replaced by the GraphQL Admin API, and for integration work this matters enormously. INTERNAL LINK: Why Shopify GraphQL matters for enterprise → Shopify GraphQL vs REST for large catalogs

The GraphQL API exposes bulk operations that let you query or mutate thousands of records in a single async job, essential for initial ERP sync and large catalog updates. REST rate limits were per endpoint and unpredictable; GraphQL uses a cost based throttling model that's deterministic and easier to build around.

Three specific API features define modern Shopify Plus ERP architecture:

Inventory API with multi location support. Shopify's inventoryAdjustQuantities mutation lets you set absolute quantities per location atomically. This is the correct pattern for ERP sync. Your ERP is the system of record, and you're not incrementing/decrementing, you're asserting the current state. Connector tools that still use inventoryLevelSet on the REST API will lose inventory during concurrent updates.

Draft Orders and B2B catalog. Shopify Plus B2B, released in 2022, moves company level pricing and catalogs into first class API objects. If your ERP manages customer specific pricing (standard for NetSuite), you need to push those price lists into Shopify's B2B catalog, not replicate them in a separate app or Liquid theme workaround.

Webhooks v2 with delivery verification. Shopify's webhook system now includes HMAC verification and delivery retries with exponential backoff. Your integration should validate the X-Shopify-Hmac-Sha256 header on every webhook before processing. Skipping this is a critical security gap that commodity connectors often ignore.

Implementation Deep Dive: NetSuite and QuickBooks Patterns

NetSuite + Shopify Plus

NetSuite is the most common ERP at mid market Shopify Plus brands. The canonical integration pattern is event driven in both directions: Shopify webhooks trigger NetSuite record creation, and NetSuite saved searches or SuiteScript schedulers push fulfillment and inventory updates back to Shopify.

The architecture that actually works at scale looks like this:

  1. Order flow (Shopify to NetSuite): Shopify fires orders/paid webhook to your middleware. Middleware transforms the payload into a NetSuite Sales Order, resolving Shopify customer IDs to NetSuite customer records and Shopify variant SKUs to NetSuite inventory items. Idempotency key = Shopify order ID stored on the NetSuite SO as a custom field.
  2. Fulfillment flow (NetSuite to Shopify): NetSuite SuiteScript scheduler polls for fulfilled SOs every 15 minutes, calls Shopify's fulfillmentOrders GraphQL mutation to create fulfillments with tracking. Avoid using Shopify's legacy fulfillments REST endpoint. It doesn't support fulfillment holds or third party logistics scenarios cleanly.
  3. Inventory sync (NetSuite to Shopify): Nightly bulk sync using Shopify's GraphQL bulk operations. NetSuite exports inventory quantities per location to a CSV; a lightweight Lambda or Cloud Run job reads this and fires inventoryAdjustQuantities mutations in batches of 250 items per mutation, respecting Shopify's GraphQL cost limits.

The most common failure mode in NetSuite integrations is treating the order webhook as guaranteed delivery. It isn't. Shopify retries failed webhook deliveries for 48 hours, but if your middleware is down during that window, you lose the event. INTERNAL LINK: Reliable webhook processing → building idempotent webhook consumers The correct pattern is a webhook receiver that immediately acknowledges with 200, persists the raw payload to a queue (SQS, Pub/Sub, or even a Supabase table), and processes asynchronously.

QuickBooks Online + Shopify Plus

QuickBooks integrations are typically simpler in scope. QBO is an accounting system, not an operational ERP, so you're syncing orders and payments for financial reporting rather than driving fulfillment workflows.

The critical constraint here is QuickBooks Online's API rate limit: 500 requests per minute per company. For Shopify stores doing more than a few hundred orders per day, naive per order sync will hit this ceiling fast. The correct pattern is batch reconciliation: aggregate Shopify orders into a daily summary journal entry rather than creating individual QBO invoices per order. This mirrors how physical POS systems handle end of day settlement and keeps your QBO data clean for accounting purposes.

If you need individual order level records in QBO for invoicing or AR purposes, use a queue based approach that rate limits QBO API calls explicitly, rather than relying on iPaaS platform throttling (which is often misconfigured out of the box).

The Decision Framework: How to Choose Your Integration Architecture

ApproachBest ForAvoid If
Native ERP connector (e.g., NetSuite Shopify connector)Small teams, standard data model, low customizationYou have custom metafields, B2B pricing, or multi location inventory
iPaaS platform (Celigo, Boomi, MuleSoft)Teams that want UI driven mapping and pre built connectorsYour order volume makes per transaction pricing unsustainable
Custom middleware (Node.js / Python on Cloud Run or Lambda)Full control, complex business logic, high volumeYou lack engineering resources to maintain it long term
Hybrid: custom core + iPaaS for edge casesMid market brands with complex logic but finite eng bandwidthN/A this is usually the right answer

The most underrated factor in this decision is total cost of ownership at volume. iPaaS platforms charge per transaction at the lower tiers. At 5,000 orders/month, the per transaction cost on Celigo Starter can exceed what a dedicated Cloud Run service would cost to run for a year. Do the math before signing a contract.

Key Decision Criteria

Your integration architecture should match your operational cadence. If your ERP team runs nightly batch jobs, real time webhook processing creates unnecessary complexity. Build a scheduled sync instead. If your ops team needs order status in NetSuite within minutes of Shopify checkout, event driven is non negotiable.

The second criterion is error visibility. Whatever you build, you need an alerting layer that fires when sync fails. A silent failure in order sync can mean fulfilled orders never reach your warehouse. Instrument your integration with structured logging and set up failure alerts from day one, not as a post launch cleanup task.

What This Means for Your Business

Getting ERP integration right is not a technical nice to have. It's the difference between your ops team running on accurate data and running on stale exports and manual reconciliation. At mid market scale, the cost of bad inventory data, stockouts, oversells, manual correction cycles, compounds fast. An integration that's slightly harder to build but operationally reliable pays for itself in months.

The brands that invest in understanding Shopify's API model before choosing their integration stack end up with systems that survive catalog expansions, warehouse additions, and ERP upgrades. The ones that buy a connector and hope for the best end up rebuilding every 18 months.

How Contra Collective Bridges the Gap

Contra Collective has built production ERP integrations for mid market Shopify Plus brands across NetSuite, QuickBooks, and custom ERP environments. We know where the edge cases live, B2B catalog sync, multi location inventory atomicity, idempotent webhook consumers, and we build integrations designed to survive the operational realities of growing brands, not just pass a demo.

Ready to make the right call for your stack? Book a free technical audit no sales pitch, just clarity.

Final Thoughts

Shopify's API has grown up. The mid market brands winning on operational efficiency are the ones treating their Shopify Plus integration as a first class engineering concern, not a connector and forget checkbox. The patterns exist. The tooling is mature. The gap is in knowing which patterns to apply to your specific ERP and data model, and having the discipline to build for failure from the start.

[ 02 ] — Keep Reading

More from the lab.

Jun 14, 2026Engineering

Stytch vs Magic.link: Passwordless Authentication for Modern Web Apps

Passwords are a UX tax. Every password a user creates is a support ticket waiting to happen, a security incident in the making, and a checkout abandonment rate line item your e-commerce analytics will eventually surface. The industry has known this for years. Passwordless authentication, once a niche experiment, is now table stakes for consumer-facing applications that care about conversion.

Jun 12, 2026Engineering

Cognito vs Clerk: AWS Native Auth vs Developer-First Identity in 2026

AWS Cognito is one of the most widely used authentication services in the world, and one of the most frequently replaced. Its usage stats reflect the gravitational pull of the AWS ecosystem. Its replacement frequency reflects something more honest about its developer experience. Clerk built its entire company on the premise that authentication should feel like a first-party framework feature, not a cloud service you configure through a JSON policy document.

Jun 12, 2026Engineering

Shopify Plus vs Salesforce Commerce Cloud: 2026 Enterprise Platform Decision

The enterprise commerce platform market has bifurcated sharply. On one side: Salesforce Commerce Cloud, a legacy powerhouse built for complexity and customization at a price that reflects it. On the other: Shopify Plus, a platform that has spent the last four years systematically closing the enterprise feature gap while keeping total cost of ownership radically lower. The question for most brands in 2026 is no longer whether Shopify Plus is enterprise-ready. It is whether SFCC's remaining advantages justify its cost.

Ready when you are

Want to discuss this topic?

Start a Conversation