# Agent readiness for grocery and food retailers

> How grocery and food retailers can make postal code checks, delivery slots, minimum orders, unit prices, allergens and substitutions work for AI agents.

By Ghost Agent Lab · Guide · https://ghostagentlab.com/blog/agent-readiness-for-grocery-and-food/

The weekly shop is a chore many people would happily hand to an AI agent. It's also one of the hardest for an agent to finish: dozens of items, a delivery slot, a minimum order, a postal code check, substitutions, and allergens that really matter. Here's what grocery and food retailers can change so agents get it right.

## What a weekly shop asks of an agent

Grocery requests combine a long list with strict conditions:

- **Build a basket.** "The usual, plus everything for a lasagna for six."
- **Filter by diet and allergens.** "Snacks for a school party: no nuts, no gluten."
- **Compare value.** "The cheapest olive oil per liter that isn't a blend."
- **Check delivery.** "Do they deliver to 97214, and what's the minimum order?"
- **Book a slot.** "Saturday morning, before 11."
- **Set substitutions.** "Swap the milk for another brand if needed, but never the baby formula."

Getting one of these wrong costs more than a lost sale. A wrong allergen answer is a safety problem, and a missed slot or minimum means a failed delivery.

- **Can you deliver here?** Postal code, area, minimum order
- **What's in it?** Ingredients, allergens, nutrition
- **What does it cost per unit?** Price per kg, liter or item
- ! **When can it come?** Delivery slots, substitutions

**Four questions grocery agents have to answer.** Each one depends on information many grocery sites only show after a postal code, a login or a click.

## Where grocery sites stop agents

- **A postal code gate on arrival.** A pop-up that covers the page and shows no prices or products until a postal code is entered.
- **No price until the postal code.** Prices depend on the local store, so the HTML holds none at all.
- **Minimums and fees revealed at checkout.** The minimum order, delivery fee and free delivery threshold appear only once the basket is built.
- **Unit prices missing or inconsistent.** Per 100 g on one item, per kg on the next, or only in a small image.
- **Ingredients and allergens in photos.** The back of the pack as an image, with nothing in text.
- **Slot pickers built from unlabelled cells.** A grid where "full" is shown only by a grey color.
- **Substitution settings hidden** in an unlabelled toggle at the end of checkout.

## What AgentScore sees before the postal code

