Skip to content

Knowledge Base

Getting ChatGPT to recommend your store: start with your data

Louie Valkhof
Louie Valkhof
16 min read
Isometric 3D render of a robotic arm scanning a miniature retail shelf where the price tags are blank

Short answer: you do not get your products into ChatGPT by uploading a feed somewhere. That route exists, but it is not open to the average online store. OpenAI's own feed specification describes an SFTP push with parquet files and at least one full catalogue snapshot per day, and the top of that same page states it is currently available to approved partners only.

So the question "how do I get ChatGPT to recommend my store" cannot be answered with a service, a subscription or a trick. The front door is locked and the key sits with a party you have no influence over.

What is within your control is the back door. An AI agent working on behalf of a shopper does not wait for a feed. It knocks on your store directly and asks its questions there. We simulated that knock on 65 Dutch store domains, measured on 9 and 10 August 2026. Nine stores gave a full reply, and this article is about that reply: which fields the agent receives, in which language, and which invisible errors are already sitting in there.

Can ChatGPT recommend your store? The front door is an SFTP server

OpenAI's feed specification reads less like a marketing channel and more like a data pipeline. You push your catalogue over SFTP to their servers, preferably as a parquet file with zstd compression, otherwise as compressed jsonl, csv or tsv. At least once a day you send a full export under the same filename, overwriting it every time. Promotions cannot ride along in a file; those only go through the API.

That is a cron job, a file format most store platforms do not produce on their own, and a monitoring layer for the night the push silently skips. It is engineering, not content. And on top of that engineering sits an approval you cannot force.

Microsoft runs it the other way around. Their January 2026 announcement states that Microsoft is adopting open standards such as the Agentic Commerce Protocol and that Shopify merchants will be automatically enrolled following an opt-out window. Not an opt-in, an opt-out. With one limitation you have to read alongside it: Microsoft describes that rollout for the US market. For a Dutch merchant this is a direction of travel, not a switch that flipped in your admin this morning.

The practical conclusion is uncomfortable but clear. On the platform side there is very little to steer: one system will not let you in, the other may enrol you without asking. Everything you hear in between about "getting your product into ChatGPT" is not a service right now, it is a promise about somebody else's admissions policy.

For the Google side of this story, where a self-service panel does exist, we wrote separately about what the overlap between your Google Shopping feed and the ChatGPT carousel means. This piece is about the layer that sits apart from it.

What an agent actually does: it calls your store directly

Shopify has an address built into every store where software is allowed to ask questions: /api/mcp. No credentials, no integration, no app. It is a public address that answers in a fixed format, described in Shopify's own documentation.

We queried 65 Dutch store domains at that address. Of those, 21 dropped out because the domain no longer resolved. Of the 44 remaining stores, nine returned a complete function list. The rest gave an error, a redirect or a firewall block. Nine out of 44 is a floor, not a ceiling: seven domains were stopped by their security layer before the address was ever reached.

More interesting than that count is what sits in the function list. At a Dutch coffee roaster it came back like this:

Function What an agent can do with it
search_catalog Search your range using a question in plain language
get_product_details Retrieve the full record for a single product
search_shop_policies_and_faqs Query your service and about pages
get_cart Read the contents of a shopping cart
update_cart Put products into a shopping cart

Those last two stand out. An agent does not only read along, it can fill a cart by itself. The step from "an AI that summarises your product page" to "an AI that prepares the order" has already been taken inside your own store, whether you set it up or not.

You can check this yourself without a developer. One command in the terminal, with your own domain and a search term from your own range:

curl -s -X POST "https://yourdomain.com/api/mcp" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"search_catalog",
      "arguments":{"catalog":{"query":"coffee","context":{"address_country":"NL",
      "language":"en","currency":"EUR"},"pagination":{"limit":2}}}}}'

Watch one thing that most explanations leave out: the arguments are nested under catalog. A flat structure with just a query returns an error, after which people conclude the address does not exist.

And watch the shelf life. Every reply we received carried a notice that this address stops working after 31 August 2026 and that the new location is /api/ucp/mcp, with a migration page in Shopify's documentation. From September onwards, test both addresses.

What does an AI agent get back from your product?

The response schema is not yours, it belongs to Shopify. Every store returns the same ten fields and you cannot add an eleventh. That explains why this was identical across all nine stores: there is nothing to configure. What you do decide is what sits inside those ten fields.

Field Contents
id Internal product code used by the platform
title The product title as you wrote it
description The product description
url Link to the product page
price_range Lowest and highest price
variants Variants with their own price and availability
options Choices such as size or weight
media Images and video
categories Category structure
tags Loose labels

