Skip to main content

Overview

Not every shopper should see the same store. A wholesale buyer gets trade prices and a range retail never sees. A negotiated account has its own agreed pricing. A retail till carries a subset of what the website does. A catalog answers both halves of that at once: what an audience sees, and what they pay.

The two modes

The single most useful thing to understand about catalogs is that an empty assortment means something different from a full one — it’s the switch between the two ways a catalog is used.

Pricing overlay

Assortment empty. Nothing is hidden — the audience browses the normal store — but the attached price list applies.This is how “this company sees everything, just at their negotiated prices” is expressed.

Restricted range

Assortment has products. The audience sees only what’s in it.This is how a wholesale-only range, or a channel-specific selection, is expressed.
That’s worth pausing on, because it’s the one behaviour that surprises people: adding a product to an empty catalog doesn’t add one item to what a customer sees — it switches the catalog into restricting mode, and they now see only that item.

Creating one

The price list is optional. A catalog with an assortment and no price list restricts the range at normal prices; a catalog with a price list and no assortment adjusts prices without hiding anything. A price list is either standalone (matched by its own rules) or owned by exactly one catalog. A catalog creates the list it prices through, so the two are configured together on the catalog page — an owned list never appears in the price-lists index, since it has no rules or audience of its own. Removing a catalog’s pricing (price_list: null), or deleting the catalog itself, deletes the owned list rather than releasing it. A released list would match by its own rules, and an owned list has none — so it would begin pricing every shopper in the store. It is a soft delete, so the prices stay recoverable.

Filling the assortment

Membership is all a catalog holds — it decides what a buyer sees, never the order they see it in. Presentation order stays with categories and collections. When a catalog should restrict to exactly what its price list covers, there’s a shortcut that copies those products in rather than making someone add them by hand:

Choosing the audience

A catalog is assigned to a buyer audience: A Channel is not assigned — it names its catalog directly via default_catalog_id, which applies to everyone buying through it when nothing narrower does.
A company assignment covers the whole subtree. Assign the group-wide catalog once at the root of a company tree and every division below inherits it — no re-assigning per branch. A branch can still add its own catalog on top.

What a shopper ends up seeing

The three ways of reaching a buyer are tried in turn, and the first one that finds a catalog answers on its own. Once that’s settled, everything it found combines:
1

Find the catalogs that apply

For a company buyer, that’s the catalogs on their node and its ancestors. Otherwise their customer group’s catalogs. Otherwise the channel’s default catalog, if it has one.
2

Combine the assortments

The shopper sees the union of what those catalogs contain — so a division’s extra catalog adds to the group’s range rather than replacing it.
3

Any empty assortment lifts the restriction

If one applicable catalog is a pricing overlay, the restriction is off and the shopper sees the full range. An overlay is explicitly “don’t hide anything”, and that has to win — otherwise adding negotiated pricing would accidentally narrow someone’s catalog.
Gated storefront access is checked before any of this — a shopper who has to sign in never reaches catalog resolution.
A company buyer never picks up their customer group’s catalogs. As soon as any catalog is assigned to their company or one above it, that is their agreement, and group assignments are not consulted for them.So don’t express trade tiers as customer groups over a company tree — the tier catalogs would be unreachable for exactly the buyers they were meant for. Model tiers as company assignments: the group-wide range on the root, and each tier’s catalog on the member companies or divisions in that tier. One tier catalog can carry as many company assignments as the tier has members, and nearest-first pricing means a buyer’s own node beats anything inherited.Customer group assignments are for buyers who aren’t purchasing for a company at all — a retail loyalty tier, a staff discount.

How pricing resolves

Prices are checked in order, and the first match wins:
  1. Price lists attached to the applicable catalogs, nearest first — the buyer’s own company node before its parent’s
  2. Ordinary price lists whose rules match
  3. The product’s base price
Nearest-first is what lets a subsidiary hold a better-negotiated rate than the group’s, without disturbing anyone else. A nearer node answers even when a catalog further up happens to be cheaper — it’s the agreement that buyer is on.
When one company holds several catalogs, the buyer pays the best price among them. Nothing about two assignments on the same node says which of them a company is on, so neither outranks the other and the cheapest applicable price wins. The order catalogs appear in on the catalogs screen is display order — it never decides money.Quantity breaks are part of that comparison: the price compared is the one for the quantity being bought, so a catalog with a deep break at 24 units wins from 24 up and may lose below it.
A price list owned by a catalog applies because the catalog applies — its own rules are not consulted, and it’s excluded from ordinary rule matching.That exclusion is load-bearing: a price list with no rules would otherwise match everyone, and one company’s negotiated pricing would leak to the entire storefront. It also means a deactivated catalog’s list goes dormant — turning the catalog off never releases its pricing to the whole store. Nothing puts an owned list back into rule matching: removing the pricing deletes the list instead, for the same reason.
  • Companies — B2B buyers and the subtree rule
  • Pricing — price lists and rules
  • Products — the catalog being narrowed
  • Channels — per-channel default catalogs