NouveautésNouveau

Voici Place Lookup

Place Lookup
Une carte de Seattle avec une épingle sur le restaurant Canlis, reliée à quatre cartes de moteurs : ChatGPT a trouvé sa fiche Yelp, Gemini et Copilot la même fiche Google Maps, et la carte de Google indique Not found

Un seul appel interroge ChatGPT, Gemini, Google, Copilot et, en Corée, Naver sur votre établissement, et renvoie la fiche de chaque moteur, la base cartographique d’où elle vient et chaque détail qui diffère des vôtres.

Ce que vous obtenez

  • POST /v1/place-lookup prend un établissement, avec son nom et une adresse ou un repère sur la carte, ainsi que son téléphone, son site et ses identifiants de lieu si vous les avez, et interroge CHATGPT, GEMINI, GOOGLE, BING_COPILOT et, pour un établissement en KR, NAVER_AI_TAB.
  • GET /v1/place-lookup/{id} renvoie le record de l’établissement pour chaque moteur : sa source, comme google_maps, naver_place ou yelp, son placeId et sa page, ainsi que le nom, l’adresse, le téléphone, le site et la note affichés par le moteur.
  • issues indique ce qui cloche dans une fiche : phone_mismatch, website_mismatch, location_mismatch, other_business_record ou une fiche marquée fermée.
  • summary liste les moteurs qui ont affiché l’établissement et les differences entre leurs fiches, et credits indique ce que la recherche a déjà débité.

Fonctionnement

Chaque moteur reçoit deux questions, comme Show Canlis on a map puis la même avec l’adresse, et chacune s’exécute comme une tâche ordinaire de ce moteur. Pour un établissement en KR, les questions sont en coréen et la seconde question à ChatGPT en anglais. Parmi les lieux des réponses, celui qui correspond à l’établissement par identifiant de lieu, téléphone, site, repère, adresse et nom est sa fiche, et match liste les détails concordants. La recherche est réévaluée à partir des réponses enregistrées à chaque lecture, et la plupart se terminent en moins de deux minutes.

Cas d’usage

  • Trouver la fiche d’où vient un mauvais numéro de téléphone. Une erreur dans une fiche Google Maps apparaît dans tous les moteurs qui lisent cette fiche, et la recherche la désigne.
  • Savoir quelle base cartographique chaque moteur lit sur votre marché. Sur un test de 20 établissements aux États-Unis, ChatGPT a affiché des fiches Yelp pour 15.
  • Vérifier chaque succursale d’une chaîne avant une campagne locale, avec une recherche par succursale.

Envoyer la requête

Envoyez la requête avec votre clé API dans l’en-tête 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"
  }'

Champs de la requête

place.namestringObligatoire
Le nom de l’établissement, de 1 à 200 caractères. Pour une chaîne, ajoutez la succursale.
place.addressstring
L’adresse, jusqu’à 500 caractères. Une recherche demande celle-ci, place.location ou les deux.
place.locationobject
La position de l’établissement, en latitude et longitude. Chaque fiche porte alors sa distance à l’établissement, et une épingle à plus de 300 m est signalée.
place.phonestring
Le numéro officiel, dans n’importe quel format. Le téléphone de chaque fiche est comparé à celui-ci.
place.websitestring
Le site officiel, une URL http ou https. Le site de chaque fiche est comparé à celui-ci, par site.
place.googlePlaceIdstring
Le Google Place ID de l’établissement. Une fiche portant cet ID est l’établissement.
place.naverPlaceIdstring
Le Naver Place ID de l’établissement, ou sa page map.naver.com ou place.naver.com. Une fiche portant cet ID est l’établissement.
place.yelpUrlstring
La page yelp.com/biz/… de l’établissement. Une fiche de cette page Yelp est l’établissement.
countrystringObligatoire
Le pays de l’établissement, en code ISO 3166-1 alpha-2, par exemple US ou KR.
enginesarray
Les moteurs à interroger, sans doublon : CHATGPT, GEMINI, GOOGLE, BING_COPILOT et, pour KR, NAVER_AI_TAB. Par défaut : les cinq pour KR, les quatre premiers ailleurs.
idempotencyKeystring
L’identifiant de la recherche, de 1 à 200 caractères. Par défaut, un UUID créé par le serveur. Renvoyer la même requête avec lui ajoute les questions manquantes.

