Наша собственная статистика посещений включена всегда. Google Analytics помогает нам понять, как пользуются нашими публичными страницами (но не вашим рабочим пространством после входа), и включается только с вашего разрешения. См. нашу политику конфиденциальности.

Как парсить отзывы Google Maps: Places API, Python или API данных

Places API возвращает не более 5 отзывов на место. Мы протестировали три способа, посчитали их стоимость за 1 000 отзывов и делимся экспортёром в CSV на Python.

Изометрическая иллюстрация: городские кварталы с метками на карте. Карточки отзывов поднимаются из магазинов и по бирюзовому конвейеру уезжают в лоток, который обозначает одну аккуратную таблицу отзывов.

У стоматологической клиники в Остине (Техас) в карточке Google Maps рейтинг 4.6 звезды. Средняя оценка её 200 последних отзывов составляет 4.305 звезды, а 13% из них поставили одну звезду. В официальном Places API этого разрыва не видно: он возвращает не более пяти отзывов на место, отобранных по релевантности. 2 ноября 2026 года мы проверили три способа получить компании и отзывы из Google Maps. Это официальный Places API, самописный парсер на Python и API данных с оплатой за каждый вызов. В руководстве показано, что возвращает каждый способ, сколько он стоит за 1 000 отзывов и где перестаёт работать.

Иллюстрация: три дороги, ведущие к одному городскому кварталу. Платный шлагбаум, дорога на ремонте и бирюзовый конвейер с карточками отзывов.
У официального API есть жёсткий лимит, самописный парсер требует поддержки, а API с оплатой за вызов берёт плату за каждый запрос.

Данные из отзывов с каждым месяцем становятся важнее. 8 октября 2026 г. Google опубликовал первые подборки Fan-Favorite Dining Lists, составленные на основе отзывов, оценок и запросов на построение маршрута [18]. 21 октября 2026 г. в Google Maps появились диалоги с Gemini в Apple CarPlay [19]. Search Engine Land приводит данные Google: Ask Maps может использовать отзывы более чем 500 миллионов авторов [20].

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

Сначала определитесь, что вам нужно

Люди, которые ищут, как парсить Google Maps, решают очень разные задачи. Отделу продаж нужны название, телефон, сайт и рейтинг каждой стоматологии в агломерации. Владельцу франшизы нужны все отзывы о 40 точках, чтобы быстро отвечать на жалобы. Продуктовой команде нужны отзывы о конкуренте с оценкой в одну звезду за последний квартал.

Исследователю нужно распределение оценок 500 ресторанов в одном районе. Только первая задача сводится к списку компаний. Для остальных трёх нужны отзывы, и подходящий способ определяют количество отзывов, диапазон дат и владелец карточки.

Поэтому, прежде чем сравнивать цены, ответьте на три вопроса. Первый: сколько отзывов вам нужно на одно место и хватит ли пяти? Второй: являются ли эти места вашими собственными подтверждёнными точками в Google Business Profile? Третий: готов ли кто-то в вашей команде годами поддерживать браузерный парсер и пул прокси? Блок-схема ниже разделяет способы по этим трём вопросам. В каждом следующем разделе один способ проверяется реальными запросами или построчным разбором официальной документации.

Блок-схема. Слева три блока с вопросами: хватит ли пяти отзывов на место, принадлежит ли вам карточка и готовы ли вы поддерживать парсер. Каждый ответ «да» указывает вправо — на официальный Places API, Business Profile API или самописный парсер на Python. Три ответа «нет» ведут по бирюзовой стрелке к API данных с оплатой за вызов.

Business Profile API включён в схему, потому что о нём забывают многие команды. Владельцам подтверждённых точек Google предоставляет API, который выдаёт все их отзывы [11]. Отзывы можно сортировать по оценке или времени обновления; на одной странице выводится до 50 отзывов [12]. Для работы нужны согласие пользователя через OAuth и подтверждённая точка.

Читать отзывы о конкурентах он не умеет. В таблице ниже четыре подхода сравниваются бок о бок. Каждая ячейка — факт, который мы проверяем или сверяем далее в этом руководстве.

ПодходОтзывов на местоПорядок и пагинацияСтоимость за 1 000 отзывовОсновная издержка
Официальный Places API (Place Details)До 5Только по релевантности, без пагинации$0 в пределах бесплатного лимита, затем около $5,00Жёсткий лимит, обязательно указывать авторство
Business Profile APIВсе отзывы, но только для ваших точекПо оценке или времени обновления, 50 на страницу$0Только ваши подтверждённые точки
Самописный парсер на Python с браузеромСтолько, сколько показывает страницаИмитация прокруткиСерверы и прокси оплачиваются дополнительноИзменения страницы, риск нарушения условий
API данных EveryInfra400 записей для каждого порядка сортировки, 100 за вызовСначала новые или по релевантности, токены страниц$0,01389 при 100 отзывах за вызовОплата за вызов, асинхронно после 200 записей

Путь 1: что даёт официальный Places API

Начнём с самого Google. В Places API (New) у ресурса Place есть поле reviews. В справочнике оно описано как список отзывов о месте, отсортированный по релевантности. Там же сказано, что может быть возвращено не более пяти отзывов [1]. Ограничение не зависит от тарифного уровня. Токена страницы для отзывов тоже нет. Мы сделали скриншот этой строки и выделили её бирюзовой рамкой.

Скриншот справочной страницы Places API в Google Maps Platform. Бирюзовая рамка выделяет строку reviews в списке полей ресурса Place. В тексте сказано, что список отсортирован по релевантности и может быть возвращено не более 5 отзывов.
Скриншот справочника Places API, просмотренного 2 ноября 2026 г. Для поля reviews указан максимум 5 отзывов с сортировкой по релевантности. Документация Google Maps Platform

Запрос простой. Place Details (New) — это GET-запрос с ID места в пути и обязательной маской полей в заголовке [2]. Маска полей сообщает Google, какие поля вам нужны. Ниже — пример конфигурации на основе официальной документации. С ключом Google мы его не запускали.

bash
# Configuration example (not run): rating, review count and up to 5 reviews for one place
curl -s "https://places.googleapis.com/v1/places/ChIJl6T2cnbMRIYR7eD538S3oWU" \
  -H "X-Goog-Api-Key: $GOOGLE_MAPS_API_KEY" \
  -H "X-Goog-FieldMask: displayName,rating,userRatingCount,reviews"

От маски полей зависит стоимость запроса. Google тарифицирует каждый запрос по SKU самого дорогого поля в маске. Поле reviews относится к SKU Place Details Enterprise + Atmosphere, поэтому любой запрос, в котором запрашиваются отзывы, оплачивается по этой ставке [3][5]. 1 марта 2025 г. Google заменил прежний ежемесячный кредит в размере $200 бесплатными лимитами для каждого SKU.

Месячные лимиты составляют 10 000 вызовов для SKU Essentials, 5 000 для Pro и 1 000 для Enterprise [4]. Мы сверялись с прайс-листом 2 ноября 2026 года. На странице обзора биллинга указано, что она последний раз обновлялась 2026-10-30 [4]. В таблице приведены позиции, важные для этого руководства, в долларах США за 1 000 запросов.

SKU (Places API New)Бесплатно в месяцДо 100 тыс.100–500 тыс.500 тыс.–1 млн1–5 млнСвыше 5 млн
Place Details Pro5,000$17.00$13.60$10.20$5.10$1.28
Place Details Enterprise1,000$20.00$16.00$12.00$6.00$1.51
Place Details Enterprise + Atmosphere (с отзывами)1,000$25.00$20.00$15.00$7.50$2.28
Text Search Pro5,000$32.00$25.60$19.20$9.60$2.40
Text Search Enterprise + Atmosphere1,000$40.00$32.00$24.00$12.00$3.40

