← All insights

Selling wholesale and retail in the same store without breaking anything

The same product, two prices, two business logics. How we built a store that serves both audiences without duplicating the catalog or driving the team crazy.

It's one of the most frequent requests we get: "we have a store that sells to the public and we also sell to resellers, can we use the same one?".

The short answer is yes. The long answer is that most of the problems aren't technical, they're about definitions. And if they're not resolved before writing code, they end up showing up as strange bugs six months later.

The classic mistake: duplicating the store

The solution that comes up first is setting up two stores: a retail one and a wholesale one. It's tempting because it looks simple, and it's the one that ends up costing the most over time.

The problem is the catalog. Every new product has to be loaded twice. Every photo, twice. Every description fix, twice. By month three, the two stores have already diverged: products exist in one and not the other, prices went stale on one side, and nobody knows which one is the source of truth.

Worse: stock. If the two stores have separate inventories and share a warehouse, you're going to sell the same item twice. And if you unify them, you're already building the integration you were trying to avoid.

What actually changes between one channel and the other

Looking closely, wholesale and retail share almost everything. The product is the same, the photo is the same, the stock is the same. What changes is a limited set of rules:

  • The price. It's not just "cheaper": there are usually quantity tiers, and sometimes prices negotiated per customer.
  • The minimum quantity. A wholesaler doesn't buy a single unit.
  • Taxes. A registered business needs the tax breakdown that an end consumer doesn't see.
  • Who can see what. Many businesses don't want to show the wholesale price to just anyone who visits.
  • The payment method. Running account and bank transfer on one side, card and digital wallet on the other.

None of that justifies duplicating a catalog. It justifies a layer of rules on top of a single catalog.

How we approach it

The core decision is that price isn't an attribute of the product. It's the result of a function that takes the product, the customer, and the quantity, and returns a number.

It sounds obvious put that way, but it breaks with how many platforms are built, which assume "a product has a price" and force you to fight that assumption.

With that idea, the architecture organizes itself:

  1. One catalog, one source of truth. Product, photo, description, and stock live in a single place.
  2. The customer has an assigned price list. Retail is just another list, not a special case.
  3. Rules live in one place. Minimums, quantity tiers, and negotiated discounts get resolved in the same layer. If tomorrow a third channel shows up — franchises, employees, whatever — it's one more list, not a redesign.
  4. The view adapts to who's looking. A logged-in wholesaler sees their price and their minimum; an anonymous visitor sees the list price.

The detail almost everyone misses

SEO. If you hide prices behind a login, Google doesn't see them either.

That matters a lot for the retail channel, because product pages are what bring in search traffic. The fix is to not treat the store as one single thing: public product pages stay open and indexable with the list price, and the wholesale layer lives behind the login. Same catalog, two access levels.

It's a decision worth making early. Migrating from "everything closed" to "part open" a year later means rebuilding URLs, and by then you're fighting redirects and lost rankings.

What to check before you start

If you're in this situation, these questions clarify more than any platform comparison:

  • How many price lists do you actually have today, counting the ones living in spreadsheets?
  • Are there customers with one-to-one negotiated prices, or is it all tiers?
  • Is the stock genuinely shared, or are there per-channel reservations?
  • Does the wholesaler shop through the catalog, or order by code because they already know what they want?

That last one is usually the one that changes the design the most. A wholesaler who already knows what they need doesn't want to browse: they want to paste a list of codes and quantities and have the store build the order. It's a screen that doesn't exist in any retail store, and it's the most appreciated one.


In our e-commerce case studies we cover how we solved this in real projects, with the numbers it produced. If you're thinking about unifying your channels, write to us and let's talk it through.

Tell us about your projectWhatsApp