Skip to main content
Use Product Lookup to see a product the way AI shopping engines show it to shoppers. Send a product name and a market, and querying.ai asks each engine about it. For every engine you get whether the answer showed the product, the merchant listings it showed (merchant, catalog, price, stock, rating and review count) and the pages it cites. Add up to five competitors to compare them engine by engine, and up to three shopper prompts, such as best moisturizing eye cream, to see which of these products each engine shows a shopper. A lookup answers questions like these:
  • Does ChatGPT, Google AI Overviews, AI Mode or Copilot show the product when asked about it?
  • Which merchants and catalog records does each engine show it from, at what price, with what rating and review count?
  • What did ChatGPT’s answering model read about the product?
  • How does the product compare with its competitors on each engine?
  • Which of these products does each engine show for a shopping question?

Submit a lookup

The lookup is split into asks: one question to one engine about one product or prompt. Each ask is queued as an ordinary task, and the response lists them. Here it is trimmed to three of the 23 asks:
  • lookup.id is your idempotencyKey, or a UUID the server picks when you send none. You read the lookup with it.
  • Each entry of asks[] has its role (product, competitor or prompt), the text asked in prompt or query, and its task. A refused ask has success: false and an error instead. See Errors.
  • credits.creditsToCharge adds up the prices of the asks in the response, held from your balance until each ask finishes. creditsCharged is what they were charged already.
Read the lookup with GET /v1/product-lookup/{id} until lookup.status is COMPLETED. This lookup took about two minutes; a lookup ends when its slowest engine answers. With webhook.url, each ask’s task is posted to you when it finishes, with the ask’s key in task.idempotencyKey, which starts with the lookup id. No webhook covers the whole lookup, so read the lookup on each delivery and check lookup.status. The schemas are in the API reference: Product Lookup and Get a product lookup.

Request fields

Engines and asks

The product and each competitor get the same asks: “On request” means the engine is asked only when you list it in engines. Without engines, a US lookup asks ChatGPT, AI Overviews, AI Mode and Copilot, which is 5 asks per product. A KR lookup asks Naver AI Tab, ChatGPT and AI Mode, which is 4 asks per product. A shopper prompt is asked once of each engine: 4 asks on the US defaults and 3 on the KR defaults. The lookup above made 3 × 5 + 2 × 4 = 23 asks. ChatGPT gets two asks because one ask shows a product record for about half of the products, and the same ask repeated often finds a different half. The other defaults are the engines that showed products in a test of 50 products on 2026-10-20: The ChatGPT row comes from 12 US and 10 KR products looked up twice each. Gemini showed no product record in 115 asks across both markets.

Read the lookup

The result has five parts:
  • lookup: what was asked, its status and the credits charged so far.
  • summary and engines[]: the product’s answers, across engines and engine by engine.
  • competitors[]: the same summary and engines[] for each competitor.
  • comparison[]: the product and its competitors side by side, engine by engine.
  • prompts[]: what each engine answered to each shopper prompt.
lookup.status is QUEUED until an ask starts and PROCESSING while any ask is unfinished. It becomes COMPLETED once every ask has finished and at least one completed, and FAILED when all of them failed. Entries fill in as asks finish, so you can read a lookup before it completes. Here are the lookup, summary and engines[] of the lookup above, trimmed to two of the four engines and a few entries per list:
All four engines showed the product. ChatGPT showed a merchant feed record from Ulta Beauty, and its answering model read a rating of 4.5 from 105 reviews for it. ChatGPT also wrote widget cards for three shops, Amazon among them. AI Mode showed one merchant’s listing and a stick version marked variant, and put the brand’s eye gel in otherListings.

summary

engines[]

One entry per engine asked:

Listing fields

A listing is one merchant’s record of the product as the engine holds it. It carries only the fields the engine gives. source tells you which catalog a listing comes from:

ChatGPT widget cards

ChatGPT often answers a shopping question with cards that each name a shop and a price it read on the shop’s page, with no catalog record behind them. A lookup reads each card as a chatgpt_widget listing after the answer’s records, and counts it toward found.
  • merchant is the shop the card names, or the domain of its buy link. description is the card’s description line.
  • A card has no rating, reviewCount, available, ids or modelSees. A price range such as $40–$62 leaves price out.
  • A card without a buy link or a seller line is not read.
  • A card with the same shop and price as a record or an earlier card of the product is left out. Shops are the same when their names or linked sites match or one starts with the other, as with Ulta, Ulta Beauty and ulta.com.
To read catalog records only, leave out the listings whose source is chatgpt_widget.

Compare with competitors

An ask about one product rarely shows another brand’s product; none did in the 50-product test. So you name the competitors, and each gets the product’s asks. Each entry of competitors[] has the competitor’s product, summary and engines[], read like the product’s. comparison[] lines up the product and its competitors, one row per product and one entry per engine. From the lookup above, trimmed to Copilot, plus ChatGPT for the product:
All three products were found on all four engines. On Copilot, the product’s most-reviewed listing has 2,942 reviews, against 85,773 and 117,193 for the two competitors. Across the eight shopper-prompt answers, CeraVe Eye Repair Cream appeared in five, and the product and Clinique All About Eyes in two each.

Shopper prompts