По этой таблице один вызов Place Details стоит $0.025 и возвращает не более пяти отзывов. На первом платном уровне это $5.00 за 1 000 отзывов. При объёме свыше пяти миллионов вызовов в месяц ставка снижается до $2.28 за 1 000 вызовов, но это всё равно $0.456 за 1 000 отзывов. Бесплатный лимит тоже важен. Если вам нужно по пять отзывов для каждого из 1 000 мест в месяц, официальный API ничего не стоит. Мы вернёмся к этому случаю в разделе о том, когда лучше выбрать официальный API.

Горизонтальная столбчатая диаграмма в логарифмической шкале. На ней показана стоимость 1 000 отзывов в долларах США. Первый платный уровень Places API стоит $5.00. Уровень Places API свыше 5 млн вызовов стоит $0.456. Вызов отзывов EveryInfra при 100 отзывах за вызов стоит $0.01389 и выделен бирюзовым цветом.

Что можно хранить и показывать, определяют ещё три правила использования. Во-первых, согласно правилам Places API, рядом с каждым отзывом нужно показывать атрибуцию автора: фото, имя и ссылку на профиль [7]. Во-вторых, ID места можно хранить долго, но большую часть остального контента кешировать нельзя. Значит, собственную долговременную базу отзывов из результатов официального API построить не получится [7]. Google также рекомендует обновлять ID мест старше 12 месяцев [8]. В-третьих, отзывы всегда сортируются по релевантности.

Третье правило чаще всего вызывает жалобы на форумах разработчиков. В вопросе на Stack Overflow 2016 года спрашивают, как получить из Places API больше пяти отзывов [39]. В вопросе 2019 года спрашивают, как получить самые свежие отзывы [40]. Оба обсуждения упираются в одно и то же ограничение в пять отзывов. В обсуждении в сабреддите r/learnpython новичок задаёт тот же вопрос [41]. С новой версией API ответ не изменился.

С 8 мая 2025 года Places API может также возвращать сводку отзывов, которую пишет Gemini [9][10]. Сводка не является сырыми данными, поэтому подсчитать по ней звёзды нельзя.

Путь 2: собственный парсер на Python и где он перестаёт работать

Многие руководства о том, как парсить Google Maps на Python, начинают с requests и BeautifulSoup. Мы попробовали этот первый шаг 2 ноября 2026 года в 00:19:50 SGT. Мы отправили один обычный HTTP GET средствами стандартной библиотеки Python на страницу ресторана в Сингапуре в Google Maps. Статус был 200, страница весила 210 679 байт и содержала 12 тегов script.

Заголовок страницы был просто «Google Maps». Название ресторана встречалось только в повторе нашего собственного URL. Количества отзывов (8 226) на странице не было. Не было на ней и ни одного из 20 фрагментов отзывов, полученных через API.

Значит, отзывы загружаются только после выполнения JavaScript в браузере. Собственному парсеру нужна автоматизация браузера, например Playwright [37]. Набросок ниже показывает типичную структуру. Он открывает страницу места, нажимает вкладку «Отзывы», прокручивает панель отзывов и считывает текст из элементов страницы. Мы его не запускали, потому что массовый автоматический парсинг страниц Google Maps нарушает условия использования сервиса. Мы приводим его только для того, чтобы показать объём работы.

python
# Configuration example (not run): the usual structure of a browser review scraper
from playwright.sync_api import sync_playwright

PLACE_URL = "https://www.google.com/maps/place/?q=place_id:ChIJl6T2cnbMRIYR7eD538S3oWU&hl=en"

with sync_playwright() as p:
    browser = p.chromium.launch(headless=True)
    page = browser.new_page(locale="en-US")
    page.goto(PLACE_URL, wait_until="networkidle")
    page.get_by_role("tab", name="Reviews").click()          # breaks when the label changes
    panel = page.locator("div[role='feed']")                  # a guessed selector that changes often
    for _ in range(30):                                       # about 10 more reviews per scroll
        panel.evaluate("el => el.scrollBy(0, el.scrollHeight)")
        page.wait_for_timeout(1200)
    texts = page.locator("[data-review-id] span").all_inner_texts()
    print(len(texts))
    browser.close()

Каждая строка этого наброска делает ставку на то, что страница не изменится. Название вкладки, селектор панели, число отзывов за одну прокрутку и язык страницы могут измениться. Один релиз фронтенда у Google или одна страница проверки для вашего IP-адреса, и скрипт перестаёт работать. Чтобы оценить затраты на поддержку, мы изучили один из самых популярных по числу звёзд open-source-парсеров Google Maps на GitHub [32]. На 2 ноября 2026 г. у него было 7 148 звёзд, 1 112 форков и лицензия MIT, а последний push был 21 октября 2026 г.

С 13 июля по 20 сентября 2026 года проект выпустил восемь релизов: от v1.16.3 до v1.18.1 [36]. После 1 августа в разделе Issues открыли пятнадцать тем. В таблице приведены темы, связанные с отзывами или сбоями задач. Заголовки пересказаны, а ссылки приведены в списке источников [33][34][35].

ДатаIssueЧто сообщили пользователиСтатус
2026-09-01#327Опция дополнительных отзывов возвращает всего около 10 отзывов, а внутренний эндпоинт отзывов возвращает ошибку 403 (v1.17.4)Открыт
2026-09-23#331Много ошибок движка парсинга во время запусковЗакрыт
2026-10-05#337После обновления до v1.18.0 список задач в веб-интерфейсе остаётся пустым, а кнопка запуска ничего не делаетОткрыт
2026-10-06#338Все задачи парсинга падают, потому что страница или контекст браузера закрылисьОткрыт
2026-10-09#341Заголовок: «300 Reviews per place»Открыт
2026-10-22#346Веб-задача зависает в рабочем состоянии, потому что контекст браузера не закрываетсяОткрыт

Это не оценка качества кода. Проект с 7 000 звёзд и восемью релизами за десять недель всё равно каждые несколько недель сталкивается с проблемами «только 10 отзывов» и «все задачи падают». Причина в изменениях на стороне Google, а не в слабом коде. Задачи (issues) #337 и #346 [42][43] показывают издержки другого рода. Они никак не связаны с Google и вызваны самой автоматизацией браузера.

Парсер отзывов, который работает месяцами, — это небольшой сервис с дежурным инженером, а не скрипт на выходные. Нужно управлять запуском и остановкой браузеров, памятью, параллельными запросами, таймаутами, прокси и выходными IP-адресами. Если вы пишете свой парсер, вы к тому же теряете сообщество, которое первым находит проблемы. Заложите эту работу в бюджет, прежде чем сравнивать её с ценой за вызов.

Собственные парсеры также игнорируют robots.txt. Тогда же мы скачали google.com/robots.txt [16]. В строке 86 указано Disallow: /maps/, а в строке 74 — Disallow: /maps?. В файле также есть строки Allow для /maps/place/ и /maps/search/.

Согласно RFC 9309, побеждает самое длинное совпадающее правило, поэтому обычные пути страниц мест разрешены. Другие пути под /maps/ без строки Allow попадают под запрет [17]. RFC 9309 также указывает, что правила robots не являются формой авторизации доступа [17]. Реальное ограничение задают условия использования.

Условия использования, судебные дела и персональные данные

Начнём с договора. Если вы клиент Google Maps Platform, раздел 3.2.3(a) условий платформы называется «No Scraping». В нём сказано, что клиенты не будут экспортировать, извлекать или иным образом парсить контент Google Maps для использования вне сервисов [13]. Для обычных пользователей дополнительные условия Google Maps запрещают массовое скачивание и пакетные выгрузки контента [14]. Последний раз Google изменил эти условия 27 января 2026 года. Они также запрещают использовать Google Maps для создания или дополнения других картографических наборов данных, и базы данных компаний входят в этот список [14].

