Recopilaciones
Recopilaciones
Una recopilación busca en una zona completa, no solo en una página de resultados. Pide una estimación gratis, empiézala y lee los lugares a medida que llegan.
Cuándo necesitas una
Una búsqueda te da hasta 120 lugares. Una ciudad entera tiene muchos más negocios, así que una recopilación divide la zona en cuadros pequeños y busca en cada uno, una vez por cada término. Corre en segundo plano: unos minutos en una zona pequeña y más tiempo en una ciudad.
Los cuadros que alguien ya buscó con el mismo término e idioma en los últimos 180 días ya están guardados. Sus lugares llegan al instante y no cuestan nada. Un cuadro que no trajo lugares cuenta solo por 7 días, y después lo buscamos otra vez. Pagas 1 crédito por cada lugar nuevo que encontramos para ti.
Qué envías
Los primeros cuatro campos funcionan como en una búsqueda. Los dos últimos son solo de las recopilaciones. Una estimación y una recopilación llevan el mismo cuerpo:
| Campo | Qué hace |
|---|---|
keywords | Qué buscar, como ["panadería"]. Al menos un término. Buscamos en cada cuadro una vez por término, así que cada término extra hace que la recopilación tarde más. Los repetidos se descartan y una recopilación admite un número limitado: si lo superas, la respuesta es 400 VALIDATION_ERROR, con el límite en details.limit. |
geo | Dónde buscar, en exactamente una de cuatro formas: una ciudad de Brasil, un punto y un radio, un rectángulo, o el código IBGE de una ciudad y un radio. Búsqueda muestra cada una. |
lang | Dos letras para el idioma de la búsqueda, como en. Los lugares nuevos llegan en ese idioma. Si no lo defines, es pt. |
minRating | Conserva solo los lugares con una calificación igual o mayor que esta, de 1 a 5. Si lo omites, se conservan todos los lugares. |
maxPlaces | El máximo de lugares que te entrega la recopilación. Es también el máximo de lugares nuevos que pagas. Si no lo defines, es el máximo que permite tu plan. |
enrich | Agrega ["emails"] para buscar también correos electrónicos. Consulta Correos electrónicos. |
Una zona grande con muchos términos puede dar más cuadros de los que admite una recopilación. Entonces la respuesta es 400 VALIDATION_ERROR: usa una zona más pequeña o menos términos e inténtalo de nuevo.
Pide primero una estimación
Una estimación te dice cuánto costaría una recopilación antes de empezarla. Es gratis y no inicia nada:
curl -X POST https://api.gmaps.dev/v1/collections/quote \
-H "Authorization: Bearer $GMAPS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"keywords": ["panadería"],
"geo": { "location": "Curitiba, PR" },
"maxPlaces": 500
}'Esta es la respuesta, sin sample:
{
"data": {
"coverage": "partial",
"squaresTotal": 21,
"squaresCovered": 9,
"squaresToSearch": 12,
"placesKnown": 140,
"maxCost": 360
}
}coverage: cuánto de la zona buscamos hace poco.freshes toda,partiales una parte ynewes nada.squaresTotal,squaresCovered,squaresToSearch: los cuadros en que se divide la zona, contados una vez por término. Los cubiertos responden al instante. Cada uno que falta por buscar tarda unos minutos.placesKnown: cuántos lugares ya guardamos ahí. Son gratis.maxCost: lo máximo que puede costar, en créditos. EsmaxPlacesmenos los lugares que ya tenemos, o el doble de eso si pides correos electrónicos. Normalmente cuesta menos, porque nadie sabe cuántos negocios hay en un cuadro hasta que lo buscamos.sample: algunos de los lugares que ya tenemos, para que veas qué hay.
Una estimación revisa tus términos, el tamaño de la zona, maxPlaces y los correos electrónicos igual que al empezar una recopilación. Si la estimación se rechaza, empezar la recopilación también se rechazaría.
Empieza la recopilación
Envía el mismo cuerpo para empezar la recopilación. La respuesta llega al instante, con el estado 202: aceptamos la solicitud y la búsqueda sigue en segundo plano.
curl -X POST https://api.gmaps.dev/v1/collections \
-H "Authorization: Bearer $GMAPS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"keywords": ["panadería"],
"geo": { "location": "Curitiba, PR" },
"maxPlaces": 500
}'Lo que vuelve es la recopilación misma:
{
"data": {
"id": "8c1f5e2a-7b3d-4f60-9e14-2a6d0b9c7f31",
"kind": "collection",
"status": "queued",
"stopReason": null,
"query": {
"keywords": ["panadería"],
"geo": { "location": "Curitiba, PR" },
"lang": "pt",
"minRating": null,
"maxPlaces": 500,
"enrich": []
},
"area": { "lat": -25.4195, "lng": -49.2646, "radiusM": 10000 },
"squaresTotal": 21,
"squaresCovered": 9,
"jobsTotal": 12,
"jobsDone": 0,
"counts": {
"placesDelivered": 140,
"placesFresh": 0,
"placesCached": 140,
"creditsCharged": 0,
"creditsRefunded": 0
},
"error": null,
"queuedAt": "2026-09-24T14:02:11.000Z",
"startedAt": null,
"finishedAt": null,
"cancelRequestedAt": null,
"resultsExpireAt": "2026-10-24T14:02:11.000Z"
}
}Los lugares que ya teníamos guardados están en ella desde el principio. Aquí, counts.placesCached es 140.
Cuando ya se buscó en todos los cuadros, no queda nada por hacer. La recopilación vuelve terminada, con el estado succeeded, y no costó nada.
Empezar una recopilación es gratis. Pagas a medida que llegan los lugares: primero cobramos los créditos de los lugares nuevos, luego los agregamos a tu recopilación, y nunca recibes más de maxPlaces:
- 0Un lugar que ya guardamos llega en la misma respuesta, marcado con
cached: true. - 1Un lugar nuevo que encuentra una recopilación para ti.
- 1Correos electrónicos de un lugar nuevo, en los planes de pago: 1 crédito por lugar, solo cuando encontramos al menos uno.
- 0Búsquedas, estimaciones, exportaciones y consultar tu uso.
- 0Una recopilación que no encuentra nada.
Si envías la misma solicitud mientras sigue en marcha, recibes la misma recopilación. No empiezas una segunda ni pagas dos veces.
Antes de empezar, revisamos dos cosas. Si alguna falla, la respuesta es 429 QUOTA_EXCEEDED:
details.scopeesconcurrency: ya tienes en marcha todas las recopilaciones que permite tu plan. No dejamos la nueva en espera, así que envíala de nuevo cuando termine una, o cancela una antes.details.scopeesdayomonth: llegaste a tu límite diario de créditos o gastaste los créditos de este mes, y aún falta buscar parte de la zona.details.resetAtdice cuándo vuelven. Los créditos que compras ayudan con el mes, no con el día: el límite diario sigue vigente.
Tamaño y cantidad
Cada plan define el máximo de lugares que te entrega una recopilación y cuántas recopilaciones corren a la vez:
| Plan | Lugares por recopilación | Recopilaciones simultáneas |
|---|---|---|
| Free | 500 | 1 |
| Starter | 5000 | 2 |
| Pro | 25.000 | 5 |
| Scale | 100.000 | 10 |
Si pides un maxPlaces mayor que el de tu plan, la respuesta es 400 VALIDATION_ERROR. Los demás límites de tu plan están en Límites, y puedes cambiar de plan en la página Plan.
Síguela
Lee la recopilación otra vez cuando quieras saber hasta dónde llegó. Es gratis:
curl https://api.gmaps.dev/v1/collections/8c1f5e2a-7b3d-4f60-9e14-2a6d0b9c7f31 \
-H "Authorization: Bearer $GMAPS_API_KEY"Para ver los lugares a medida que llegan, abre su progreso en vivo. Para que tu servidor se entere cuando termine, agrega un webhook.
jobsDone de jobsTotal es cuánto avanzó. Buscamos los cuadros por lotes, y cada lote es un paso.
| status | Qué significa |
|---|---|
queued | Aceptada, esperando su turno. Todavía no se busca nada, pero los lugares que ya teníamos guardados están en ella. |
running | Buscando. Llegan lugares nuevos después de cada lote de cuadros. |
succeeded | Terminó. Buscó en toda la zona o se detuvo al llegar a tu maxPlaces. |
partial | Terminó antes de buscar en toda la zona o de llegar a maxPlaces. stopReason dice por qué. Los lugares que llegaron son tuyos. |
failed | No llegó nada, porque no pudimos hacer las búsquedas. error lo explica, y no se cobró nada. |
cancelled | La cancelaste. |
Cuando una recopilación se detiene antes de buscar en toda la zona o de llegar a maxPlaces, o termina sin lugares, stopReason dice por qué:
| stopReason | Qué significa para ti |
|---|---|
null | Buscó en toda la zona, o llegó a tu maxPlaces y dejó el resto de la zona sin buscar. |
quota | Los créditos de este mes se acabaron a mitad de camino, así que no se buscó en el resto de la zona. Agrega créditos en la página Plan o espera a que el mes se reinicie, y empieza la misma recopilación otra vez. Los cuadros que ya buscó vuelven gratis. |
daily_cap | Llegaste a tu límite diario de créditos. Se reinicia a medianoche UTC: después de eso, empieza la misma recopilación otra vez, y los cuadros que ya buscó vuelven gratis. |
cancelled | La cancelaste. Lo que llegó antes es tuyo. |
engine | Un problema de nuestro lado detuvo parte de la búsqueda. No hiciste nada mal. Con partial, te quedas con lo que llegó. Con failed, no se cobró nada. Inténtalo de nuevo en unos minutos y, si sigue pasando, escribe a soporte. |
empty | No encontró lugares, así que no se cobró nada. Eso no significa que no haya negocios ahí. Prueba otros términos, una zona más grande o un minRating más bajo. |
counts es lo que te entregó y lo que eso costó:
placesDelivered: los lugares de la recopilación. Siempre esplacesFreshmásplacesCached.placesFresh: lugares nuevos, buscados por primera vez o de nuevo porque nuestra copia tenía más de 180 días. 1 crédito cada uno.placesCached: lugares que ya teníamos guardados. Gratis.creditsCharged: 1 por cada lugar nuevo, y 1 más cuando encontramos un correo electrónico de ese lugar.creditsRefunded: créditos devueltos. Una recopilación que termina sin lugares devuelve todo lo que cobró.
queuedAt, startedAt y finishedAt dicen cuándo se aceptó, cuándo empezó y cuándo terminó.
Lista tus recopilaciones
Tus recopilaciones llegan de la más reciente a la más antigua. Filtra por status para encontrar las que siguen en marcha. limit acepta de 1 a 100 y vale 20 si no lo defines. offset se salta las primeras, y total dice cuántas hay en total:
curl "https://api.gmaps.dev/v1/collections?status=running" \
-H "Authorization: Bearer $GMAPS_API_KEY"Cancélala
Cancela una recopilación que ya no quieras. Lo que pasa depende de hasta dónde llegó:
curl -X DELETE https://api.gmaps.dev/v1/collections/8c1f5e2a-7b3d-4f60-9e14-2a6d0b9c7f31 \
-H "Authorization: Bearer $GMAPS_API_KEY"- Esperando su turno: se detiene al instante y no cuesta nada.
- En marcha: no empieza nada nuevo. Las búsquedas que ya están en curso terminan, y sus lugares se agregan y se cobran como siempre. Luego su estado pasa a
cancelled.cancelRequestedAtmuestra cuándo lo pediste. - Ya terminó: no hay nada que detener. La respuesta es
409 CONFLICT, con su estado endetails.status, y sus lugares se quedan donde están.
Lee sus lugares
Los lugares vienen en el orden de llegada, del más antiguo al más nuevo, así que una página que ya leíste no cambia mientras llegan más. limit acepta de 1 a 200 y vale 50 si no lo defines:
curl "https://api.gmaps.dev/v1/collections/8c1f5e2a-7b3d-4f60-9e14-2a6d0b9c7f31/places?limit=200" \
-H "Authorization: Bearer $GMAPS_API_KEY"Cada elemento es un lugar completo. Su meta.cached es true cuando ya lo teníamos, así que fue gratis. Así compruebas qué pagaste.
Para la página siguiente, suma limit a offset. Ya leíste todo cuando offset llega a total.
Una página puede traer menos lugares que limit cuando un negocio nos pidió dejarlo fuera, así que no te detengas en una página corta. El counts de la recopilación sigue contando ese lugar y lo que costó.
Cuánto tiempo se quedan sus lugares
Puedes leer los lugares de una recopilación durante 30 días después de empezarla, hasta resultsExpireAt. Después borramos su lista de lugares y su progreso en vivo. La recopilación en sí se queda, con sus conteos y cobros.
Cuando se borran, su página de lugares vuelve vacía y se rechaza cualquier exportación, así que exporta lo que quieras conservar antes de que pase. Para recuperar los lugares, empieza la misma recopilación: los cuadros buscados en los últimos 180 días vuelven gratis.