> ## Documentation Index
> Fetch the complete documentation index at: https://docs.querying.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Place Lookup : voir quelle fiche chaque moteur d'IA affiche pour un établissement

> Interrogez ChatGPT, Gemini, Google, Copilot et Naver sur un établissement et lisez la fiche que chaque moteur en affiche : la base cartographique d'où elle vient, ce qu'elle indique et ce qui diffère des informations de l'établissement.

Utilisez Place Lookup pour vérifier comment les moteurs d'IA affichent un établissement, une succursale ou une clinique. Chaque moteur affiche des lieux issus d'une base cartographique. Gemini, Copilot et la page de résultats de Google affichent des fiches Google Maps, Naver AI Tab des fiches Naver Place, et ChatGPT des fiches issues de sources comme Yelp, Tripadvisor et Google Maps. Une recherche vous indique quelle fiche chaque moteur a utilisée et ce qui y est faux, pour savoir quelle fiche corriger.

## Soumettre une recherche

```bash theme={"theme":"css-variables"}
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"
  }'
```

La recherche pose deux questions à chaque moteur. Chaque question est une tâche ordinaire de ce moteur, et la réponse les liste :

```json theme={"theme":"css-variables"}
{
  "success": true,
  "lookup": { "id": "canlis-2026-10" },
  "tasks": [
    {
      "engine": "CHATGPT",
      "ask": 1,
      "success": true,
      "task": {
        "id": "9d02deef-...",
        "taskType": "CHATGPT",
        "status": "QUEUED",
        "priority": 1,
        "createdAt": "2026-10-20T09:00:00.000Z",
        "idempotencyKey": "canlis-2026-10:CHATGPT:1"
      }
    },
    { "engine": "CHATGPT", "ask": 2, "success": true, "task": { "...": "..." } },
    { "engine": "GEMINI", "ask": 1, "success": true, "task": { "...": "..." } }
  ]
}
```

Lisez la recherche avec `GET /v1/place-lookup/{id}` jusqu'à ce que `lookup.status` vaille `COMPLETED`. La plupart des recherches se terminent en moins de deux minutes : interrogez toutes les 5 à 10 secondes. Une recherche n'envoie pas de webhook. Le schéma de la requête est dans la [référence API](/fr/api-reference/place-lookup.md).

```bash theme={"theme":"css-variables"}
curl https://api.querying.ai/v1/place-lookup/canlis-2026-10 \
  -H "Authorization: Bearer $QUERYING_API_KEY"
```

## Champs de la requête

