Write every specification as a number, a unit chosen from one fixed list for that kind of measurement, and the exact wording you published. Next to it, record the qualifier (“up to”, “as low as”, nominal, ±), the condition it was measured under, the part of the product it covers, where it came from and when you checked it. Produce any second unit by converting from that row, not by retyping.

A bare “26” or “2 gallon” can’t be compared with the listing beside it until someone knows the unit, the setting and the scope. The template below is our proposal, not a platform requirement, and a complete row doesn’t guarantee a pick. It does make a wrong comparison easier to catch, by you and by anyone reading your listing.

The template: one row per specification

Use a spreadsheet with one row per specification, per variant. The example column uses a real humidifier listing from a Shopify catalog search on October 26, 2026, which described its tank as “1.25 gallons”.

Column What goes in it Example
Specification The name a shopper would use, spelled the same way on every product Tank capacity
Quantity type What kind of measurement it is: length, weight, volume, area, flow, sound, temperature, time Volume
As published The exact words currently on your page, character for character “1.25 gallons”
Value The number only 1.25
Unit One unit from the fixed list for that quantity type US gallon (assumed; see uncertainty)
Second unit Converted from the value and unit, with the rounding you used 4.7 L (1.25 × 3.785, rounded to 0.1)
Qualifier Exact, nominal, up to, as low as, at least, range, or ± tolerance Nominal
Condition The setting, distance, temperature, load or test method behind the number Not needed for a tank
Scope What the number covers: whole product, one part, one variant, packed or unpacked Whole product, one variant
Source and date The document a person could open, and the date of that document [Manual or spec sheet, page], [date]
Checked When someone last compared the row with the source [date]
Uncertainty What you don’t know and why Gallon type not stated; US assumed because the price is in USD

The bracketed cells are blank on purpose. We don’t have that merchant’s manual, and you shouldn’t fill a source cell from memory either.

Three columns separate this template from a general product record:

  • Quantity type catches a unit that doesn’t belong. A length can’t be in pounds. If the unit doesn’t match the quantity type, the row is wrong somewhere, even if you can’t yet tell where.
  • As published keeps the original wording, so you can see exactly what a shopper, a catalog or an assistant was given and fix that text, not just your spreadsheet.
  • Qualifier keeps “up to 62 hours” from being compared as if it were “62 hours”.

The full product record, including what a product is not for and how to label unknowns, is covered in our guide to agent-ready product data. This page is about one job inside that record: making the numbers comparable.

Pick one unit list per quantity type

Decide once, for your whole catalog, which units each quantity type may use and how you’ll write them. Then every product follows the same list. Shopify’s metafields already store several measurements as a value paired with a unit, so the right-hand column shows where each one can live in your admin.

Quantity Write it as Shopify metafield type What to watch for
Length and dimensions cm and in, e.g. “40 x 30 x 20 cm (15.7 x 11.8 x 7.9 in)” Dimension A label and a unit that don’t match, such as a depth in pounds. Say external or internal, packed or empty
Weight kg and lb Weight Net product weight or shipping weight. OpenAI’s feed asks for the product, without packaging
Volume L and US gal (or mL and US fl oz) Volume “Gallon” and “pint” mean different amounts in the US and the UK. Shopify stores them as separate units; write which one you mean
Area m² and ft² Area “ft²”, “sq ft” and “square feet” are the same unit; pick one spelling. Room coverage also needs its conditions
Flow (mist, water, air) mL/h on the page; store as L/h (320 mL/h = 0.32 L/h) Volumetric flow rate (litres, not millilitres, per hour) A size or a nozzle angle filed under an output label
Sound level dB, plus weighting if known, e.g. dB(A) Sound level (decibels only) The metafield holds the number and “decibels”. The setting, distance and weighting have to go in another field
Temperature °C and °F, written “-30 °C”, never only “minus 30” Temperature Who set the rating, for which part of the product, at what activity level
Time (runtime, battery) hours, with the setting Duration “Up to” with no setting

Two rules make the list work.

Store one value and derive the other. Keep the measured value in the unit of your source document, and let a formula produce the second unit on your page. Retyped conversions drift. We found one in the snapshot described below: a generated spec list gave a 6.2-litre tank as “25.36 pints”. That matches neither US pints (about 13.1) nor imperial pints (about 10.9).

Keep the unit with the number everywhere it’s copied. OpenAI’s product feed specification is blunt about this. Dimensions need a unit from a short list, weight needs its own unit, and if the unit is missing there is “no unit conversion or inference”. It also tells merchants to convert measurements before uploading, because units aren’t inferred from the market or sizing system. Other channels may be more forgiving. Write as if none of them are.

Record the qualifier and the scope, not just the number

The words around a number change what it means. These are all real phrases from one humidifier search and one snowsuit search on October 26:

