Pricing rules

Rules are how the platform decides what a product's price should be, based on tracked competitor prices. They're account-wide, not attached to one product — a single rule can target your whole catalog or a filtered subset.

Rule types

Type What it computes
Beat lowest by % The lowest tracked competitor price, minus a percentage.
Beat lowest by $ The lowest tracked competitor price, minus a fixed amount.
Match lowest Exactly the lowest tracked competitor price.
Hold market position Undercuts the Nth-cheapest tracked competitor (position 1 = cheapest). An approximation based on the competitors you're actually tracking — there's no live marketplace-rank feed behind it.
MAP floor Currently alert-only — does not change price. Real MAP-floor enforcement isn't implemented yet.

A rule needs at least one competitor price on a product to evaluate — products with no tracked competitor URLs, or none with a captured price yet, are skipped.

Targeting which products a rule applies to

Each rule is built from groups of conditions on product tags or attributes (brand included — it's just another attribute):

  • Conditions within a group are AND'd.
  • Groups are OR'd together.

(brand = Barbour AND tag = clearance) OR (brand = Milwaukee)

A rule with zero groups applies to every product on your account — no special "all products" flag needed, it's just the empty case.

The create/edit form shows a live, debounced preview of exactly which products currently match as you build the conditions, so you can confirm scope before saving rather than guessing.

Priority

If more than one active rule matches the same product, only the highest-priority rule actually evaluates for it (ties broken by rule ID, oldest wins). A product is never affected by two rules in the same run — there's no "whichever ran last silently wins" ambiguity.

Margin floor

margin_floor_percent is a non-negotiable cost-protection guardrail: if set, the computed price is never allowed to imply a margin below this percentage against the product's cost price, regardless of what the rule type would otherwise compute.

A margin-floor-driven increase is never blocked by the "no price increases" setting below — protecting your margin always wins.

Requires the product to have a cost price set; without one, the floor has nothing to check against and is skipped for that product.

Price increases

By default, a rule will only ever lower a price — if the computed price is higher than the current sell price, that's treated as a no-op. Check Allow price increases on the rule to let it follow a competitor's price upward too (e.g. if everyone raises prices, you're not stuck underselling).

Approval mode

  • auto_apply — the computed price is written as the new sell price automatically. If the product has no connector, this happens immediately. If it's tracked by a connector (Shopify, Magento), the price is held until the next successful export push confirms it actually went out — so the system never claims a price is live before it is.
  • suggest_only — nothing is applied automatically. A pending suggestion appears on the Price Changes page for you to approve or reject. Re-evaluating the same rule against the same product updates that one pending suggestion in place rather than creating duplicates.

Smart price vs. sell price

Every evaluation refreshes smart_price on the product — this is always "what the matching rule currently computes," whether or not it was actually applied (blocked by a no-increase setting, awaiting approval, or awaiting an export push). sell_price — the live price — only changes through an actual applied price change, never inline during evaluation.

When rules run

The rule engine evaluates all active rules on a recurring schedule, every few minutes — you don't need to trigger it manually. The panel's live preview lets you check scope changes will take effect the next time it runs.