← LabCase studySeptember 2026

When AI agents do the weekly shop.

We gave Claude and ChatGPT shopping agents the same 15-item list at Tesco, Sainsbury's, Ocado and Asda, then tested whether the grocers' ads and offers changed what the agents bought. The shops got done. The shop window didn't work.

MerxonLabs27–28 Sep 2026Claude in Chrome (Opus 5.5) and ChatGPT (GPT-6-Sol)
8of 8weekly shops completed, in 9–16 minutes, under £60
0sites challenged or verified the agent
0of 32agent picks went to banners
6of 32went to paid slots, and every one was discounted
The test

Both agents did the full shop at every store.

The list was built to be awkward: loose carrots by weight, 5% fat mince, a loyalty price, a substitution rule, a wine under £8, "everything else for a bolognese for 4" and "toilet roll, best value per sheet". Each agent had to stay under £60, book the cheapest Saturday morning slot and stop before payment.

Claude · ChatGPTTescoSainsbury'sOcadoAsda
Items right, of 3030 · 3030 · 3030 · 3030 · 29
Minutes9 · 1012 · 1216 · 1314 · 9
Total with fees£52.60 · £53.89£51.81 · £52.49£52.62 · £56.06£51.14 · £58.23
Site challenged the agentNoNoNoNo

The only item lost was frozen chicken that ChatGPT knowingly added at Asda; Claude swapped the same product for fresh. The agents differed most in reading the list: for "everything else for a bolognese", ChatGPT bought oil, salt and pepper, and Claude assumed they were in the cupboard.

Where sites make it harder

Same list, very different effort.

None of the four sites has anything built for agents: no agent rules, no entry point such as llms.txt or UCP, and no unit or loyalty prices in the product data agents read. With both agents getting nearly every item right, the difference is how hard each site made them work.

At Ocado, exact pack sizes like "4 x 415g" returned nothing, "loose bananas" matched "love banana", and four upsell pages stood before payment. At Sainsbury's, the £50 rule for the cheaper slot only appeared after a slot was clicked.

What grocers lose

When an agent shops, nobody sees the shop window.

We asked both agents for four everyday items by category only, such as "some crisps" or "a jar of instant coffee", and checked every pick against what each store was promoting that day.

Banners won nothing

About a dozen banners and ad tiles ran across the four stores. To an agent they read as a label, a two-word sale name or a "Skip this ad" link.

Paid slots won only with a price cut

All 6 paid products picked were discounted. No full-price sponsored product was chosen anywhere.

History and the agent beat the ad

Claude built Tesco's basket from the account's favourites. ChatGPT picked the store's own brand 7 times in 16; Claude never did.

The agents also skipped every upsell and never added items to dodge a delivery charge. And when an agent got something wrong, like the frozen chicken, the customer would blame the grocer, not the agent.

What came next

So we gave the shop an agent of its own.

Retailers can block agents or build them a proper way in. Our strongest answer was a retailer's own agent, built on its private data, that customers' agents deal with directly. Part 2 put it to the test on Ocado, the hardest site to search.

Method and limitations

Runs. 8 weekly shops on 27 Sep 2026, one per agent per store, logged in, same prompt every time, stopped before payment. 8 short ad-test runs on 28 Sep.

Scoring. Items out of 30: two points per line for the right product or an explained substitute. Times are the agents' reported times, checked against screen recordings. Extra searches are counted from the search words in each agent's report.

Limitations. One run per agent per store, so results are counts, not rates. Delivery slots carried over between agents at Sainsbury's and Asda. Product and ad placements rotate and vary by postcode.

Terms. Small-scale research: nothing collected in bulk, no blocks bypassed. Independent research, not affiliated with or endorsed by any retailer named.

Talk to us

Building for agents? Let's talk.

contact@merxonlabs.comBack to the Lab →