← Back to Blog
Wholesale

Wholesale Tiers on Shopify Without a Second Store

Tradeleap Team September 13, 2026

Most Shopify stores that sell wholesale did not set out to. A retail store picks up a stockist, then a second, then a buyer who wants 200 units and expects a price that reflects it. The question that follows is always the same: where does the trade price live?

The three usual answers are a duplicate catalogue, a pile of discount codes, or a second store entirely. All three work for a while. This is what actually breaks in each, what the mechanics of same-store wholesale pricing look like when they are done properly, and how to design a tier structure you will not have to unpick in six months.

What breaks when you fake it with discount codes

Codes are the fastest thing to reach for and the first thing to fail, for four reasons that have nothing to do with how carefully you manage them.

A code is a bearer token. Anyone holding the string can use it. Your trade price leaks the first time a buyer forwards a confirmation email to a friend, posts it in a forum, or a coupon-scraping site picks it up. You cannot put a code behind a login.

A code applies to a cart, not to a catalogue. Your wholesale buyer browses the entire store at retail prices and only discovers their price at the last step. Every product page you send them to is showing them the wrong number, and the moment of truth is the checkout — which is exactly where you least want a surprise.

Percentage codes ignore product economics. A flat 20% across the catalogue is generous on your high-margin lines and ruinous on the ones that are already thin. Wholesale pricing is per-product work; a code has one dial.

Stacking is unpredictable. The moment you run a seasonal promotion, your trade buyers can combine it with their trade code, and you find out from your margins rather than from your settings.

What breaks when you duplicate the catalogue

The other common workaround is a second set of products — the same items, priced for trade, hidden behind a password or a customer tag. This fails differently, and more expensively.

  • Inventory splits in two. Unless you invest in sync tooling, the retail widget and the wholesale widget count stock separately, and you oversell one of them.
  • Every product edit doubles. New photos, a description fix, a spec change: twice, forever, and they drift apart within a quarter.
  • Reporting stops being answerable. "How many did we sell?" becomes two numbers you have to remember to add.
  • Search engines see near-duplicate pages. Which of the two ranks is not up to you.

A separate wholesale store has all of the above plus a second theme to maintain and a second checkout to configure.

Shopify's own B2B, and where it stops

Since April 2026, Shopify's native B2B tools are on Basic, Grow and Advanced rather than Plus only, and for a lot of stores that is the right answer. Company profiles, payment terms and catalogs are built in, and if you already pay for the plan you should use what you have.

The published scope on those plans is up to 3 active catalogs across all your B2B markets. If your wholesale operation is three price groups and stays there, that is a complete solution. The pressure arrives when the fourth buyer needs their own pricing, or when one buyer needs a special price on two products and standard trade pricing on everything else — a shape that costs a whole catalogue to express.

The three mechanics that actually matter

Strip away the tooling and same-store wholesale pricing is three questions. Any approach you evaluate, including ours, should have a clear answer to each.

1. Identity: who is this?

The price has to follow the person, not a code they typed. That means it keys off the logged-in customer. In Tradeleap the customer carries a tier, and the pricing rules read it — a retail visitor who never signs in sees retail prices, which is the correct default, and a wholesale buyer who has not logged in also sees retail prices, which is the part worth telling your buyers about explicitly. "Log in first" belongs in your welcome email.

2. Precedence: which price wins?

Real wholesale pricing is not one number. You want a default for the tier, exceptions for particular products, occasionally an exception for a single variant, and often a rate for a whole collection. The moment you have more than one of those, something has to decide which applies.

Tradeleap resolves it in a fixed order, most specific first:

  1. Variant — a price set on one variant beats everything else. This is where "the 5kg sack is different from the 1kg bag" lives.
  2. Product — a price set on the product applies to all its variants.
  3. Collection — a rate for a whole collection, for "all accessories are 15% to trade".
  4. Tier default — the catch-all percentage for that tier, applied to anything the rules above did not claim.

The first rule that carries a value for the customer's tier wins, and the rest are not consulted. Volume breaks are the exception: a quantity break adds to whichever rate applied, so a buyer on 20% who orders past a 5% break at 50 units gets 25% on that line. Only the highest break they qualify for counts — the breaks do not compound with each other.

That ordering matters more than it sounds. It is what lets you say "Gold is 25% off everything, except this range which is 10%, except this one variant which is at cost" without inventing a new tier for each exception.

3. Enforcement: where is the price applied?

A wholesale price that exists only on the product page is decoration. It has to be the price the buyer is actually charged, computed server-side at checkout, where nothing the browser does can change it.

Tradeleap applies discounts with a Shopify Function, which runs inside the checkout itself. That has three consequences worth knowing: it works with every payment method, it cannot be bypassed by editing the cart, and it runs on all Shopify plans rather than requiring Plus. The buyer sees the line labelled with their tier at checkout, so the discount is legible rather than mysterious.

On the storefront side, a theme block shows a logged-in trade customer their price with the retail price struck through, so the catalogue they browse is the catalogue they are buying from.

Designing a tier structure you will not regret

The tooling is the easy half. Most of the pain in wholesale pricing comes from a tier structure that was never designed, just accumulated. Four rules from watching how these go wrong:

Have fewer tiers than you think. Three is usually right: an entry trade rate, a volume rate, and a partner rate. Every tier you add is a decision someone has to make on every new account, and a row in every future pricing conversation.

Name tiers for what they mean, not for who is in them. "Gold" and "Distributor" both work. A tier named after your largest customer is a trap the day they leave.

Do not encode one customer's deal as a tier. If a single buyer negotiated a special rate on four products, that is four per-product overrides on their existing tier, not a new tier. Tiers are for groups; the precedence ladder exists precisely so that exceptions do not need their own tier.

Treat tier names as identifiers, not labels. A customer's assignment records the tier by name. Renaming a tier later does not rewrite the customers already assigned to it, so they stop matching until they are reassigned. Pick names you can live with, and if you must rename one, plan to reassign its customers in the same sitting.

How to prove it works before you trust it

Whatever you set up, verify it in this order. Each step catches a different failure, and the last one is the only one that proves anything about money.

  1. Logged out, open a product page. You should see the retail price and nothing else. If a wholesale price is visible to the public, stop.
  2. Logged in as a test trade customer, open the same page. You should see the retail price struck through and the trade price next to it.
  3. Open a product you set an override on. Confirm the override price is showing, not the tier default — this is the step that proves precedence is working rather than a single blanket percentage.
  4. Add a quantity that crosses a volume break and watch the unit price change.
  5. Go to checkout and read the order summary. The discount line should be there with the tier named. If the price was right on the product page and wrong here, the pricing is cosmetic — and that is the failure mode worth being paranoid about, because it is the one your buyer discovers instead of you.

The honest limits

Two things to know before you plan around any of this. Pricing follows the login, so a buyer who checks out as a guest pays retail; that is a policy choice as much as a technical one, and your onboarding email should say so. And discounts here are percentage-based off your listed price rather than a separate price list, so if your trade pricing is genuinely unrelated to your retail pricing — a different catalogue with different economics — a percentage model will fight you.

Tradeleap is free while we are in early access, with no billing implemented in the product. If you are already inside Shopify's three catalogs, use them. If you have started keeping a spreadsheet of exceptions, that spreadsheet is the thing this replaces.