Help ChatGPT Discover Your Products: A Checklist for Small Shops

Coding Liquids tutorial cover featuring Sagnik Bhattacharya for Help ChatGPT Discover Your Products: A Checklist for Small Shops.
Coding Liquids tutorial cover featuring Sagnik Bhattacharya for Help ChatGPT Discover Your Products: A Checklist for Small Shops.

Make each product page readable by OpenAI's search crawler, state price, stock and key facts in plain visible text, add Product structured data that matches the page, collect real reviews, and switch on any feed your shop platform offers. ChatGPT's product results are not paid placements, so accurate, complete data is where a small shop can compete.

Start with what OpenAI itself says. Its help page states that product results are selected independently and are not ads, and that ChatGPT looks at structured metadata from first-party and third-party providers, other third-party content, and the shopper's own query and context. Merchants are ranked on factors such as availability, price, quality and whether the seller is the maker or primary seller. None of that can be bought, so everything below is about removing reasons for ChatGPT to skip, misquote or distrust your listing.

Follow me on Instagram@sagnikteaches

Three routes a product takes into a ChatGPT answer

The fixes differ by route, so work out which one you are improving.

Connect on LinkedInSagnik Bhattacharya

Route one is your own public pages. ChatGPT's search features rely on OpenAI's crawler, OAI-SearchBot, to find pages. Every shop has this route, including shops on a hosted platform, and groups A to E below all improve it.

Subscribe on YouTube@sagnikteaches

Route two is a platform's product catalogue. OpenAI's help page says Shopify merchants' product data is already integrated through Shopify Catalog and that no additional work is required from individual merchants. Shopify's own help page says its agentic storefronts setting is active by default for eligible stores and can be managed under Sales channels, then Agentic. OpenAI's merchant page says Shopify and Etsy sellers are already integrated and need no extra setup or application. On those platforms your job is data quality, not set-up.

Route three is a direct feed from you. OpenAI publishes a product feed specification, but its get-started guide says onboarding is limited to approved partners, and its merchant page invites other shops to apply and mentions a waitlist. Apply if you like and prepare the data anyway (group F), but do not build plans around a reply.

Two limits are worth knowing as of October 2026. OpenAI's merchant page says shopping is live in only some markets so far, so check it against where your own customers are. And Instant Checkout, which let shoppers pay inside ChatGPT, is being phased out: shoppers now discover and compare in ChatGPT and complete the purchase on the merchant's own website or app. The sale still happens on your checkout page, so that page has to work for a visitor who already knows what they want.

Group A: can the crawler reach every product page?

