08 Jun 2026 · Shopify, B2B, Wholesale, Checkout
Shopify B2B wholesale checkout optimisation: the patterns that actually work
Net terms, PO fields, pack-size enforcement, draft orders, and checkout extensibility — the specific mechanics that turn a B2B Shopify checkout from a friction point into a trade buyer's preferred channel.
Why B2B checkout is a different problem
Consumer checkout optimisation is about removing hesitation at the last moment. B2B checkout optimisation is about expressing business rules clearly enough that your trade buyer does not need to phone your team to complete an order.
The friction is rarely a slow page or a confusing button. It is:
- contract pricing not matching what the buyer expects,
- payment terms not available at checkout,
- a PO reference that has nowhere to go,
- a minimum order quantity the system does not enforce,
- or an approval step that exists only in someone's inbox.
Each of those is a policy problem. Solving them in checkout UI — rather than in manual follow-up — is what makes the difference between a wholesale channel that scales and one that caps out at the capacity of your ops team.
The checkout model matters before you touch the theme
Before optimising checkout UI, get the data model right. Three things determine almost everything:
Company accounts with location and contact hierarchy. Shopify's native B2B features (available on Plus) model this as Company → Location → Contact, with payment terms and catalogs assigned at the location level. If you are on a non-Plus plan and running wholesale via customer tags and price lists, you are operating outside that model — which means any checkout customisation has to compensate for the missing structure.
Catalog and price list assignment. A trade buyer should see their contract price — not a publicly visible discounted price — from the moment they enter the product page. If price is only enforced at cart or checkout, you create trust problems. Buyers add items assuming X, then discover Y.
Payment method and terms eligibility. Net 30, Net 60, EFT on invoice, or credit limit draws should be determined by who the buyer is, not by a checkbox they fill in manually. If your checkout cannot express that deterministically, you will always have order corrections downstream.
Net terms and payment method configuration
Shopify B2B on Plus allows you to assign net payment terms (Net 7, Net 15, Net 30, Net 60) at the company location level. When a qualifying buyer checks out, they see a "Payment on terms" option and do not provide a card. The order is invoiced and Shopify marks it accordingly.
If you are not on Plus — or you are building a custom wholesale flow — the patterns worth knowing:
- Draft orders are the most common workaround. Sales staff create draft orders for trade accounts, apply the correct price list manually, and send payment links or invoice via your finance process. It works, but it does not scale without custom tooling around it.
- Checkout extensibility functions (Shopify Functions) can hide or show payment methods based on cart attributes or customer tags. A net terms option can be surfaced only to verified trade accounts. This requires development but gives you a native checkout experience rather than a separate portal.
- Custom payment gateways that represent an internal credit account are sometimes used, but they add reconciliation complexity. Unless your ERP requires it, a clean draft order or B2B order flow is usually simpler.
For South African wholesale, EFT (electronic funds transfer) with reference number is the dominant trade payment method. This means your checkout needs a clear place for the buyer to acknowledge payment terms and, ideally, a PO reference field they can fill in — which brings us to the next pattern.
PO numbers and custom checkout fields
A purchase order reference is the single most common thing wholesale buyers need to attach to an order. Without it, their accounts payable team cannot process the invoice.
Options from simplest to most robust:
Order notes are the easy path — add a visible "PO Number" label to the order notes field in your theme. The downside is that the content is free text, mixed with any other notes, and not queryable in Shopify admin without string parsing.
Checkout extensions (UI Extensions) let you add a structured input field in the checkout flow that maps to an order metafield. This is the right approach for any serious B2B setup. The PO number lives in a dedicated metafield, it is visible in admin and accessible via API, and it flows cleanly into your ERP or finance export without parsing free text.
Custom attribute fields via the cart attributes API are a middle-ground option — they surface as line item or cart attributes in the order, are queryable, but require theme or custom app work to surface cleanly in admin views.
If your finance team exports orders to Sage, Xero, or a similar system, the PO number needs to arrive in a predictable field. Metafields are the cleanest path for that.
Pack sizes and minimum order quantity enforcement
This is where most B2B Shopify setups quietly fail. The rules exist — "must order in multiples of 6", "minimum 12 units per SKU", "R5,000 order minimum" — but they are documented in a PDF sent to new accounts and enforced only when a human notices.
The checkout consequence is either orders that go through wrong (creating pick and pack chaos) or buyers who learn not to use the self-serve channel because it never matches what they agreed.
Cart validation via Checkout Functions is the right solution. A Shopify Function runs at checkout and can block or warn based on line item quantities, cart totals, or combinations. It executes server-side, cannot be bypassed by the buyer, and returns a clean error message.
What you need to build this:
- a definition of each rule per SKU or product type (these usually live in Shopify metafields on the product or variant),
- a Function that reads those metafields and evaluates the cart,
- and a clear, specific error message that tells the buyer exactly what to fix.
A vague "Your cart does not meet requirements" error is nearly as bad as no validation — it creates support calls. "Variant 750ml must be ordered in multiples of 6. Current quantity: 5. Adjust to 6 or 12." is what you are aiming for.
Cart drawer / cart page UX is a supporting layer, not a substitute. You can show pack-size hints on the product page and in the cart to guide the buyer before they hit checkout. But you cannot rely on UI hints alone — Functions are the enforcement layer.
Draft orders and approval workflows
Not all B2B orders should go through live checkout. Common patterns that require a draft order or approval step:
- orders above a certain value that need internal sign-off,
- new accounts that have not been verified yet,
- orders with custom pricing or product configurations,
- or split shipments and partial fulfilment arrangements.
If any of those apply, you need a workflow — not just a checkout. The options:
Shopify's built-in draft order flow works well for sales-rep-assisted orders. The rep creates the draft, applies the correct pricing, and sends a payment link or marks it as paid. The limitation is that it is staff-initiated, not buyer-initiated.
A buyer-facing quote request or RFQ flow is a custom build, but it is the right tool for high-value or complex wholesale relationships. The buyer fills in what they need, the order enters a pending state, your team reviews and adjusts, and the buyer receives a link to complete payment. This is essentially the pattern used by purpose-built wholesale platforms — it can be built on Shopify using draft orders, metafields, and a custom portal.
Order approval via Shopify B2B vaulted payment allows a buyer to place an order that is not fulfilled until a company admin approves it. This is available in Shopify Plus B2B natively and is the cleanest option if you are already in that tier.
Checkout communications and post-order expectations
The order confirmation email and the post-order experience matter more in B2B than in DTC. Wholesale buyers:
- need confirmation that includes the PO number they provided,
- want estimated lead time and fulfilment timeline at confirmation, not only when they ask,
- may need a formal tax invoice (not just a Shopify order receipt) for their accounts payable,
- and will follow up if tracking information is absent or ambiguous.
Shopify's default order confirmation is built for consumer expectations. For wholesale, customise the notification template to include:
- PO reference (from the metafield),
- payment terms summary,
- expected dispatch date or lead time,
- and your trade account contact for queries.
For formal invoicing, a PDF invoice generation step — triggered by fulfilment or by payment confirmation — is often necessary. This is typically a custom app or a well-configured integration with your accounting system.
When to use Shopify B2B native features vs custom builds
Shopify Plus B2B native gives you: company and location accounts, price lists, payment terms, vaulted payment, buyer portal, and draft order approval. It handles the common case well.
You need custom work when:
- your pricing logic is more complex than a fixed price list or a percentage discount (tiered pricing by volume within an order, bundle-level pricing, or pricing based on running account spend),
- your approval workflow involves multiple parties or integrates with an external ERP approval system,
- you are on a non-Plus plan and building a wholesale channel without B2B native features,
- or your PO and invoicing requirements need to integrate cleanly with Sage, Xero, or a finance system that has specific field expectations.
The right architecture depends on where your volume and complexity actually are — not on what the platform tier includes. A well-built custom checkout function on a standard Shopify plan often outperforms a poorly configured Plus B2B setup.
A practical checklist before optimising
Before touching checkout UI or building Functions, confirm:
- Are company accounts and price lists set up and assigned correctly, or is pricing applied via tags and discount codes?
- Where does the PO number currently go? Is it queryable or buried in order notes?
- What are the pack size and minimum order rules? Are they documented in a format a developer can read programmatically?
- Which payment terms apply to which accounts? Is that data in Shopify or only in someone's spreadsheet?
- What does your finance team need on the order to process it without manual correction?
Answers to those five questions will tell you whether you have a checkout optimisation project or an ops restructuring project — and whether you need UI extensions, Checkout Functions, a custom portal, or all three.
Services: Shopify development · Custom apps · Contact: Talk to us.