Wholesale & EDI

Should I put wholesale on Shopify B2B, a wholesale portal, or EDI, and can I run more than one?

Comparing Shopify B2B, a wholesale portal, and EDI, and running more than one at once.

Last updated September 16, 2026

One order object. Three entry paths. The buyer does not pick your stack. You pick the path that buyer will actually use.

When to use Shopify B2B

Shopify B2B is for accounts that will log in and reorder. Company catalogs, price lists, net terms, and a checkout they already know. Self-serve restocks from a boutique, a regional grocer, or your own sales team's punch-out. Native catalogs and MOQs cover most 2026 B2B. Stay there until they don't.

When to use EDI

EDI is for the buyer that will never log in. Target, Costco, Nordstrom, and anyone whose routing guide starts with an 850. Confirm with an 855. Ship with an 856. Invoice with an 810. Shopify does not speak EDI. Do not turn a Shopify order into an 850 by hand, and do not run the same retailer through Shopify B2B and EDI. One trading partner, one path. An 850 that never becomes a native order makes the 856 a story you type later, and the chargeback a surprise.

When a wholesale portal fits

A wholesale portal or B2B app is the middle case, not the default. Use it when native Shopify catalogs cannot express the MOQ, pack size, or assortment that buyer needs, and they still will not stand up EDI. Do not buy a portal because a deck said B2B needs a portal. Most reorders do not.

Running more than one path

You can run more than one. You should, once you have self-serve accounts and a big-box that only sends 850s. The rule is not pick a system. The rule is one order object after capture. A portal checkout, an 850, and a Shopify B2B cart must all become the same kind of sales order: same inventory hold, same pick, same invoice-on-ship. If the portal reserves units the warehouse cannot see, DTC will steal them. If a portal order is really a quote, it still has to hold stock or it is a wish list.

Invoice when the carton leaves, on every path. Net terms live on the account, not on the storefront. Do not loosen DTC paid-only so unpaid wholesale will import. Give wholesale its own channel state. Confirm the 850 only when you can ship. An 855 on units you have not held is a chargeback you scheduled. Portal punch-outs and EDI 850s that skip the hold are the same miss in different envelopes.

Do not clone a second inventory for B2B. One pile. Fund a hold for open POs and portal bookings. Publish the remainder to DTC. A second on-hand for wholesale is how both channels sell the same carton. Capture can be three doors. Allocation cannot. Three doors. One ledger.

Run this with AI

Connect Claude or ChatGPT to your Fulfil data with the Fulfil MCP, then run this prompt on your own numbers.

You are the wholesale ops lead choosing capture paths.
Here is: account, path (shopify_b2b / portal / edi), sku, qty, terms, catalog_or_moq_ok (y/n), will_login (y/n), hold_qty, invoice_event, native_order (y/n).
[paste]

Produce:
1. Which path each account should use, and any account on two paths.
2. Orders that are not a native object (portal quote, spreadsheet, Shopify-as-850).
3. Holds the warehouse cannot see, and invoices not raised on ship.
4. Shopify B2B used for a retailer that only sends 850s.
One order object, three doors. Shopify does not speak EDI.

See it run on
your data.

Fulfil runs inventory, fulfillment, purchasing, and accounting for scaling DTC brands in one system.