A page the crawler cannot fetch cannot be recommended, however well it is written. These four checks cost nothing and take about an hour, so do them first.

  1. A1. OAI-SearchBot is allowed. OpenAI says sites that opt out of OAI-SearchBot are not shown in ChatGPT search answers, although they can still appear as navigational links. Type your domain followed by /robots.txt into a browser and read the file. You are looking for a group naming OAI-SearchBot, or covering all crawlers, that disallows the whole site or your product folders. A group that names OAI-SearchBot takes priority over the general group, so adding one overrides a blanket block. OpenAI says its search systems can take about 24 hours to adjust after you change the file.
  2. A2. Bot protection is not turning the crawler away. A security plugin, a content delivery network or a host-level firewall can refuse crawlers that robots.txt welcomes. Look in each for a setting about bots, scrapers or AI crawlers. The decisive test is your access log: ask your host or developer to search the last month for "OAI-SearchBot" (OpenAI's documented user-agent string contains OAI-SearchBot/1.4, and the version may change). If it never appears, either it has not visited or something is refusing it, and the response codes tell you which: 200 means served, 403 or 429 means refused.
  3. A3. The facts are in the page as delivered. Open a product page, view its source (Ctrl+U in most desktop browsers) and search for the price and the product name. If either is missing, the page builds them with scripts after loading. I cannot tell you how OpenAI's crawler treats scripts, so do not gamble: ask your theme developer or support team to make the title, description, price and stock wording part of the page as delivered. The same goes for text inside tabs or accordions that only load when clicked.
  4. A4. Every product has one address and a route to it. One product, one URL (variants aside, see B6); no login, age or cookie wall in front of the text; products linked from category pages and listed in an XML sitemap. For a discontinued product that still gets visits, keep the page with a clear "no longer available" line and links to alternatives rather than a dead end.

Here is a robots.txt pairing that many shops choose: the search crawler is welcome and training use is declined.

User-agent: OAI-SearchBot
Allow: /

User-agent: GPTBot
Disallow: /

Whether to opt out of training is a business decision. OpenAI's crawler documentation says each setting is independent, so you can allow OAI-SearchBot to appear in search results while disallowing GPTBot to signal that your content should not be used for training. A third agent, ChatGPT-User, visits a page when a person asks ChatGPT to look at it, and OpenAI says robots.txt rules may not apply to those visits, so do not expect the file to govern it.

Group B: can ChatGPT tell exactly what each product is?

This group decides whether your product can be matched to a shopper's request. Vague copy is the usual obstacle: "our finest, a must-have for every kitchen" gives a machine nothing a shopper could filter on.

  1. B1. The title carries the match. Brand, product type, the attribute people filter by, then the variant. OpenAI's feed specification asks for titles of about 150 characters at most and says to include the selected variant where relevant. Check by reading ten titles aloud as if they were search queries; each should name what the thing is.
  2. B2. The description is plain text, facts first. The feed specification asks for plain text and says to aim for no more than 5,000 characters; I would aim for 80 to 200 words on most products. Answer in the order a shop assistant would: what it is, size or quantity, what is in it or in the box, who it suits and who it does not, how to use, store or care for it. Food needs ingredients and allergens in text, goods need materials, parts need compatibility.
  3. B3. Specs are typed, not pictured. A size chart, a nutrition panel or a compatibility table saved as an image cannot be read as text. Keep the photo, and type the same information beneath it.
  4. B4. Identifiers are real. Brand exactly as printed on the product, the barcode number (GTIN) if one is assigned, and the manufacturer's part number alongside the brand. OpenAI's specification says a GTIN has exactly 8, 12, 13 or 14 digits with a valid check digit, to omit it when none is assigned, and not to invent a value to replace a missing one. If you are unsure what AI can and cannot fill here, see what AI can and cannot fill for a missing GTIN.
  5. B5. Images are usable and described. A clean main image, two or three angles and one in use, each with accurate alt text and a meaningful file name. For a feed, the image address must be a direct, publicly accessible link. Alt text should say what is in the picture in plain words, as if describing it over the phone. AI can draft it in bulk, but read every line before it goes live.
  6. B6. Variants are deliberate. A craft brewery supplier sells the same pale malt in 5 kg, 10 kg and 25 kg bags, whole or milled: six combinations. The tidy answer is one page with a clear selector, a separate stock code for each combination and the default variant named in the title. If you ever send a feed, those six become six rows sharing one group ID, with each row's options stated (size and crush). Six near-identical pages, one per combination, split your reviews and confuse everyone.

Here is the difference on a specialist food importer's product page. The values in square brackets come from the producer's label or sheet, never from memory.

ElementBeforeAfter
TitlePremium Olive Oil - Best Seller![Brand] Extra Virgin Olive Oil, Single Estate, 500 ml Tin
DescriptionOur finest oil, a must-have for every kitchen. Taste the difference.Extra virgin olive oil from a single estate, pressed from the [harvest year] crop and supplied in a 500 ml tin. Ingredients: 100% olive oil. Allergens: none declared. Good for dressings, finishing and low-heat cooking. Store in a cool, dark cupboard. We import this directly from the producer.
SpecsPhoto of the back label onlyTyped list: volume, ingredients, allergens, storage, best-before format, brand as printed, barcode number

A first draft of the "after" column is a good job for an AI assistant, provided you fence it in. This prompt forces it to use only the supplier's facts and to list what is missing.

Help me write a product page for a specialist food importer's online shop.
Use ONLY the facts in the supplier sheet below. Do not add facts, numbers, awards, health claims or places that are not in the sheet.
Write:
1. A title: brand, product type, size, one distinguishing attribute.
2. A description of 90 to 140 words in plain sentences, no superlatives.
3. Specs as "label: value" lines.
4. A line starting "Missing from the sheet:" listing every fact a shopper would want that the sheet does not give (ingredients, allergens, storage, pack weight, best-before format, brand as printed).

Supplier sheet:
[paste the text]

Sample output from a run like this (illustrative): a tidy title, a 112-word description, six spec lines and "Missing from the sheet: allergen statement, storage instructions". Two things to fix every time. First, the description will often include a flavour adjective such as "fruity" or "peppery" that the sheet never stated; delete it, or confirm it with the producer. Second, the "Missing" line is the valuable part: send it back to the supplier or read it off the label, then paste the answers into the page. A draft that arrives with no "Missing" line has probably filled the gaps with guesses.

Group C: price, stock, delivery and returns it can quote

OpenAI's help page warns that prices shown in ChatGPT's first response typically come from the first merchant listed, that the lowest-priced option may be labelled "Best price", and that pricing and shipping updates can take time to appear. You cannot control the lag. You can make sure that whatever it reads is right.

  1. C1. One visible price, with currency, matching everywhere. The number on the page, in the markup, in any feed and in any Merchant Center account should come from one source. If you update the price by hand in four places, one will go stale.
  2. C2. Stock status in words. "In stock", "Out of stock", "Pre-order" or "Backorder" on the page mirrors the values OpenAI's specification accepts (in_stock, out_of_stock, pre_order, backorder, or unknown). An omitted, empty or unrecognised value gets a feed row rejected.
  3. C3. Shipping and returns are readable without a basket. Delivery cost, delivery time and any free-delivery threshold on the product page or one click away, plus a returns policy page. In a feed this appears as shipping price, an accepts-returns flag, a return window in days and a policy link. Note that an empty shipping price means "unknown", not "free".
  4. C4. Sale prices follow the rules. In OpenAI's specification a sale price must be above zero, strictly lower than the regular price and in the same currency, or it is not used. Take the same care on the page: show the regular price and the sale price, and remove the sale price when the promotion ends.

A realistic slip: a specialist food importer runs a ten per cent weekend sale. The page shows the new price, but the markup was typed by hand and still says the old one. Anything that reads the markup quotes a price the checkout will not honour, and the shopper arrives annoyed. The cure is structural, not a reminder: make the markup read the same field as the page.

Group D: structured data that repeats what the page says

Structured data is a block of code on the page that states the product's facts in a standard vocabulary. OpenAI says ChatGPT considers structured metadata such as price and product description, but the OpenAI pages I read do not say which markup formats it reads. Product markup from schema.org is the format Google documents for product pages and the one many shop platforms output, so it is the safe investment, and Google's merchant listing guidance spells out the fields.

Google requires a name, an image and an offer containing a price above zero and a currency code. It recommends availability, shipping details, a return policy, a barcode, a brand and review information. It supports pages that focus on a single product, and only pages where the shopper can buy. A minimal example for the olive oil, with the placeholders you must replace:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "[Brand] Extra Virgin Olive Oil, Single Estate, 500 ml Tin",
  "image": ["https://www.example.com/images/olive-oil-500ml-front.jpg"],
  "description": "[the same plain description that appears on the page]",
  "sku": "OO-500-TIN",
  "gtin13": "[13 digits from the label or your supplier]",
  "brand": {"@type": "Brand", "name": "[Brand as printed]"},
  "offers": {
    "@type": "Offer",
    "url": "https://www.example.com/olive-oil-500ml",
    "price": "14.50",
    "priceCurrency": "USD",
    "availability": "https://schema.org/InStock"
  }
}
</script>
  1. D1. Markup exists and validates. Many themes and plugins add Product markup automatically, so look before you add anything. Paste a product page address into Google's Rich Results Test or the Schema Markup Validator and read the errors.
  2. D2. It matches the visible page. Google's structured data guidelines say not to mark up content that is not visible to readers and that the markup must be a true representation of the page. A price, rating or stock status that the shopper cannot see on the page does not belong in the markup.
  3. D3. One source feeds both. Two plugins that each output Product markup with different prices is a common mess. Switch one off, so the page carries a single, consistent block.

