Skip to content

Customer pricing

Wholesale catalogs: price lists for customer groups, applied at checkout.

Price lists for groups of customers, B2B style, without Shopify Plus. Members of a group get the catalog’s discounts automatically at checkout; the product page can show anonymous visitors a “log in, members save 20%” prompt and members their price. Needs: the Storesynk AI app on the Pro plan, plus customer accounts on the storefront.

Customer groups are the building block. Open Customer Groups, create one, and add members. A group is a tag on the customer; the tag is derived from the name and cannot change later. Customers who already carry the tag become members immediately, so tags applied in bulk or by Flow count too.

Then open Discounts & Bundles, click Create, and pick Wholesale catalog:

  1. Give it a name (only you see it), a checkout discount label, and a title the storefront widget shows.
  2. Tick the customer groups it applies to.
  3. Add rules in order; the first matching rule wins per line. Each rule targets all products, collections, or specific products, with a percentage off the current or compare-at price, and optional quantity and order-value tiers.
  4. Optionally set order limits: minimum, maximum, and pack size per product, enforced at checkout.
  5. Set purchase type, combinations, dates, and mark it Active.

Limits: 50 groups, 100 catalogs, 10 rules per catalog (at most 5 of them collection-based).

The store needs customer-client-id (see customer accounts). Place the widget inside the product page’s <storesynk-product>. It switches itself between three states: anonymous (the prompt), member (the preview price), and logged-in non-member (hidden).

<storesynk-customer-pricing>
<div>
<p class="cp-prompt">
<show-pricing-prompt></show-pricing-prompt>
<log-in>Log in</log-in>
</p>
<p class="cp-member">
<show-pricing-title></show-pricing-title> members save <show-pricing-percentage></show-pricing-percentage>
<s><show-pricing-original-price></show-pricing-original-price></s>
<strong><show-pricing-price></show-pricing-price></strong>
<small><show-pricing-note></show-pricing-note></small>
</p>
</div>
</storesynk-customer-pricing>
storesynk-customer-pricing[ss-empty], storesynk-customer-pricing[ss-loading] { display: none; }
storesynk-customer-pricing[ss-member] .cp-prompt { display: none; }
storesynk-customer-pricing:not([ss-member]) .cp-member { display: none; }
  • The preview price is advisory. Always keep <show-pricing-note> (“Applied at checkout”) next to it; the real discount comes from the cart once the customer is logged in.
  • Keep the regular <show-price> outside the widget, as a sibling. A product with no matching rule renders no widget, and a price inside it would disappear too. To show the member price in place of the regular one, hide the sibling with .price-row:has(storesynk-customer-pricing[ss-member]) .price-anon { display: none; }.
  • <show-pricing-prompt text="…"> and <show-pricing-note text="…"> override the copy; {title} and {discount} are filled from the rule.
AttributeSet onMeaning
ss-memberstoresynk-customer-pricingthe logged-in customer is in a matching group
ss-emptystoresynk-customer-pricingno live rule, or a logged-in non-member
ss-loadingstoresynk-customer-pricingfetching, or waiting for the session