As published What kind of claim it is How to record it
“up to 62 hours” A maximum, with no setting named Value 62 h, qualifier “up to”, condition unknown: setting not stated
“As low as 26 dB” (Shopify-generated spec) A minimum, probably the lowest setting Value 26 dB, qualifier “as low as”, condition: setting not stated
“±5% sensor accuracy” A tolerance on a sensor reading Value ±5, unit percentage points of relative humidity if the manual confirms it, scope: humidity sensor
“120-hour*”, with the footnote at the end of the description: run time “based off of running the unit on low setting and cool mist” A best-case figure whose condition exists but sits far from the number Value 120 h, qualifier: best case (the footnote adds that it “depends on atmospheric conditions”), condition: low setting, cool mist. Then move the condition next to the number on the page
“a hood with [brand] insulation rated to -30°C” A rating for one part of the product Scope: hood. A generated spec line in the same record dropped the word hood

The scope column is the one that protects you from the worst mistakes. A hood rated to -30 °C isn’t a suit rated to -30 °C, and once a catalog has summarized your description, the difference may be gone. If your row says “scope: hood”, you’ll spot the summary that lost it.

Worked case: a backpack depth printed in pounds

This is the case we checked line by line against the saved catalog response. On October 26 we searched Shopify’s catalog for “anti theft backpack for city travel”. Two records in the top 10 appear to be the same 28-litre backpack from different listings.

Field Record at position 5 Record at position 8
Dimensions in the description None “Height: 11.2 inch Width: 7.5 inch Depth: 2.4lbs”
Dimensions in Shopify’s generated spec list “19.7 x 11.2 x 7.5 in (50.04 x 28.45 x 19.05 cm)” “Height 11.2 in, Width 7.5 in, Depth 2.4 in”
Weight in Shopify’s generated spec list “2.4 lbs (1.09 kg)” “2.4 lbs (1.1 kg)”

Run the template on position 8’s description and the first check fails at once. The specification is depth, the quantity type is length, and the unit is pounds. Pounds aren’t a length unit, so the row can’t be right as published.

The generated spec list then made it look right: it kept the 2.4 and changed the unit to inches. The record now states a backpack 2.4 inches deep, which no longer looks odd unless you hold it against the other record’s 7.5 in. The weight in both generated lists is also 2.4 lbs. It looks as if a weight was printed under the depth label, but we can’t prove that, and we don’t know the true dimensions.

Here is what an honest record would say for position 8 today, before anyone opens the manufacturer’s spec sheet:

Specification Value and unit Status What to do
Height 11.2 in, as published Conflicts with another listing’s 19.7 x 11.2 x 7.5 in Confirm the height, width and depth order against the spec sheet
Width 7.5 in, as published Same conflict Same
Depth Unknown Published value “2.4lbs” has a weight unit Remove the line until the depth is confirmed
Weight 2.4 lb (1.1 kg) Appears only in the generated spec list Add it to the description with its own label
Capacity 28 L Consistent across both records Keep

Two things are worth noticing. First, a single unit check, “does this unit belong to this quantity?”, would have caught the error before it was published. Second, once a catalog tidies a broken value, it gets harder to spot. That’s why the “as published” column keeps the original text.

A humidifier shelf you can’t line up without a template

The same day we searched Shopify’s catalog for “humidifier for dry winter air large room quiet top fill” and read all 10 records. Ignore which product is best. The question here is narrower: could a shopper, or an agent, compare tank size, room size and runtime across these 10 listings from what the descriptions said?

Position Tank, as written → litres Room area, as written → ft² Runtime, as written
1 Not stated Not stated Not stated
2 “11L” → 11 L “700ft²” → 700 ft² (65 m²) “100H”, no setting
3 “6.2 L” → 6.2 L “536 ft²” → 536 ft² (50 m²) Up to 62 h, no setting
4 “1.25 gallons” → 4.7 L if US, 5.7 L if imperial “400 square feet” and “400 sq ft” → 400 ft² (37 m²) Up to 36 h on low
5 “4L” → 4 L Not stated Up to 32 h, no setting (generated spec list: 36 h)
6 Not stated (generated spec list: 6.0 L) Not stated (generated spec list: 430 sq ft) Not stated
7 “6.2 L” → 6.2 L “536 ft²” → 536 ft² (50 m²) Up to 62 h, no setting
8 “2 gallon” → 7.6 L if US, 9.1 L if imperial “medium to large rooms”, no number “120-hour*”, low setting and cool mist per a footnote
9 “2.5-liter” → 2.5 L Not stated Up to 25 h, no setting (generated spec list: low mode)
10 “3-liter” → 3 L Not stated (generated spec list: 150 m²) Up to 25 h, no setting