Итак, ни официальный API, ни собственный парсер не позволяют создать копию контента Google. Суды США рассматривали более широкий вопрос. 18 апреля 2022 года Апелляционный суд девятого округа постановил в деле hiQ Labs v. LinkedIn, что парсинг публичных веб-данных, скорее всего, не является доступом «без авторизации» по смыслу Computer Fraud and Abuse Act [21].

23 января 2024 года Окружной суд Северного округа Калифорнии вынес решение в порядке упрощённого судопроизводства (summary judgment) в пользу компании по сбору данных, на которую подала в суд Meta Platforms (дело 3:23-cv-00077). Суд установил, что Meta не доказала, что её условия запрещали парсинг публичных данных без входа в аккаунт [22].

На эти два решения часто ссылаются, чтобы утверждать, что парсинг публичных данных законен. Но они отвечают на конкретные правовые вопросы о конкретных формулировках договоров. Они не говорят, что нарушение условий ничем не грозит, и не применяются за пределами США. Это руководство не является юридической консультацией. Перед коммерческим использованием проконсультируйтесь с юристом.

Далее — персональные данные. Имена, фото и ссылки на профили авторов отзывов являются персональными данными. В Калифорнии закон California Consumer Privacy Act (CCPA) даёт потребителям права на данные, которые собирают компании. Генеральный прокурор штата обновил свою страницу о CCPA 28 августа 2026 года [23]. В Европейском союзе действует GDPR [24].

В Сингапуре действует Personal Data Protection Act [25][26], а Мексика 20 марта 2025 года опубликовала новый федеральный закон о защите данных [27]. Для большинства задач анализа личность автора отзыва не нужна. Сохраняйте оценку, дату, текст и ответ владельца, а имена и фото отбрасывайте. Наш экспортёр в CSV ниже так и делает.

Если вы копируете отзывы о других компаниях на свою страницу, на вас также распространяются правила Google в отношении фиктивной активности в пользовательском контенте [15].

Путь 3: API данных с оплатой за вызов

Третий путь — API данных с оплатой за каждый вызов. Вы отправляете один запрос, а сервис возвращает структурированные данные о компаниях или отзывах. Он сам справляется с браузерами, прокси и изменениями страниц и берёт плату за каждый вызов. На этом рынке есть несколько моделей оплаты. Распространены облачные платформы парсинга с оплатой за результат, API поисковой выдачи с оплатой за запрос и API данных с оплатой за вызов. EveryInfra использует последнюю модель.

Это практическое руководство, а не таблица цен поставщиков. Оно посвящено тому, как выполнять вызовы, как выглядят данные и в каких случаях возникают сбои. Стоимость и единица тарификации EveryInfra указаны на странице API для парсинга отзывов Google Maps.

API для парсинга отзывов Google Maps на EveryInfra включает четыре возможности. google_maps_reviews/search находит места по ключевому слову и местоположению. google_maps_reviews/profile возвращает сведения об одном месте. google_maps_reviews/reviews возвращает отзывы об одном месте. google_maps_reviews/contributor_reviews возвращает отзывы, написанные одним автором.

Мы сверились с публичным каталогом 2 ноября 2026 года в 00:14:03 SGT. Вызов любой из четырёх возможностей стоит $0,001389. Поиск возвращает до 50 мест за вызов и до 120 записей на всех страницах. Запрос отзывов возвращает до 100 отзывов за вызов и до 400 записей на всех страницах.

Синхронный запрос доходит до 200-й записи, для более глубоких страниц нужна асинхронная задача. Для отзывов есть два порядка сортировки: newest и relevance. Параметр since ограничивает результаты отзывами после указанной даты, а lang задаёт язык отзывов.

Вот один запрос отзывов для клиники в Остине. Самый надёжный идентификатор места — URL его страницы в Google Maps, содержащий ID места.

bash
curl -s https://api.everyinfra.com/api/v1/social \
  -H "Authorization: Bearer $EVERYINFRA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"platform":"google_maps_reviews","action":"reviews",
       "params":{"url":"https://www.google.com/maps/search/?api=1&query=Swish%20Dental%20-%20Domain&query_place_id=ChIJl6T2cnbMRIYR7eD538S3oWU",
                 "sort":"newest","limit":100}}'

Мы отправили этот запрос в 00:20:36 SGT. Он вернул 100 отзывов, а billing.charged_usd составил 0.001389. Поле pagination.has_more в ответе имело значение true, также был возвращён next_page_token. Чтобы получить следующую страницу, отправьте тот же запрос, передав этот токен в page_token без изменений. На скриншоте ниже показан реальный ответ для ресторана в Сингапуре в 00:15 SGT, имена авторов отзывов скрыты.

Скриншот ответа API на тёмной карточке с кодом. В заголовке: POST /api/v1/social, google_maps_reviews/reviews, 2026-11-02 00:15 SGT. Бирюзовыми рамками выделены count 100 и charged_usd 0.001389 над двумя записями отзывов со скрытыми именами авторов.
Фрагмент реального ответа со скрытыми именами авторов. Один вызов вернул 100 отзывов, списано $0,001389. Реальный ответ API EveryInfra

Каждая запись отзыва содержит поля из каталога. В таблице приведены наиболее важные для анализа поля и подсчёты по 200 последним отзывам о клинике в Остине. Два из них, detailed_rating и owner_response, отсутствуют в объекте отзыва официального Places API.

ПолеОписаниеВ 200 последних отзывах о клинике в Остине
ratingОт 1 до 5 звёзд200 из 200
posted_atВремя публикации в UTC200 из 200
textТекст отзыва, может быть пустым130 с текстом (65%)
owner_response и owner_response_atОтвет владельца и время ответа146 (73%)
detailed_ratingЧастные оценки, например за еду или обслуживание0 у этой клиники
image_urlsФото, прикреплённые к отзыву3
is_local_guide и reviewer_review_countПризнак Local Guide и число отзывов автора58 от Local Guides
like_countГолоса «Полезно»200 из 200
id, url и place_idИдентификаторы отзыва и места200 из 200

Вызов профиля google_maps_reviews/profile в 00:20:02 SGT вернул данные клиники: 4,6 звезды, 1 659 отзывов, адрес, телефон, сайт, часы работы и координаты. Вызов поиска google_maps_reviews/search в 00:17:10 SGT выполнялся с ключевым словом «dentist» и местоположением «Austin, TX». Страница 1 вернула 50 мест.

Страница 2 начиналась с записи 51, поэтому синхронный запрос в 00:23:59 SGT вернул ошибку 422 с требованием перейти в асинхронный режим. Асинхронная задача в 00:24:22 SGT вернула ещё 50 мест. После дедупликации по place ID у нас осталось 100 разных клиник, и у 99 из них адрес в Остине. Для списка лидов для продаж больше ничего не нужно. Если вы объединяете результаты нескольких поисков, пригодится наше руководство по дедупликации по place ID.

Тест 1: стоматологическая клиника в Остине — рейтинг в карточке и оценки в новых отзывах

Этот тест отвечает на один вопрос покупателя из США. Говорит ли рейтинг в карточке о том, как обстоят дела у клиники сейчас? Мы выгрузили 200 самых новых отзывов о Swish Dental в районе Domain в Остине с двух страниц, в 00:20:36 и 00:23:41 SGT. В карточке указан рейтинг 4,6 звезды на основе 1 659 отзывов.

Средняя оценка 200 самых новых отзывов — 4,305 звезды, это примерно на 0,3 звезды ниже рейтинга в карточке. Отзывов на пять звёзд 156, на четыре 7, на три 5, на две 6 и на одну 26. Отзывы на одну звезду составляют 13% выборки. Клиника ответила на 146 из 200 отзывов, так что отзывами явно кто-то занимается.

