Skip to content

Key value items

A key value item, or KVI, is a product your customers price-check: the eighth or the cart they compare across dispensaries before choosing where to shop. BudLogix keeps a list of them so the pricing engine can hold those items at the market price and take margin on the items nobody compares.

A KVI is a mark beside the role

Being a KVI is not a pricing role. A KVI is a product customers can compare with the shelf next door; a traffic driver is a product that starts baskets. They are different products more often than not, and one product can be both, so the KVI list is a mark that sits beside whatever role a product has. Adding a product to the list leaves its role as it is, and choosing Traffic driver for a product does not put it on the list.

Which products belong on it

Every Sunday, beside each product's role, BudLogix proposes whether it belongs on the list:

  • Stays - two or more competitor shops carry the brand in that size, so customers can compare it and the engine has a market to price it to.
  • Add to the list - it starts baskets (the traffic-driver test: a top-quarter number of baskets started, and at least the store's median share of its own) and at least one shop carries the brand in that size. A product two shops carry but that does not start baskets is not proposed onto the list; it can still be added from Proposed on the Key value items tab.
  • Take off the list - a KVI that only one shop carries and that does not start baskets, or one no shop carries. Off the list it is priced by its role: the one you chose, or the one proposed.

These wait on the Roles tab under Key value items, separately from the role proposals, each with the baskets it started, the shops carrying it, and our price against their list price and any special. A KVI out of stock keeps its mark, is shown as out of stock, and gets no proposal until it is back. Skipping a KVI proposal keeps it quiet until the number of shops carrying it changes or its baskets started move by more than a quarter.

The list is authored

The KVI list belongs to you. BudLogix proposes candidates, but nothing joins or leaves the list without a person clicking Add, Skip or Remove. A dismissed proposal is remembered with the sales and competitor overlap it was dismissed against, and comes back only when those move materially.

Where candidates come from

Candidates are drawn from the competitor index: your products in stock, ranked by units sold in the last 90 days multiplied by the number of competitor shops that carry the same brand in the same product bucket. A product nobody buys is not price-checked, and a product no competitor carries cannot be compared, so both are left out.

The cohort, not the match

Identical products across dispensaries are rare. BudLogix compares a brand within a bucket instead: your brand-X 3.5g flower against every brand-X 3.5g flower on each competitor's shelf. This is the cohort. The shelf is each competitor's latest complete fetch, and only fresh shelves count (7 days by default). See Competitor prices.

A product with no cohort says why: no brand on your side, a bucket the engine cannot place, or a brand no fresh shelf stocks. "No cohort" is stated on the Key value items tab rather than shown as an empty gap.

Position against the cheapest

For each candidate, BudLogix compares your price with the cheapest same-brand list price across the competitors. A competitor's special is shown beside it but never used for the position, and sizes a competitor lists as sold out are not counted. Within 1% either way is At parity. We are above means a price-checked item you are losing on. We are below means room, if you choose to spend it.

When a competitor moves

A competitor changing the cheapest same-brand price for a format you carry raises a row on Pricing under Waiting on you, saying which store, which brand, from what to what, and where your own products now sit. Open KVI brings you here, because this is where a price is set to the market. The row is raised for any cohort you have a stocked product in, not only for KVIs - but a move on a KVI is the one customers will notice.

What the engine does with the list

A KVI is a scope the engine can build a price event from, moving the item toward the market. The market here is the list price: specials are short promotions, mostly on the competitors' own house brands, and a KVI price matched to one would be the cheapest shelf in town once it ended. When a special undercuts the cheapest list price, the proposal's reason names it. It is a signal, not an order: the move still passes the engine's guards and your own review. See How the pricing engine decides.

An event gets built from the list on the KVI screen: Draft a price event, beside the heading, opens a draft scoped to every member. The KVI list is your own policy, so it is not ranked on the Pricing hub against moves chosen for gross profit, and the engine's Monday draft does not pick it. The engine names a price only once a band run has been accepted, and only for members whose brand is carried in that format on at least two fresh competitor shelves - one store is not a market. Drafting changes no price: a draft governs nothing until somebody pushes it, and nothing is ever pushed by a schedule. See Price events for the full schedule.

How a KVI move is judged

A KVI is cut to win the price check and bring customers in, so its own margin is meant to get thinner. Judged on its own gross profit, the way every other product is, a KVI cut that worked would read as a loss. So a KVI's price move is read differently:

  • On the event it is read on the baskets it was in, once the 28 days close. A rollback's restore puts prices back and is not read at all. Did it bring customers? shows how many transactions a day included the KVIs, their own gross profit a day, the gross profit a day of everything else in those baskets, and store traffic as context, before and after. The answer is the net of their own margin and the rest of their baskets together, against the KVIs held back where the event had some, and against the weeks before where it did not.
  • In the engine's evidence a KVI move is kept apart, in its own rows on Results. It never counts toward whether ordinary cuts of its size earn, and it never decides what the engine may do.
  • Never walked back, never flagged early. The checks that walk back a losing cut, or flag one giving its discount away, leave KVIs alone.

Whether a line is a KVI is fixed when the event is pushed. Taking a product off the list later does not change how an old move is read.

A KVI can answer to a floor of its own: KVI and traffic driver margin floor on Setup, one setting shared with traffic drivers. Left blank, KVIs answer to the same margin floor as everything else, and a KVI cut that crosses it needs an override with a reason at every push.

A KVI is left alone by Let the engine choose, aims at units when a draft is optimized unless its role names another aim (clearance aims at cash back, a basket builder at revenue), and is raised only by KVI to market - never by another reason, and never past the market price. A KVI that is also a traffic driver is never raised at all: it can be cut to the market, not lifted to it.

Where you see this

  • Pricing roles - the list, on the Key value items tab, and the proposals.
  • Competitor feed - which shelves the cohorts are read from.
  • Mark a product as a KVI

Last checked against the product on 8 Oct 2026. This is the same article operators read inside BudLogix.