Each entry of prompts[] has the prompt and one entry per engine in engines[]: An answer to a shopper prompt shows many brands’ products, so a record counts as one of the lookup’s products only when it contains the brand, the first word of the product name. A name in the text counts the way a GEO monitor counts a brand mention, with the product’s full name as the term. From the lookup above, AI Overviews and Copilot answering best moisturizing eye cream, with listings trimmed to the lookup’s products:
AI Overviews named the product in its text but showed records of the two competitors only. Copilot showed the product from three merchants. Matching uses names, so a version whose name adds a word, such as Clinique All About Eyes Rich, counts as the product.

Send a lookup again

Each ask has its own key, made from the lookup id:
  • The product’s asks: <id>:<engine>:<ask>, such as eye-bomb-us:CHATGPT:buy. ChatGPT’s asks are buy and price, and the other engines’ ask is name.
  • The nth competitor’s asks add :c<n>, such as eye-bomb-us:CHATGPT:buy:c1.
  • The nth prompt’s asks: <id>:<engine>:p<n>, such as eye-bomb-us:AIMODE:p1.
Sending a lookup again under the same idempotencyKey returns the asks that exist and adds only the missing ones, and you are charged only for the asks it adds. Use it to finish a lookup whose asks were refused for credits or concurrency, or to add a competitor or prompt at the end of its list. A competitor or prompt you leave out stays in the lookup. A resend that changes the product or the country, or puts a different competitor or prompt in a position that already holds one, returns 409 RESOURCE_ALREADY_EXISTS and writes nothing. A resend returns an ask that failed as it is. To ask the engines again for fresh answers, send the lookup under a new idempotencyKey.

Pricing

A lookup costs 10 credits for each product, the product and each competitor, and 5 credits for each shopper prompt, whichever engines you ask.
  • The lookup above costs 3 × 10 + 2 × 5 = 40 credits. The largest lookup, a product with 5 competitors and 3 prompts, costs 75 credits.
  • A product’s or prompt’s credits are split over its asks. On the US defaults, a product ask is 2 credits and a prompt ask 1.25. On the KR defaults, a product ask is 2.5 credits and a prompt’s three asks are 1.67, 1.67 and 1.66. Asking fewer engines does not lower the price: on ChatGPT alone, each of a product’s two asks is 5 credits.
  • Each ask is held at submit and charged when it completes, like any task. An ask that fails is not charged.
  • At plan prices, a product costs $0.025 on Basic and $0.010 on Max.
See Credits and limits for holds and plans.

Reading the results correctly

  • One lookup is one snapshot. Each engine answers one or two asks. Before you act on a single difference, run the lookup again under a new idempotencyKey.
  • Records keep their values; the selection changes. In four runs of one lookup, the same merchant record kept its price, rating and review count in 307 of 316 values. What changes from run to run is which records an answer shows, so found (most often on ChatGPT), the merchants, mostReviewed, priceRange and the prompts’ shown and named can differ.
  • Minutes apart varies as much as hours apart. ChatGPT, AI Mode and Copilot answers differed as much three minutes apart as eleven hours apart. AI Overviews asked again within seconds can return the same answer, so a quick repeat there is not a new sample.
  • Totals are steadier than single answers. Across the four runs, single shopper-prompt answers changed, but the products that appeared in the most answers led in every run. To follow prompts over time, track them with a GEO monitor.
  • found: false describes these answers. It means this run’s asks did not show the product. It does not mean the engine’s catalog lacks it.
  • Matching uses names. No engine returns a GTIN. A renamed or translated product can land in otherListings, and a version its name does not tell apart can count as the product. Check match when a listing looks off.

Limits

  • The input is a product name. Product page URLs and GTINs are not supported.
  • The markets are US and KR.
  • A lookup takes up to 5 competitors and 3 shopper prompts. On the US defaults, the largest lookup makes 42 asks.
  • The competitors are the ones you name. A lookup does not find them for you; shopper prompts show which products an engine puts in front of shoppers.
  • ChatGPT’s records and widget cards are read. Shops and prices it writes in the answer’s text or tables are not.
  • Each answer contributes up to 60 listings and 20 cited pages.
  • A lookup can be read while its asks’ tasks can, until 24 hours after they complete. See Async tasks.

Errors

Rejected at submit

Refused asks

Each ask is admitted like a single task, so it can be refused for your balance (402 INSUFFICIENT_CREDITS), your plan’s concurrency (429 PLAN_CONCURRENCY_LIMIT), a key’s daily credit limit (429 KEY_DAILY_CREDIT_LIMIT) or a key limited to other engines. A refused ask stays in asks[] with success: false and its error, and the other asks go ahead. Asks are admitted one at a time: every engine’s first ask about each product, and each prompt, before any second ask. So when your plan has room for only some of the asks, the admitted ones cover as many engines and products as they can. When none of the product’s first asks is admitted, nothing else is asked, and the response is the first refusal with its status, such as 402 INSUFFICIENT_CREDITS. On the Free plan’s 2 concurrent tasks, a US lookup admits the product’s first ChatGPT and AI Overviews asks; send it again when they finish to add the rest. The largest US lookup, 42 asks, fits Basic’s 50 concurrent tasks when nothing else is queued. Authentication errors are the same as for any request. See Errors.

Failed asks and reads

  • An ask that fails has status: "FAILED" and an error in via[], and is not charged. An engine whose asks all failed has status: "FAILED" and found: null, and is listed in summary.failed.
  • GET /v1/product-lookup/{id} returns 404 RESOURCE_NOT_FOUND for an id with no lookup on your account, including one whose tasks are past the read window.

Next steps

GEO monitors

Track shopper prompts across AI engines on a schedule.

Prompt Research

Find the shopping questions people ask about a category.