Skip to content
SyncMyShop

Shopify and SAP

Shopify SAP integration

Orders from Shopify into SAP Business One or SAP S/4HANA, items, prices and stock per warehouse back to Shopify. Built on the Service Layer or the S/4HANA OData APIs, to your business partners, price lists and sales areas, then hosted and run for you.

What moves between Shopify and SAP

"SAP" in a Shopify project means one of two systems. SAP Business One is the ERP for small and midsize companies, reached through the Service Layer. SAP S/4HANA, and its predecessor ECC, is the enterprise ERP with released OData APIs and IDocs. The flows are the same in both; the objects have different names.

Flow Direction SAP Business One SAP S/4HANA
Items to Shopify Items material, product master
Prices to Shopify PriceLists, SpecialPrices pricing conditions
Stock to Shopify ItemWarehouseInfoCollection API_MATERIAL_STOCK_SRV
Orders to SAP POST /Orders POST A_SalesOrder
Customers to SAP BusinessPartners business partner, sold-to and ship-to
Deliveries and tracking to Shopify DeliveryNotes outbound delivery

The general setup of an ERP integration is on e-commerce ERP integration.

Which system owns what

Data System of record Direction Sync behavior
Item code, units, weight SAP to Shopify changed items on a schedule
Titles, descriptions, images Shopify or a PIM stays in Shopify not overwritten from SAP
Price lists and special prices SAP to Shopify resolved per customer, nightly
Stock per warehouse or plant SAP to Shopify changed quantities every few minutes
Orders Shopify until import, then SAP to SAP once, keyed on the Shopify order name
Business partners SAP Shopify supplies new web customers match on email, then create
Deliveries and tracking SAP or the WMS to Shopify one fulfillment per delivery

What Shopify and SAP store differently

No variants in SAP Business One. A Shopify product has up to three options and 2,048 variants. The Items object in SAP Business One has no parent or variant property: each color and size is its own item with its own ItemCode, 20 characters in SAP's SDK reference. Its 64 item properties are yes or no flags for reports, not options. The integration groups items into one Shopify product by a rule you set, such as a shared code prefix or a user-defined field, and keeps the variant ID next to each ItemCode. More in variant mapping.

Special prices against Shopify catalogs. SAP Business One prices an item from the business partner's price list, number PriceListNum. A special price for one business partner overrides it, with periods (SpecialPricesDataAreas) and quantity scales per period (SpecialPricesQuantityAreas). Shopify gives a B2B customer the lowest price across all catalogs assigned to them. Price list 2 at 10.00 and a special price of 10.40 for customer C20012 would show 10.00 in Shopify. So the integration calculates the SAP price per customer and item and writes one catalog per customer, 250 prices per request.

Sales areas in S/4HANA. Every S/4HANA sales order carries a sales organization, a distribution channel and a division, as in SAP's own example: 1010, 10, 00. Shopify has none of these. A rule table derives them from the Shopify channel: the online store to channel 10, B2B company locations to channel 20. SAP fills other fields from configuration and master data, and its documentation notes that such values cannot be cleared in the create request.

A Shopify order mapped to an SAP S/4HANA sales order Shopify order #100482 becomes an A_SalesOrder. The sales channel decides sales organization, distribution channel and division, which Shopify does not have. The email resolves to sold-to party 10100001, the shipping address to a ship-to partner, the SKU to a material and the discount to a pricing element. Shopify order S/4HANA A_SalesOrder name #100482 sourceName / company B2B company location decides the sales area email buyer@bakker.example shippingAddress Industrieweg 12, 3542 AD lineItems.sku 10482-NAVY-L discountApplications FALL10, 10 percent PurchaseOrderByCustomer SHOP-100482 SalesOrganization 1010 DistributionChannel 20 OrganizationDivision 00 SoldToParty 10100001 must exist before the order to_Partner SH ship-to 10100003 to_Item.Material 10482-NAVY-L 18 characters unless extended to_PricingElement ConditionType per your pricing prefix SHOP- rule table lookup match or create condition
Three of the fields S/4HANA requires on every sales order have no counterpart in Shopify. A rule table supplies them.

Material numbers. An S/4HANA material number is 18 characters by default and 40 when the extended material number is switched on. A Shopify SKU has no fixed length. A SKU longer than the material field is caught before the item is created, not after the first order fails.

Business partners and references. A Business One business partner has a CardCode of 15 characters and a name of 100. A Business One address has a Street of 100 characters and a ZipCode of 20. The Shopify order name goes into NumAtCard, the customer's reference on the document, which holds 100 characters. In S/4HANA it goes into PurchaseOrderByCustomer. In the EU, each Business One document line carries a VatGroup of 8 characters, which the integration sets from the ship-to country and the customer's VAT status.

POST /b1s/v1/Orders HTTP/1.1
Cookie: B1SESSION=PTRzIjYK-weN6; ROUTEID=.node1
Content-Type: application/json

{
  "CardCode": "C20012",
  "NumAtCard": "SHOP-100482",
  "DocDate": "2026-10-03",
  "DocDueDate": "2026-10-06",
  "DocumentLines": [
    { "ItemCode": "10482-NAVY-L", "Quantity": 4,
      "UnitPrice": 10.40, "WarehouseCode": "01", "VatGroup": "S1" }
  ]
}

The technical reality of this pair

Limit Shopify SAP Business One Service Layer SAP S/4HANA OData
Access token per app login, B1SESSION cookie X-CSRF-Token on every write
Session none 30 minutes default timeout none
Page size 250 per input array 20 by default, set per request $top and $skip
Batching bulk operations $batch, atomic change sets one sales order per change set
Over the limit THROTTLED the server slows the server slows

