Catalog Rules
A catalog rule automatically lowers a product's price store-wide — before the product is ever added to a cart. The shopper just sees a reduced price on the product and category pages; there is no coupon and no minimum-cart requirement. It mirrors the admin Marketing → Promotions → Catalog Rules screen.
How a catalog rule works
A rule has three parts: who it applies to, when it applies, and what it does to the price.
- Who —
channels(which storefront channels) andcustomerGroups(e.g. general, wholesale). A rule only fires for shoppers in a matching channel + group. On the detail query these are field-selectable connections of{ id, _id, code, name }— sub-selectedges { node { id _id code name } }. - When — an optional date window (
startsFrom/endsTill) and a set ofconditions(product attribute filters such as category = Summer or brand = Acme).conditionTypedecides whether all conditions must match (1) or any (0). - What — the
actionType+discountAmountrewrite the price:
actionType | Effect | Example with discountAmount: 10 |
|---|---|---|
by_percent | Reduce by N% | $100 → $90 |
by_fixed | Reduce by a fixed amount | $100 → $90 |
to_percent | Set price to N% of original | $100 → $10 |
to_fixed | Set price to a fixed amount | $100 → $10 |
For by_percent, discountAmount is capped at 100.
Priority and stacking. sortOrder sets evaluation priority (lower runs first). endOtherRules (1) stops any lower-priority rule from also applying once this one matches.
Status and re-indexing. status (0/1) toggles the rule on. Saving a rule recomputes affected product prices in the background, so a newly-created or edited rule can take a moment to show on the storefront.
Operations in this menu
| Action | Operation |
|---|---|
| List | adminMarketingCatalogRules query |
| Detail | adminMarketingCatalogRule query |
| Create | createAdminMarketingCatalogRule mutation |
| Update | updateAdminMarketingCatalogRule mutation |
| Delete | deleteAdminMarketingCatalogRule mutation |
| Mass Delete | createAdminMarketingCatalogRuleMassDelete mutation |
conditions, channels, and customerGroups resolve only on the detail query — they are null on list rows. channels and customerGroups are connections of { id, _id, code, name } (sub-select edges { node { ... } }); they do not resolve on a create / update mutation payload, so re-query the detail to read them back.
All Catalog Rules operations require an admin Bearer token — see Authentication.

