更新情報新機能

Place Lookupが登場しました

Place Lookup
シアトルの地図上のレストランCanlisのピンが4枚のエンジンカードにつながる画面。ChatGPTはYelpの掲載情報を、GeminiとCopilotは同じGoogleマップの掲載情報を見つけ、GoogleのカードにはNot foundと表示されています

1つの店舗についてChatGPT、Gemini、Google、Copilot、韓国ではNaverにもまとめて問い合わせ、エンジンごとの掲載情報とその出典、公式情報と異なる点を受け取れます。

得られる結果

  • POST /v1/place-lookupは、1店舗の名前と住所または地図の座標を受け取り、あれば電話番号、Webサイト、プレイスIDも受け取って、CHATGPT、GEMINI、GOOGLE、BING_COPILOTに、KRの店舗はNAVER_AI_TABにも問い合わせます。
  • GET /v1/place-lookup/{id}は、エンジンごとに店舗のrecordを返します。google_maps、naver_place、yelpなどのsource、placeIdとページ、エンジンが示す名前、住所、電話番号、Webサイト、評価が入ります。
  • issuesは掲載情報の問題を示します。phone_mismatch、website_mismatch、location_mismatch、other_business_record、閉業の表示があります。
  • summaryは店舗を示したエンジンと、エンジン間で異なる値(differences)を、creditsはこれまでに差し引かれたクレジットを示します。

仕組み

エンジンごとにShow Canlis on a mapと、住所を加えた同じ質問のように2回問い合わせ、質問ごとにそのエンジンの通常のタスクとして実行します。KRの店舗は韓国語で問い合わせ、ChatGPTの2つ目の質問だけ英語で問い合わせます。回答に出た場所のうち、プレイスID、電話番号、Webサイト、座標、住所、名前が店舗と最もよく一致するものを店舗の掲載情報として選び、一致した項目はmatchに入ります。照会結果は読み取るたびに保存済みの回答から判定し直し、ほとんどの照会は2分以内に終わります。

活用例

  • 誤った電話番号がどの掲載情報から来ているかを探せます。Googleマップの掲載情報1件の誤りは、その情報を読むすべてのエンジンに表れ、照会がその掲載情報を示します。
  • 市場ごとに、各エンジンがどの地図データを読んでいるかを確認できます。米国の20店舗で試したところ、ChatGPTは15店舗でYelpの掲載情報を示しました。
  • 地域キャンペーンの前に、チェーンの全店舗を1店舗ずつ照会できます。

リクエストを送る

API キーを Authorization ヘッダーに入れてリクエストを送ります。

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.namestring必須
店舗名、1〜200文字。チェーン店は支店名まで含めます。
place.addressstring
住所、最大500文字。照会にはこれか place.location、または両方が必要です。
place.locationobject
店舗のピンの位置(latitude、longitude)。指定すると各掲載情報に店舗からの距離が付き、300 m を超えてずれたピンを報告します。
place.phonestring
公式の電話番号、形式は自由。各掲載情報の電話番号をこれと比べます。
place.websitestring
公式Webサイト、http か https の URL。各掲載情報のWebサイトをサイト単位で比べます。
place.googlePlaceIdstring
店舗の Google Place ID。この ID の掲載情報はその店舗です。
place.naverPlaceIdstring
店舗の Naver Place ID、またはその場所の map.naver.com か place.naver.com のページ。この ID の掲載情報はその店舗です。
place.yelpUrlstring
店舗の yelp.com/biz/… ページ。この事業者の掲載情報はその店舗です。
countrystring必須
店舗がある国の ISO 3166-1 alpha-2 コード。例: US、KR。
enginesarray
尋ねるエンジン。CHATGPT、GEMINI、GOOGLE、BING_COPILOT、KR では NAVER_AI_TAB も重複なく選べます。既定は KR なら5つすべて、それ以外の国は最初の4つです。
idempotencyKeystring
照会の id、1〜200文字。既定はサーバーが作る UUID です。同じリクエストをこの値で再送すると、足りない質問を追加します。