Для пациента, инвестора или конкурента 200 самых новых отзывов говорят больше, чем общий рейтинг. Рейтинг в карточке учитывает отзывы за многие годы. Скопление новых отзывов на одну звезду может означать изменения в составе персонала, работе регистратуры или выставлении счетов. Официальный Places API не может показать такое скопление, потому что возвращает пять отзывов, отобранных по релевантности.

Анализ текста показывает другую картину. Из 26 отзывов на одну звезду текст есть у 24 (92%), медианная длина составляет 361,5 символа. Из 156 отзывов на пять звёзд текст есть только у 89 (57%), медиана — 119 символов. Недовольные пациенты объясняют, почему поставили низкую оценку.

Довольные пациенты часто ставят только оценку в звёздах. Если вы изучаете только отзывы с текстом, то придаёте негативным отзывам больший вес. Если вы изучаете только оценки в звёздах, то упускаете полезные подробности из жалоб.

Сгруппированная столбчатая диаграмма. Она сравнивает рейтинг в карточке со средней оценкой самых новых отзывов для трёх мест. Ресторан в Сингапуре: 4,4 в карточке и 4,65 по 300 самым новым отзывам. Стоматологическая клиника в Остине: 4,6 и 4,305 по 200 самым новым отзывам. Такерия в Мехико: 4,2 и 4,275 по 200 самым новым отзывам. Столбцы самых новых отзывов бирюзовые.

Тест 2: пять релевантных отзывов против 300 свежих

Второй тест показывает, как ограничение в пять отзывов влияет на ваше представление о месте. Мы взяли ресторан Song Fa Bak Kut Teh по адресу 11 New Bridge Road в Сингапуре. В его карточке указаны 4,4 звезды, 8 226 отзывов и 18 685 фотографий. В 00:16:10 SGT мы выгрузили 100 самых релевантных отзывов.

Мы также выгрузили 300 самых новых отзывов с трёх страниц. Страницы 1 и 2 получили синхронными вызовами в 00:15:29 и 00:16:42 SGT, а страницу 3 — с помощью асинхронной задачи в 00:18:27 SGT. Первые пять отзывов по релевантности здесь заменяют пять отзывов, которые возвращает официальный API.

Средняя оценка топ-5 — 4,8 звезды. У всех пяти есть текст и фото, медианная длина текста — 517 символов. Все пять авторов — Local Guides, даты отзывов — с апреля по июль 2026 года. Средняя оценка топ-100 по релевантности — 4,5 звезды, у всех есть текст, медианная длина — 357 символов. Их даты — с 2016 года по сентябрь 2026 года. Средняя оценка 300 самых новых — 4,65 звезды, текст есть только у 63%, медианная длина — 67 символов.

Точечная диаграмма средней оценки для четырёх наборов отзывов об одном ресторане в Сингапуре. Карточка: 4,4 на основе 8 226 отзывов; топ-5 по релевантности: 4,8; топ-100 по релевантности: 4,5; 300 самых новых: 4,65. Ось охватывает диапазон от 4,0 до 5,0, точка топ-5 выделена бирюзовым.

Google не раскрывает свой метод ранжирования по релевантности. По данным видно, что при отборе предпочтение отдаётся длинным отзывам с фотографиями от активных авторов, а такие отзывы, как правило, положительные. Если судить о месте по пяти отзывам из официального API, вы увидите самые показательные положительные отзывы, а не мнение среднего клиента за последнее время. У топ-100 по релевантности и 300 самых новых совпадает только 21 отзыв, поэтому это почти две разные выборки.

Столбчатая диаграмма медианной длины текста у отзывов с текстом. Топ-5 по релевантности — 517 символов. Топ-100 по релевантности — 357 символов. 300 самых новых — 67 символов. Подписи показывают долю отзывов с текстом: 100%, 100% и 63%.

Отзывы без текста легко упустить. Среди 300 самых новых у 111 отзывов есть звёзды, но нет слов, это 37%. Для анализа ключевых слов или тональности эти 37% пусты. Для тренда оценок эти 37% — та часть выборки, которую не искажают авторы длинных отзывов. Двум видам анализа нужны разные данные, поэтому API отзывов должен возвращать и звёзды, и текст, а не только сводку.

Тест 3: такерия в Мехико и ловушка с местоположением

Третье место — Tacos Chupacabras в Койоакане, Мехико. В карточке указано 4,2 звезды, 18 361 отзыв и ценовой диапазон от 100 до 200 MXN. Мы выгрузили 200 самых новых отзывов с lang: es419 в 00:23:05 и 00:23:24 SGT. Их средняя оценка — 4,275 звезды, близко к рейтингу в карточке. Отзывов на пять звёзд 121, на четыре 42, на три 21, на две 3 и на одну 13. Текст есть только у 55,5%, медианная длина — 69 символов, и владелец не ответил ни на один отзыв.

Если сравнить три места, распределения оценок окажутся разными. У стоматологии много отзывов на пять и на одну звезду и мало в середине. У такерии больше отзывов на три и четыре звезды, это типичная картина «отличная еда, длинная очередь». Одно среднее значение скрывает оба распределения.

Нормированная (100%) столбчатая диаграмма с накоплением: распределение оценок в самых новых отзывах. Сингапур, 300 отзывов: 228 на пять, 52 на четыре, 13 на три, 1 на две, 6 на одну. Остин, 200 отзывов: 156 на пять, 7 на четыре, 5 на три, 6 на две, 26 на одну. Мехико, 200 отзывов: 121 на пять, 42 на четыре, 21 на три, 3 на две, 13 на одну.

Поиски в Мехико также выявили проблему с параметром местоположения. В 00:17:32 SGT мы искали «taquería» с местоположением «Ciudad de México». Все 50 результатов были в Мексике, но только 1 из них в Мехико. Остальные 49 находились в 11 других штатах: 14 в Сакатекасе, 7 в Нуэво-Леоне, 6 в Чиуауа и 6 в Халиско.

В 00:19:39 SGT мы указали место в ключевом слове: «taquería en Coyoacán, Ciudad de México». Все 50 результатов оказались в Мехико, из них 47 в Койоакане. В поиске по Остину использовалось местоположение «Austin, TX». Там 99 из 100 результатов были в Остине, а последний — в соседнем Уэст-Лейк-Хиллз.

Причину мы пока не знаем. Два запроса различаются сразу по нескольким признакам. Вызов для Мехико также передавал language: es, а местоположение для Остина включало код штата. Одна пара тестов не позволяет определить, какое именно различие важно. Пока причина неизвестна, указывайте город и даже район в ключевом слове. Сначала запустите поиск одной страницы и посчитайте, сколько результатов попало в нужный город.

Столбчатая диаграмма доли результатов поиска внутри целевого города. Мехико с параметром местоположения: 1 из 50. Мехико с местом в ключевом слове: 50 из 50. Остин с параметром местоположения: 99 из 100. Столбец с ключевым словом бирюзовый.

Сортировка по новизне не строго хронологическая

Команды, которые отслеживают отзывы, часто пишут один и тот же цикл. Они сортируют по новизне, читают одну страницу и останавливаются на первом отзыве старше последнего сохранённого отзыва. Мы проверили каждую запись в трёх наборах, отсортированных по новизне. Запись нарушает порядок, если время её публикации позже, чем у записи над ней. В Сингапуре таких записей было 6 из 300, в Мехико — 18 из 200, а в Остине — 50 из 200, то есть 25%. В сингапурском наборе среди отзывов за 2026 год также оказались два отзыва за 2023 год.

Столбчатая диаграмма записей, нарушающих хронологический порядок, в отзывах, отсортированных по новизне. Сингапур: 6 из 300. Мехико: 18 из 200. Остин: 50 из 200, то есть 25%.

