Skip to main content
Use Place Lookup to check how AI engines show one store, branch or clinic. Each engine shows places from a map database. Gemini, Copilot and Google’s results page show Google Maps records, Naver AI Tab shows Naver Place records, and ChatGPT shows records from feeds such as Yelp, Tripadvisor and Google Maps. A lookup tells you which record each engine used and what is wrong with it, so you know which listing to correct.

Submit a lookup

The lookup asks each engine two questions. Each question is an ordinary task of that engine, and the response lists them:
Read the lookup with GET /v1/place-lookup/{id} until lookup.status is COMPLETED. Most lookups finish within two minutes, so poll every 5 to 10 seconds. A lookup sends no webhook. The request schema is in the API reference.

Request fields

Other fields, webhook included, return 400 VALIDATION_ERROR.

How a lookup asks

Each engine gets two questions. ChatGPT, Gemini and Copilot are asked to show the store on a map, the second time with its address. Google’s results page is searched for the store’s location, then for its name from the store’s own pin. Naver AI Tab is asked for the store’s location, then for its name. For KR stores the questions are in Korean, and ChatGPT’s second question is Show {name} on a map in English, because ChatGPT shows a Korean store’s place card more often when asked in English. Without place.address, an engine whose second question adds the address asks the first one twice. Without place.location, Google’s second search adds the address outside KR. via[] in the result shows each question as it was sent.

Read the result

The Canlis lookup reads like this, trimmed to the main fields:
ChatGPT showed the restaurant’s Yelp record. Gemini and Copilot showed the same Google Maps record, with the same Place ID. Google’s results page showed no place for either question, so its found is false.

engines[]

record

issues

A number that every branch of a chain lists, such as a toll-free number, is not compared.

summary and credits

lookup.status is PROCESSING until every engine ends, then COMPLETED. The result is judged from the stored answers on every read, and a lookup can be read for 24 hours after its tasks complete.

Send a lookup again

Each question is a task whose key is {lookup id}:{engine}:{ask}, such as canlis-2026-10:GEMINI:2. Send the same request under the same idempotencyKey, and the lookup returns the tasks it has and sends the questions that have no task yet, such as ones refused for want of credits. The same id with another store, country or engine list returns 409 RESOURCE_ALREADY_EXISTS and creates nothing. To look the store up again later, use a new idempotencyKey.

Plan concurrency

Each question counts as one task toward your plan’s concurrency limit. A lookup starts the questions your plan has room for, and the rest wait in tasks[] with status: "PENDING":
A waiting question starts on its own as your running tasks finish, within a minute or the next time you read the lookup, so one request runs the whole lookup. On the Free plan, which allows 2 concurrent tasks, a lookup runs two questions at a time and takes a few minutes. Paid plans start at 50 concurrent tasks, so a whole lookup starts at once while your account has room. Questions also wait while an engine’s queue is full or the key has spent its daily credit limit. A question’s price is held when it starts. If the key that sent the lookup is revoked or expires first, the waiting questions end as FAILED with API_KEY_INACTIVE and cost 0. See Credits and limits.

Errors and billing

A lookup of the country’s default engines costs 10 credits. Each question is priced as its share: 1 credit for each of the 10 questions in KR, and 1.25 for each of the 8 elsewhere. A lookup that names fewer engines pays for the questions it sends. Each question’s price is held at submit and charged when it completes, and a failed question costs 0. See Credits and limits.

Rejected at submit

When every question is refused, the first refusal is the response with its own status, such as 402 INSUFFICIENT_CREDITS or 403 KEY_SCOPE_DENIED, and nothing is created. When some questions are admitted, the response is 200, and each refused question carries its error in tasks[]:

Reading a lookup

GET /v1/place-lookup/{id} returns 404 RESOURCE_NOT_FOUND for an id your account has not used, and for a lookup whose tasks are past the 24-hour window. A failed question shows status: "FAILED" in via[] and an error that starts with its code, such as ENGINE_NO_RESULT. The codes are those of the engine’s tasks, and a waiting question that ends before it starts carries API_KEY_INACTIVE or INSUFFICIENT_CREDITS. See Errors.

Next steps

ChatGPT

The place cards ChatGPT shows, in map.

Batches and grids

Ask one prompt from every point of a grid around a store.