How to run B2B wholesale pricing by company on Shopify
When a buyer purchases on behalf of a B2B company, the offer can be scoped to that company rather than to the individual person. Staff changes then do not break the pricing, because the entitlement belongs to the company.
- Volume
- Offer type
- volume
- Tiers
- 1 unit 15%, 10 units 20%
- Who gets this offer
- B2B companies
- Companies
- the companies on this pricing tier
- Requires
- Shopify B2B company accounts
A buyer signed in on behalf of an eligible company sees wholesale pricing across the catalogue, with quantity breaks on top. Retail shoppers see retail prices, and there is no code that can cross between the two.
How to set this up
- 1
Prerequisite
This targets Shopify B2B companies, so the buyer must be purchasing on behalf of a company. If your wholesale customers are ordinary customer accounts, use tag targeting instead.
- 2
Campaign > Offer type
Pick Volume so wholesale pricing can also carry quantity breaks.
type = volume
- 3
Who gets this offer
Switch the audience to B2B companies and select the companies this pricing tier covers.
customerTarget.scope = companies
- 4
Tiers
Add the wholesale breaks. A single tier at minimum quantity 1 gives a flat wholesale rate with no ladder.
tiers[0].minQty = 10
- 5
Separate tiers per company group
Run one offer per pricing tier and select the companies on that tier, rather than one offer per company.
- 6
Preview
Test signed in as a buyer for an eligible company, for an ineligible company, and as a retail shopper.
Every setting, spelled out
These are the real configuration keys the offer is saved with, so you can check your own setup against this table field by field.
| Setting | Value | Config key |
|---|---|---|
| Offer type | volume | type |
| Audience scope | companies | customerTarget.scope |
| Companies | company GIDs | customerTarget.ids |
| Tiers | quantity breaks per wholesale tier | tiers |
| Requires | Shopify B2B company accounts | customerTarget.scope |
| Logged-out behaviour | offer emits nothing | customerTarget.scope |
| Method | automatic | discountMethod |
See it built end to end
The episode is not up yet
We are recording this one. The written recipe above is complete, so you can build it today.
What Shopify does natively
Shopify B2B has catalogues and price lists, which are the right tool for a permanent wholesale price book and should be your first choice for base pricing.
Price lists set base prices rather than promotions. A company-scoped quantity ladder or a time-boxed wholesale promotion on top of the price book is a discount, not a catalogue, and that is what this recipe covers.
Watch out for
- This requires Shopify B2B. Without company accounts there is no company to target, and tag targeting is the correct alternative.
- A logged-out cart receives nothing, which is correct but makes signed-out testing look broken.
- Company targeting sits on top of your B2B catalogue prices rather than replacing them. Check the combined result in the preview.
- Group companies onto shared pricing tiers rather than creating one offer per company, or you will hit the active-discount limit quickly.
Common questions
- Do I need Shopify B2B for this?
- Yes. Company targeting means the buyer is purchasing on behalf of a company account. Otherwise use customer tag targeting.
- How is this different from a B2B price list?
- A price list sets base prices. This is a discount on top, which is what you want for quantity ladders and time-boxed wholesale promotions.
- What happens when a buyer leaves the company?
- Nothing breaks. The entitlement belongs to the company, so any authorised buyer for that company gets the pricing.
- Can one offer cover several companies?
- Yes, and it should. One offer per pricing tier with several companies selected is far more manageable than one offer per company.
Related examples
A standing discount for tagged customers only, with no code that can leak.
Bigger percentage as unit count rises, with control over how mixed variants are counted.
Free shipping restricted to customers carrying a specific tag.
Build this in your own store
Every recipe in this library runs on the same server-side engine, so the cart total and the checkout total agree.