Так ведёт себя сам Google Maps, а не API. Отредактированные отзывы и отзывы с новыми ответами владельца могут нарушать хронологический порядок. Эффект реальный: цикл «остановиться на первом старом отзыве» может пропустить данные. Есть два рабочих решения. Прочитайте ещё одну страницу перед остановкой или используйте since, чтобы API возвращал только отзывы после указанной даты. Затем отсортируйте данные по posted_at сами. Экспортёр в CSV ниже последним шагом сортирует данные заново.

Сбои и возврат средств: как выглядят реальные ошибки

Главное опасение при оплате за вызов — списание за неудачный вызов. Во время тестов мы получили шесть типов ошибок: некоторые вызвали намеренно, а некоторые — случайно. В таблице они приведены в том виде, в каком их вернул API. Все отметки времени указаны в SGT за 2 ноября 2026 года.

Время (SGT)Что мы сделалиОтветСписаниеСледующий шаг в ответе
00:15:56Запросили страницу 2 сразу после страницы 1, превысив лимит в 10 запросов в минуту429 rate_limited, retry_after 4 секундыНетПодождать и повторить попытку
00:16:03Отправили пустой токен страницы422 invalid_page_tokenНетПередавать next_page_token в том виде, в каком он получен
00:17:00Запросили страницу 3 отзывов в синхронном режиме (после 200-й записи)422 async_requiredНетДобавить "mode":"async" и проверять статус задачи
00:20:55Задали в since будущую дату 2026-11-30200, 0 отзывов, empty_result_refundedВозврат средств, $0Нет
00:21:38Отправили URL, который не является страницей карты503, можно повторить, retry_after 20 секундВозврат средств, $0Указано, что это сбой 1 из 3
00:22:07Задали для sort значение oldest422 invalid_value, допустимые значения newest и relevanceНетИзменить только sort и отправить снова

Одну из этих ошибок стоит улучшить. Неверный URL возвращает 503 с возможностью повтора, а не 422 с указанием неверного параметра. Вы ничего не платите, но клиент, который трижды повторяет каждый 503, около минуты ждёт и ничего не получает. Остальные пять ошибок соответствуют документации. Ошибки параметров и превышение лимита запросов бесплатны, за пустые результаты средства возвращаются, а каждое сообщение об ошибке перечисляет допустимые значения и следующий шаг.

Для случая с URL достаточно проверки в вашем коде. Все ссылки на места в этом руководстве начинаются с https://www.google.com/maps/:

python
if not url.startswith("https://www.google.com/maps/"):
    raise ValueError("not a Google Maps place link")

Обратите внимание, когда списываются средства за асинхронные задачи. Списание происходит при отправке задачи, а не при получении результата. Мы отправили асинхронную задачу для страницы 3 по Сингапуру в 00:18:27 SGT, и ответ на отправку уже показывал значение charged_usd 0,001389. Статус задачи сменился с running на finalizing, а затем на succeeded, и задача вернула 100 отзывов. Если асинхронная задача завершается сбоем, средства по тому же ID списания возвращаются.

Как выгрузить отзывы из Google Maps в CSV на Python

Код ниже — короткий ответ на вопрос, как парсить отзывы Google Maps. Вы передаёте ему одну ссылку на место в Google Maps. Он читает самые новые отзывы постранично и записывает их в CSV. Код использует только стандартную библиотеку Python. Он учитывает лимиты запросов, обрабатывает токены страниц и получает страницы за пределами синхронного лимита через асинхронные задачи. В конце он сортирует отзывы по времени публикации и не записывает в файл имена авторов.

python
"""Export Google Maps reviews of one place to CSV via EveryInfra.
usage: EVERYINFRA_API_KEY=... python3 export_reviews_csv.py "<google maps place url>" reviews.csv [max_pages]
"""
import csv, json, os, sys, time, urllib.request, urllib.error

API = "https://api.everyinfra.com"
KEY = os.environ["EVERYINFRA_API_KEY"]
FIELDS = ["id", "place_name", "rating", "posted_at", "text", "owner_response",
          "owner_response_at", "like_count", "is_local_guide", "reviewer_review_count", "url"]

def call(method, path, body=None):
    req = urllib.request.Request(API + path, method=method,
                                 data=json.dumps(body).encode() if body else None,
                                 headers={"Authorization": f"Bearer {KEY}", "Content-Type": "application/json",
                                          "User-Agent": "reviews-csv/1.0"})
    try:
        with urllib.request.urlopen(req, timeout=120) as r:
            return r.status, json.load(r)
    except urllib.error.HTTPError as e:
        return e.code, json.load(e)

def fetch_page(params):
    body = {"platform": "google_maps_reviews", "action": "reviews", "params": params}
    for attempt in range(4):
        status, data = call("POST", "/api/v1/social", body)
        err = (data.get("error") or {})
        if status == 429 or (err.get("retryable") and status >= 500):
            time.sleep(err.get("retry_after", 20)); continue
        if err.get("code") == "async_required":          # deep pages run as a job
            body["mode"] = "async"; continue
        if status == 202 and data.get("poll_url"):
            billing, poll = data.get("billing"), data["poll_url"]   # async jobs are charged at submit
            while data.get("status") in ("queued", "running", "finalizing"):
                time.sleep(5); status, data = call("GET", poll)
            data["billing"] = data.get("billing") or billing
            return data
        if err:
            raise SystemExit(f"stop: {err.get('code')} {err.get('message')}")
        return data
    raise SystemExit("stop: retries used up")

def main():
    url, out = sys.argv[1], sys.argv[2]
    max_pages = int(sys.argv[3]) if len(sys.argv) > 3 else 2
    params = {"url": url, "sort": "newest", "limit": 100}
    seen, rows, spent = set(), [], 0.0
    for page in range(max_pages):
        data = fetch_page(params)
        spent += (data.get("billing") or {}).get("charged_usd") or 0
        for r in data.get("results") or []:
            if r["id"] in seen:
                continue
            seen.add(r["id"])
            rows.append({k: r.get(k, "") for k in FIELDS})
        token = data.get("next_page_token")
        print(f"page {page + 1}: {data.get('count')} rows, total {len(rows)}")
        if not token or not (data.get("pagination") or {}).get("has_more"):
            break
        params["page_token"] = token
    rows.sort(key=lambda r: r["posted_at"] or "", reverse=True)   # "newest" is not strictly ordered
    with open(out, "w", newline="", encoding="utf-8-sig") as f:
        w = csv.DictWriter(f, fieldnames=FIELDS)
        w.writeheader(); w.writerows(rows)
    print(f"wrote {len(rows)} reviews to {out}; charged: ${spent:.6f}")

if __name__ == "__main__":
    main()

Мы запускали его трижды для такерии в Мехико, каждый раз на три страницы. Первый запуск начался в 00:32:39 SGT. Страницы 1 и 2 отработали, а страница 3 переключилась на асинхронную задачу. Затем цикл опроса упал, потому что в ответе на опрос нет poll_url, а код читал это поле на каждой итерации. Второй запуск с этим исправлением начался в 00:33:18 SGT. Страница 3 вернулась без записей, потому что у задачи есть состояние finalizing, а код принял его за завершение.

Третий запуск начался в 00:35:21 SGT и завершился в 00:36:21 SGT. Он прочитал три страницы по 100 отзывов, записал 300 отзывов с 300 уникальными ID и списал $0,004167. CSV сохраняется в utf-8-sig, поэтому Excel открывает его без битых символов. Переносы строк внутри текста отзывов остаются внутри ячеек, поэтому в файле 374 строки на 300 записей, и это нормально. Варианты диалектов описаны в документации модуля csv для Python [38].

