Industries
Industrial and MRO supply integrations: contract prices, units and PunchOut from your ERP
An industrial or MRO supplier sells tens of thousands of parts on contract prices, in boxes and cases, to buyers who order from Ariba, Coupa or their own ERP. The integration takes prices, units and stock from your ERP into the store and the procurement systems, and books every order back on the buyer's PO number.
What industrial and MRO suppliers run into
Five things come back at almost every industrial or MRO supplier that sells online.
- A large catalog in several units. 20,000 parts sold each, by the box and by the case are 60,000 sellable units. Each one needs a price, a stock figure and a code the buyer's system accepts.
- Contract prices. A plant buys on a negotiated price list, often per account and per ship-to. The list price on the product page is the price almost nobody pays.
- Buyers inside a procurement system. Larger accounts order from SAP Ariba, Coupa or their own ERP. They do not use your cart; they punch out to it, or send an X12 850.
- Tax-exempt buyers. Resellers and many plants buy without sales tax, on a certificate per state.
- Chemicals in the catalog. Lubricants, solvents and coatings need a safety data sheet with the first shipment, and again after each revision.
Each of these is a data flow with one system that owns it. The rest of this page goes through them with the fields involved.
The flows that matter most
| Flow | Owner | What moves | In depth |
|---|---|---|---|
| Contract prices | ERP | price level or contract per account, price breaks, valid dates | customer-specific pricing |
| Units and pack sizes | ERP | base unit, selling units, conversion rate, order multiple | units of measure |
| Stock per branch | ERP or WMS | available quantity per location, in the base unit | multi-location inventory |
| PunchOut carts and orders | buyer's procurement system | cXML cart, OrderRequest, confirmation, ship notice |
PunchOut catalogs |
| EDI orders | buyer's ERP | 850 in; 855, 856 and 810 out | EDI integration |
| Product data and SDS | PIM or ERP | attributes, classification, SDS file and revision date | product data |
Units, worked through one order
A box of 25 cut-off wheels, item CW45025. The ERP stocks it in each. The contract price for one account is 41.25 per box, which is 41.25 / 25 = 1.65 per each. The buyer orders 3 boxes from their ERP:
BEG*00*SA*PO-77310**20261003~
PO1*1*3*BX*41.25*CT*VP*CW45025*BP*MRO-88812~
PO1-03 is the unit, BX. PO1-05 is CT, contract price, in the X12 code list. In NetSuite the item has a units type with Box at a conversion rate of 25, so the line becomes quantity 3 in unit Box: 75 each in the base unit, 3 x 41.25 = 123.75 for the line.
Stock runs the other way. The branch holds 1,140 each, which is 1,140 / 25 = 45.6 boxes. The store sells whole boxes, so it shows 45. Sending 45.6, or 1,140, to a variant that sells boxes is how an online order for a box that does not exist gets accepted.
Three checks sit on that line. A unit with no entry in the translation table stops the line instead of booking it as each. A price that differs from the contract goes to a review list with both values. And the buyer's part number, MRO-88812, is kept with the line, so it can go back on the 855, 856 and 810 when the buyer's EDI guide asks for it.
Systems in industrial and MRO supply
| System | How it exposes data | What to plan for |
|---|---|---|
| NetSuite | REST, SOAP, RESTlets, SuiteQL | concurrency 5 on Standard, 15 on Premium, shared by every integration; units types with a conversion rate per unit |
| Business Central | API v2.0 and OData | 6,000 OData requests per 5 minutes per user; stock per location needs a custom API page |
| Acumatica | contract-based REST, OData for inquiries | requests per minute set by the license; delayed from 50% of the limit |
| SAP Business One | Service Layer (OData) | session expires after 30 minutes; 20 records per page by default |
The store side has its own limits. Shopify has 10 locations on Basic, Grow and Advanced and 200 on Plus, so a supplier with 14 branches either sums branches into regions or runs on Plus. B2B catalogs are per company location: 3 active catalogs in total below Plus, 25 per location and 10,000 per store on Plus. A QuantityRule on a B2B price list sets minimum, maximum and increment per variant, so a box that ships only in cases of 10 can be ordered only in steps of 10.
Tax exemptions are set per company location in taxSettings. Shopify's TaxExemption list has 51 US values, all reseller exemptions by state, such as US_OH_RESELLER_EXEMPTION. A plant exempt for another reason is set to taxExempt: true. The integration takes the exemption from the customer record in the ERP, so the store and the invoice agree on whether tax was charged.
Standards industrial buyers ask for
| Standard | Who asks | What it means for the integration |
|---|---|---|
| cXML PunchOut | buyers on SAP Ariba and Coupa | cart as a quote, order as OrderRequest; units as UN/CEFACT codes; a UNSPSC code per line |
| OCI | buyers on SAP SRM and SAP-based procurement | form fields with fixed lengths: description 40, unit 3 |
| X12 850, 855, 856, 810 | buyers who order from their own ERP | unit codes from the X12 list; buyer part number kept per line |
| ETIM | electrical, HVAC, plumbing, tools and hardware | technical features per product class, in metric or imperial |
| OSHA HazCom SDS | buyers of hazardous chemicals | 16-section sheet with the first shipment and after each update |
PunchOut. The cXML reference says the Classification element carries a UNSPSC commodity code per item, used in the buyer's systems for accounting and reporting. A part without one cannot be sent, because ItemDetail requires it. Coupa expects an OrderResponse within 60 seconds of every OrderRequest; on a 5XX it retries 5 times at 1-hour intervals and does not retry a 4XX. The order is stored and answered first, then queued for the ERP, so a slow ERP never turns into a failed purchase order. The protocol is on cXML.
ETIM. ETIM classifies technical products in classes with typed features: alphanumeric, logical, numeric and range. ETIM North America covers the US and Canada. ETIM 10.0 was released in December 2024 and 11.0 is planned for December 1, 2026. Imperial features have their own codes, starting with EFI; the xChange exchange format could not carry them until version 1.1. A store filter on thread size or voltage is only as good as the feature values behind it, so the integration maps ETIM features to store attributes per class and reports products that lack a required value.
Safety data sheets with the first shipment
Under 29 CFR 1910.1200(g)(7), a distributor provides the safety data sheet to an employer with the initial shipment of a hazardous chemical and with the first shipment after the sheet is updated, either in the box or sent before or at the time of shipment. The sheet has 16 sections in a fixed order; section 16 carries the date of preparation or last revision.
That makes it a data problem, not a document problem. Per product the integration holds the SDS file and its revision date. Per customer it records which revision was last sent. When a fulfillment contains an item whose current revision that customer has not received, the shipment is flagged and the sheet goes out with the order confirmation or the packing list. A supplier with 600 SDS-bearing items and 2,000 accounts has up to 1.2 million product and customer pairs, which is too many to track in a spreadsheet and easy to track in a table.
What this means for your integration
We build the integration on your ERP and your rules: which price wins for an account, how each unit converts, which branches sell online, which buyers punch out and which send X12. Then we host and run it. Every run has a log and a diff, an order that fails a unit or price check waits in a queue with the reason, and a buyer's purchase order is acknowledged even when the ERP is slow.
All flows are on ecommerce ERP integration, and the neighboring industries are distribution and wholesale and manufacturing. The full list is under industries. Tell us which ERP and which procurement systems your buyers use, and you hear which of these flows saves the most work for you.
Frequently asked questions
Can our buyers order from Ariba or Coupa instead of logging in to the store?
Yes. The buyer opens your store from inside their procurement system over cXML PunchOut, fills a cart, and the cart goes back to their system for approval. The approved purchase order then arrives as a cXML OrderRequest and goes to your ERP like any other order. How a session runs is on PunchOut catalogs.
Can every account see its own contract price?
Yes, after login. The integration reads the contract or price level per account from the ERP and writes it to a catalog or price list per company location in the store. On Shopify Plus that is up to 25 catalogs per location and 10,000 per store; below Plus there are 3 active catalogs in total, so per-account prices go on the draft order instead. See customer-specific pricing.
We stock in each but sell in boxes. How does stock show in the store?
The ERP keeps stock in the base unit and the integration divides it by the pack size per selling unit. 1,140 each in boxes of 25 is 45 full boxes, not 45.6. The store shows 45, and an order for 3 boxes books 75 each in the ERP.
How are tax-exempt buyers handled?
The exemption is set per company location in the store, from the certificate data in the ERP. Shopify's tax exemption list has 51 US values, all of them reseller exemptions by state. A buyer that is exempt for another reason is set to taxExempt on its location, and the certificate itself stays in the ERP or the tax engine.
Our buyers send X12 850s. Does the store have to be involved?
No. An 850 goes straight to the ERP as a sales order, and the 855, 856 and 810 come out of it. The store and the EDI flow share the same item, unit and price tables, so a box is a box in both. The document set is on EDI 850 purchase order.
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