What is not there: a brand field. No brand, no vendor, no manufacturer. Across 90 products spread over nine stores, that field never appeared once. On the re-measurement the ten fields were still there, still without a brand.

Your brand name does reach the agent, to be fair: it usually sits in the web address and often somewhere in the description. But that is loose text that has to be interpreted, not a value that can be matched. The difference shows the moment comparison starts. At a well known Dutch chocolate brand, the agent gets back a product titled along the lines of "dark chocolate" plus a cocoa percentage, tagged "small bars". Put two other bars next to it with near identical descriptions and there is nothing left to sort on but price.

The rule that follows is boring and effective: put your brand name at the front of the product title. "Brand, product type, the property that sets it apart" is not an outdated marketplace formula but the only place where your brand travels as a value instead of as text somebody has to interpret. That is exactly the work we do in product listing design, only now with a second reader involved. Which signals weigh in on the choice afterwards is covered in how ChatGPT recommends your product.

The basics are usually in place, by the way. At eight of the nine stores the description field was filled, ranging from 186 to 769 characters, and images and price range were complete everywhere. The bottom of that range is a single paragraph. That is also everything the agent gets to read about that product.

The same question in English returns three times as much

This is the measurement that surprised us most. The same three questions, put to nine Dutch brands, in Dutch and in English. Across 27 paired questions, Dutch produced nine answers and English produced 27.

The sharpest one is the founder question. "Wie heeft dit bedrijf opgericht?" returned an answer at zero of the nine stores. "Who founded this company?" returned one at all nine. We repeated it at the coffee roaster from the previous section: the Dutch question came back with an empty list, the English one returned a full profile with founder, founding year and sustainability initiatives.

The same thing happens in the catalogue. Across ten paired buying questions, English scored equal or better in all ten, with 41 products found against 21. "Cadeau voor iemand die veel koffie drinkt" returned nothing; "gift for someone who drinks a lot of coffee" returned five. At a Dutch fashion brand: "nette kleding voor op kantoor" returned nothing, "smart clothing for the office" returned five.

The obvious explanation was tested and ruled out. It is not the language parameter you send along. The same Dutch question returned nothing with the language set to Dutch and with it set to English, while the English question returned results in both cases.

Why it then goes wrong we cannot establish; Shopify does not document this search layer. What remains after that control is the language of the question itself, and that is something you can act on. You do not need to translate your store for this: your customers keep reading Dutch and your storefront stays Dutch. But the layer the agent queries, your about copy, your service pages and your product descriptions, tolerates an English version. That is not an export strategy but an agent layer, even for a purely Dutch audience. It is the same shift we described in agentic search and what it means for your store traffic, one level deeper: not your findability, your intelligibility.

Shopify writes your brand story for you, in English

Asked "what is the story behind this brand", all 27 attempts produced an answer. Except that answer did not come from the brands themselves. The platform assembles a profile with fixed headings: description, about us, target audience, categories and popular searches.

At the coffee roaster that profile read like a complete company profile in English: specialty roaster, founding year, own roastery, supply chain from sourcing to packaging, certification, training programme. It is a tidy summary. Nobody at that company wrote it or approved it.

That is where the risk sits. At a Dutch lingerie brand, the same profile listed a name under "Owner/Founder" who is in fact an investor and not the founder. The summary is not invented, it is derived from public pages. But a derivation of the wrong page is what the agent reads out to a shopper, while you cannot edit the profile yourself.

So you steer it indirectly, through the sources the summary is pulled from: your about page, your service pages and your terms. That makes brand copy measurable in a way that goes beyond gut feel. You write the text, you ask the question again, and you read back what the machine made of it. Before and after, in the same week.

Brand positioning spent years as the part everyone assumed was working while nobody could prove it. Now there is a reader you can interrogate.

Zero euros and unavailable: what an empty price does to your catalogue

The sharpest example from this measurement is also the most awkward one. We are not naming the brand, because this is not a takedown and the fault is reproducible with a single command on your own domain. At one of the best known Dutch chocolate brands, every product the agent gets back sits at zero euros and every variant is listed as unavailable.

Checked three days in a row, same result each time. This is not a five minute outage. Tested with three different market settings, the Netherlands in Dutch, the United States in English and the Netherlands in English: the same reply every time, and the currency stays euros regardless of what you ask for.

What an agent then does with it we did not measure, so we are not going to claim it here. What is certain: any mechanism that filters or sorts on price or availability drops this brand before a shopper has seen it. Zero is not a sharp price. It is a field that was never filled.