AI can draft the block from your page text, which suits shops without a developer. Paste in the product page text and ask for Product markup using only what appears on it, with a placeholder wherever a field is missing. Then do the part it cannot: check every value against the page, replace placeholders with real data or delete the line, and validate. Never ask it to "complete" a barcode or a rating; it will produce a plausible number, and Google's guidelines warn that fake review markup can trigger action.

Group E: reviews, and proof that you are the real seller

  1. E1. Real reviews of the product, on the product page. OpenAI's feed fields for ratings cover product reviews only: the specification says the review count excludes seller and store reviews, and that a star rating pairs with a positive count. Ask every buyer once, a week after delivery, with one link and no incentive. Spread the requests across your best sellers rather than piling them on one product.
  2. E2. Say plainly whether you make it, import it or resell it. OpenAI lists whether a seller is the maker or primary seller among the ranking factors for the merchant list. If you import a product directly or hold the exclusive, write that on the page in one factual sentence. If you are one of many resellers, say nothing you cannot support.
  3. E3. A named business behind the shop. An about page with the trading name, a contact route that gets answered, and delivery and returns pages. These help human shoppers too, and they cost an hour.
  4. E4. What other sites say about you is accurate. OpenAI lists third-party content as an input. Claim and correct your marketplace listings, directory entries and any trade-site mentions so the price, product names and descriptions agree with your own site.