Réponse

La réponse, raccourcie pour la lecture.

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
L’identifiant de la recherche. Lisez le résultat avec GET /v1/place-lookup/{id}.
tasksarray
Une entrée par question : engine, ask, success et la task en file, status: "PENDING" tant qu’elle attend une place, ou error avec son code. L’idempotencyKey de la tâche réunit l’identifiant de la recherche, le moteur et le numéro de la question, comme dans canlis-2026-10:CHATGPT:1.

Recevoir le résultat

Relisez la recherche par son identifiant toutes les 5 à 10 secondes jusqu’à ce que lookup.status vaille COMPLETED. Elle reste lisible 24 heures après la fin de ses questions.

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

La recherche de Canlis se lit ainsi, abrégée. ChatGPT a affiché la fiche Yelp du restaurant, Gemini et Copilot la même fiche Google Maps, et la page de résultats Google a répondu sans lieu, d’où 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 jusqu’à ce que tous les moteurs aient terminé, puis COMPLETED.
lookup.engines[].foundboolean
true dès qu’une réponse affiche l’établissement, false quand les deux questions sont terminées sans lui, et null tant qu’une question tourne ou si les deux ont échoué.
lookup.engines[].recordobject
La fiche de l’établissement dans ce moteur : parmi les lieux des deux réponses, celui qui lui correspond le mieux, avec le nom, l’adresse, le téléphone, le site et la note affichés par le moteur.
lookup.engines[].record.sourcestring
La base cartographique de la fiche : google_maps, naver_place, yelp, tripadvisor ou unknown. placeId et url sont son ID et sa page dans cette base.
lookup.engines[].record.matchobject
Pourquoi la fiche est l’établissement. by liste les informations concordantes, nameScore la similarité du nom de 0 à 1, et distanceMeters la distance depuis place.location.
lookup.engines[].issuesarray
Ce qui est faux dans la fiche, quand il y a quelque chose : phone_mismatch, website_mismatch, location_mismatch, other_business_record, closed_permanently ou closed_temporarily.
lookup.summaryobject
Les moteurs par résultat dans foundIn, notFoundIn, failed et pending, et differences : chaque nom, téléphone, site ou épingle qui diffère entre moteurs, avec les moteurs de chaque valeur.
lookup.creditsnumber
Les crédits facturés jusqu’ici pour les questions de la recherche.

Erreurs

Si toutes les questions sont refusées, la réponse est le premier refus, comme 402 ou 403. Si certaines sont admises, l’appel répond 200 et chaque question refusée porte son error. Tant que les tâches simultanées de votre offre sont occupées, les questions restantes attendent en PENDING et démarrent d’elles-mêmes à mesure que les tâches en cours se terminent : avec l’offre gratuite, qui exécute 2 tâches à la fois, une seule requête mène toute la recherche.

VALIDATION_ERRORHTTP 400
Un champ manque ou sort des valeurs admises. details indique le champ.
INSUFFICIENT_CREDITSHTTP 402
Le solde est inférieur au prix de la tâche. Ajoutez des crédits ou changez de plan, puis renvoyez-la.
KEY_SCOPE_DENIEDHTTP 403
Le moteur est hors des Moteurs autorisés de la clé. Utilisez une autre clé ou ajoutez le moteur dans Gérer la clé.
RESOURCE_ALREADY_EXISTSHTTP 409
L’idempotencyKey désigne déjà une recherche d’un autre établissement, pays ou liste de moteurs. Un nouvel idempotencyKey lance une nouvelle recherche.

Tarif

Une recherche sur les moteurs par défaut du pays coûte 10 crédits : 1 par question pour les 10 questions en KR, et 1,25 pour chacune des 8 ailleurs. Une recherche sur moins de moteurs paie les questions qu’elle envoie, et une question en échec coûte 0. Les prix des forfaits figurent sur https://querying.ai/pricing .

Autres nouveautés

Recevez les nouveautés

Recevez les mises à jour par e-mail.

Flux RSS