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 и телефоны?
Нет. Покрытие зависит от источника и компании. Необязательное обогащение может дать публичные контакты. Проверяйте отсутствующие или устаревшие данные перед использованием.
Материалы
Ваш следующий список начинается с места.
Изучите процесс на помеченных примерах, затем подключите пространство для реального исследования.
Открыть пример