Обе ошибки были незаметны при чтении документации и очевидны при реальном запуске. Мы сохранили логи всех трёх запусков. Тестируйте любой новый асинхронный API на месте с большим числом отзывов. Дойдите до страницы 3 и выводите каждое значение статуса.

После экспорта: пять шагов очистки данных

Получить данные — это половина работы. Остальное занимает очистка. В наших 700 отзывах о трёх местах проблемы разделились на пять групп. Для каждой группы есть простое решение. Добавьте эти исправления в первый же скрипт анализа, а не после того, как цифры не сойдутся.

Первая группа проблем связана со временем. posted_at и owner_response_at содержат время в UTC с суффиксом часового пояса. Остин зимой живёт по UTC−6, а летом — по UTC−5, поэтому отзыв, оставленный в 9 вечера по местному времени, в UTC уже относится к следующему дню.

Если вы считаете отзывы по дням, сначала переведите время в часовой пояс, в котором находится место. Иначе границы суток сдвинутся на несколько часов, а эффект выходных исчезнет. Наш CSV хранит исходную строку в UTC, а при анализе время переводится отдельно для каждого города.

Вторая группа — пустой текст. У самых новых отзывов о наших трёх местах текста нет в 35–45% записей. Для анализа тональности или ключевых слов исключите пустые записи и укажите знаменатель в отчёте. Для анализа динамики оценок оставьте их. Проведите оба вида анализа на одних и тех же данных и сравните результаты. Цифры по Остину выше показывают, насколько сильно могут расходиться эти две группы.

Третья группа — язык ключей оценок по отдельным критериям. Ключи в detailed_rating зависят от языка отзыва. С lang: es419 в Мехико ключами были comida, servicio и ambiente. В англоязычных отзывах из Сингапура ключами были food, service и atmosphere.

Если вы объединяете данные нескольких стран в одну таблицу, сначала приведите ключи к одному набору. Иначе одна и та же оценка обслуживания окажется в двух столбцах. В списке полей каталога это не указано. Мы заметили это, когда сравнили два ответа.

Четвёртая группа — дубликаты. Один отзыв может попасть на две страницы, чаще всего при повторном запуске через несколько часов. Новые отзывы сдвигают старые вниз, и границы страниц перекрываются. Удаляйте дубликаты по id отзыва, как это делает экспортёр. Дубликаты мест удаляйте по ID места, потому что одно место в разных поисках может появляться под разными названиями. Не используйте url отзыва как ключ: в нём есть параметр языка, например hl=en.

Пятая группа — поля места. Значения state и city в результатах поиска — это отображаемый текст, а не нормализованные коды. В поиске по Мехико с параметром местоположения один штат может быть записан двумя способами. У Сакатекаса 13 записей со значением «Zacatecas» и 1 со значением «Zac.». У Кинтана-Роо 2 записи со значением «Quintana Roo» и 2 со значением «Q.R.». У Нуэво-Леона, Халиско и Табаско тоже встречаются сокращения.

49 записей за пределами Мехико содержат 16 разных значений state, хотя относятся только к 11 штатам. В поиске с местом в ключевом слове state равен «Cd. de México» в 42 записях и «CDMX» в 8. В поиске по Сингапуру у 2 из 50 записей нет city. Если группировать по исходному значению state, один штат разделится на две строки. Перед группировкой сопоставьте сокращения с полными названиями или определите регион по широте и долготе.

ПроблемаЧто мы увиделиКак исправить
Часовые поясаposted_at в UTCПеревести в местное время перед подсчётом по дням
Пустой текст35–45% самых новых записейУдалять для анализа текста, оставлять для трендов оценок
Ключи оценок по отдельным критериямfood на английском, comida на испанскомПривести ключи к одному набору перед объединением
ДубликатыГраницы страниц перекрываются между запускамиУдалять дубликаты по id отзыва и ID места
Поля места«Zac.» и «Zacatecas», «CDMX» и «Cd. de México»Привести сокращения к одному названию перед группировкой

Стоимость по сценариям использования

Цены за единицу проще оценить на реальных задачах. Цифры ниже основаны на ценах за единицу из наших тестов и прайс-листа Google. В них не учтены серверы, время сотрудников и прочие расходы.

Первая задача — список лидов для продаж: все стоматологические клиники Остина с названием, телефоном, сайтом, рейтингом и количеством отзывов, без текстов отзывов. Поиск EveryInfra возвращает 50 мест за вызов по цене $0.001389. Наши две страницы дали 100 разных клиник за $0.002778. Для списка из 1 000 клиник нужно около 20 вызовов, то есть $0.028.

По одному ключевому слову пагинация отдаёт не более 120 записей, поэтому разбейте город на районы или меняйте ключевое слово. Официальный SKU Text Search Pro даёт 5 000 бесплатных вызовов в месяц, а дальше стоит $32 за 1 000 [3][6]. При таком объёме бесплатный лимит покрывает всю задачу. Разница в правилах кэширования и отображения официальных результатов [7].

Вторая задача — мониторинг отзывов. У сети 50 точек, и раз в неделю она проверяет каждую точку на новые отзывы. Если точки ваши, бесплатный Business Profile API подойдёт лучше всего [12]. Если это точки франчайзи или агентства либо вы ведёте мониторинг для клиента, вам нужен API данных.

Один вызов на место в неделю при 52 неделях и 50 местах дают 2 600 вызовов, или около $3.61 в год. Официальный Places API с этой задачей не справится. Он не возвращает самые новые отзывы, а его пять лучших отзывов могут не меняться месяцами.

Третья задача: исследование. В районе 500 ресторанов, и вам нужны 100 последних отзывов каждого, то есть всего 50 000 отзывов. С API данных это 500 вызовов для отзывов плюс около 15 поисковых вызовов, примерно $0.72. Официальный Places API даёт не более 2 500 отзывов (500 мест по 5), причём это отобранная выборка.

В нашем тесте по Сингапуру средняя оценка такой выборки была на 0,15 звезды выше, чем у недавних отзывов, а текст отзывов из выборки был в среднем более чем в семь раз длиннее текста недавних отзывов. Теоретически с задачей справится и собственный парсер. Судя по трекеру задач проекта с открытым исходным кодом, на полпути можно столкнуться с проблемой «только 10 отзывов» [33].

ЗадачаОфициальный Places APIAPI данных EveryInfra
1 000 клиник в Остине, только списокВ рамках бесплатного лимита Text SearchОколо 20 вызовов API, $0,028
50 точек, новые отзывы каждую неделю в течение годаНевозможно, нет сортировки по новизне2 600 вызовов, около $3.61
500 ресторанов, по 100 последних отзывов о каждомНе более 2 500 отобранных отзывовОколо 515 вызовов API, около $0,72

Как выбрать парсер Google Maps: шесть проверок

Тем, кто ищет лучший парсер Google Maps, не нужен самый известный инструмент. Им нужен инструмент, который надёжно возвращает их данные по приемлемой цене. Мы перечисляем проверки по категориям, а не по брендам. Каждую проверку можно провести небольшим пробным запуском за несколько центов.

ПроверкаКак проверитьНаше эталонное значение
Количество отзывов для каждого места и пагинация по датеВыберите место с более чем 1 000 отзывов и перейдите на страницу 3Официальный API — 5 записей; EveryInfra — по 400 записей для каждого порядка сортировки
Единица тарификации и списания при неудачных вызовах APIОтправьте запрос с неверным параметром и датой из будущего в sinceЗа вызовы API, вернувшие коды 422 и 429, плата не взимается. Средства за вызовы без результатов и вызовы, завершившиеся ошибкой, возвращаются
Реальная стоимость за 1 000 отзывовСписанная сумма, делённая на число полученных записей и умноженная на 1 000$0,01389 при 100 отзывах за вызов
ПоляПроверьте наличие ответов владельцев, оценок по отдельным критериям и фотографийowner_response, detailed_rating, image_urls
Точность местоположенияВыполните поиск по одному городу с двумя способами указания местоположенияМехико: параметр — 1 из 50, ключевое слово — 50 из 50
Использование в ИИ-инструментахПроверьте наличие MCP-сервера или определений инструментов для вызова функцийДа, удалённый MCP-сервер