This is not a general platform problem. At the other eight stores, none of the 80 products retrieved sat at zero. What does play out more broadly is the stock side: across all nine stores, 160 of 457 variants were listed as unavailable, with the bulk of those at a fashion brand and a lingerie brand. Whether that is correct we cannot see from the outside, and neither can the owner in most cases, because on the storefront the product is still sitting there. That is exactly the check to run: put the variant status from the agent reply next to your inventory system.

There was one more nasty detail. Asked about the return policy, that chocolate brand's address answered with a product recall text: do not consume, return to retailer. That is what an agent reads out to a shopper who asks whether they can send the product back.

Stock hygiene and price synchronisation used to be an internal problem, visible at most in your own conversion figures. Now they decide whether your brand gets mentioned at all. That makes data quality a brand question, and therefore a topic for the people who build the store as much as the people who guard the brand.

Is your firewall even letting the agent in?

There is a quiet way to make this entire story irrelevant: stop the agent before it gets in. And that happens more often than you would think, usually without anyone having decided it.

Research agency Surver reviewed the robots.txt of 100 Dutch online stores and published the outcome through Emerce: 74 of the 89 stores with a readable file name no AI crawler at all, neither to allow them nor to block them. The other 11 sat behind a bot wall. Of the 15 stores that do mention something, seven ran an identical file that ships as a factory setting with their hosting environment and four ran a preset from a security plug-in. So in most cases there is no policy, there is a default value.

At the same time, robots.txt has become the wrong instrument here. For the visitor that arrives on behalf of a user, OpenAI documents in as many words that robots.txt rules may not apply because the action was initiated by a user, and it publishes a list of IP ranges per bot. When we pulled those in early August, the list for that user-driven visitor held 258 ranges against 35 for the classic search bot. Both lists move; the ratio says enough about where the traffic comes from.

Where it does go wrong is a layer higher: in your firewall or your security service. There, unknown traffic is blocked on behaviour, not on name. An agent pulling three product pages in a row looks a lot like a scraper from close up. If that block lands, you will not see it in any analytics tool. You do not lose visitors; you lose the recommendation, and that leaves no trace.

Do not let anyone sell you a trick here either. Google itself states that structured data is not required for generative search results. Anyone selling you a schema trick as a ticket into AI answers is selling air. Structure helps tie your brand to the right records, and no more than that.

What to do this month

No strategy, no project. Six checks you can run in a morning, with an outcome you can show your team.

Check Where What to look for
Does your store answer? yourdomain.com/api/mcp A function list or an error
Is your brand in the title? The search_catalog reply Brand name up front, not only in the web address
Is your price right? Field price_range A real amount, not zero
Is your stock right? Field availability per variant Sold-out variants still sitting in the catalogue
What does your brand profile say? Ask for the story behind the brand Is the founder right, is the description right
Does it answer in Dutch? The same question in both languages An empty Dutch answer is normal, and fixable

The order is not random. With the first two you decide whether you are recognisable at all. The third and fourth decide whether you are buyable. What gets told about you depends on the last two.

What you do afterwards is work you already know. Rewrite product titles so brand and type sit up front. Clean up your product data so prices and stock are correct where the platform reads them, not only on the page. Add an English version of your about copy and your service pages. And walk through your security settings with someone who can tell a scraper from a buying agent.

None of these steps requires a new system. Which is exactly why they rarely happen: no vendor bills you for them and no dashboard turns red. A structured approach to your store SEO should simply include this check by now.

How we handle this at Oase

We rolled into this from the listing side, not from the technical side. Six years of building product pages for brands on marketplaces and in their own stores, and then a second reader that reads the same page completely differently from a human.

So our audit starts with that one command instead of with a report. The client sees the reply from their own store on screen before we have given a single piece of advice. At one brand that is a tidy title with a price that checks out. At another it is a generic product name without a brand, or a catalogue sitting at zero. It saves half the conversation.

After that it is simply our craft. Titles and descriptions that carry the brand name, the way we did for screenmate and maicura for the human buyer, only now also tested against what the machine retains. Brand copy that holds up in both languages. Product data in order before a single euro goes into advertising.

What we do not do is promise you a place in ChatGPT. Nobody can, and anyone who does has not read the feed specification. What we do is make sure the door that is open shows something decent. The rest is not up to us, and not up to you.

Want to see what an agent makes of your catalogue? Book a call and we will run the command together, on your domain, while you watch.

Louie Valkhof
Louie ValkhofFounder & Art Director, Oase Creative
Knowledge Base

Frequently asked questions

Need help with execution?

From strategy to production. Tell us about your project — no strings attached.

Response within 24 hours.
Start a project?