Pick one shopper brief. Count how many of its applicable requirements the product record supports with a stated value that qualifies. That’s the numerator. Divide by the number of applicable requirements. That’s the denominator. A requirement leaves the denominator only when a stated fact makes it irrelevant.

Report the leftovers next to the fraction: unknown, words only, conflicting and contradicted. Never fold them into it. Always name the brief and the fields you counted. “3 of 5 supported, 1 contradicted, 1 words only (title and description)” can be checked by anyone. “60% coverage” can’t.

This is our proposed measure of evidence. It isn’t a ranking score, a pick probability or a market share. The full calculation for ten real humidifier listings is below.

The definitions

Every requirement in the brief gets exactly one state per listing. The states and how they count:

State Definition In the numerator? In the denominator?
Supported The record states a value that meets the requirement, with its unit Yes Yes
Contradicted The record states a value that fails the requirement No Yes
Conflicting The record states two or more values that disagree No Yes
Words only The record makes the claim with no checkable value (“ultra-quiet”) No Yes
Unknown The record says nothing about it No Yes
Not applicable A stated fact makes the requirement irrelevant to this product No No

So:

Coverage = supported ÷ (all requirements − not applicable)

Reported as: k of n supported · c contradicted · x conflicting · w words only · u unknown · (fields counted) · (brief)

The fraction alone is never the result. Two listings can both show 3 of 5 when one has two unknowns and the other has two contradictions. The first might fit. For this shopper, the second doesn’t.

Our constraint-coverage guide shows how to build the matrix these counts come from. This page sets the counting rules.

Three numbers worth reporting

One fraction answers one question. Three questions are useful, and each needs its own number.

Number Question it answers Numerator / denominator
Coverage How much of this brief can an agent check on this listing? Supported / applicable requirements, for one listing
Conditioned coverage How much of it can be compared fairly? Supported with the condition stated, where one is needed / applicable requirements
Shelf share for a requirement How many listings on this shelf state a qualifying value for this requirement? Listings supporting it / listings checked, for one requirement

The third is the one people mean by “share of constraint coverage”. It tells you whether a fact is rare or common on a shelf, and that turned out to matter in our simulation (more below).

Conditioned coverage needs one more rule. Some requirements need a condition to be comparable: noise needs a setting and distance, room coverage and runtime need a setting. Others don’t: “top fill” is just true or false, and price is the price. A supported value counts toward conditioned coverage if it needs no condition or states the one it needs.

The worked table: ten humidifiers, one brief

The search was “humidifier for dry winter air large room quiet top fill”, run in Shopify’s agent catalog on October 26, 2026, top 10 results. The brief is our illustration. It takes the search’s words plus the room size, budget and refill habit of the shopper in our simulation:

  1. Room of at least 450 sq ft
  2. A stated decibel figure (the shopper gave no limit, so we count a number, not a verdict)
  3. Top fill
  4. Under USD 90
  5. At least 24 hours of runtime per fill

None of these is not applicable to any of the ten listings, so n = 5 for each.

Coverage per listing

Position Title and description Including generated lists What’s not supported (title and description)
1 2 of 5 2 of 5 Room, noise, runtime unknown
2 4 of 5 4 of 5 Price contradicted (USD 119.99)
3 5 of 5 5 of 5 —
4 3 of 5 3 of 5 Room contradicted (400 sq ft); noise words only
5 4 of 5 3 of 5 Room unknown. Generated lists add a runtime conflict
6 1 of 5 3 of 5 Price contradicted; room, noise, runtime unknown
7 5 of 5 5 of 5 —
8 2 of 5 2 of 5 Room and noise words only; top fill unknown
9 3 of 5 4 of 5 Room unknown; noise words only
10 2 of 5 3 of 5 Room, noise, top fill unknown

“Including generated lists” adds Shopify’s generated spec, feature and selling-point lists to the title, description and price. Shopify marks those lists, and the description, as Inferred: generated or enriched by Shopify, and possibly inaccurate.

Shelf share per requirement

Requirement Title and description Including generated lists Note
Room of at least 450 sq ft 3 of 10 (positions 2, 3, 7) 4 of 10 Adds position 10’s “150 m²”, source unclear to us
Decibel figure stated 4 of 10 (2, 3, 5, 7) 6 of 10 Adds 6 and 9, both 26 dB. No title had one
Top fill 8 of 10 8 of 10 Position 9 says so only in its title
Under USD 90 8 of 10 8 of 10 Price field
Runtime of at least 24 h 8 of 10 8 of 10 Same count, different listings: gains 6, loses 5 to a conflict
All five 2 of 10 (3, 7) 2 of 10 (3, 7) —

Conditioned coverage

In title and description text, the table has 15 supported cells for the three requirements that need a condition: room size, noise and runtime. Two of the 15 state the condition, and both are runtimes on the low setting (positions 4 and 8). None of the four decibel figures says the setting, the distance or the method.

That changes how the top of the table reads. Positions 3 and 7 each cover 5 of 5, but their conditioned coverage is 2 of 5: only top fill and price can be compared without asking how the numbers were measured. Position 4 covers only 3 of 5, yet its conditioned coverage is 3 of 5, because its runtime says “on low”.

Rules for the awkward cases

Each rule below is a choice. We say which way we chose and why, so you can choose differently and say so.

