# Google says preorder, OpenAI says pre_order: product feeds for AI shopping

> Source: <https://dev.to/logitsolutionsai/google-says-preorder-openai-says-preorder-product-feeds-for-ai-shopping-3g42>
> Published: 2026-11-15 08:39:41+00:00

Take a product you can order before it ships. Google Merchant Center wants its availability written as `preorder`. The OpenAI product feed, the one ChatGPT shopping reads, wants `pre_order`, and its spec is blunt about anything else: "Omitted, empty, or unrecognized values reject the row."

Same product, same store, one underscore. One feed is accepted and the other silently loses the row.

That is the new chore in e-commerce. AI shopping assistants read your catalog through product feeds, and each one has its own format:

`target_countries` and `store_country`;
They mostly agree, which is exactly why the differences slip through.

A few we ran into while reading the specs:

`preorder` for Google, `pre_order` for OpenAI.
None of this is hard. It is just a lot of small rules spread over several spec pages, all changing at their own pace.

[shelfcheck](https://github.com/logitsolutionsai/shelfcheck) is a free, open-source command-line tool written in Rust. You point it at your feed and it checks every product against all three formats, plus GS1 barcode rules, in one run:

``` bash
$ shelfcheck check fixtures/store-a/products.csv
shelfcheck 0.1.0 · rules OpenAI 2026-11-14 · ACP 2026-04-17 · Google 2026-11-14 · GS1 26.0

read      OpenAI CSV · 1,400 products, 3,912 variants                     0.30 s

          ready            errors   warnings
OpenAI    1,228    87.7%   172      27
ACP       1,310    93.6%   90       0
Google    1,293    92.4%   107      0

✗   82  Barcodes with a wrong check digit       OpenAI, ACP, Google · e.g. PHO0071-3, line 157
✗   61  target_countries is missing             OpenAI · e.g. LAM0015-3, line 36
✗   23  availability values the format rejects  OpenAI · e.g. MUG0033-1, line 79
    + 4 more fixes, 43 products. All of them are in the report.

182 of 1,400 products need fixes before every format accepts them.
```

That run is on the synthetic 1,400-product demo store that ships with the repo, so the numbers show what the tool does, not how real stores score.

The fixes come ranked by how many products each one affects, so the first fix you make is the one that clears the most rows. Every problem names the product, the line and the column, and cites the rule it broke.

A feed that passed last month can break this month without a single error. So shelfcheck also compares two feeds and flags risky changes:

`PHN-X2-BLK` was a phone and is now a phone case);
You record a decision for each change once (`shelfcheck decide`), and it stays quiet after that.

`report.html`, `results.json`, SARIF 2.1.0 for GitHub code scanning, `junit.xml` and a `failing-products.csv`.
One honest limit: passing shelfcheck means your feed matches the formats it checks. It does not mean an AI assistant will show your products.

```
npx shelfcheck check products.csv                 # no install
brew install logitsolutionsai/tap/shelfcheck      # Homebrew
cargo install shelfcheck                          # crates.io
```

The code, the rule packs and their sources are on GitHub under Apache-2.0: [github.com/logitsolutionsai/shelfcheck](https://github.com/logitsolutionsai/shelfcheck). If a rule is out of date, open an issue with the rule id and a link to the page that changed.

**Sources**

*Logit Solutions AI is an AI product studio. We design, build and support production-ready AI products for startups and growing businesses.*