Never write reviews yourself or buy them. Beyond the obvious problem, the structured data guidelines mention fake reviews as a trigger for action, and a shop that loses rich-result eligibility for markup spam has made life harder, not easier.

Group F: platform switches and the direct feed

  1. F1. Platform switch confirmed. On Shopify, open Sales channels, then Agentic, and check which AI channels your products are offered to; the walk-through in this explainer on Shopify Agentic Storefronts covers what you still control. On Etsy, OpenAI says no application is needed. On any other platform, ask the provider whether it supplies a ChatGPT feed, because OpenAI's merchant page says feeds can come through systems and supported providers you already use.
  2. F2. Feed fields ready, whether or not you are accepted. The nine required fields are in the table below. Having them clean also helps every other channel.
  3. F3. A daily refresh. OpenAI's guide recommends a full snapshot at least daily, pushed over SFTP, overwriting the same file; it prefers Parquet and also accepts compressed JSONL, CSV and TSV. If that sounds like a developer's job, it is: hand the specification to whoever runs your platform.
  4. F4. Nothing prohibited. The guide sets a prohibited-products policy that covers items such as adult content, age-restricted goods and weapons, and says products may be removed and sellers banned for breaches. If any of your range is age-restricted, read it before applying.

For Google's equivalent route, the separate tutorial on Merchant Center fixes for Google AI Mode shopping covers the account side. The nine required fields in OpenAI's product file specification, with illustrative values for the olive oil:

FieldWhat it holdsIllustrative value
item_idUnique per item or variant, never reusedOO-500-TIN
titleIncludes the selected variant[Brand] Extra Virgin Olive Oil, Single Estate, 500 ml Tin
descriptionPlain textThe same description as the page
urlAbsolute product page addresshttps://www.example.com/olive-oil-500ml
brandAs shown on the product page[Brand as printed]
seller_nameThe seller supplying the offer[Your trading name]
image_urlDirect, public image linkhttps://www.example.com/images/olive-oil-500ml-front.jpg
availabilityOne of four set values, or unknownin_stock
priceAmount, space, currency code14.50 USD

Optional fields such as the barcode, weight, condition, shipping price, return window and review count make the listing richer. The specification's own rule is to leave unknown optional values out rather than filling them with "n/a" or "unknown".

A worked audit: twenty products from a specialist food importer

The figures here are invented to show the method. A specialist food importer has 180 products on a hosted platform and picks its twenty best sellers by revenue. Each of twelve checks from the groups above scores 0 (missing), 1 (partial) or 2 (good) per product, so each row has a maximum of 40 and the whole audit 480. The owner times the work and rescores two weeks later.

CheckBefore (max 40)After (max 40)
A1 Crawler allowed in robots.txt4040
A2 Bot protection not refusing it040
A3 Price and name in delivered page4040
B1 Title carries the match1438
B2 Plain, factual description1136
B3 Specs typed, not pictured932
B4 Identifiers present and real1836
B5 Images and alt text1634
C1 Price consistent everywhere3040
C3 Shipping and returns readable2040
D2 Markup valid and matching2238
E1 Real reviews on the page814
Total (max 480)228428

Read the table by row, not by total. A2 scored 0 for all twenty because a security plugin had an AI-crawler switch turned on; one setting fixed 40 points, which is why group A comes first. B4 stops at 36 rather than 40 because four products from small producers carry no barcode, so they cap at 1 on that check and should be left blank, not "completed". E1 moved least because reviews arrive at the customer's speed.

The time was roughly 90 minutes for the site-level items (A1 to A3 and C3), 25 minutes a product for the B-group rewrites with an AI first draft and a human check (about 8 hours 20 minutes for twenty), two hours for D2 and the theme setting behind it, and 15 minutes a week thereafter to send review requests. That is about 12 hours across two weeks. The low rows after the fix are the ones that show where the template, not the product, is the problem: every nutrition panel was an image, so one template change plus typing the panels fixed B3 for the whole range.

Ten test prompts and a log that shows what changed

Checking is the other half of the work. OpenAI says memory and custom instructions can shape which products appear, so run these from a clean account or a colleague's rather than your own long history, and write down the date and the exact wording each time.

  1. "Best [product type] for [use] under $[price]"
  2. "Where can I buy [your exact product name] online?"
  3. "Alternatives to [a competitor's product]"
  4. "[Your brand] [product] review"
  5. "Gift ideas for [a person who would buy your product]"
  6. "Is [your product] suitable for [a dietary, size or compatibility constraint]?"
  7. "Cheapest place to buy [your product]"
  8. "What is the difference between [your product] and [a near neighbour]?"
  9. "[Your product category] from a small independent seller"
  10. "Is [your shop name] a trustworthy place to buy?"