A conflict never counts as support, even when both values qualify. Position 5’s description says up to 32 hours, and its generated spec list says up to 36. Both clear 24 hours, so a lenient rule would count it, and position 5 would show 4 of 5 including generated lists instead of 3 of 5. We chose the strict rule. You don’t know which copy a reader gets, and the next brief may need 34 hours. If you use the lenient rule, label it.

Generated-only values get their own figure. Position 10’s only room figure is “150 m²” in the generated spec list. 150 is also in its model name, and the description gives no room size. We count it in “including generated lists” and flag it. We never merge it into the title-and-description figure. Keeping two figures is what lets you see a claim the merchant never made.

Words only is never support. “Ultra-quiet”, “medium to large rooms” and “runs quietly enough to leave on overnight” all go in the words-only count. Counting them would reward exactly the copy that our simulation found every model ignored.

Not applicable needs a stated reason. Suppose a shopper also asked for “cheap replacement filters”. Position 4’s description says there’s “no filter to replace”, so for that listing the requirement is not applicable and n drops by one. That fact belongs in the record as an exclusion, as our guide to negative product facts explains. A listing that says nothing about filters stays unknown. Moving silent requirements out of the denominator is the easiest way to inflate a coverage figure, and this rule blocks it.

Absent is unknown, never zero. If your brief includes “rated 4 stars or more”, a listing with no rating is unknown, not contradicted. Across all 162 searches in that snapshot, a product-level rating was absent on 440 of 1,620 returned listings. 106 of those still had a rating on the first variant, and 334 had neither. No rating anywhere had a count of zero. OpenAI’s feed reference draws the same line: an empty value doesn’t mean zero or false, and an omitted review count means unknown.

The threshold is part of the result. Lower the room requirement from 450 to 400 sq ft and position 4 moves from contradicted to supported. It goes from 3 of 5 to 4 of 5, and the room share goes from 3 of 10 to 4 of 10. Any report that doesn’t print its thresholds can’t be rebuilt.

Offer facts get a date. Price, stock and shipping change daily. Coverage for “under USD 90” is true on the date you read the price, and the report should say which date.

What the number does not mean

It isn’t quality. “Supported” means a qualifying value is stated. A false value scores the same as a true one, and we didn’t test any unit.

It isn’t a pick probability. In our simulation, six models each picked 2 of 8 supplied listings, so random picking would include any one listing 25% of the time. An invented humidifier with vague copy was picked in 3 of 180 Claude sessions, 0 of 60 on GPT-6.1-Sol, 6 of 60 on Gemini 3.8 Flash and 3 of 54 on Gemini 3.1 Pro. With its facts stated, GPT-6.1-Sol and two Gemini models picked it every time the shopper’s brief asked for what it stated (20 of 20, 19 of 19, 15 of 15), and never with a one-line ask or no shopper (0 of 40 each). The brief was written to fit the test product. Facts got it considered, and it won where its facts answered a stated need that the competing snippets didn’t. That’s the shelf-share idea in action: a requirement only you support is worth more than one everybody supports. But the simulation measured picks from supplied snippets, not coverage, and coverage doesn’t predict picks.

It isn’t market share. Shelf share counts listings in one result, not products sold or shoppers reached. Our 162-search snapshot holds 1,620 result occurrences, not 1,620 distinct products. And six of these ten humidifiers came from one seller.

It isn’t visibility. We compute coverage on catalog records. We can’t see what ChatGPT or any other assistant tells a shopper, and nobody should sell you a coverage number as if it could.

It doesn’t travel across briefs. “4 of 5” on one brief and “4 of 5” on another aren’t the same achievement. Don’t average coverage across briefs, categories or listings into one score. Vendors describe agent shopping as a comparison exercise; eCommerce Insights, for one, says agents compare products on attributes such as weight, material and price. A comparison is always against a specific need, so the brief has to travel with the number.

A reporting template

Use one line per listing and one line per requirement. Keep the brief and fields at the top.

Brief: room ≥ 450 sq ft; decibel figure stated; top fill; under USD 90 (price read 2026-10-26); runtime ≥ 24 h per fill

Fields: title, description, price. Second figure adds Shopify-generated lists

Rules: conflicts strict; not applicable only with a stated reason

Your product: 3 of 5 supported · 1 contradicted (room: 400 sq ft) · 1 words only (noise) · conditioned 3 of 5

Rarest supported requirement on this shelf: room ≥ 450 sq ft, 3 of 10 listings

The example product line is position 4 from the table above. The rest of the template is blank for your own brief.

How we checked

On October 27 we reopened the saved Shopify agent-catalog response for “humidifier for dry winter air large room quiet top fill”, taken on October 26, 2026 with no buyer context, top 10 results. Every cell in the matrix carries a quote. A script confirmed each quote appears in the field it’s attributed to: the title, the description with HTML removed, the generated spec, feature and selling-point lists, or the price. It then recomputed every count on this page. Position 4’s “there’s no filter to replace” and “up to 400 square feet” are in its description, and that record carried no generated metadata.

The decibel counts (4 of 10 descriptions, 6 of 10 including generated metadata) and the position 5 and 10 values are also in our published receipts. We didn’t test any product, and store names are withheld.

Your next step

Write down one real brief for your product, with every threshold. Fill the matrix from your received record, then compute the three numbers: coverage, conditioned coverage and, for two or three competitors on the same search, shelf share per requirement. Report them in the template above, with the brief and fields at the top. If the number can’t be rebuilt from that line, it isn’t finished.