Shopify handles wholesale through its B2B system: you group business buyers into companies with one or more locations, then attach a catalog and a price list to each location. A price list can set fixed wholesale prices or apply a percentage adjustment, and you can assign more than one pricing catalog to the same company so different collections get different discounts. Layer on quantity rules and volume price breaks for bulk orders, and let sales reps place orders on a company's behalf. For occasional or lower-plan wholesale, you can skip the full B2B setup and use a draft order with custom pricing, then send an invoice. The main caveats are plan availability and the fact that Shopify B2B has no built-in credit-limit enforcement.
This guide explains how B2B catalogs, company profiles, and price lists actually work, how to set per-customer versus per-collection pricing, the rep-enters-the-order workflow, the credit-limit gap, which plan you need, when native is enough versus when you need an app, and a step-by-step setup with a worked two-customer example.
Does Shopify support wholesale and B2B pricing natively?
Yes. Shopify has a dedicated business-to-business (B2B) system built into the admin, and it is designed for exactly the wholesale scenario most merchants describe: different business customers who each pay different prices, sometimes different prices on different parts of your catalog, without those prices ever leaking to your regular retail shoppers.
The building blocks are companies, company locations, catalogs, and price lists. According to Shopify's developer documentation, a merchant creates a company, attaches company contacts and company locations to it, and can also create draft orders for those contacts. A company contact logs into a customer account tied to the company, sees pricing that has been configured for their location, and checks out through a B2B checkout. Your wholesale pricing lives entirely inside that context, so a logged-in wholesale buyer sees their negotiated prices while everyone else sees your normal retail prices.
There is also a lighter path that does not require the full B2B apparatus. Shopify draft orders can be used to "sell products at discount or wholesale rates," per the Admin API reference, which is how a lot of stores handle the occasional wholesale order without turning their whole shop into a B2B operation. We cover both routes below.
What are B2B catalogs, company profiles, and price lists?
To set wholesale pricing correctly, it helps to understand the four objects Shopify uses and how they fit together.
Companies, locations, and contacts
A company is a business entity that buys from your store. Companies organize multiple locations and contacts who can place orders on behalf of the organization. A company location is a specific branch of that company, with its own billing and shipping addresses, tax settings, and checkout configuration. A company contact is a person who acts on behalf of the company to make purchases, tied to a customer account.
This structure is what makes per-customer pricing possible. Pricing is not attached to a person's email; it is attached to a company location. When a buyer logs in and selects the location they are ordering for, Shopify applies the catalogs and prices configured for that location.
Catalogs
A catalog is a set of products and prices published to a specific context. For wholesale, that context is a company location. As Shopify's catalog documentation describes it, a catalog has a publication (which products are visible) and a price list (what those products cost). A B2B catalog might say, for example, that buyers ordering for a particular company location can purchase your t-shirts at 30 percent off.
Price lists: fixed prices or a percentage adjustment
The price list is where the money is set. Shopify gives you two mechanisms, and the difference matters:
- Fixed prices. You set an explicit wholesale price for a specific product variant. Per the docs, a fixed price "takes precedence over any other adjustments that are defined at the price list level."
- Percentage adjustment. Instead of pricing each variant by hand, you apply a blanket adjustment across the whole price list using a PriceListParent. Shopify supports PERCENTAGE_DECREASE (lower the price, which is what wholesale wants) and PERCENTAGE_INCREASE. So a price list can say "everything in this catalog is 30 percent off."
The percentage adjustment is catalog-wide. That is the single most important thing to internalize, because it drives how per-collection pricing works, which we get to next.
Quantity rules and volume pricing
B2B pricing is rarely just a flat percentage. Wholesale buyers order in cases, pallets, and multiples. Shopify's B2B system supports quantity rules (minimum, maximum, and increment constraints on how many units a buyer can order) and quantity price breaks (tiered pricing that gets cheaper as volume goes up). These are set on a price list for specific variants through the quantityPricingByVariantUpdate mutation, and the API reference notes the shop must have B2B features enabled to use them. So "buy 100 or more, get a deeper price" is a native B2B capability, not something you have to bolt on.
Per-customer versus per-collection pricing: how to do both
Here is where the practical questions from the Shopify forums come in. Merchants running wholesale repeatedly ask the same thing: each customer needs a different discount percentage, and often a different percentage on different parts of the catalog. One thread on the community describes it precisely: "Customer A: 25 percent off food, 15 percent off meat; Customer B different," with reps entering the orders from the admin (see the Shopify Community discussion).
Per-customer pricing is the straightforward part. Because a price list attaches to a company location, giving Customer A and Customer B different pricing just means creating a company for each, then attaching a different catalog and price list to each one. Customer A's location gets a catalog with a 25 percent decrease; Customer B's location gets its own catalog with whatever their negotiated number is.
Per-collection pricing inside a single customer is the part that trips people up, because a percentage adjustment applies to the entire price list, not to one collection. There is no single field that says "25 percent off this collection, 15 percent off that collection" on one price list. But you can get exactly that result using a documented pattern: multiple catalogs per company location.
Shopify's B2B catalog guide confirms that a single company location supports multiple catalog assignments. So for Customer A, you create two pricing catalogs and assign both to their location:
- Catalog 1: publication scoped to your Food collection, price list at 25 percent off.
- Catalog 2: publication scoped to your Meat collection, price list at 15 percent off.
Each catalog's percentage only applies to the products its publication makes visible, so food gets 25 percent and meat gets 15 percent, all for the same buyer. The one rule to keep in mind: if a product ends up in more than one applicable pricing catalog, the buyer receives the lowest price of the two. As long as your collections do not overlap, each product falls into exactly one pricing catalog and there is no ambiguity.
The alternative, if collections are messy or overlap, is to skip percentages and set fixed prices per variant on a single price list. More work up front, zero ambiguity after. Most wholesale operations use a mix: percentage catalogs for broad collections, fixed prices for the handful of SKUs that need a specific number.
Worked example: two wholesale customers, different per-collection deals
Let us make the food-and-meat scenario concrete. You run a specialty grocery wholesaler. Two business customers have negotiated different terms:
- Customer A (a restaurant group): 25 percent off the Food collection, 15 percent off the Meat collection.
- Customer B (a corner deli): 20 percent off the Food collection, 10 percent off the Meat collection, and a minimum order of 12 units per meat SKU.
You set this up with one company per customer, and pricing catalogs scoped to each collection. Here is how a sample basket prices out for each buyer against your retail prices.
Both customers see their own prices when logged in, and neither sees the other's. Customer B's 12-unit minimum on meat is enforced by a quantity rule on their meat catalog, so they cannot order fewer than a full case. Your retail shoppers, meanwhile, keep paying the $316.00 column. That separation, per customer and per collection, with volume rules, is the core of what native Shopify B2B delivers.
The rep-enters-the-order workflow: draft orders
A lot of wholesale does not happen through a self-service storefront at all. A sales rep takes the order by phone or email and keys it into the admin. Shopify supports this directly with draft orders, and it works two ways.
For a full B2B setup, a rep creates a draft order attributed to the company using the draftOrderCreate mutation with a purchasing entity that names the company, location, and contact. Because the draft is tied to the company location, it automatically picks up that location's catalog pricing. The rep can then send an invoice with draftOrderInvoiceSend and, once the buyer pays, complete it with draftOrderComplete, which creates a real order. Shopify's B2B draft-order guide confirms this flow is identical to a consumer draft order aside from the company attribution.
For occasional wholesale, especially on lower plans, you can use a plain draft order without any B2B company setup at all. This is the workaround merchants describe for one-off wholesale invoicing: build a draft order, apply a custom discount or type in custom line-item prices, send the invoice, and mark it paid. Shopify's own reference lists "sell products at discount or wholesale rates" as a primary use of draft orders. It is not as clean as company catalogs (you re-enter pricing each time, and it does not scale to dozens of buyers), but for a store that ships a big wholesale order now and then it avoids standing up the whole B2B system.
One honest caveat that comes up on the forums: the draft-order route can interact awkwardly with native discount codes and analytics attribution, so treat it as a manual, occasional tool rather than a pricing engine.
The credit-limit gap: what native B2B does not enforce
There is one wholesale need Shopify B2B does not cover natively, and it is worth being upfront about because it drives merchants to third-party apps.
Shopify B2B supports payment terms. Through a company location's buyer-experience configuration, you can offer net terms (payment due a set number of days after the order, like net 30), fixed due dates, event-based terms, and deposits, per the payment terms documentation. So "let this company pay 30 days after invoice" is built in.
What is not built in is a credit ceiling. There is no native setting that says "this company can carry at most $10,000 in unpaid invoices, and block new orders past that." Merchants on the community forums flag this gap specifically, and it is the reason apps like credit-management tools exist in the ecosystem. If enforcing a hard credit limit is core to your wholesale operation, plan to handle it with an app or an external process. Native B2B gives you the terms, not the limit.
Which Shopify plan do you need for B2B?
This is the caveat to get right, and the honest answer is: it depends on your plan, and you should confirm against your own admin rather than trust a forum post.
Shopify's documentation is consistent but deliberately non-specific about plan names. Across the B2B and catalog guides, the requirement is stated as "your store must be on a plan that supports B2B capabilities" (catalogs reference). The B2B overview adds that access to B2B API resources for development is limited to dev stores, Shopify Plus Partners, and Shopify affiliates (Apps and B2B). Historically, the native B2B feature set (companies, catalogs, B2B checkout) has been associated with Shopify Plus.
You may see community claims that native B2B catalogs became available on lower tiers such as Basic, Grow, or Advanced at some recent date. One community thread contains exactly such a claim, attributed to a support reply and dated to early 2026. Treat that as an unverified merchant report, not a fact: plan availability changes over time and varies by region, and the developer docs we can verify do not name specific consumer plans. The reliable move is to open your own Shopify admin, look for the B2B or wholesale settings, or ask Shopify support what your current plan includes before you design around it.
If your plan does not include native B2B, the draft-order route above still works on any plan, and third-party wholesale apps fill the gap.
When native B2B is enough versus when you need an app
Native Shopify B2B is a genuinely capable system. It is enough when:
- Your wholesale buyers can log into customer accounts and self-serve, or your reps place orders through draft orders.
- Per-company and per-collection percentage pricing, plus fixed prices and quantity rules, cover your deals.
- Net payment terms, not hard credit limits, are what you need.
- You are on a plan that includes B2B.
You start reaching for an app when:
- You need a hard credit-limit ceiling that blocks orders past a balance.
- You want wholesale pricing on a plan that does not include native B2B, without hand-keying draft orders.
- You want per-customer, per-collection percentages managed from one screen without juggling multiple catalog objects per location.
- You need wholesale pricing to combine cleanly with your other promotions (volume breaks, BOGO, free shipping) under one consistent, server-side engine so cart and checkout always agree.
That last point is where the native model gets fiddly. Catalog price lists and Shopify's discount system are two separate mechanisms, and reconciling "wholesale price" with "current promotion" across them is exactly the kind of thing merchants ask about on the forums.
Run wholesale pricing without wrestling catalogs
Setting up per-customer, per-collection wholesale in native Shopify means creating a company per buyer, then two or more pricing catalogs per company location, each scoped to a collection with its own percentage. It works, but it is a lot of objects to manage as your buyer list grows.
Per-customer, per-collection wholesale pricing is on the Stackable roadmap and is not yet available. It is being built for the exact forum scenario above: set a discount percentage per customer, scoped to a specific collection (Customer A gets 25 percent off food and 15 percent off meat; Customer B gets a different split), managed from the same admin your team already uses, and built on the same server-side engine as every other Stackable discount so the price holds at checkout the same way volume and BOGO discounts do. It is planned, not shipped, and we will not pretend otherwise.
Until then, if you want reliable stacking today for the discount types Stackable already handles, you can install Stackable free and run volume breaks, BOGO, and spend goals on Shopify Functions so cart, checkout, and Shop Pay always agree. 🚀 For wholesale specifically, use native B2B catalogs or draft orders as described above, and watch the roadmap page.
The bottom line
- Shopify runs wholesale through B2B: companies and locations, with a catalog and price list attached to each location. Pricing follows the company, so it is inherently per-customer.
- A price list sets fixed prices or a catalog-wide percentage decrease. Per-collection pricing uses multiple catalogs on one location, each scoped to a collection with its own percentage.
- Quantity rules and volume price breaks (minimums, increments, tiered pricing) are native B2B features for bulk ordering.
- Reps place orders through draft orders, either attributed to a company for full B2B pricing or as plain custom-priced drafts for occasional wholesale on any plan.
- Native B2B supports payment terms like net 30 but does not enforce credit limits. That gap is why credit-management apps exist.
- Native B2B requires a plan that supports B2B capabilities (historically Shopify Plus); confirm your specific plan in the admin rather than trusting forum claims about lower tiers.
- Stackable's per-customer, per-collection wholesale pricing is planned and not yet available; for now, use native B2B catalogs or draft orders, and use Stackable today for volume, BOGO, and spend-goal stacking.
Related articles
- Wholesale and B2B pricing (coming soon): per-customer, per-collection wholesale pricing on the Stackable roadmap.
- Volume discounts and quantity breaks: tiered pricing that gets cheaper as order quantity rises.
- Quantity break tables: show the price-per-tier table on the product page so buyers see the deal before checkout.
- Stackable pricing: plans, the free tier, and what each includes.
- How discount stacking works in Shopify: the three discount classes and why native only applies the highest.
- Shopify Scripts are ending: migrate without a developer: move custom discount and wholesale logic off Scripts before the deadline.



