If you want tiered pricing by customer group on Shopify — retail one price, wholesale another, VIP a third — your options span four levels: customer tags plus discounts, a wholesale/B2B pricing app, Shopify Plus B2B with companies and price lists, and custom logic via Shopify Functions. Which one fits depends on how many groups you run and how precise the pricing must be. But every option shares one non-negotiable: the tier must be enforced at checkout, not just shown on the storefront. A price that only renders on the product page can be bypassed — and then a wholesale buyer pays retail, or worse, a retail shopper pays wholesale.
What customer-group pricing actually requires
“Tiered pricing by customer group” is really four jobs, and a good setup does all four:
- Identify the group. Know that this logged-in customer is Wholesale Tier 2, not retail — via a tag, a company profile, or a B2B catalog assignment.
- Apply the right price. Show and charge that group’s price or discount, per product or across the catalog.
- Enforce it at checkout. Re-validate the price server-side so it can’t be lost or gamed.
- Control access. Don’t leak wholesale prices to retail shoppers, and don’t let a retail account claim a wholesale tier.
Most cheap setups nail #1 and #2 and quietly skip #3 and #4 — which is where margin leaks.
The options ladder
1. Customer tags + discounts / quantity breaks
The entry-level approach on standard Shopify. You tag customers (wholesale, vip,
tier-2) and drive pricing from those tags: automatic discounts that apply to tagged
customers, discount codes gated to a segment, or quantity breaks that reward volume. It’s free,
it works without Plus, and it’s genuinely enough for a handful of groups with percentage-style
tiers.
When it fits: two or three groups, discount-style pricing (“wholesale = 30% off”), and you can accept that prices are managed as discounts rather than true per-customer catalogs. We break down the mechanics of this in Shopify wholesale pricing.
2. Wholesale / B2B pricing apps
Apps add per-group or per-customer price lists, a gated wholesale storefront, minimums and net-terms features on top of standard Shopify. They fill the gap between tags and full Plus B2B. The caution: many apps discount in the theme’s JavaScript or a draft-order flow, which can break on accelerated checkout (Shop Pay, PayPal express) and leave the enforcement soft. Vet how the app charges the price at checkout before trusting it with margin.
When it fits: you’ve outgrown tags, want real price lists, but aren’t ready for Plus. See how to run B2B on Shopify without Plus for the honest trade-offs.
3. Shopify Plus B2B: companies + price lists + catalogs
On Shopify Plus, B2B is native. You model buyers as companies with multiple locations and contacts, attach catalogs that control which products a company sees, and set price lists that define per-company or per-group pricing (fixed prices or percentage adjustments off retail). Because it’s native, the price a B2B buyer sees is the price the checkout charges — enforcement is built in, and wholesale catalogs stay invisible to retail shoppers on the same store.
When it fits: many accounts, per-company pricing, purchase-order and net-terms workflows, and you’re already on (or moving to) Plus. Weigh the cost in is Shopify Plus worth it?.
4. Custom logic / Shopify Functions
When the pricing rule is genuinely yours — a tier that depends on the customer’s segment and order volume and the product’s collection, or a contract price that overrides everything — custom logic is the answer. A Shopify Function runs at checkout and computes the discount server-side from your rules, so it can’t be bypassed. This layers on top of tags or B2B and handles the cases the built-in tools can’t express.
When it fits: rules the standard tools can’t model, or you need the tier guaranteed at checkout regardless of how the customer reaches it. This is our custom apps & Functions work.
Capability comparison
| Capability | Tags + discounts | Pricing app | Plus B2B | Custom Function |
|---|---|---|---|---|
| Works without Plus | Yes | Yes | No | Yes |
| Per-group pricing | Approximate | Yes | Yes | Yes |
| Per-company price lists | No | Some | Yes (native) | Yes |
| Gated / hidden wholesale catalog | Manual | Some | Yes (native) | Depends |
| Enforced at checkout | Only if discount-based | Varies by app | Yes (native) | Yes (server-side) |
| Custom multi-factor rules | No | Limited | Limited | Yes |
| Setup effort | Low | Low–medium | Medium | Higher |
Enforcement and access control — the part people skip
Two failure modes sink most customer-group setups:
The tier gets bypassed. If the group price is applied only in storefront JavaScript or a cached template, a customer can reach checkout through a direct link, an express-checkout button, or a stale page and pay the standard price — the discount never fired. The fix is server-side enforcement: a B2B price list (native on Plus) or a Shopify Function re-validates the price at checkout so what the customer saw is what they’re charged.
Wholesale prices leak to retail. If your wholesale tier is just a discount code or an unguarded page, retail shoppers can find it — and your wholesale margin becomes everyone’s price. Access control means the wholesale catalog and its pricing are only visible to authenticated, correctly-grouped customers. Plus B2B catalogs do this natively; on standard Shopify you enforce it with gated accounts plus checkout-side logic.
Standard vs Plus, honestly
You do not need Shopify Plus to run customer-group pricing — but you should be honest about what standard gives you. Tags, automatic discounts, quantity breaks and a Function can cover two or three groups with discount-style tiers and real checkout enforcement. What standard can’t do natively is true per-company price lists, gated B2B catalogs, and multi-location company accounts — those are Plus B2B features. If you have dozens of accounts each on their own contract pricing, Plus earns its price; if you have a few tiers, standard Shopify plus custom logic is usually the better-value path.
How to decide
- Two or three tiers, percentage-style pricing, standard plan → customer tags + automatic discounts, enforced as real discounts.
- You need price lists but not full Plus → a vetted B2B pricing app (check its checkout enforcement) or a custom build.
- Many accounts, per-company contracts, PO/net terms → Shopify Plus B2B (companies, catalogs, price lists).
- Rules the built-ins can’t express, or a tier you must guarantee at checkout → a Shopify Function layered on top.
Common mistakes
- Showing the tier without enforcing it. A storefront-only price is a display, not a price.
- Leaving wholesale discoverable by retail. Gate the catalog and the codes.
- Trusting an app’s checkout behavior blind. Test express checkout and a direct link before going live.
- Reaching for Plus prematurely. Many “we need Plus for B2B” cases are solved on standard with tags plus a Function.
- Modeling contract pricing as stacked discount codes. It gets gamed; use price lists or a Function.
Need pricing that changes by customer group? Tell us your groups and rules — we’ll recommend tags, Plus B2B or custom logic, and make sure the tier is enforced at checkout. See B2B & wholesale or get a free profit audit.
Whichever tier you land on, Profit Flow builds the pricing so the group a customer belongs to decides the price they actually pay — enforced at checkout, not just painted on the page. Start with a free audit of your current setup.