レスポンス

レスポンスです。長さを抑えて抜粋しています。

JSON
{
  "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.idstring
照会の id。GET /v1/place-lookup/{id} で結果を読み取ります。
tasksarray
質問ごとに1件。engine、ask、success と、キューに入った task、空きを待つ間の status: "PENDING"、またはコード付きの error。タスクの idempotencyKey は照会の id、エンジン、質問番号をつないだ値です。例: canlis-2026-10:CHATGPT:1。

結果を受け取る

照会はIDで5〜10秒ごとに読み取り、lookup.statusがCOMPLETEDになれば完了です。質問の完了から24時間読み取れます。

curl "https://api.querying.ai/v1/place-lookup/$LOOKUP_ID" \
  -H "Authorization: Bearer $QUERYING_API_KEY"

Canlisの照会結果を短くすると次のとおりです。ChatGPTはレストランのYelpの掲載情報を、GeminiとCopilotは同じGoogleマップの掲載情報を示し、Googleの検索結果ページは場所なしで回答したためfoundはfalseです。

JSON
{
  "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.statusstring
すべてのエンジンが終わるまでは PROCESSING、終わると COMPLETED。
lookup.engines[].foundboolean
回答が店舗を示すと true、2つの質問が終わって店舗がなければ false、質問が実行中か両方失敗したときは null。
lookup.engines[].recordobject
そのエンジンでの店舗の掲載情報。2つの回答の場所のうち店舗と最もよく一致するもので、エンジンが示す名前、住所、電話番号、Webサイト、評価が入ります。
lookup.engines[].record.sourcestring
掲載情報の元の地図データベース。google_maps、naver_place、yelp、tripadvisor、unknown のいずれかで、placeId と url はそこでの ID とページです。
lookup.engines[].record.matchobject
この掲載情報を店舗と判断した根拠。by は一致した項目、nameScore は 0〜1 の名前の類似度、distanceMeters は place.location からの距離です。
lookup.engines[].issuesarray
掲載情報に誤りがあるときに付きます。phone_mismatch、website_mismatch、location_mismatch、other_business_record、closed_permanently、closed_temporarily があります。
lookup.summaryobject
結果別のエンジン(foundIn、notFoundIn、failed、pending)と、エンジン間で異なる名前、電話番号、Webサイト、ピンを値ごとにエンジンと合わせて示す differences。
lookup.creditsnumber
これまでにこの照会の質問に請求されたクレジット。

エラー

すべての質問が拒否されると、402や403などの最初の拒否がレスポンスになります。一部が受け付けられると200で応答し、拒否された質問にはそれぞれerrorが付きます。プランの同時実行枠が埋まっている間、残りの質問はPENDINGで待ち、実行中のタスクが終わりしだい自動で始まります。同時に2件のタスクを実行する無料プランでも、1回のリクエストで照会全体が実行されます。

VALIDATION_ERRORHTTP 400
フィールドが欠けているか、範囲外の値です。details に該当するフィールドが入ります。
INSUFFICIENT_CREDITSHTTP 402
残高がタスクの料金を下回っています。クレジットを追加するかプランを上げてから、もう一度送ってください。
KEY_SCOPE_DENIEDHTTP 403
キーの「許可するエンジン」の対象外のエンジンです。別のキーを使うか、「キーを管理」でエンジンを追加してください。
RESOURCE_ALREADY_EXISTSHTTP 409
idempotencyKey がすでに別の店舗、国、エンジンの一覧の照会を指しています。新しい idempotencyKey で送ると新しい照会になります。

料金

国の既定のエンジンすべてに問い合わせる照会は10クレジットです。KRは10個の質問に1ずつ、その他の国は8個の質問に1.25ずつです。エンジンを一部だけ選ぶと送った質問の分だけかかり、失敗した質問は0クレジットです。プランごとの料金は https://querying.ai/pricing で確認できます。

ほかの更新

最新情報を受け取る

製品の更新をメールでお届けします。

RSS フィード