Blog · Guide

Running DTC and wholesale on one Shopify store

Two stores means two truths. Inventory drifts, themes diverge, promotions run twice. The case for running both customer types on a single storefront, and the four pieces you actually need to make it work.

10 min read · Updated May 2026

The two-store reflex

Someone tells you to "spin up a wholesale store." Maybe a Shopify Partner, maybe an old playbook, maybe ChatGPT. The argument: keep wholesale operations clean, hide trade pricing from retail customers, separate concerns. It sounds tidy. It is rarely worth it.

What two stores actually costs you

  • Inventory drifts. The two stores are two truths. Selling the same SKU on both means double-stocking, manual reconciliation, or a third tool to sync them.
  • Themes diverge. Update one, forget the other. Six months in your retail and wholesale stores feel like different brands.
  • Promotions run twice. Retail BFCM goes live; wholesale "oh wait, do we run that?"; the answer is always different and always wrong.
  • Customers pick the wrong store. Wholesale customers Google your brand and end up on the retail site at retail prices. Retail customers stumble onto the trade portal and ask why prices are weird.
  • You pay Shopify twice. Two subscriptions, two app stacks, two bills.

The original argument — "keep operations clean" — turns out to mean "two operations, neither clean."

The single-store pattern

One Shopify store, one checkout. Customer pricing is determined by who is logged in:

  • Anonymous / no tag → retail price
  • Tagged wholesale-a → wholesale tier A pricing
  • Tagged wholesale-b → wholesale tier B pricing
  • Tagged recharge-monthly → subscriber pricing
  • Tagged vip-tier-1 → VIP pricing

Inventory is one number. The theme is one theme. Promotions are one calendar. Customers see one URL.

The four pieces you actually need

1. A way to apply prices by customer tag

Either native B2B (3 catalogs only) or a tag-based pricing app. Pick based on tier count — see our native vs apps comparison.

2. A way to display the right price on the PDP

The PDP defaults to the public retail price. Use the App Proxy (most pricing apps ship this) so logged-in customers see their tier price.

3. A way to onboard wholesale customers

Either Shopify Forms (free, manual approval) or a wholesale signup app. Both work. Native B2B doesn't ship a registration flow on non-Plus.

4. A way for wholesale customers to log in and see their pricing

Shopify's customer accounts handle this natively. The trick is making sure they understand they need to be logged in to see their price.

Common pushback (and why it's wrong)

"Retail customers will see wholesale prices and get angry"

Only if your pricing logic leaks. Tag-based pricing is closed-loop: anonymous customers and untagged customers literally cannot see the wholesale price — the Function returns retail for them.

"My theme isn't built for hidden prices"

You don't need hidden prices. The retail price is shown by default. Tagged customers see their tier price. Untagged customers see retail. There's nothing to hide.

"Wholesale customers want a different brand experience"

Sometimes true at the high end. Solution: a separate page at /wholesale, not a separate store. Same URL, same checkout, just different content.

"My current setup is two stores and it's working"

If genuinely working, don't migrate. The cost of migration is high. The case for migrating is when the two-store cost starts compounding (inventory, ops time, customer confusion).

Where TagTier fits

TagTier is the tag-based pricing layer for the single-store pattern. It plays well with native B2B for the 3-catalog limit and with Recharge for subscribers. See pricing →


Related on TagTier