Keep the results in a spreadsheet. A few illustrative rows show what to record.

WhenPromptShop shown?Price shown right?Cause and next step
Week 1Where can I buy [exact product] online?Non/aCheck A1 and A2 first, then retest after 24 hours
Week 1Best [product type] for [use] under $[price]Yes, third in the listNo, old priceMarkup still carries the old price: fix D3
Week 1Alternatives to [competitor's product]Non/aPage does not state what it is for or who it suits: fix B2

Three rules for reading the log. A single answer is a sample, because the same prompt can give different results on different days, so judge by the trend over a month. If you are shown with a wrong fact, the cause is nearly always one of your own sources disagreeing with another, so look there before assuming a fault at OpenAI; for the awkward cases, see what to do when ChatGPT gets facts about your business wrong. And if you are never shown for competitive prompts despite clean data, the remaining factors are the ones OpenAI names as ranking inputs: availability, price, quality and whether you are the maker or main seller. Markup cannot fix a price that is above the market. To see whether visitors actually arrive from AI answers, set up the tracking described in this tutorial on tracking AI search customers.

Three ways a tidy shop still stays invisible

None of these is a named case; each is a pattern assembled from the checks above.

The supplier's copy, pasted as it came. A reseller of craft brewing ingredients pastes each manufacturer's description onto its product pages. Dozens of other shops carry the same words, so nothing on the page tells a machine why to prefer this seller. The repair is to keep the manufacturer's facts and add what only the shop knows: the pack sizes it stocks, how it stores the product, how fast it ships, and the question customers ask most.

The invented barcode. A developer, short of time, asks an AI tool to fill a spreadsheet's empty barcode column. It returns thirteen-digit numbers that look right and belong to other people's products. In a feed, a wrong GTIN can match your listing to somebody else's product or fail validation, and OpenAI's specification says to leave the value out rather than invent one. A blank is better than a plausible fake.

The copy that praises itself. Descriptions full of "premium", "finest" and "award-winning", with no award named, give ChatGPT nothing to compare and a human shopper nothing to believe. Replace each adjective with a fact or delete it, and if you do claim an award, name it and the year.

What not to spend time on

Do not pay anyone who promises placement in ChatGPT's product results; OpenAI says they are not ads. Do not spend an afternoon on an llms.txt file for this purpose either: Google says it does not use one for its AI search features, and none of the OpenAI pages I read for this tutorial mention one. And do not rewrite your whole catalogue before fixing group A. The order is access first, then your twenty best sellers, then the long tail, with the test log telling you when to stop and when to carry on. For the wider picture of how ChatGPT recommends products and what the other AI shopping routes are, the broader walk-through on getting products recommended in ChatGPT shopping is the place to read next.

Questions small shops ask about ChatGPT product results

Do I have to pay to have my products shown in ChatGPT?

OpenAI's help page says product results are selected independently by ChatGPT, are not ads and are not influenced by its partnerships. Its merchant page says there are no fees for purchases made on your own site or app, and it does not describe a charge for appearing. Be wary of anyone selling placement in product results.

Should I block GPTBot to keep my products out of training?

That is your decision. OpenAI says disallowing GPTBot indicates that your content should not be used to train its models, and that each crawler setting is independent of the others: appearing in search results depends on OAI-SearchBot. If you want to be eligible for ChatGPT search answers, keep OAI-SearchBot allowed whatever you decide about GPTBot.

How long do changes take to show up?

OpenAI says its search systems can take about 24 hours to adjust after a robots.txt change, and it recommends a full feed snapshot at least daily for shops with a direct feed. It publishes no timetable for edits to ordinary product pages, so retest after two weeks and treat any single answer as one sample, not a verdict.

My shop runs on Shopify. What is left for me to do?

OpenAI says Shopify merchants' product data is already integrated through Shopify Catalog, and Shopify says agentic storefronts are active by default for eligible stores, managed under Sales channels, then Agentic. What is left is data quality: titles, descriptions, identifiers, images, prices and reviews that are complete and accurate.

Further reads

Sources: OpenAI Help Center (Shopping with ChatGPT Search), OpenAI developer documentation (crawler and product feed pages), OpenAI's merchant page, Shopify Help Center (agentic storefronts), Google Search Central (merchant listing and structured data guidelines).

Want your product data checked by someone neutral?

On a 1:1 call we can go through your product pages and feed fields, pick the fixes worth your time first, and set up a simple monthly test routine you can run yourself.

Book a 1:1 call with me