[AgentScore](https://ghostagentlab.com/agentscore/) never enters a postal code. If your store needs one before it shows anything, the report shows what an agent meets before that step:

- **A postal code pop-up on the home page** is caught by the pop-up check: a warning when it covers the page but has a clearly labelled button, a fail when it has none.
- **Prices held back until a postal code** show up in the product data and "Prices are in the page HTML" checks.
- **Checkout:** when the cart shows no form while empty, AgentScore presses one product's add-to-cart button once. If it can't add the item, for example because the button is disabled or covered by something it can't close, the checkout field and guest checkout checks are skipped with that reason, not failed.

Delivery slots, substitutions and minimum orders are beyond a scan. Test those with an agent (see the last section).

## Seven fixes for grocery sites

### 1. Show products and prices before the postal code

Show prices for a default store or region in the HTML, and say so: "Prices shown for Portland. Enter your postal code to check delivery." Ask for the postal code in a labelled field on the page or at the cart, not in a pop-up that blocks everything. If you must use a pop-up, give it a real button labelled "Close" or "Browse without a postal code". See [age gates and region pickers that stop AI agents](https://ghostagentlab.com/articles/age-gates-ai-agents/).

### 2. Publish delivery areas, minimums and fees as text

A delivery page that lists the areas or postal codes you serve, the minimum order, delivery fees and the free delivery threshold, in sentences an assistant can quote. Repeat the minimum in the basket as text ("Add $12.50 more to reach the $40 minimum"). See [shipping, returns and FAQ pages AI assistants can quote](https://ghostagentlab.com/articles/policy-pages-ai-assistants/).

### 3. Put unit prices in text and in your product data

Show the unit price next to the price, always in the same unit for the same kind of product: "$3.00 ($0.60 per 100 g)". For items sold by weight, give the estimated weight and how the final price is worked out. In Product data, a [UnitPriceSpecification](https://schema.org/UnitPriceSpecification) with a [referenceQuantity](https://schema.org/referenceQuantity) carries the unit price, as [Google's merchant listing documentation](https://developers.google.com/search/docs/appearance/structured-data/merchant-listing#unit-pricing-example) shows. Units use UN/CEFACT codes (`GRM` is grams); see [unitCode](https://schema.org/unitCode).

```
"offers": {
  "@type": "Offer",
  "availability": "https://schema.org/InStock",
  "priceSpecification": {
    "@type": "UnitPriceSpecification",
    "price": 3.00,
    "priceCurrency": "USD",
    "referenceQuantity": {
      "@type": "QuantitativeValue",
      "value": "500",
      "unitCode": "GRM",
      "valueReference": {
        "@type": "QuantitativeValue",
        "value": "100",
        "unitCode": "GRM"
      }
    }
  }
}
```

See [prices AI agents can read](https://ghostagentlab.com/articles/machine-readable-prices/).

### 4. Put ingredients, allergens and nutrition on the page as text

Copy the ingredients, allergens and nutrition table into HTML on every product page, with allergens on their own line ("Contains: milk, wheat. May contain: tree nuts."). Keep the pack photo, but not as the only copy. In the EU, [Regulation (EU) No 1169/2011](https://eur-lex.europa.eu/eli/reg/2011/1169/oj) already requires mandatory food information for prepacked food sold at a distance, ingredients and allergens included, to be available before the purchase is concluded, so you may have the data already.

Structured data is thinner here. Schema.org's Product type has no property for allergens or nutrition, and its [NutritionInformation](https://schema.org/NutritionInformation) type is meant for recipes and menu items. The [GS1 Web Vocabulary](https://ref.gs1.org/voc/), an extension to schema.org, has properties such as `allergenStatement` and `ingredientStatement`; ask whether the platforms and agents you care about read it before investing. Either way, assistants quote the visible text.

`greenway.example/products/gluten-free-penne-500g`

- **Gluten-free penne, 500 g:** · In stock
- $3.00 ($0.60 per 100 g) (✓ Unit price in text)
- Ingredients: corn flour, rice flour (✓ Ingredients as text)
- Allergens: none declared. Always check the pack. (! Advice kept)
- [Add to basket]

**A grocery product page an agent can read.** Price, unit price, ingredients and allergens are all text, with the usual advice to check the pack.

### 5. Make delivery slots a list of real, named choices

Make each slot a button or radio named with its date and time ("Saturday 9 to 11am, $4.99"), with "Full" said in words and in the control's state. See [delivery slots and click and collect for AI agents](https://ghostagentlab.com/articles/delivery-slots-click-collect-ai-agents/).

### 6. Make substitutions an explicit, per-item choice

Give each basket line a labelled control such as "Allow substitutes" or "No substitutes", and publish how you choose and charge for substitutes. Then an agent can follow the shopper's rules exactly. See [carts AI agents can manage](https://ghostagentlab.com/articles/cart-ai-agents/).

### 7. Label the reorder tools

"Buy again" lists and favorites sit behind sign-in, which is fine, but their buttons and quantity fields need names too, so an agent can repeat last week's shop. See [order tracking, returns and reorders by AI agents](https://ghostagentlab.com/articles/order-tasks-ai-agents/).

## Testing a full basket

1. Run AgentScore and start with the pop-up, product data and prices checks.
2. Open a product page in a private window without entering a postal code, and use View Source to search for the price, the unit price and the word "Contains".
3. Ask an assistant "What's the minimum order at greenway.example, and do they deliver to 97214?" and compare the answer with your delivery page.
4. Give a [Ghost Agent](https://ghostagentlab.com/ghost-agent/) a test address and a goal like "Add a 500 g bag of gluten-free pasta and a liter of olive oil, choose a Saturday morning delivery slot, and go to payment". It stops before paying, and the replay shows whether the postal code prompt, the slot picker or the minimum order got in the way.

> **Allergens need a person in the loop:** make your allergen information as clear as you can for agents, but keep your usual advice to check the pack, and say it in text. An agent should pass that on, not replace it.