Вторую строку покупатели пропускают чаще всего. Инструменты с оплатой за результат обычно не берут плату за пустые результаты, но правила для незавершённых задач различаются. У API с оплатой за вызов проверьте, возвращаются ли средства за пустые результаты и сбои. Тест стоимостью несколько центов даст ответ.

С третьей строкой похожая ситуация. Не доверяйте цене из прайса. Делите реальное списание на реальное число записей. Многие цены за 1 000 рассчитаны на полные страницы, а у вашего места может быть всего несколько десятков отзывов.

Когда лучше выбрать официальный API или собственный парсер

API данных подходит не всегда. В трёх случаях мы советуем другой путь. Во-первых, если вам нужно пять репрезентативных отзывов на место для менее чем 1 000 мест в месяц, вам хватит бесплатного лимита официального Places API. К тому же вы можете легально показывать эти отзывы в своём приложении, если указываете авторов.

Во-вторых, если отзывы касаются ваших собственных точек, используйте Business Profile API. Он возвращает все отзывы, позволяет отвечать на них и предоставляется бесплатно — ни один сторонний сервис не может предложить того же.

В-третьих, если вам нужен только список компаний одного города, начните с открытых государственных данных. В Сингапуре есть набор данных о лицензированных заведениях общественного питания, в нём более 36 000 записей [28]. Singapore Food Agency обновило свою страницу с историей проверок 1 ноября 2026 года [29]. В Мексике есть справочник DENUE [30], а у Бюро переписи населения США есть County Business Patterns [31]. В этих наборах нет оценок и отзывов. Распространённое сочетание — государственная базовая таблица плюс свежие отзывы о нужных вам местах.

Собственный парсер оправдан только в одном случае: ваша задача очень специфична, например нужен элемент, который показывает только браузер, и команда готова взять на себя долгосрочную поддержку. Вы также должны принять, что парсер может сломаться в любой момент, а его использование может нарушать условия предоставления услуг. Если единственная цель — сэкономить, цифры в этом руководстве говорят об обратном. При цене $0,001389 за 100 отзывов даже одно исправление скрипта инженером обойдётся дороже, чем вызовы API за целый год.

У EveryInfra тоже есть ограничения, и мы увидели их в этих тестах. При одном порядке сортировки выдача останавливается на 400 записях. Для места с 8 226 отзывами полную историю получить нельзя. Вы получите 400 самых новых и 400 самых релевантных отзывов, и эти наборы пересекаются.

Для записей после 200-й нужны асинхронный режим и цикл опроса. В Мехико параметр местоположения дал только 1 из 50 результатов в пределах города, и причину мы пока не знаем.

FAQ

Можно ли парсить Google Maps бесплатно?

Есть два легальных бесплатных способа. Официальный Places API даёт 1 000 бесплатных вызовов Place Details с отзывами в месяц, до пяти отзывов на вызов [3][4]. Для ваших собственных локаций Business Profile API бесплатно читает все отзывы [11]. «Бесплатным парсером» обычно называют ПО с открытым исходным кодом: скачать его можно бесплатно, но серверы, прокси и поддержка стоят денег.

Как парсить отзывы Google Maps на Python?

Обычный HTTP-запрос не возвращает отзывы. В нашем тесте на странице не нашлось ни одного из 20 фрагментов отзывов, поэтому нужна автоматизация браузера или API данных. В этом руководстве два примера кода. Первый — набросок автоматизации браузера, который мы не запускали. Второй — полноценный экспортёр, который вызывает API данных и который мы запускали трижды. Тот же вопрос задавал пользователь Reddit в r/learnpython [41].

Законно ли парсить Google Maps?

Условия Google запрещают массовое скачивание и парсинг контента [13][14]. Решения судов США по делу hiQ v. LinkedIn и по иску Meta к компании по сбору данных были в пользу парсинга публичных данных. Однако эти решения касаются конкретных правовых вопросов, а нарушение условий всё равно может иметь последствия [21][22].

Данные авторов отзывов также подпадают под действие таких законов, как CCPA и GDPR. Это руководство не является юридической консультацией.

Почему Places API возвращает только пять отзывов и как получить самые свежие?

Пять отзывов — ограничение, заложенное в дизайн API. В документации указано, что возвращается не более пяти отзывов, отсортированных по релевантности, а токена пагинации нет [1]. Для ваших собственных точек используйте сортировку по времени обновления в Business Profile API [12]. Для других мест используйте API данных или парсер. Ответы на вопросы Stack Overflow 39223719 и 55235501 упираются в то же ограничение [39][40].

Какой парсер Google Maps лучший?

Единого ответа нет. Всё зависит от того, сколько отзывов вам нужно, нужна ли пагинация по дате и какую модель оплаты вы готовы принять. В этом руководстве шесть проверок, каждую можно провести за несколько центов. Они охватывают число отзывов на место, списания при ошибках, реальную стоимость за 1 000 отзывов, поля, точность определения местоположения и использование из ИИ-инструментов.

Сколько стоит парсинг отзывов Google Maps?

В EveryInfra один вызов возвращает до 100 отзывов за $0.001389, так что 1 000 отзывов стоят около $0.01389. Все тесты в этом руководстве заняли 36 запросов и 26 оплаченных вызовов, всего на $0.036113. В официальном Places API 1 000 отзывов сверх бесплатного лимита стоят около $5.00.

С чего начать

Откройте Быстрый старт, чтобы создать аккаунт и API-ключ. Новые аккаунты получают пробные кредиты, актуальные условия указаны на странице тарифов. Изучите бесплатный каталог по GET /api/v1/social/catalog и проверьте параметры и цену google_maps_reviews. Отправьте curl-запрос из этого руководства для знакомого вам места. Убедитесь, что поля соответствуют вашим задачам. Сохраните экспортёр в CSV, запустите его на двух страницах и добавляйте страницы по мере необходимости.

Чтобы сравнить платформы отзывов, посмотрите API данных Yelp и API данных Tripadvisor. Полное пошаговое описание разработки приведено в нашем руководстве по API отзывов Google Maps.

Методика и ограничения

Все вызовы EveryInfra мы выполнили 2 ноября 2026 г. с 00:14 до 00:36 по SGT. У тестового ключа был лимит 10 запросов в минуту. В каждом из трёх городов мы взяли одно заведение, поэтому выборки состоят из отзывов об этих заведениях на тот момент, а не обо всех компаниях. Результаты по релевантности и по новизне со временем меняются.

Цены и лимиты Places API взяты со страниц Google по состоянию на 2 ноября 2026 г. Мы не вызывали Places API с ключом. Код автоматизации браузера мы не запускали. К странице Maps был отправлен только один обычный HTTP-запрос.

Показатель «за 1,000 отзывов» мы рассчитывали так. Для EveryInfra брали charged_usd из каждого ответа, делили на число отзывов в этом ответе и умножали на 1 000. На всех девяти страницах было по 100 отзывов, поэтому каждая дала $0.01389. У места, где меньше 100 отзывов, или при меньшем limit цена за отзыв выше, поскольку оплата идёт за каждый вызов.

Для Places API мы делили цену тарифного уровня на пять, то есть исходили из пяти отзывов на вызов. Ни в одном из расчётов не учтены бесплатные лимиты и пробные кредиты. Помесячное число отзывов колебалось так, что объяснить это мы не можем, поэтому график тренда строить не стали.

