---
title: "How an AI shopping agent compares gravel bikes under CHF 4,000"
description: "How AI shopping agents compare products, in a worked example: the bike shop whose price, stock and delivery are structured fields beats a cheaper rival."
canonical: https://autobasket.store/use-cases/gravel-bike-under-chf-4000
---

1.  [Home](https://autobasket.store/)
2.  [Use cases](https://autobasket.store/use-cases)
3.  How an AI shopping agent compares gravel bikes under CHF 4,000

# How an AI shopping agent compares gravel bikes under CHF 4,000

In this constructed worked example, a shopper asks an assistant for a gravel bike under CHF 4,000 for alpine rides, delivered in Switzerland within a week. Of two comparable shops, the one that declares price, geometry, stock and delivery as structured fields is recommended and bought from, and the cheaper one showing them only on screen is dropped.

Worked example, Sports retail, Switzerland, published 12 October 2026, updated 16 October 2026

## What exactly did the shopper ask?

“Find me a gravel bike under CHF 4,000 that’s good for long alpine rides, and that I can get in Switzerland within a week.” The request carries four constraints an agent has to check against each candidate: a price ceiling in Swiss francs, a riding use that implies gearing and frame geometry, a country, and a delivery window.

This is a constructed worked example, built to show the mechanics, and no real shop or sale is described. The two shops below are invented, and the fields are the ones our [agentic commerce readiness check](https://autobasket.store/services/buyer-journey-check) reads in real audits.

## Why did the first shop drop out?

Shop A sells a suitable bike at CHF 3,790. Its product page looks excellent to a person: large photos, a geometry chart, a green “in stock” badge. To the agent it fails at three points.

-   The price and the stock badge are loaded by JavaScript after the page renders, so the HTML the agent fetches contains neither.
-   The geometry chart is an image, so the stack, reach and tyre clearance that tell the agent whether the bike suits long climbs are not readable.
-   There is no GTIN and no `Offer` in the markup, so the agent cannot confirm that the bike on this page is the same model it saw reviewed elsewhere.

The agent cannot confirm the price is under CHF 4,000 or that the bike reaches Switzerland within a week, so it does not recommend it. Nothing on Shop A’s side records that this happened: there was no visit a person made and no basket that was abandoned.

## Why did the second shop win?

Shop B sells a comparable bike at CHF 3,890, CHF 100 more. Its page declares a `Product` with a GTIN, brand and model, an `Offer` with `price: 3890.00`, `priceCurrency: "CHF"`, `availability: "InStock"`, and a `shippingDetails` block stating delivery to Switzerland in two to three days. The frame geometry and gearing are published as an HTML table, and a Markdown version of the size guide is linked from the page.

The agent can check every constraint against a field. It recommends Shop B’s bike first, explains why in one line per constraint, and, on a channel that supports agent checkout, builds a cart through Shop B’s checkout endpoint once the shopper confirms.

## Which schema.org fields did the agent check, constraint by constraint?

Each constraint in the request maps to one field the agent can verify, and Shop A failed all five because each fact existed only on screen or not at all.

| Constraint | Field the agent reads | Shop A | Shop B |
| --- | --- | --- | --- |
| Under CHF 4,000 | `Offer.price` with `priceCurrency` | Price loaded by JavaScript, absent from the fetched HTML | `3890.00`, `CHF` |
| Suits long alpine rides | Geometry and gearing as text, in `additionalProperty` or an HTML table | Geometry chart published as an image | HTML table with stack, reach, tyre clearance and gearing |
| Available in Switzerland | `Offer.availability` and `shippingDetails.shippingDestination` | Stock badge loaded by JavaScript, no shipping block | `InStock`, destination CH |
| Delivered within a week | `shippingDetails.deliveryTime` | Not declared | Two to three days |
| Same model as reviewed elsewhere | `gtin`, `brand` and `model` | No GTIN, brand and model only in the title | GTIN, brand and model declared |

OpenAI’s help page on shopping in ChatGPT supports this logic in its own words: it reads structured metadata such as price, and “if you specify a budget of $30, ChatGPT will focus more on price” ([OpenAI Help Center](https://help.openai.com/en/articles/11128490-shopping-with-chatgpt-search), fetched 16 October 2026). The same page says merchants selling one item are ranked on availability, price, quality and whether they are the maker or primary seller. A budget in the request makes the price field decisive, and an unreadable price cannot pass it.

## What does this example show about price?

That the cheaper shop lost. An agent compares what it can verify, so a lower price that cannot be read is worth less than a higher one that can. The boundary is that this holds when the agent does the shortlisting. A shopper who already knows Shop A and visits it directly still sees the lower price, which is why readiness work adds a channel rather than replacing the existing one.

## Does this apply to products other than bikes?

Yes, wherever the request carries a hard constraint that maps to a field: a budget, a size, a compatibility, a delivery date. A shopper asking for a laptop under CHF 1,500 with 32 GB of memory, or a sofa that fits 220 cm and arrives before a move, sets the same test, and the shop whose answer sits in a field passes it.

It holds less where the choice is driven by taste and reputation rather than specification, such as a gift box of chocolate. There, being named at all depends more on the guides and reviews the assistant already cites, as the [chocolatier audit](https://autobasket.store/use-cases/chocolatier-findable-not-buyable) shows. For sports retailers the field list goes further, with sizes, ski lengths and service options, and it is set out for [AI shopping agents for sporting goods](https://autobasket.store/solutions/sports-outdoor). Matching a product across shops rests on its identifier, which is why the [GTIN for AI shopping agents](https://autobasket.store/learn/why-agents-need-a-gtin) comes first in most catalogues.

The [free readiness check](https://autobasket.store/#readiness-scan) tests a single product page against the same fields, and the [Buyer Journey Check](https://autobasket.store/services/buyer-journey-check) runs missions like this one through real assistants on your own catalogue.

## Where to read next

-   [How to get your products recommended by ChatGPT](https://autobasket.store/learn/how-ai-assistants-choose-products)What assistants weigh when they choose between products, with the research behind it.
-   [AI shopping agents for sports and outdoor retailers](https://autobasket.store/solutions/sports-outdoor)The fields that decide a sale in bikes, ski and outdoor gear.
-   [Do you need a GTIN for AI shopping agents?](https://autobasket.store/learn/why-agents-need-a-gtin)How a GTIN lets an agent match your bike to the model it saw reviewed elsewhere.
-   [Agent-ready online shop in 7 days](https://autobasket.store/services/machine-readability-sprint)The sprint that turns on-screen facts like these into structured fields.

## Sources

1.  [OpenAI Help Center, Shopping with ChatGPT Search (fetched 16 October 2026)](https://help.openai.com/en/articles/11128490-shopping-with-chatgpt-search)

## See how your own product pages score

Bring one of your product pages to a first conversation and we read it with you the way an agent does, which is the fastest way to turn what you just read into a ticket for your developers.

[Start selling smarter](https://autobasket.store/contact#session) [Read one product page first](https://autobasket.store/#readiness-scan)
