Google Maps scraper: API y MCP
La Google Maps scraper API ejecuta una búsqueda de negocios acotada desde tu aplicación o un agente. Una clave de espacio de trabajo con permisos limitados, un presupuesto explícito de la tarea y una clave de idempotencia estable cubren cada reintento. Los resultados llegan en JSON y un campo ausente se queda vacío.
Antes de empezar · La investigación en vivo requiere una fuente de datos configurada. Los datos de ejemplo están identificados. Los planes de pago aún no están disponibles.

Crear un trabajo acotado
Conecta una clave con permisos limitados a REST o a un cliente HTTP MCP. Estima tareas, define presupuestos y recupera resultados estructurados.
curl -X POST https://mapsscraper.dev/api/v1/jobs \
-H "Authorization: Bearer $MAPSSCRAPER_API_KEY" \
-H "Idempotency-Key: dentists-austin-tx-001" \
-H "X-Max-Units: 1" \
-H "Content-Type: application/json" \
-d '{"kind":"search","query":"Dentists in Austin, TX","limit":20,"region":"us"}'
HTTP/1.1 202 Accepted
{"id":"6f1c2b3a-0000-4000-8000-000000000000","status":"queued","reserved":1}Reintenta la misma operación con la misma clave de idempotencia. Una solicitud modificada con esa clave devuelve 409. Las tareas pasan por en cola, en ejecución, completada, parcial, fallida, cancelada o incierta. Una solicitud incierta a la fuente de datos requiere conciliación en lugar de una repetición de pago automática.
¿Qué es una Google Maps scraper API?
Una Google Maps scraper API acepta una categoría y una zona, devuelve fichas públicas en JSON y muestra el presupuesto máximo de la tarea antes de ejecutar la solicitud. Cada tarea usa una clave con permisos limitados y una clave de idempotencia. Las reseñas son una solicitud aparte.
Lee los resultados
Los trabajos completados y parciales conservan sus resultados durante el periodo de retención de tu espacio de trabajo. Léelos página a página con offset y limit; leer resultados almacenados nunca ejecuta una nueva investigación.
Respuesta de ejemplo, abreviada. Los valores son ilustrativos, no datos reales de empresas.
{
"items": [
{
"business_id": "sample-business-id",
"name": "Sample Dental Studio",
"full_address": "100 Example Ave, Austin, TX 78701",
"phone_number": "+1 512-555-0100",
"website": "https://dental.example",
"type": "Dentist",
"rating": 4.8,
"review_count": 214,
"latitude": 30.2672,
"longitude": -97.7431,
"_source": {
"provider": "live_maps",
"fetched_at": "2026-11-01T12:00:00Z",
"website_status": "provided_unverified"
}
}
],
"count": 1,
"offset": 0,
"next_offset": null,
"provider": "live_maps",
"coverage": "bounded_sample",
"fetched_at": "2026-11-01T12:00:00Z"
}API de reseñas de Google Maps
Solicita reseñas de un ID de negocio por tarea, hasta 100 por página, ordenadas por relevancia, más recientes o valoración más alta o más baja. Cada reseña incluye su texto, valoración, fecha, autor y la respuesta del propietario, si existe. Una página adicional requiere su propia tarea y su propio presupuesto.
Extractor de reseñasPOST /api/v1/jobs
Idempotency-Key: reviews-sample-business-001
X-Max-Units: 1
{"kind":"reviews","business_id":"sample-business-id","limit":50,"review_options":{"sort_by":"newest"}}Ejemplo en Python
Estima una búsqueda con la Google Maps scraper API, crea el trabajo, espera a un estado final y lee los resultados con la biblioteca requests.
import os
import time
import uuid
import requests
API = "https://mapsscraper.dev/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['MAPSSCRAPER_API_KEY']}"}
task = {"kind": "search", "query": "Dentists in Austin, TX", "limit": 20, "region": "us"}
# An estimate reserves nothing.
units = requests.post(f"{API}/estimate", json=task, headers=HEADERS, timeout=30).json()["units"]
# Keep the key: a retry of the same task must send it again.
key = str(uuid.uuid4())
job = requests.post(
f"{API}/jobs",
json=task,
headers={**HEADERS, "Idempotency-Key": key, "X-Max-Units": str(units)},
timeout=30,
)
job.raise_for_status()
job_id = job.json()["id"]
while True:
status = requests.get(f"{API}/jobs/{job_id}", headers=HEADERS, timeout=30).json()["status"]
if status not in ("queued", "running"):
break
time.sleep(5)
if status in ("completed", "partial"):
page = requests.get(
f"{API}/jobs/{job_id}/results",
params={"offset": 0, "limit": 100},
headers=HEADERS,
timeout=30,
).json()
for business in page["items"]: # follow page["next_offset"] for more
print(business.get("name"), business.get("phone_number"), business.get("website"))Preguntas sobre la Google Maps scraper API
Documentación¿Es esta la Google Places API?
No. MapsScraper.dev es un servicio independiente y no está afiliado a Google. Los resultados provienen de una fuente de datos empresariales de terceros y usan nuestro propio formato JSON.
¿Cómo se cobran las solicitudes?
En la Google Maps scraper API, la mayoría de las tareas usan una unidad. El enriquecimiento de contactos en una búsqueda o captura de posiciones reserva una unidad más por registro solicitado y solo cobra los registros entregados. Los detalles de empresa usan una unidad, o dos con contactos; el enriquecimiento usa dos. Fija X-Max-Units en al menos la estimación.
¿Se garantizan correos y teléfonos?
No. La cobertura depende de la fuente y la empresa. El enriquecimiento opcional puede aportar contactos públicos; verifica los datos ausentes o desactualizados antes de usarlos.
Recursos
Tu próxima lista empieza por un lugar.
Explora el flujo con registros de ejemplo identificados y conecta tu espacio para investigar datos reales.
Explorar un ejemplo