| Champ | Obligatoire | Description |
| - | - | - |
| `place.name` | Oui | Le nom de l'établissement, de 1 à 200 caractères. Pour une chaîne, ajoutez la succursale, par exemple `Anchorhead Coffee Downtown Seattle`. |
| `place.address` | `address` ou `location` | L'adresse, jusqu'à 500 caractères. |
| `place.location` | `address` ou `location` | La position de l'établissement, `{ "latitude", "longitude" }` en degrés décimaux. Avec elle, chaque fiche porte sa distance à l'établissement, et une épingle mal placée est signalée. |
| `place.phone` | Non | Le numéro de téléphone officiel, dans n'importe quel format, jusqu'à 50 caractères. Le téléphone de chaque fiche est comparé à celui-ci. |
| `place.website` | Non | Le site officiel, une URL `http` ou `https`. Le site de chaque fiche est comparé à celui-ci, par site. |
| `place.googlePlaceId` | Non | Le Google Place ID de l'établissement, par exemple `ChIJRXCfNwUVkFQRxraD8U-dANE`. Une fiche portant cet ID est l'établissement. |
| `place.naverPlaceId` | Non | 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.yelpUrl` | Non | La page `yelp.com/biz/...` de l'établissement. Une fiche de cette page Yelp est l'établissement. |
| `country` | Oui | Le pays de l'établissement, en code ISO 3166-1 alpha-2, par exemple `US` ou `KR`. |
| `engines` | Non | Les moteurs à interroger, sans doublon : `CHATGPT`, `GEMINI`, `GOOGLE`, `BING_COPILOT` et `NAVER_AI_TAB`. Par défaut : les cinq pour `KR`, les quatre premiers ailleurs. `NAVER_AI_TAB` est réservé à `KR`. |
| `idempotencyKey` | Non | L'id de la recherche, de 1 à 200 caractères sans espace au début ni à la fin. Sans lui, le serveur crée un UUID. Voir [Renvoyer une recherche](#renvoyer-une-recherche). |
| `priority` | Non | Entier de `1` à `10`, `1` par défaut, appliqué à chaque tâche. Il ne garantit pas l'ordre d'exécution. |

Les autres champs, `webhook` compris, renvoient `400 VALIDATION_ERROR`.

## Comment une recherche interroge

Chaque moteur reçoit deux questions. ChatGPT, Gemini et Copilot doivent afficher l'établissement sur une carte, la seconde fois avec son adresse. Sur la page de résultats de Google, la recherche porte sur l'emplacement de l'établissement, puis sur son nom depuis sa propre position. Naver AI Tab est interrogé sur l'emplacement de l'établissement, puis sur son nom.

| Moteur | Première question | Seconde question |
| - | - | - |
| `CHATGPT`, `GEMINI`, `BING_COPILOT` | `Show {name} on a map` | `Show {name}, {address} on a map` |
| `GOOGLE` | `{name} location` | `{name}`, recherché depuis `place.location` |

Pour `KR`, les questions sont en coréen, et la seconde question de ChatGPT est `Show {name} on a map` en anglais, car ChatGPT affiche plus souvent la carte d'un établissement coréen quand on l'interroge en anglais. Sans `place.address`, un moteur dont la seconde question ajoute l'adresse pose deux fois la première. Sans `place.location`, la seconde recherche Google ajoute l'adresse hors de `KR`. `via[]` dans le résultat montre chaque question telle qu'elle a été envoyée.

## Lire le résultat

La recherche Canlis se lit ainsi, réduite aux champs principaux :

```json theme={"theme":"css-variables"}
{
  "success": true,
  "lookup": {
    "id": "canlis-2026-10",
    "status": "COMPLETED",
    "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",
    "engines": [
      {
        "engine": "CHATGPT",
        "status": "COMPLETED",
        "found": true,
        "via": [
          {
            "taskType": "CHATGPT",
            "prompt": "Show Canlis on a map",
            "taskId": "9d02deef-...",
            "status": "COMPLETED",
            "collectedAt": "2026-10-19T16:38:48.957Z",
            "places": 1
          },
          {
            "taskType": "CHATGPT",
            "prompt": "Show Canlis, 2576 Aurora Ave N, Seattle, WA 98109 on a map",
            "taskId": "91505c8f-...",
            "status": "COMPLETED",
            "collectedAt": "2026-10-19T16:39:04.194Z",
            "places": 1
          }
        ],
        "record": {
          "position": 1,
          "name": "Canlis",
          "source": "yelp",
          "provider": "yelp-feed",
          "url": "https://www.yelp.com/biz/canlis-seattle?adjust_creative=openai",
          "address": "2576 Aurora Ave N, Seattle, WA 98109, United States",
          "latitude": 47.6430933,
          "longitude": -122.3467535,
          "phone": "+1 206-283-3313",
          "rating": 4,
          "reviewCount": 1935,
          "website": "https://canlis.com/",
          "match": {
            "same": true,
            "by": ["phone", "website", "location", "address", "name"],
            "nameScore": 1,
            "distanceMeters": 5
          }
        }
      },
      {
        "engine": "GEMINI",
        "status": "COMPLETED",
        "found": true,
        "via": [{ "...": "..." }],
        "record": {
          "position": 1,
          "name": "Canlis",
          "source": "google_maps",
          "placeId": "ChIJRXCfNwUVkFQRxraD8U-dANE",
          "url": "https://maps.google.com/?cid=15060210120606856902",
          "phone": "+1 206-283-3313",
          "rating": 4.6,
          "reviewCount": 2892,
          "website": "https://canlis.com/",
          "match": {
            "same": true,
            "by": ["phone", "website", "location", "address", "name"],
            "nameScore": 1,
            "distanceMeters": 5
          }
        }
      },
      {
        "engine": "GOOGLE",
        "status": "COMPLETED",
        "found": false,
        "via": [
          {
            "taskType": "GOOGLE",
            "query": "Canlis location",
            "taskId": "6d3c3a73-...",
            "status": "COMPLETED",
            "collectedAt": "2026-10-19T16:38:43.932Z",
            "places": 0
          },
          {
            "taskType": "GOOGLE",
            "query": "Canlis",
            "location": { "latitude": 47.6430534, "longitude": -122.3467361 },
            "taskId": "980a858a-...",
            "status": "COMPLETED",
            "collectedAt": "2026-10-19T16:38:48.902Z",
            "places": 0
          }
        ]
      },
      {
        "engine": "BING_COPILOT",
        "status": "COMPLETED",
        "found": true,
        "via": [{ "...": "..." }],
        "record": {
          "name": "Canlis",
          "source": "google_maps",
          "placeId": "ChIJRXCfNwUVkFQRxraD8U-dANE",
          "openState": "Closed · Opens 5 PM Tue",
          "...": "..."
        }
      }
    ],
    "summary": {
      "foundIn": ["CHATGPT", "GEMINI", "BING_COPILOT"],
      "notFoundIn": ["GOOGLE"],
      "failed": [],
      "pending": [],
      "differences": []
    },
    "credits": 10
  }
}
```

ChatGPT a affiché la fiche Yelp du restaurant. Gemini et Copilot ont affiché la même fiche Google Maps, avec le même Place ID. La page de résultats de Google n'a affiché aucun lieu pour les deux questions, donc son `found` vaut `false`.

### `engines[]`

| Champ | Description |
| - | - |
| `engine` | Le moteur interrogé. |
| `status` | `PROCESSING` jusqu'à la fin des deux questions, puis `COMPLETED`. `FAILED` quand les deux ont échoué. |
| `found` | `true` dès qu'une réponse affiche l'établissement. `false` quand les deux questions sont terminées sans qu'aucune réponse ne l'affiche. `null` tant qu'une question est en cours, et quand les deux ont échoué. |
| `via[]` | Chaque question telle qu'envoyée : `prompt` ou `query`, `location` s'il a été envoyé, `taskId` une fois la question lancée, `status`, `collectedAt`, `places` (le nombre de lieux affichés dans la réponse) et `error` pour une question en échec. `status` vaut `PENDING` tant que la question attend une place dans votre plan. |
| `record` | La fiche de l'établissement : parmi les lieux des deux réponses, celui qui correspond le mieux à l'établissement. Présent quand `found` vaut `true`. |
| `issues` | Ce qui est faux dans `record`. Présent seulement s'il y a quelque chose. |

### `record`

| Champ | Description |
| - | - |
| `source` | La base cartographique de la fiche : `google_maps`, `naver_place`, `yelp`, `tripadvisor`, ou `unknown` quand la réponse ne l'indique pas. |
| `placeId`, `url` | L'ID et la page de la fiche dans sa source, par exemple un Google Place ID et son lien Google Maps. |
| `name`, `address`, `latitude`, `longitude`, `phone`, `website` | Les informations affichées par le moteur. Seuls les champs présents dans la réponse figurent. |
| `category`, `rating`, `reviewCount`, `openState`, `image`, `description` | D'autres informations telles que le moteur les affiche, quand elles existent. |
| `position` | Le rang de la fiche parmi les lieux de la réponse, à partir de 1. |
| `provider` | ChatGPT uniquement : la source que ChatGPT indique pour la fiche, par exemple `yelp-feed` ou `bright-feed`. |
| `localName` | ChatGPT uniquement : l'autre nom de la fiche, par exemple le nom coréen d'un établissement coréen. |
| `resolvedBy` | ChatGPT uniquement : `address` quand ChatGPT a trouvé la fiche à partir d'une adresse écrite par le modèle. Une telle fiche peut appartenir à un autre établissement à cette adresse. |
| `closed` | ChatGPT uniquement : `permanently` ou `temporarily` quand la fiche est marquée fermée. |
| `match` | Pourquoi la fiche est l'établissement. `by` liste les informations qui concordent : `place_id`, `phone`, `website`, `location`, `address` et `name`. `nameScore` est la similarité du nom, de 0 à 1, et `distanceMeters` la distance entre `place.location` et l'épingle de la fiche. |

### `issues`

| Problème | Signification |
| - | - |
| `phone_mismatch` | Le téléphone de la fiche diffère de `place.phone` ou, sans lui, du numéro qu'affichent la plupart des autres moteurs. |
| `website_mismatch` | Le site de la fiche est un autre site que `place.website` ou, sans lui, que celui qu'affichent la plupart des autres moteurs. |
| `location_mismatch` | L'épingle de la fiche est à plus de 300 m de `place.location`. |
| `other_business_record` | La fiche est probablement celle d'un autre établissement au même emplacement : son téléphone et son site diffèrent tous deux, ou ChatGPT l'a trouvée par adresse et l'un des deux diffère. |
| `closed_permanently`, `closed_temporarily` | ChatGPT affiche le lieu comme fermé. |

Un numéro que toutes les succursales d'une chaîne affichent, comme un numéro gratuit, n'est pas comparé.

### `summary` et `credits`

| Champ | Description |
| - | - |
| `summary.foundIn` | Les moteurs qui ont affiché l'établissement. |
| `summary.notFoundIn` | Les moteurs dont les réponses se sont terminées sans lui. |
| `summary.failed` | Les moteurs dont les deux questions ont échoué. |
| `summary.pending` | Les moteurs qui répondent encore et n'ont pas encore affiché l'établissement. |
| `summary.differences[]` | Là où les fiches des moteurs divergent. `field` vaut `name`, `phone`, `website` ou `location`, et `values[]` liste chaque `value` avec les `engines` qui l'affichent. Une entrée `location` apparaît quand deux épingles sont à plus de 300 m l'une de l'autre et porte `spreadMeters`, la plus grande distance entre elles. |
| `credits` | Les crédits facturés jusqu'ici pour les questions de la recherche. |

`lookup.status` vaut `PROCESSING` jusqu'à la fin de tous les moteurs, puis `COMPLETED`. Le résultat est évalué à partir des réponses enregistrées à chaque lecture, et une recherche reste lisible 24 heures après la fin de ses tâches.

## Renvoyer une recherche

Chaque question est une tâche dont la clé est `{lookup id}:{engine}:{ask}`, par exemple `canlis-2026-10:GEMINI:2`. Renvoyez la même requête avec la même `idempotencyKey` : la recherche renvoie les tâches qu'elle a et envoie les questions qui n'ont pas encore de tâche, comme celles refusées faute de crédits. Le même id avec un autre établissement, pays ou liste de moteurs renvoie `409 RESOURCE_ALREADY_EXISTS` et ne crée rien. Pour relancer la recherche plus tard, utilisez une nouvelle `idempotencyKey`.

## Concurrence du plan

Chaque question compte comme une tâche dans la limite de concurrence de votre plan. Une recherche lance les questions pour lesquelles votre plan a de la place, et les autres attendent dans `tasks[]` avec `status: "PENDING"` :

```json theme={"theme":"css-variables"}
{ "engine": "GEMINI", "ask": 1, "success": true, "status": "PENDING" }
```

Une question en attente démarre d'elle-même à mesure que vos tâches en cours se terminent, en moins d'une minute ou à la prochaine lecture de la recherche : une seule requête mène donc toute la recherche. Avec le plan Free, qui permet 2 tâches simultanées, une recherche exécute deux questions à la fois et prend quelques minutes. Les plans payants commencent à 50 tâches simultanées : une recherche entière démarre d'un coup tant que votre compte a de la place. Les questions attendent aussi quand la file d'un moteur est pleine ou que la clé a atteint sa limite quotidienne de crédits. Le prix d'une question est bloqué quand elle démarre. Si la clé qui a envoyé la recherche est révoquée ou expire avant, les questions en attente se terminent en `FAILED` avec `API_KEY_INACTIVE` et coûtent 0. Voir [Crédits et limites](/fr/concepts/credits-and-limits.md#concurrence-du-plan).

## Erreurs et facturation

Une recherche sur les moteurs par défaut du pays coûte 10 crédits. Chaque question paie sa part : 1 crédit pour chacune des 10 questions en `KR`, et 1,25 pour chacune des 8 ailleurs. Une recherche sur moins de moteurs paie les questions qu'elle envoie. Le prix de chaque question est bloqué à l'envoi et facturé quand elle se termine, et une question en échec coûte 0. Voir [Crédits et limites](/fr/concepts/credits-and-limits.md).

### Refus à l'envoi

| Statut | Code | Cause |
| - | - | - |
| `400` | `VALIDATION_ERROR` | Le corps n'est pas un JSON valide, un champ manque ou est invalide, un champ inconnu ou `webhook` a été envoyé, ou `NAVER_AI_TAB` a été interrogé hors de `KR`. `details` nomme le champ. |
| `409` | `RESOURCE_ALREADY_EXISTS` | L'`idempotencyKey` désigne une recherche d'un autre établissement, pays ou liste de moteurs. |

Quand toutes les questions sont refusées, le premier refus est la réponse, avec son propre statut, par exemple `402 INSUFFICIENT_CREDITS` ou `403 KEY_SCOPE_DENIED`, et rien n'est créé. Quand certaines sont admises, la réponse est `200` et chaque question refusée porte son `error` dans `tasks[]` :

```json theme={"theme":"css-variables"}
{
  "engine": "GOOGLE",
  "ask": 2,
  "success": false,
  "error": {
    "code": "INSUFFICIENT_CREDITS",
    "message": "insufficient credits (need 1.25)",
    "timestamp": "2026-10-20T09:00:00.000Z"
  }
}
```

### Lire une recherche

`GET /v1/place-lookup/{id}` renvoie `404 RESOURCE_NOT_FOUND` pour un id que votre compte n'a pas utilisé, et pour une recherche dont les tâches ont dépassé la fenêtre de 24 heures. Une question en échec affiche `status: "FAILED"` dans `via[]` et une `error` qui commence par son code, par exemple `ENGINE_NO_RESULT`. Ces codes sont ceux des tâches du moteur, et une question en attente qui se termine avant de démarrer porte `API_KEY_INACTIVE` ou `INSUFFICIENT_CREDITS`. Voir [Erreurs](/fr/concepts/errors.md).

## Étapes suivantes

> **[ChatGPT](/fr/engines/chatgpt.md)**
>
> Les cartes de lieux que ChatGPT affiche, dans `map`.

> **[Lots et grilles](/fr/concepts/bulk-submission.md)**
>
> Posez une même question depuis chaque point d'une grille autour d'un établissement.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.