API-парсер Google Maps и MCP

API-парсер Google Maps выполняет ограниченный поиск компаний из вашего приложения или по запросу агента. Один ключ рабочего пространства с ограниченной областью, явный бюджет задачи и стабильный ключ идемпотентности покрывают каждую повторную попытку. Результаты приходят в JSON, а отсутствующее поле остаётся пустым.

Перед запуском · Для реальных данных нужен настроенный источник данных. Примеры помечены. Платные планы пока недоступны.

Создание ограниченного задания

Подключите ключ с ограниченными правами к REST или HTTP MCP-клиенту. Оценивайте задачи, задавайте бюджеты и получайте структурированные результаты.

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}

Повторяйте ту же операцию с тем же ключом идемпотентности. Изменённый запрос с этим ключом возвращает 409. Задачи проходят статусы: в очереди, выполняется, завершена, частично, сбой, отменена или не определена. Неопределённый запрос к источнику данных требует сверки вместо автоматического платного повтора.

Что такое API-парсер Google Maps?

API-парсер Google Maps принимает категорию и район, возвращает общедоступные карточки в JSON и показывает максимальный бюджет задачи до запуска запроса. У каждой задачи есть ключ с ограниченной областью и ключ идемпотентности. Отзывы — отдельный запрос.

Прочитайте результаты

Завершенные и частично выполненные задания хранят результаты в течение срока хранения вашего рабочего пространства. Читайте их постранично с помощью offset и limit; чтение сохраненных результатов никогда не запускает новый поиск.

Пример ответа, сокращенный. Значения приведены для иллюстрации и не являются реальными данными компаний.

{
  "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 отзывов Google Maps

Запрашивайте отзывы для одного ID компании в рамках одной задачи, до 100 на страницу, с сортировкой по релевантности, новизне, самой высокой или самой низкой оценке. Каждый отзыв содержит текст, оценку, дату, автора и ответ владельца, если он есть. Для следующей страницы нужны отдельная задача и отдельный бюджет.

Сбор отзывов
POST /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"}}

Пример на Python

Получите оценку поиска, создайте задание, дождитесь финального статуса и прочитайте результаты с помощью библиотеки 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"))

API-парсер Google Maps: вопросы

Документация
Это Google Places API?

Нет. MapsScraper.dev является независимым сервисом и не связан с Google. Результаты поступают из стороннего источника данных о компаниях и используют наш собственный формат JSON.

Как API-парсер Google Maps считает стоимость запросов?

Большинство задач расходуют одну единицу. Обогащение контактов при поиске или снимке позиций резервирует ещё одну единицу на каждую запрошенную запись и списывает только за доставленные записи. Сведения о компании расходуют одну единицу, с контактами две; обогащение расходует две. Укажите X-Max-Units не меньше оценки.

Гарантированы ли email и телефоны?

Нет. Покрытие зависит от источника и компании. Необязательное обогащение может дать публичные контакты. Проверяйте отсутствующие или устаревшие данные перед использованием.

Материалы

Ваш следующий список начинается с места.

Изучите процесс на помеченных примерах, затем подключите пространство для реального исследования.

Открыть пример