В таблице перечислены все платные вызовы из этого руководства. Все значения времени указаны по SGT и относятся к 2 ноября 2026 г.

Время (SGT)ВозможностьОбъектПолученоСписание
00:14:43google_maps_reviews/searchСингапур, бак кут тех50 заведений$0.001389
00:15:07google_maps_reviews/profileSong Fa Bak Kut Teh1 заведение$0.001389
00:15:29, 00:16:42google_maps_reviews/reviewsSong Fa, сначала новые, страницы 1 и 2по 100по $0,001389
00:16:10google_maps_reviews/reviewsSong Fa, по релевантности100$0.001389
00:18:27google_maps_reviews/reviews, асинхронноSong Fa, сначала новые, страница 3100$0.001389
00:17:10, 00:24:22google_maps_reviews/searchСтоматология в Остине, две страницыпо 50по $0,001389
00:20:02google_maps_reviews/profileSwish Dental1 заведение$0.001389
00:20:36, 00:23:41google_maps_reviews/reviewsSwish Dental, две страницыпо 100по $0,001389
00:17:32, 00:19:39google_maps_reviews/searchМехико, два способа указать местопо 50по $0,001389
00:22:35google_maps_reviews/profileTacos Chupacabras1 заведение$0.001389
00:23:05, 00:23:24, 00:34:37google_maps_reviews/reviewsChupacabras, три страницыпо 100по $0,001389
с 00:32:39 до 00:36:21google_maps_reviews/reviewsТри запуска экспорта в CSV9 платных вызовов$0.012501

Итого: 26 платных вызовов на сумму $0,036113. Ещё за два вызова сделали возврат средств: один дал пустой результат, а второй завершился ошибкой. Пять ошибок из-за неверных параметров или превышения лимита запросов ничего не стоили.

Источники

  1. Google Maps Platform, «Places API (New) REST reference, Place resource». https://developers.google.com/maps/documentation/places/web-service/reference/rest/v1/places
  2. Google Maps Platform, «Place Details (New)». https://developers.google.com/maps/documentation/places/web-service/place-details
  3. Google Maps Platform, прайс-лист основных сервисов. https://developers.google.com/maps/billing-and-pricing/pricing
  4. Google Maps Platform, обзор оплаты и цен, обновлено 2026-10-30. https://developers.google.com/maps/billing-and-pricing/overview
  5. Google Maps Platform, «Places API usage and billing». https://developers.google.com/maps/documentation/places/web-service/usage-and-billing
  6. Google Maps Platform, «Text Search (New)». https://developers.google.com/maps/documentation/places/web-service/text-search
  7. Google Maps Platform, правила использования Places API. https://developers.google.com/maps/documentation/places/web-service/policies
  8. Google Maps Platform, «Place IDs». https://developers.google.com/maps/documentation/places/web-service/place-id
  9. Google Maps Platform, сводки отзывов. https://developers.google.com/maps/documentation/places/web-service/review-summaries
  10. Google Maps Platform, примечания к выпускам Places API. https://developers.google.com/maps/documentation/places/web-service/release-notes
  11. Google Business Profile APIs, работа с данными отзывов. https://developers.google.com/my-business/content/review-data
  12. Google Business Profile APIs, accounts.locations.reviews.list. https://developers.google.com/my-business/reference/rest/v4/accounts.locations.reviews/list
  13. «Google Maps Platform Terms of Service», раздел 3.2.3(a). https://cloud.google.com/maps-platform/terms
  14. «Google Maps and Google Earth Additional Terms of Service». https://www.google.com/help/terms_maps/
  15. Правила Google Maps для пользовательского контента, запрещённый контент. https://support.google.com/contributionpolicy/answer/7400114
  16. robots.txt сайта google.com, скачан 2026-11-02. https://www.google.com/robots.txt
  17. IETF, RFC 9309 «Robots Exclusion Protocol». https://www.rfc-editor.org/rfc/rfc9309.html
  18. Блог Google, «Fan-Favorite Dining List», 8 октября 2026 г. https://blog.google/products-and-platforms/products/maps/google-maps-fan-favorite-dining-list/
  19. 9to5Google, Gemini в Google Maps на CarPlay, 21 октября 2026 г. https://9to5google.com/2026/10/21/google-maps-carplay-gemini/
  20. Search Engine Land, Google Ask Maps и локальный бизнес. https://searchengineland.com/google-ask-maps-make-your-business-easier-to-recommend-496672
  21. Апелляционный суд девятого округа США, дело hiQ Labs v. LinkedIn, 18 апреля 2022 г. https://cdn.ca9.uscourts.gov/datastore/opinions/2022/04/18/17-16783.pdf
  22. Окружной суд США по Северному округу Калифорнии, дело Meta Platforms 3:23-cv-00077, постановление от 23 января 2024 г. https://www.govinfo.gov/app/details/USCOURTS-cand-3_23-cv-00077/USCOURTS-cand-3_23-cv-00077-7
  23. Генеральный прокурор Калифорнии, «California Consumer Privacy Act». https://oag.ca.gov/privacy/ccpa
  24. Европейский союз, Регламент (ЕС) 2016/679 (GDPR). https://eur-lex.europa.eu/eli/reg/2016/679/oj
  25. PDPC Сингапура, обзор PDPA. https://www.pdpc.gov.sg/about/the-legislation/pdpa-overview
  26. PDPC Сингапура, «Personal Data Protection Act». https://www.pdpc.gov.sg/overview-of-pdpa/the-legislation/personal-data-protection-act
  27. Мексика, федеральный закон о защите персональных данных, находящихся у частных лиц, DOF 2025-03-20. https://www.ordenjuridico.gob.mx/Documentos/Federal/html/wo125102.html
  28. data.gov.sg, предприятия общепита с лицензией NEA. https://data.gov.sg/datasets/d_227473e811b09731e64725f140b77697/view
  29. Singapore Food Agency, «Track records», обновлено 1 ноября 2026 г. https://www.sfa.gov.sg/tools-and-resources/track-records
  30. INEGI, DENUE, национальный справочник экономических единиц. https://www.inegi.org.mx/app/mapa/denue/default.aspx
  31. Бюро переписи населения США, «County Business Patterns». https://www.census.gov/programs-surveys/cbp.html
  32. GitHub, open-source-проект парсера Google Maps, 7 148 звёзд. https://github.com/gosom/google-maps-scraper
  33. Issue 327 на GitHub, 1 сентября 2026 г. https://github.com/gosom/google-maps-scraper/issues/327
  34. Issue 338 на GitHub, 6 октября 2026 г. https://github.com/gosom/google-maps-scraper/issues/338
  35. Issue 341 на GitHub, 9 октября 2026 г. https://github.com/gosom/google-maps-scraper/issues/341
  36. Релизы на GitHub, с v1.16.3 по v1.18.1. https://github.com/gosom/google-maps-scraper/releases
  37. Playwright for Python, установка. https://playwright.dev/python/docs/intro
  38. Документация Python, модуль csv. https://docs.python.org/3/library/csv.html
  39. Stack Overflow, как получить больше 5 отзывов из Places API. https://stackoverflow.com/questions/39223719/to-get-more-than-5-reviews-from-google-places-api
  40. Stack Overflow, как получить последние отзывы через Places API. https://stackoverflow.com/questions/55235501/how-to-get-latest-reviews-using-google-places-api
  41. Reddit r/learnpython, как получить отзывы о заведениях. https://www.reddit.com/r/learnpython/comments/1c94ejb/how_can_i_get_places_reviews/
  42. Issue 337 на GitHub, 5 октября 2026 г. https://github.com/gosom/google-maps-scraper/issues/337
  43. Issue 346 на GitHub, 22 октября 2026 г. https://github.com/gosom/google-maps-scraper/issues/346

Справка BL-70