Wholesale & B2B Tiered Pricing With a Cost Floor
Designing segment-restricted quantity tiers for approved B2B accounts on Shopify, priced from cost
Approved B2B accounts can get automatic quantity tiers without codes through one Wholesale / B2B Pricing campaign restricted to a Shopify segment. Tiers based on profit margin keep each price at or above cost plus a minimum profit (a markup on cost) for variants with a Shopify cost. It does not use Shopify B2B companies, run several price lists on the same products, or enforce minimum order quantities.
At a glance
- Challenge
- B2B buyers expect volume pricing, but shared discount codes reach retail shoppers and hand-built quotes leave some accounts below an acceptable margin.
- Approach
- One Wholesale / B2B Pricing campaign restricted to a Shopify segment of approved accounts, quantity tiers based on profit margin, and a cost plus minimum profit floor.
- Discount Prime campaign types used
- Wholesale / B2B PricingFree Shipping
Scenario-based case study: the merchant is fictional and modeled on patterns across Discount Prime stores. Prices, costs and outcome figures are illustrative assumptions for teaching, not measured results from a real store.
Short Answer
If approved business customers should get volume pricing automatically, without codes and without retail shoppers getting it, use one Wholesale / B2B Pricing campaign restricted to a Shopify customer segment of approved accounts, with quantity tiers and a cost-based floor. Price the tiers from cost, not from a flat "30% off", and check what each tier leaves you per unit.
Be clear about what this setup is not: it is not a set of different price lists per customer group on the same products, it does not use Shopify's B2B companies, and it does not enforce a minimum order quantity. Those limits are covered below so you can decide before you build.
Scenario
A fictional Shopify merchant sells food packaging and restaurant supplies (cups, lids, containers, cleaning products) to three kinds of buyers:
| Buyer | Behavior |
|---|---|
| Retail customers | Small, occasional orders at store prices |
| Small businesses (cafés, restaurants) | Monthly orders, want predictable pricing |
| Distributors | Large repeat orders, often negotiated |
Today the team sends discount codes and hand-builds quotes. Codes get shared, some accounts end up below an acceptable margin, and nobody can say what the pricing policy is.
Data you need
| Data | Why |
|---|---|
| Shopify "Cost per item" for every variant in scope | The floor and margin-based tiers are computed from it |
| Typical order quantities per product for business buyers | Tier thresholds should sit where real orders cluster |
| Which customers are approved for wholesale, and how you mark them (for example a customer tag) | Becomes the Shopify segment the campaign targets |
| Your minimum acceptable profit per unit | Becomes the floor |
Native Shopify, Discount Prime, and What Each Covers
| Need | Native Shopify | Discount Prime |
|---|---|---|
| Company accounts, catalogs and price lists per company | Shopify's B2B features, depending on your Shopify plan | Not supported. Discount Prime does not read Shopify B2B companies or company locations |
| Automatic volume tiers for a group of approved customers | Automatic discounts with limited tiering; codes | Wholesale / B2B Pricing: quantity or spend tiers, restricted by customer eligibility |
| Price never below cost plus a minimum profit | Not built in | Floor = cost + minimum profit when tiers are based on profit margin |
| Block orders below a minimum quantity | Not built into discounts | Not enforced. Tiers only decide when a price applies. A separate MOQ tool such as Prime MOQ is needed to block checkout |
If you need per-company negotiated price lists and your Shopify plan includes B2B, native Shopify B2B is the better fit for that part. Discount Prime fits when "wholesale" means a group of approved customer accounts on a regular store.
Options Compared
| Option | Fits when | Does not fit when | Cost behavior |
|---|---|---|---|
| Discount codes | One-off deals, few accounts | Codes must not travel; many accounts | Whoever has the code gets it |
| Flat Product Discount | Short sale for everyone | Prices must differ for business buyers | Same cut for every customer and quantity |
| One flat wholesale percentage | Very uniform catalog margins | Margins vary by product; low-margin items end up below target | High-margin items subsidize low-margin ones |
| Tiered Spend Discount (order level) | Storewide order-size reward | You want it for wholesale accounts only: it is not limited to a customer group | Applies to every qualifying order |
| Wholesale / B2B Pricing, segment-restricted, margin-based tiers with a floor | Approved accounts, cost data available | You need different price lists per account on the same products | Per-unit price per tier, never below the floor when cost exists |
Recommended Setup
| Setting | Value |
|---|---|
| Campaign type | Wholesale / B2B Pricing (Prime plan) |
| Customer eligibility | Specific customer segments: a Shopify segment such as "customer tag is wholesale" |
| Only show to eligible customers | On (guests and other customers see store prices and no wholesale widgets) |
| Based on | Profit margin |
| Tier threshold | Quantity, counted per item |
| Tier values | Fixed amount off per unit (see example) |
| Prevent final price from going below cost | On, keep minimum profit 20% of cost |
| If a variant has no cost | Skip this variant |
Why a segment and not a tag field: the campaign's eligibility options are all customers, Shopify segments, specific customers, and customers matching purchase-history conditions. Tag your approved accounts in Shopify and build a segment on that tag. Segment membership is synced to Discount Prime automatically, typically within minutes, and restricted campaigns require the customer to be logged in at checkout.
One price campaign per product
A product variant can be held by only one price campaign at a time. If you create a second Wholesale campaign for distributors on the same products, it will not get the variants the first campaign already holds unless you move them. So "Tier 2 small business, Tier 3 professional, Tier 4 partner" cannot be four simultaneous price lists on the same catalog. In this scenario the tiers are by quantity inside one campaign, which every approved account sees. Distributors with negotiated contracts stay on quotes or native Shopify B2B.
Worked Example: Pricing the Tiers From Cost
Illustrative assumptions: a case of 16 oz cups (one variant) sells for $10.40. Cost per item is $6.00. Minimum profit is 20% of cost, so the floor is $6.00 + $1.20 = $7.20.
| Quantity | Fixed off per unit | Unit price | Gross profit per unit | Gross margin | Markup on cost |
|---|---|---|---|---|---|
| 1 to 9 (store price) | none | $10.40 | $4.40 | 42.3% | 73.3% |
| 10+ | $1.00 | $9.40 | $3.40 | 36.2% | 56.7% |
| 50+ | $1.80 | $8.60 | $2.60 | 30.2% | 43.3% |
| 100+ | $2.50 | $7.90 | $1.90 | 24.1% | 31.7% |
| 250+ | $3.20 | $7.20 | $1.20 | 16.7% | 20.0% |
Two points to notice:
- The floor is a markup, not a margin. "Cost + 20%" means a 20% markup, which is a 16.7% gross margin. If your policy is stated as a margin ("never below 20% margin"), convert it: the floor would be $6.00 / 0.80 = $7.50, so you would set the minimum profit to 25% of cost, not 20%.
- Gross profit here is price minus product cost only. Freight-in, payment fees, pallets and delivery are excluded. If your cost per item does not include them, either add them to the cost or raise the minimum profit to cover them. The floor is only as good as the cost data.
With margin-based tiers, a fixed amount off is capped at the product's margin, and the floor is applied after. With auto-update on, the tier prices are recalculated when a price or cost changes in Shopify; otherwise review the campaign's prices after cost changes.
To adapt: start from your floor, set the deepest tier at or above it, and space the other tiers where your buyers' order quantities actually cluster.
Check the threshold step
At these prices, 50 cases ($430.00) cost less in total than 49 cases ($460.60). That is normal in wholesale and often intended, but it means a buyer just below a threshold can take more product for less revenue. If you do not want that, set each tier so that the price at the threshold times its quantity is not below the previous tier's total one unit earlier. The wholesale progress bar case study works through this in detail.
What the Customer Sees
The wholesale price is applied as an automatic discount in the cart and at checkout. The product's own price in Shopify does not change.
| Visitor | Product page | Cart and checkout |
|---|---|---|
| Guest or retail customer | Store price, no wholesale widgets | Store price |
| Approved account, logged in, 40 cases | Store price; the quantity table shows the tiers | $9.40 per case |
| Approved account, logged in, 120 cases | Same | $7.90 per case |
| Approved account, not logged in | Store price | Store price |
How the discounted price is displayed in the cart depends on your theme. Check it before launch.
Supporting Campaign: Free Shipping for Approved Accounts
A Free Shipping campaign can be restricted to the same segment. Keep in mind that it discounts only the first delivery group of an order, and that shipping campaigns have no cost floor, so check shipping cost against the order's gross profit for your typical wholesale order.
Limits and Edge Cases
- Missing cost: with "Skip this variant", products without a cost get no wholesale price. With "Apply discount on selling price instead", they get the tier discount with no floor. Fill in costs before launch.
- Per-item vs all items: per item counts each product's own quantity. Counting all items together lets mixed carts reach a tier, but a fixed amount off then becomes one lump off the combined order, split across lines, rather than a per-unit price.
- Currency: storefront widgets do not convert currency. If you sell in several currencies, test the table and any messages in a non-base currency.
- Codes: Wholesale can also be delivered by a discount code, but then whoever holds the code can use it; customer eligibility is the safer gate for standing prices.
Pre-Launch Tests
| Test input | Expected result |
|---|---|
| Guest, 40 cases | Store price, no wholesale table |
| Approved account logged in, 9, 10 and 250 cases | $10.40, $9.40, $7.20 per case |
| Approved account, a product with no cost | Skipped (store price) |
| A product whose cost is raised in Shopify (auto-update on) | Tier prices recalculated, still at or above the floor |
| Customer added to the segment in Shopify | Gets wholesale prices after the sync |
| A second price campaign on the same products | Conflict shown; the first campaign keeps the variants |
Measurement
- Primary: gross profit per wholesale order and per account over a quarter, by tier reached.
- Guardrails: share of units sold at the deepest tier, units sold below your target margin (should be none where cost exists), and retail orders that received wholesale prices (should be none).
- Operational: quote and code requests handled by the sales team.
- Baseline: the same accounts' orders and margins in the period before launch. Season and account mix change wholesale volume, so compare per account, not store totals.
- Decide: if most volume lands at the deepest tier and gross profit per account falls, raise that tier's threshold or price. If no one reaches a tier, the threshold is above real order sizes.
Frequently asked questions
How do I give wholesale customers automatic pricing on Shopify without discount codes?
Tag approved accounts in Shopify, build a customer segment on that tag, and restrict a Wholesale / B2B Pricing campaign in Discount Prime to that segment. Logged-in members get the tier price as an automatic discount in the cart and at checkout; guests and other customers pay store prices. The product's own price in Shopify does not change, so check how your theme shows the discounted price in the cart.
Does Discount Prime work with Shopify B2B companies and catalogs?
No. Discount Prime does not read Shopify B2B companies or company locations. In Discount Prime, wholesale means customer segments, specific customers, logged-in customers or purchase-history conditions on a regular store. If you need negotiated price lists per company and your Shopify plan includes B2B, use Shopify's native B2B for that part.
Can I give small businesses and distributors different wholesale prices on the same products?
Not with two simultaneous price campaigns. In Discount Prime a product variant is held by one price campaign at a time, so a second wholesale campaign on the same products does not get variants the first one already holds unless you move them. Use quantity or spend tiers inside one campaign that all approved accounts see, and handle negotiated contracts with quotes or native Shopify B2B.
Is cost plus 20% the same as a 20% margin?
No. Cost plus 20% is a 20% markup, which is a 16.7% gross margin. With a $6.00 cost, a 20% markup floor is $7.20, while a 20% margin floor is $7.50. Discount Prime's wholesale floor is cost plus a minimum profit (a percentage of cost or a fixed amount), so convert your margin policy into a markup before you enter it.
What happens if a product has no cost when I use a wholesale profit floor?
It depends on the campaign's missing-cost rule. With "Skip this variant" the product gets no wholesale price. With "Apply discount on selling price instead" it gets the tier discount with no cost floor. The floor is computed from Shopify's Cost per item, so fill costs in, and include freight or fees in the cost if your floor should cover them.
Can Discount Prime enforce a minimum order quantity for wholesale buyers?
No. Wholesale tiers only decide when a tier price applies; an order below the first tier simply pays store prices. Blocking checkout below a minimum quantity needs a separate MOQ tool.
Go deeper
Run this architecture in your store
Every campaign type in this case study is included in Discount Prime, with profit analytics to verify the margin impact.