> ## 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: comprueba qué ficha muestra cada motor de IA para un negocio

> Pregunta a ChatGPT, Gemini, Google, Copilot y Naver por un negocio y lee la ficha que muestra cada motor: la base de datos de mapas de la que viene, lo que dice y en qué difiere de los datos del propio negocio.

Usa Place Lookup para comprobar cómo muestran los motores de IA un negocio, una sucursal o una clínica. Cada motor muestra lugares de una base de datos de mapas. Gemini, Copilot y la página de resultados de Google muestran fichas de Google Maps, Naver AI Tab muestra fichas de Naver Place y ChatGPT muestra fichas de fuentes como Yelp, Tripadvisor y Google Maps. Una consulta te dice qué ficha usó cada motor y qué tiene de incorrecto, para que sepas qué ficha corregir.

## Enviar una consulta

```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 consulta hace dos preguntas a cada motor. Cada pregunta es una tarea normal de ese motor, y la respuesta las enumera:

```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": { "...": "..." } }
  ]
}
```

Lee la consulta con `GET /v1/place-lookup/{id}` hasta que `lookup.status` sea `COMPLETED`. La mayoría de las consultas terminan en menos de dos minutos, así que consulta el estado cada 5 a 10 segundos. Una consulta no envía webhook. El esquema de la solicitud está en la [referencia de la API](/es/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"
```

## Campos de la solicitud