Converting the units is the easy part. Six descriptions gave the tank in litres and two in gallons, and neither of the two said which gallon. Four gave a room area, in three spellings of the same unit. The harder part is that eight of ten gave a runtime, but only two named the setting behind it. Those eight numbers look comparable and mostly aren’t. A “100H” of unknown setting can’t be ranked against “36 h on low”.

The generated spec lists added their own problems. Two records used the label “Mist Output” for 320 ml/h. A third used it for “4 inches (10.16 cm) with 30° tilting”, which matches its description’s “4-inch mist outlet”. That’s the nozzle’s size, filed under a flow rate. Anything that sorts these records by mist output is comparing millilitres per hour with inches.

None of this means the products are bad. It means the descriptions don’t give enough to compare them, and the gaps get filled downstream by someone else.

Put the row where it gets read

A spreadsheet nobody reads changes nothing. Each row should end up in three places, saying the same thing.

  1. The visible page. Add a short spec table near the top, one line per specification, value and unit first, with the condition in the same line: “Runtime: up to 36 h on low setting”. Don’t leave the condition in a footnote at the end of the description.
  2. Your admin fields. Use Shopify’s measurement metafield types where one fits (dimension, weight, volume, area, temperature, duration, flow rate, sound level), so the unit is stored with the value rather than typed into text. Add a text field for the condition, because the measurement types don’t hold one. Shopify says Catalog Mapping can source product data from custom fields such as metafields, so check that the fields you rely on are mapped.
  3. Any feed you send. If you send OpenAI a product feed, put dimensions and weight in its structured fields with a unit. Leave out an unknown value rather than writing “unknown” or “n/a”, which the specification asks you not to send. Keep the reason in your own sheet instead. The same specification says it won’t reconcile conflicting product-level and variant-level values for you.

Then check what came out the other end. Shopify marks the description and the technical specification list in its Global Catalog as Inferred: generated or enriched by Shopify, possibly absent, possibly inaccurate. The backpack depth and the “25.36 pints” above both appeared in those generated lists. If you can see your catalog record, compare it with your rows, and fix your own text first where it was the source of the confusion.

Does it make a difference?

We tested stated facts, not units on their own. In a simulation, an invented humidifier placed among seven real listings was picked in 3 of 180 Claude sessions with vague copy and 134 of 180 with a unit-aware spec line: “Noise: 28 dB on low · Coverage: up to 500 sq ft · Tank: 4 L · Runtime: up to 40 h on low”. On GPT-6.1-Sol and two Gemini models it was picked every time the shopper’s brief asked about room size and a budget under USD 90, and never with a one-line ask. In the listings supplied, it was the only one under USD 90 that stated a room size. The models chose from listings we supplied, so this says nothing about live ChatGPT results. The full results are here.

To see which shopper requirements your rows answer, line them up against a known brief, as described in our guide to checking constraint coverage. To turn the rows into a description, see our guide to product descriptions for shopping agents.

How we checked

Every catalog quotation on this page comes from saved responses to an unpersonalized search of Shopify’s Global Catalog on October 26, 2026, top 10 results per search, no country or buyer context. We re-read the saved responses on October 27.

  • Backpack. We read the description and the generated spec list for positions 5 and 8 of “anti theft backpack for city travel”, character for character. The depth line is the last line of position 8’s description.
  • Humidifier shelf. For each of the 10 records in “humidifier for dry winter air large room quiet top fill”, we read the description, the title and Shopify’s generated spec list. We recorded every tank volume, room area, runtime and mist-output value as written, and which field it was in. We searched all fields for “dB(A)” and “dBA” and found none.
  • Conversions. We used 1 US gallon = 3.785 L, 1 imperial gallon = 4.546 L, 1 US pint = 0.473 L, 1 imperial pint = 0.568 L and 1 ft² = 0.0929 m², and rounded the results shown. The two generated litre-to-gallon conversions in that result (6.0 L to 1.59 gallons and 3 L to 0.79 gallons) match US gallons. The “6.2 liters (25.36 pints)” conversion matches neither pint.
  • Not checked. We didn’t measure any product or open any manufacturer document. Where a listing says “gallon” without saying which, we show both conversions.

Store and brand names are withheld. Listings are identified by their position in the result.

What this can’t tell you

  • Which value is true. The template shows that a value is broken, missing or ambiguous. Only the product’s own documents can tell you the correct one.
  • How assistants use units. We can’t see inside ChatGPT, Gemini or Copilot. Each may rewrite, convert or ignore what it receives.
  • How common these problems are. These are examples from two searches in one snapshot, not a rate across Shopify.
  • That units alone change picks. Our simulation changed whole descriptions, not just units, and used invented products.

Your next step

Open the variant you sell most and list its five specifications that customers ask about. For each one, fill the quantity type, the exact published wording, the value, the unit and the qualifier. Then run one check down the column: does each unit belong to its quantity type, and does every “up to” have a condition next to it? The rows that fail are your first fixes.