The Business One numbers come from SAP's guide Working with SAP Business One Service Layer, checked on October 3, 2026. SAP publishes no request rate for either system: the limit is the server, often shared with the users entering orders by hand.

Reading items, worked through. 6,000 items at the Service Layer's default page size of 20 is 300 requests. With Prefer: odata.maxpagesize=500 it is 12. Each item carries its stock per warehouse, InStock, Committed and Ordered. With two warehouses that is 12,000 quantities, and writing them to Shopify takes 12,000 divided by 250, which is 48 calls. After the first run only changed items are read, filtered on their update date.

Sessions. The Service Layer answers a login with a B1SESSION cookie and, behind its load balancer, a ROUTEID cookie that keeps requests on the same node. A session expires after 30 minutes without use. The integration logs in again when that happens and resends the request, so a quiet night does not end in failed orders.

Atomic writes. In a Service Layer $batch, a change set is atomic: one failed request rolls back the whole set. Since 10.0 FP 2102 the Service Layer also supports ETags, so an update made with an outdated version of a record is rejected instead of overwriting someone's change. On S/4HANA a $batch may hold only one sales order per change set. A batch of 50 Shopify orders is 50 change sets, and one rejected order does not hold back the other 49.

Shopify's side. Shopify waits five seconds for an answer to a webhook and retries 8 times over 4 hours. The webhook only places the order ID in a queue; a reconciliation run compares recent Shopify orders with NumAtCard or PurchaseOrderByCustomer values in SAP. The cost model is in Shopify API rate limits.

Where standard connectors stop

Standard connectors and iPaaS templates for Shopify and SAP come with fixed answers to questions that are configuration in every SAP system: which sales area a web order gets, which pricing condition carries a discount, how a VAT group is chosen, how items are grouped into a product. Anything outside those settings goes back to your SAP team as a custom extension or a manual step.

On S/4HANA the alternative is often an EDI-style route: Shopify orders converted to ORDERS IDocs, which SAP lists as the inbound message for sales orders, in IDoc types up to ORDERS05. That works where an IDoc channel already runs, and it moves the errors into SAP's IDoc monitor instead of a place the e-commerce team sees.

A built integration takes the rule table, the price calculation and the item grouping from how your SAP is configured. The technical comparison is in custom integration vs iPaaS.

When it goes wrong

What fails What the integration does What you see
Service Layer session expired logs in again, resends the request nothing
Sold-to party not found order held, a new business partner proposed the order and the email
SKU without an ItemCode or material that order held, the rest continue the order and the SKU
Change set rolled back the order is sent again on its own, then held the order and SAP's message
SAP down for maintenance orders wait in the queue the queue length
Shopify THROTTLED smaller batches, sent again nothing

An order that still fails after its retries is kept with its original payload and sent again once the cause is fixed. Each order carries the Shopify name as its reference, so a retry finds the existing document instead of creating a second one. Nothing is dropped without a trace; how that works is in what happens when a sync fails.

Before go-live the integration runs as a dry run against a test company database or a quality system, writing nothing, and you approve what it would do. After that every run has a diff per record. We host and monitor it and change it when Shopify ships a new API version or SAP a new feature pack. The system side is on SAP Business One integration, the platform side on Shopify integration, all flows on integrations. Sibling pages: Magento SAP integration, Shopify Business Central integration and Shopify NetSuite integration. Tell us which SAP you run.

Frequently asked questions

Does this work with SAP Business One and with S/4HANA?

Yes, through different APIs. SAP Business One runs through the Service Layer, an OData service on SAP HANA and, since 10.0 PL01, on SQL Server. S/4HANA runs through its released OData APIs such as API_SALES_ORDER_SRV. The flows are the same; the fields and the limits differ.

Can we use the DI API instead of the Service Layer?

The DI API is a COM library that runs on a Windows machine next to SAP Business One and does not support multithreading. For a web shop that sends orders at the same time as stock and prices are read, the Service Layer is the better fit: it is HTTP, runs behind a load balancer and can serve several sessions in parallel.

Do B2B customers see their SAP prices in Shopify?

Yes. A business partner becomes a Shopify company, and its price list plus special prices become one catalog with a price list. Shopify gives a customer the lowest price across all catalogs assigned to them, so we resolve the SAP price first and send one catalog per customer. See customer-specific pricing.

We already exchange orders with SAP through IDocs. Does that change?

It does not have to. SAP's sales documentation lists the ORDERS IDoc, up to type ORDERS05, as the inbound message for sales orders, next to the OData API. If your SAP team already processes ORDERS IDocs from EDI partners, Shopify orders can arrive the same way. Otherwise the OData API is simpler to monitor per order.

Do we need Shopify Plus?

No. Companies, catalogs and payment terms are on every Shopify plan since April 2026, with 3 active catalogs below Plus. Plus raises the API rate from 100 to 1,000 points per second and the location limit from 10 to 200, which matters with many SAP warehouses.

Tell us what you need

Tell us which systems you use and what needs to work better. We reply personally within one working day. We help you define the work, then agree the price and timing before you commit.

  • You know the price and the timeline before you commit to anything
  • We work out the connection that takes the work off your hands
  • We handle the build, hosting, monitoring and maintenance
  • Your team has less information to retype and fewer discrepancies to chase

Suppliers, products, orders per day, a rough estimate is fine.

Or email directly: carsten@syncmyshop.com