| Campo | Obligatorio | Descripción |
| - | - | - |
| `place.name` | Sí | El nombre del negocio, de 1 a 200 caracteres. En una cadena, incluye la sucursal, como `Anchorhead Coffee Downtown Seattle`. |
| `place.address` | `address` o `location` | La dirección, hasta 500 caracteres. |
| `place.location` | `address` o `location` | El pin del negocio como `{ "latitude", "longitude" }` en grados decimales. Con él, cada ficha lleva su distancia al negocio y se informa de un pin mal ubicado. |
| `place.phone` | No | El teléfono oficial en cualquier formato, hasta 50 caracteres. Se compara con el teléfono de cada ficha. |
| `place.website` | No | El sitio web oficial, una URL `http` o `https`. Se compara por sitio con el sitio web de cada ficha. |
| `place.googlePlaceId` | No | El Google Place ID del negocio, como `ChIJRXCfNwUVkFQRxraD8U-dANE`. Una ficha con este ID es el negocio. |
| `place.naverPlaceId` | No | El Naver Place ID del negocio, o su página de `map.naver.com` o `place.naver.com`. Una ficha con este ID es el negocio. |
| `place.yelpUrl` | No | La página `yelp.com/biz/...` del negocio. Una ficha con esa página de Yelp es el negocio. |
| `country` | Sí | El país del negocio como código ISO 3166-1 alfa-2, como `US` o `KR`. |
| `engines` | No | Motores a consultar, sin repetir: `CHATGPT`, `GEMINI`, `GOOGLE`, `BING_COPILOT` y `NAVER_AI_TAB`. Predeterminado: los cinco en `KR` y los cuatro primeros en los demás países. `NAVER_AI_TAB` es solo para `KR`. |
| `idempotencyKey` | No | El id de la consulta, de 1 a 200 caracteres sin espacios al principio ni al final. Sin él, el servidor genera un UUID. Consulta [Reenviar una consulta](#reenviar-una-consulta). |
| `priority` | No | Entero de `1` a `10`, predeterminado `1`, que se aplica a cada tarea. No garantiza el orden de ejecución. |

Los demás campos, incluido `webhook`, devuelven `400 VALIDATION_ERROR`.

## Cómo pregunta una consulta

Cada motor recibe dos preguntas. A ChatGPT, Gemini y Copilot se les pide que muestren el negocio en un mapa, la segunda vez con su dirección. En la página de resultados de Google se busca la ubicación del negocio y después su nombre desde el pin del propio negocio. A Naver AI Tab se le pregunta por la ubicación del negocio y después por su nombre.

| Motor | Primera pregunta | Segunda pregunta |
| - | - | - |
| `CHATGPT`, `GEMINI`, `BING_COPILOT` | `Show {name} on a map` | `Show {name}, {address} on a map` |
| `GOOGLE` | `{name} location` | `{name}`, buscado desde `place.location` |

En `KR` las preguntas son en coreano, y la segunda pregunta de ChatGPT es `Show {name} on a map` en inglés, porque ChatGPT muestra la tarjeta de un negocio coreano más a menudo cuando se le pregunta en inglés. Sin `place.address`, un motor cuya segunda pregunta añade la dirección repite la primera. Sin `place.location`, la segunda búsqueda de Google añade la dirección fuera de `KR`. `via[]` en el resultado muestra cada pregunta tal como se envió.

## Leer el resultado

La consulta de Canlis queda así, recortada a los campos principales:

```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 mostró la ficha de Yelp del restaurante. Gemini y Copilot mostraron la misma ficha de Google Maps, con el mismo Place ID. La página de resultados de Google no mostró ningún lugar en ninguna de las dos preguntas, así que su `found` es `false`.

### `engines[]`

| Campo | Descripción |
| - | - |
| `engine` | El motor consultado. |
| `status` | `PROCESSING` hasta que terminan las dos preguntas; después, `COMPLETED`. `FAILED` cuando fallaron las dos. |
| `found` | `true` en cuanto una respuesta muestra el negocio. `false` cuando terminaron las dos preguntas y ninguna respuesta lo mostró. `null` mientras una pregunta sigue en curso y cuando fallaron las dos. |
| `via[]` | Cada pregunta tal como se envió: `prompt` o `query`, `location` si se envió, `taskId` cuando la pregunta empieza, `status`, `collectedAt`, `places` (cuántos lugares mostró la respuesta) y `error` en una pregunta fallida. `status` es `PENDING` mientras la pregunta espera sitio en tu plan. |
| `record` | La ficha del negocio: de los lugares de las dos respuestas, el que mejor coincide con el negocio. Aparece cuando `found` es `true`. |
| `issues` | Lo que está mal en `record`. Solo aparece cuando hay algo. |

### `record`

| Campo | Descripción |
| - | - |
| `source` | La base de datos de mapas de la ficha: `google_maps`, `naver_place`, `yelp`, `tripadvisor`, o `unknown` cuando la respuesta no lo muestra. |
| `placeId`, `url` | El ID y la página de la ficha en su fuente, como un Google Place ID y su enlace de Google Maps. |
| `name`, `address`, `latitude`, `longitude`, `phone`, `website` | Los datos que muestra el motor. Solo aparecen los campos que trae la respuesta. |
| `category`, `rating`, `reviewCount`, `openState`, `image`, `description` | Más datos tal como los muestra el motor, cuando existen. |
| `position` | El orden de la ficha entre los lugares de la respuesta, desde 1. |
| `provider` | Solo ChatGPT: la fuente que ChatGPT indica para la ficha, como `yelp-feed` o `bright-feed`. |
| `localName` | Solo ChatGPT: el otro nombre de la ficha, como el nombre coreano de un negocio coreano. |
| `resolvedBy` | Solo ChatGPT: `address` cuando ChatGPT encontró la ficha por una dirección que escribió el modelo. Esa ficha puede ser de otro negocio en esa dirección. |
| `closed` | Solo ChatGPT: `permanently` o `temporarily` cuando la ficha aparece como cerrada. |
| `match` | Por qué la ficha es el negocio. `by` enumera los datos que coinciden: `place_id`, `phone`, `website`, `location`, `address` y `name`. `nameScore` es la similitud del nombre de 0 a 1, y `distanceMeters`, la distancia de `place.location` al pin de la ficha. |

### `issues`

| Problema | Significado |
| - | - |
| `phone_mismatch` | El teléfono de la ficha difiere de `place.phone` o, si no lo enviaste, del número que muestra la mayoría de los otros motores. |
| `website_mismatch` | El sitio web de la ficha es otro sitio que `place.website` o, si no lo enviaste, que el sitio que muestra la mayoría de los otros motores. |
| `location_mismatch` | El pin de la ficha está a más de 300 m de `place.location`. |
| `other_business_record` | Probablemente es la ficha de otro negocio en el sitio del tuyo: su teléfono y su sitio web difieren, o ChatGPT la encontró por dirección y uno de los dos difiere. |
| `closed_permanently`, `closed_temporarily` | ChatGPT muestra el lugar como cerrado. |

Un número que comparten todas las sucursales de una cadena, como un número gratuito, no se compara.

### `summary` y `credits`

| Campo | Descripción |
| - | - |
| `summary.foundIn` | Motores que mostraron el negocio. |
| `summary.notFoundIn` | Motores cuyas respuestas terminaron sin él. |
| `summary.failed` | Motores en los que fallaron las dos preguntas. |
| `summary.pending` | Motores que siguen respondiendo y aún no mostraron el negocio. |
| `summary.differences[]` | Dónde no coinciden las fichas de los motores. `field` es `name`, `phone`, `website` o `location`, y `values[]` enumera cada `value` con los `engines` que lo muestran. Una entrada `location` aparece cuando dos pines están a más de 300 m y lleva `spreadMeters`, la mayor distancia entre ellos. |
| `credits` | Créditos cobrados hasta ahora por las preguntas de la consulta. |

`lookup.status` es `PROCESSING` hasta que terminan todos los motores; después, `COMPLETED`. El resultado se evalúa a partir de las respuestas guardadas en cada lectura, y una consulta se puede leer durante 24 horas después de que terminen sus tareas.

## Reenviar una consulta

Cada pregunta es una tarea cuya clave es `{lookup id}:{engine}:{ask}`, como `canlis-2026-10:GEMINI:2`. Envía la misma solicitud con la misma `idempotencyKey`, y la consulta devuelve las tareas que tiene y envía las preguntas que aún no tienen tarea, como las rechazadas por falta de créditos. El mismo id con otro negocio, país o lista de motores devuelve `409 RESOURCE_ALREADY_EXISTS` y no crea nada. Para volver a consultar el negocio más adelante, usa una `idempotencyKey` nueva.

## Concurrencia del plan

Cada pregunta cuenta como una tarea en el límite de concurrencia de tu plan. Una consulta empieza las preguntas para las que tu plan tiene sitio, y las demás esperan en `tasks[]` con `status: "PENDING"`:

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

Una pregunta en espera empieza sola a medida que terminan tus tareas en curso, en menos de un minuto o la próxima vez que leas la consulta, así que una sola solicitud ejecuta la consulta entera. En el plan Free, que permite 2 tareas simultáneas, una consulta ejecuta dos preguntas a la vez y tarda unos minutos. Los planes de pago empiezan en 50 tareas simultáneas, así que una consulta entera empieza de una vez mientras tu cuenta tenga sitio. Las preguntas también esperan mientras la cola de un motor está llena o la clave agotó su límite diario de créditos. El precio de una pregunta se retiene cuando empieza. Si antes se revoca o caduca la clave que envió la consulta, las preguntas en espera terminan como `FAILED` con `API_KEY_INACTIVE` y cuestan 0. Consulta [Créditos y límites](/es/concepts/credits-and-limits.md#concurrencia-del-plan).

## Errores y facturación

Una consulta a los motores predeterminados del país cuesta 10 créditos. Cada pregunta paga su parte: 1 crédito por cada una de las 10 preguntas en `KR`, y 1,25 por cada una de las 8 en los demás países. Una consulta que nombra menos motores paga las preguntas que envía. El precio de cada pregunta se retiene al enviarla y se cobra cuando termina, y una pregunta fallida cuesta 0. Consulta [Créditos y límites](/es/concepts/credits-and-limits.md).

### Rechazos al enviar

| Estado | Código | Causa |
| - | - | - |
| `400` | `VALIDATION_ERROR` | El cuerpo no es JSON válido, falta un campo o no es válido, se envió un campo desconocido o `webhook`, o se preguntó a `NAVER_AI_TAB` fuera de `KR`. `details` indica el campo. |
| `409` | `RESOURCE_ALREADY_EXISTS` | La `idempotencyKey` corresponde a una consulta de otro negocio, país o lista de motores. |

Cuando se rechazan todas las preguntas, el primer rechazo es la respuesta, con su propio estado, como `402 INSUFFICIENT_CREDITS` o `403 KEY_SCOPE_DENIED`, y no se crea nada. Cuando se admiten algunas, la respuesta es `200` y cada pregunta rechazada lleva su `error` en `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"
  }
}
```

### Leer una consulta

`GET /v1/place-lookup/{id}` devuelve `404 RESOURCE_NOT_FOUND` para un id que tu cuenta no ha usado y para una consulta cuyas tareas superaron la ventana de 24 horas. Una pregunta fallida muestra `status: "FAILED"` en `via[]` y un `error` que empieza por su código, como `ENGINE_NO_RESULT`. Los códigos son los de las tareas del motor, y una pregunta en espera que termina antes de empezar lleva `API_KEY_INACTIVE` o `INSUFFICIENT_CREDITS`. Consulta [Errores](/es/concepts/errors.md).

## Próximos pasos

> **[ChatGPT](/es/engines/chatgpt.md)**
>
> Las tarjetas de lugares que muestra ChatGPT, en `map`.

> **[Lotes y cuadrículas](/es/concepts/bulk-submission.md)**
>
> Haz una misma pregunta desde cada punto de una cuadrícula alrededor de un negocio.


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