
Introducing Commerce Product
Pass a product page URL from Amazon, Walmart, Sephora, Olive Young, Rakuten, Zalando or 11 more storefronts, and get its price, stock, gallery and description images, specs and options in one shape.

One call asks ChatGPT, Gemini, Google, Copilot and, in Korea, Naver about your store, and returns each engine's record of it, the map database behind it and every detail that differs from yours.
POST /v1/place-lookup takes one store, with its name and an address or map pin, plus its phone, website and Place IDs when you have them, and asks CHATGPT, GEMINI, GOOGLE, BING_COPILOT and, for KR stores, NAVER_AI_TAB about it.GET /v1/place-lookup/{id} returns each engine's record of the store: its source, such as google_maps, naver_place or yelp, its placeId and page, and the name, address, phone, website and rating the engine shows.issues names what is wrong with a record: phone_mismatch, website_mismatch, location_mismatch, other_business_record, or a listing marked closed.summary lists the engines that showed the store and the differences between their records, and credits shows what the lookup has charged.Each engine gets two questions, such as Show Canlis on a map and the same with the address, and each one runs as an ordinary task of that engine. For KR stores, the questions are in Korean and ChatGPT's second question is in English. Of the places in the answers, the one that matches the store by Place ID, phone, website, pin, address and name is the store's record, and match lists the details that agree. The lookup is judged again from the stored answers each time you read it, and most lookups finish within two minutes.
Send the request with your API key in the Authorization header.
curl -X POST https://api.querying.ai/v1/place-lookup \
-H "Authorization: Bearer $QUERYING_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"place": {
"name": "Canlis",
"address": "2576 Aurora Ave N, Seattle, WA 98109",
"location": { "latitude": 47.6430534, "longitude": -122.3467361 },
"phone": "(206) 283-3313",
"website": "https://canlis.com/"
},
"country": "US",
"idempotencyKey": "canlis-2026-10"
}'place.namestringRequiredplace.addressstringplace.location or both.place.locationobjectlatitude and longitude. Each record then carries its distance from the store, and a pin more than 300 m away is reported.place.phonestringplace.websitestringhttp or https URL. Each record’s website is compared with it by site.place.googlePlaceIdstringplace.naverPlaceIdstringmap.naver.com or place.naver.com page. A record with this ID is the store.place.yelpUrlstringyelp.com/biz/… page. A record of this business is the store.countrystringRequiredUS or KR.enginesarrayCHATGPT, GEMINI, GOOGLE, BING_COPILOT and, for KR, NAVER_AI_TAB. Default: all five for KR, the first four elsewhere.idempotencyKeystringThe response, trimmed for length.
{
"success": true,
"lookup": { "id": "canlis-2026-10" },
"tasks": [
{
"engine": "CHATGPT",
"ask": 1,
"success": true,
"task": {
"id": "…",
"taskType": "CHATGPT",
"status": "QUEUED",
"priority": 1,
"createdAt": "…",
"idempotencyKey": "canlis-2026-10:CHATGPT:1"
}
},
{ "engine": "CHATGPT", "ask": 2, "…": "…" },
{ "engine": "GEMINI", "ask": 1, "…": "…" }
]
}lookup.idstringGET /v1/place-lookup/{id}.tasksarrayengine, ask, success and the queued task, status: "PENDING" while it waits for room, or error with its code. A task’s idempotencyKey joins the lookup’s id, the engine and the question number, as in canlis-2026-10:CHATGPT:1.Read the lookup by its id every 5 to 10 seconds until lookup.status is COMPLETED. It stays readable for 24 hours after its questions finish.
curl "https://api.querying.ai/v1/place-lookup/$LOOKUP_ID" \
-H "Authorization: Bearer $QUERYING_API_KEY"The Canlis lookup reads like this, trimmed. ChatGPT showed the restaurant's Yelp record, Gemini and Copilot the same Google Maps record, and Google's results page answered without a place, so its found is false.
{
"success": true,
"lookup": {
"id": "canlis-2026-10",
"status": "COMPLETED",
"country": "US",
"engines": [
{
"engine": "CHATGPT",
"status": "COMPLETED",
"found": true,
"via": [{ "…": "…" }],
"record": {
"name": "Canlis",
"source": "yelp",
"provider": "yelp-feed",
"phone": "+1 206-283-3313",
"website": "https://canlis.com/",
"rating": 4,
"reviewCount": 1935,
"match": {
"same": true,
"by": ["phone", "website", "location", "address", "name"],
"nameScore": 1,
"distanceMeters": 5
},
"…": "…"
}
},
{
"engine": "GEMINI",
"status": "COMPLETED",
"found": true,
"via": [{ "…": "…" }],
"record": {
"name": "Canlis",
"source": "google_maps",
"placeId": "ChIJRXCfNwUVkFQRxraD8U-dANE",
"phone": "+1 206-283-3313",
"rating": 4.6,
"reviewCount": 2892,
"…": "…"
}
},
{
"engine": "GOOGLE",
"status": "COMPLETED",
"found": false,
"…": "…"
},
{
"engine": "BING_COPILOT",
"status": "COMPLETED",
"found": true,
"…": "…"
}
],
"summary": {
"foundIn": ["CHATGPT", "GEMINI", "BING_COPILOT"],
"notFoundIn": ["GOOGLE"],
"failed": [],
"pending": [],
"differences": []
},
"credits": 10
}
}lookup.statusstringPROCESSING until every engine ends, then COMPLETED.lookup.engines[].foundbooleantrue once an answer shows the store, false when both questions ended without it, and null while a question runs or when both failed.lookup.engines[].recordobjectlookup.engines[].record.sourcestringgoogle_maps, naver_place, yelp, tripadvisor or unknown. placeId and url are its ID and page there.lookup.engines[].record.matchobjectby lists the details that agree, nameScore is the name similarity from 0 to 1, and distanceMeters the distance from place.location.lookup.engines[].issuesarrayphone_mismatch, website_mismatch, location_mismatch, other_business_record, closed_permanently or closed_temporarily.lookup.summaryobjectfoundIn, notFoundIn, failed and pending, and differences: each name, phone, website or pin that differs between engines, with the engines behind each value.lookup.creditsnumberWhen every question is refused, the response is the first refusal, such as 402 or 403. When some are admitted, the call answers 200 and each refused question carries its error. While your plan’s concurrent tasks are all in use, the remaining questions answer PENDING and start on their own as running tasks finish, so on the free plan, which runs 2 tasks at a time, one request runs the whole lookup.
VALIDATION_ERRORHTTP 400details names the field.INSUFFICIENT_CREDITSHTTP 402KEY_SCOPE_DENIEDHTTP 403RESOURCE_ALREADY_EXISTSHTTP 409idempotencyKey already names a lookup of another store, country or engine list. A new idempotencyKey starts a new lookup.A lookup of the country's default engines costs 10 credits: 1 per question for the 10 questions in KR, and 1.25 for each of the 8 elsewhere. A lookup of fewer engines pays for the questions it sends, and a failed question costs 0. Plan prices are listed at https://querying.ai/pricing .

Pass a product page URL from Amazon, Walmart, Sephora, Olive Young, Rakuten, Zalando or 11 more storefronts, and get its price, stock, gallery and description images, specs and options in one shape.

Search Amazon, Walmart, Coupang, Olive Young, Rakuten, Flipkart, Zalando and 13 more storefronts in five countries, and get each one’s product ranking with prices, ratings and review counts in the same shape.
Get new product updates in your inbox.