Если вы когда-либо пытались собрать целевой список для продаж, изучить новые рынки или сравнить конкурентов, вы знаете, что Google Maps — это настоящая золотая жила. Но вот главный аргумент: более 1,5 миллиарда поисков «рядом со мной» каждый месяц и 76% пользователей локального поиска посещают бизнес в течение 24 часов () — спрос на актуальные данные о компаниях, привязанных к локации, никогда не был таким высоким.
Независимо от того, работаете ли вы в продажах, маркетинге или операционной деятельности, извлечение структурированных данных из Google Maps может решить, будет ли ваш звонок холодным или превратится в тёплый лид с высокой конверсией.
Я много лет работаю в SaaS и автоматизации и своими глазами видел, как команды используют Python (а теперь и инструменты на базе ИИ, такие как ), чтобы превратить Google Maps в стратегический актив.
В этом руководстве я пошагово разберу, как в 2026 году собирать данные Google Maps с помощью Python — с кодом, советами по соблюдению правил и сравнением с no-code-решениями. Если вы опытный Python-разработчик или просто хотите получить рабочие данные как можно быстрее, вы по адресу.
Что значит собирать данные Google Maps с помощью Python?
Начнём с основ: сбор данных Google Maps с помощью Python — это программное извлечение информации о компаниях, такой как названия, адреса, рейтинги, отзывы, номера телефонов и координаты, чтобы потом анализировать, фильтровать и выгружать её для бизнеса.

Сделать это можно двумя основными способами:
- Google Maps Places API: официальный и лицензированный способ. Вы используете API-ключ, отправляете запросы к серверам Google и получаете структурированные JSON-данные. Это стабильно, предсказуемо и в целом соответствует правилам, но есть квоты и стоимость.
- Веб-скрейпинг HTML: вы автоматизируете браузер с помощью инструментов вроде Playwright или Selenium, загружаете Google Maps, выполняете поиск и разбираете отрендеренную страницу. Это гибче, но хрупко: Google часто меняет структуру сайта, а сбор HTML может нарушать условия использования Google.
Типичные поля данных, которые можно извлечь:
- Название компании
- Категория/тип
- Полный адрес (плюс город, штат, почтовый индекс, страна)
- Широта и долгота
- Номер телефона
- URL сайта
- Рейтинг и количество отзывов
- Уровень цен
- Статус компании (открыто/закрыто)
- Часы работы
- Place ID (уникальный идентификатор Google)
- URL Google Maps
Почему это важно? Потому что эти поля лежат в основе всего: от лидогенерации и планирования территорий до анализа конкурентов и исследования рынка. Главное — извлекать именно те данные, которые нужны вашему бизнесу, а не собирать всё подряд.
Почему команды продаж и маркетинга извлекают данные из Google Maps с помощью Python
Перейдём к практике. Почему в 2026 году так много команд продаж и маркетинга одержимы данными Google Maps?
- Лидогенерация: создавайте сверхточные списки локальных компаний с контактами и рейтингами для outreach-кампаний.
- Планирование территорий: разбивайте зоны продаж, доставки или обслуживания на основе реальной плотности и типов бизнеса.
- Мониторинг конкурентов: отслеживайте расположение, рейтинги и отзывы конкурентов во времени, чтобы находить тренды и возможности.
- Исследование рынка: анализируйте категории бизнеса, часы работы и тональность отзывов, чтобы принимать решения по выходу на рынок.
- Выбор локации: в недвижимости и ритейле оценивайте потенциальные точки по близлежащей инфраструктуре, пешеходному трафику и конкуренции.
Реальное влияние: согласно , 92% отделов продаж планируют увеличивать инвестиции в ИИ и данные, а команды, использующие таргетированные локальные данные, показывают конверсию до 8 раз выше, чем те, кто полагается на обычные холодные списки (). Одно исследование по лидогенерации для франшиз показало $15 новой выручки на каждый $1, потраченный на списки лидов на основе Google Maps.
Как связать бизнес-цели с полями Google Maps:
| Бизнес-цель | Нужные поля Google Maps |
|---|---|
| Локальный список лидов | name, address, phone, website, category |
| Планирование территорий | name, lat/lng, business_status, opening_hours |
| Бенчмаркинг конкурентов | name, rating, userRatingCount, priceLevel, reviews |
| Выбор локации | category, lat/lng, review density, openingDate |
| Анализ тональности/меню | reviews, editorialSummary, photos, types |
| Outreach по email/телефону | nationalPhoneNumber, websiteUri (затем при необходимости обогащайте) |
Настройка Python-скрейпера для Google Maps: инструменты и требования
Прежде чем начать сбор данных, нужно настроить Python-среду и подготовить нужные инструменты. Вот что потребуется в 2026 году:
1. Установите Python и нужные библиотеки
Рекомендуемая версия Python: 3.10 или новее.
Установите ключевые библиотеки:
1pip install \
2 requests==2.33.1 httpx==0.28.1 \
3 beautifulsoup4==4.14.3 lxml==6.0.3 \
4 pandas==2.3.3 \
5 selenium==4.43.0 playwright==1.58.0 \
6 googlemaps==4.10.0 google-maps-places==0.8.0 \
7 schedule==1.2.2 APScheduler==3.11.2 \
8 python-dotenv==1.2.2 tenacity==9.1.4
9playwright install chromium
Что они делают:
requests,httpx: HTTP-запросы (вызовы API)beautifulsoup4,lxml: разбор HTML (для веб-скрейпинга)pandas: очистка, анализ и экспорт данныхselenium,playwright: автоматизация браузера (для HTML-скрейпинга)googlemaps,google-maps-places: клиенты Google Maps APIschedule,APScheduler: планирование задачpython-dotenv: безопасная загрузка API-ключей из файлов.envtenacity: повторные попытки и обработка ошибок
2. Получите API-ключ Google Maps (для скрейпинга через API)
- Перейдите в .
- Создайте проект или выберите существующий.
- Включите биллинг (это требуется даже для бесплатного уровня).
- Включите “Places API (New)” в разделе APIs & Services > Library.
- Перейдите в Credentials > Create Credentials > API Key.
- Ограничьте ключ нужными API и IP-адресами для безопасности.
- Сохраните API-ключ в файле
.env(никогда не добавляйте его в код):
1GOOGLE_MAPS_API_KEY=your_actual_api_key_here
Примечание: по состоянию на март 2025 года Google больше не предоставляет универсальный кредит $200 в месяц. Вместо этого для каждого API-уровня действуют бесплатные ежемесячные пороги (см. ).
Как извлекать данные из Google Maps с помощью Python: пошаговое руководство
Разберём оба основных подхода — через API и через HTML-скрейпинг — чтобы вы могли выбрать подходящий вариант.
Подход 1: использование Google Maps Places API (рекомендуется)
Шаг 1: установите и импортируйте нужные библиотеки
1import os
2import httpx
3import pandas as pd
4from dotenv import load_dotenv
Шаг 2: безопасно загрузите API-ключ
1load_dotenv()
2API_KEY = os.environ["GOOGLE_MAPS_API_KEY"]
Шаг 3: сформируйте поисковый запрос
Для поиска компаний, подходящих под ваши критерии, вы будете использовать endpoint Text Search.
1URL = "https://places.googleapis.com/v1/places:searchText"
2FIELD_MASK = ",".join([
3 "places.id", "places.displayName", "places.formattedAddress",
4 "places.location", "places.rating", "places.userRatingCount",
5 "places.priceLevel", "places.types",
6 "places.nationalPhoneNumber", "places.websiteUri",
7 "nextPageToken",
8])
Шаг 4: отправьте API-запрос
1def text_search(query, lat, lng, radius=3000, min_rating=4.0):
2 body = {
3 "textQuery": query,
4 "minRating": min_rating, # фильтр на стороне сервера
5 "includedType": "restaurant",
6 "openNow": False,
7 "pageSize": 20,
8 "locationBias": {
9 "circle": {
10 "center": {"latitude": lat, "longitude": lng},
11 "radius": radius,
12 }
13 },
14 }
15 headers = {
16 "Content-Type": "application/json",
17 "X-Goog-Api-Key": API_KEY,
18 "X-Goog-FieldMask": FIELD_MASK, # Всегда указывайте это!
19 }
20 r = httpx.post(URL, json=body, headers=headers, timeout=30)
21 r.raise_for_status()
22 return r.json()
Шаг 5: обработайте пагинацию и соберите результаты
1def collect_all_results(query, lat, lng, radius=3000, min_rating=4.0):
2 results = []
3 next_page_token = None
4 while True:
5 data = text_search(query, lat, lng, radius, min_rating)
6 places = data.get('places', [])
7 results.extend(places)
8 next_page_token = data.get('nextPageToken')
9 if not next_page_token:
10 break
11 return results
Шаг 6: экспортируйте данные с помощью Pandas
1df = pd.DataFrame(collect_all_results("coffee shops in Brooklyn", 40.6782, -73.9442))
2df.to_csv("brooklyn_coffee_shops.csv", index=False)
Полезные советы:
- Всегда задавайте заголовок
X-Goog-FieldMask, чтобы контролировать расходы. Если запрашивать отзывы или фотографии, цена за 1 000 запросов может вырасти с $5 до $25 (). - Используйте фильтры на стороне сервера, например
minRating,includedType,locationBias, чтобы не тратить кредиты на нерелевантные результаты. - Кэшируйте значения
place_idдля дедупликации и будущих обновлений.
Подход 2: веб-скрейпинг HTML Google Maps (для учебных целей или разовых задач)
Предупреждение: Google Maps — это одностраничное приложение. Вам понадобится автоматизация браузера (Playwright или Selenium), а сбор HTML может нарушать условия Google. Используйте этот способ для исследований, а не для продакшена.
Шаг 1: установите Playwright и запустите браузер
1from playwright.sync_api import sync_playwright
2import time, re
3def scrape_maps(query, max_results=100):
4 with sync_playwright() as pw:
5 browser = pw.chromium.launch(headless=True)
6 ctx = browser.new_context(
7 user_agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
8 locale="en-US",
9 )
10 page = ctx.new_page()
11 page.goto("https://www.google.com/maps", timeout=60_000)
12 page.fill("#searchboxinput", query)
13 page.click('button[aria-label="Search"]')
14 page.wait_for_selector('div[role="feed"]')
15 feed = page.locator('div[role="feed"]')
16 prev = 0
17 while True:
18 feed.evaluate("el => el.scrollBy(0, el.scrollHeight)")
19 time.sleep(2)
20 count = page.locator('div[role="feed"] > div > div[jsaction]').count()
21 if count == prev or count >= max_results:
22 break
23 prev = count
24 if page.locator("text=You've reached the end of the list").count():
25 break
26 rows = []
27 cards = page.locator('div[role="feed"] > div > div[jsaction]')
28 for i in range(cards.count()):
29 c = cards.nth(i)
30 name = c.locator("div.fontHeadlineSmall").inner_text() if c.locator("div.fontHeadlineSmall").count() else ""
31 rating_el = c.locator('span[role="img"]').first
32 raw = rating_el.get_attribute("aria-label") if rating_el.count() else ""
33 m = re.search(r"([\d.]+)\s+stars?\s+([\d,]+)\s+Reviews", raw or "")
34 rating = float(m.group(1)) if m else None
35 reviews = int(m.group(2).replace(",", "")) if m else None
36 rows.append({"name": name, "rating": rating, "reviews": reviews})
37 browser.close()
38 return rows
Советы:
- Google случайным образом меняет CSS-классы каждые несколько недель, поэтому этот код может требовать регулярного обновления.
- Используйте человеческие задержки и не скрейпьте слишком быстро, чтобы снизить риск блокировки.
- Никогда не пытайтесь обходить CAPTCHA или систему SearchGuard Google — это может привести к юридическим рискам.
Не скрейпите вслепую: как точно нацелиться на нужные данные
Собирать всё подряд — верный способ потратить время и получить раздутый датасет. Вот как извлекать только действительно важные данные:
- Генерируйте целевые списки URL: используйте собственные фильтры поиска Google Maps (категория, локация, рейтинг, открыто сейчас), чтобы сузить результаты до скрейпинга.
- Используйте поиск по фразе: ищите точные типы бизнеса или ключевые слова, например “vegan bakery in Austin”.
- Фильтры по локации: указывайте город, район или даже координаты и радиус для точности.
- Фильтрация на стороне сервера (API): используйте
minRating,includedTypeиlocationBiasв теле запроса к API. - Фильтрация на стороне клиента (Python): после сбора данных используйте pandas, чтобы оставить компании с рейтингом выше 4.0, более чем 50 отзывами или определёнными категориями.
Пример: оставить только рестораны на Манхэттене с рейтингом выше 4.0
1df = pd.DataFrame(results)
2filtered = df[(df['rating'] >= 4.0) & (df['types'].apply(lambda x: 'restaurant' in x))]
3filtered.to_csv("manhattan_top_restaurants.csv", index=False)
Как с помощью библиотек Python организовать и экспортировать данные Google Maps
Когда данные собраны, пора очистить их, проанализировать и передать команде.
Очистка и структурирование данных с помощью Pandas
1import pandas as pd
2df = pd.read_json("brooklyn_restaurants.json")
3df = (
4 df.dropna(subset=["name", "address"])
5 .drop_duplicates(subset=["place_id"])
6 .assign(
7 name=lambda d: d["name"].str.strip(),
8 phone=lambda d: d["phone"].astype(str)
9 .str.replace(r"\D", "", regex=True)
10 .str.replace(r"^1?(\d{10})$", r"+1\1", regex=True),
11 rating=lambda d: pd.to_numeric(d["rating"], errors="coerce"),
12 user_ratings_total=lambda d: pd.to_numeric(
13 d["user_ratings_total"], errors="coerce"
14 ).fillna(0).astype("int32"),
15 )
16)
Анализ и сводка данных
Пример: средний рейтинг по районам
1by_neighborhood = (
2 df.groupby("neighborhood", as_index=False)
3 .agg(avg_rating=("rating", "mean"),
4 n_places=("place_id", "nunique"),
5 median_reviews=("user_ratings_total", "median"))
6 .sort_values("avg_rating", ascending=False)
7)
Экспорт в Excel или CSV
1df.to_csv("brooklyn_top.csv", index=False)
2df.to_excel("brooklyn_top.xlsx", index=False, sheet_name="Top Rated")
Большой датасет? Используйте формат Parquet для скорости и экономии места:
1df.to_parquet("brooklyn_top.parquet", compression="zstd")
Thunderbit: альтернатива Python-скрейперу Google Maps на базе ИИ
Если вы думаете: «Для простого списка лидов это слишком много настройки», вы не одиноки. Именно поэтому мы создали — no-code веб-скрейпер на базе ИИ, который позволяет извлекать данные из Google Maps (и не только) буквально за пару кликов.
Почему Thunderbit?
- Не нужен код и API-ключи: просто откройте , перейдите в Google Maps и нажмите “AI Suggest Fields”.
- Определение полей с помощью ИИ: ИИ Thunderbit читает страницу и предлагает нужные столбцы — название, адрес, рейтинг, телефон, сайт и многое другое.
- Сбор со вложенных страниц: хотите обогатить таблицу данными с сайта каждой компании? Thunderbit может автоматически заходить на вложенные страницы и подтягивать дополнительные сведения.
- Экспорт в Excel, Google Sheets, Airtable или Notion: больше не нужно возиться с pandas — просто нажмите “Export”, и данные готовы для команды.
- Планируемый сбор: настройте повторяющиеся задачи, чтобы отслеживать конкурентов или автоматически обновлять список лидов.
- Никакого обслуживания: ИИ Thunderbit адаптируется к изменениям сайта, так что вам не придётся постоянно чинить сломанные скрипты.

Сравнение рабочего процесса Thunderbit и Python:
| Шаг | Python-скрейпер | Thunderbit |
|---|---|---|
| Установка инструментов | 30–60 мин (Python, pip, библиотеки) | 2 мин (расширение Chrome) |
| Настройка API-ключа | 10–30 мин (Cloud Console) | Не требуется |
| Выбор полей | Ручной код, field masks | AI Suggest Fields (1 клик) |
| Извлечение данных | Написать/запустить скрипт, обработать ошибки | Нажать “Scrape” |
| Экспорт | pandas в CSV/Excel | Экспорт в Excel/Sheets/Notion |
| Поддержка | Ручные обновления при изменениях сайта | ИИ автоматически адаптируется |
Бонус: Thunderbit доверяют более , а бесплатный тариф позволяет без оплаты собирать до 6 страниц (или 10 с пробным бустом).
Соблюдение правил: условия использования Google Maps и этика скрейпинга
Вот где большинство Python-руководств уже опасно устарели. Что нужно знать в 2026 году:
- Google Maps Platform ToS §3.2.3 строго запрещает скрейпинг, кэширование или экспорт данных вне официальных API (). Единственное исключение: координаты широты/долготы можно кэшировать до 30 дней; Place IDs можно хранить бессрочно.
- Пользователи API связаны договором: если вы используете API-ключ, значит согласились с условиями Google — даже если собираете только публичные данные.
- Обход технических барьеров (CAPTCHA, SearchGuard) теперь может считаться нарушением DMCA §1201, что влечёт уголовную ответственность ().
- GDPR и законы о конфиденциальности: если вы собираете персональные данные (emails, телефоны, имена авторов отзывов) из Google Maps, у вас должно быть законное основание, и вы обязаны выполнять запросы на удаление. Французский CNIL оштрафовал KASPR на €200 000 в 2024 году за сбор контактов LinkedIn ().
- Лучшие практики:
- По возможности по умолчанию используйте Places API.
- Ограничивайте частоту запросов (≤10 QPS для API, 1–2 запроса/с для HTML-скрейпинга).
- Никогда не обходите CAPTCHA или технические блокировки.
- Не распространяйте собранные персональные данные.
- Соблюдайте запросы на отказ и удаление данных.
- Всегда проверяйте местные законы — GDPR, CCPA и другие реально применяются.
Итог: если для вас важна комплаенс-безопасность, оставайтесь на API и минимизируйте объём собираемых данных. Для большинства бизнес-пользователей no-code-инструмент вроде Thunderbit снижает риски (не нужен API-ключ, нет перепубликации данных).
Планирование и автоматизация сбора данных Google Maps с помощью Python
Если вам нужно поддерживать данные в актуальном состоянии — например, для еженедельного мониторинга конкурентов или ежемесячного обновления списка лидов — автоматизация станет вашим лучшим другом.
Простое планирование с schedule
1import schedule, time
2from my_scraper import run_job
3schedule.every().day.at("03:00").do(run_job, query="restaurants in Brooklyn")
4schedule.every(6).hours.do(run_job, query="coffee shops in Manhattan")
5while True:
6 schedule.run_pending()
7 time.sleep(30)
Планирование уровня production с APScheduler
1from apscheduler.schedulers.background import BackgroundScheduler
2from apscheduler.triggers.cron import CronTrigger
3sched = BackgroundScheduler(timezone="America/New_York")
4sched.add_job(
5 run_job,
6 CronTrigger(hour=3, minute=15, jitter=600), # 3:15 утра ± 10 мин
7 kwargs={"query": "restaurants in Brooklyn"},
8 id="brooklyn_daily",
9 max_instances=1,
10 coalesce=True,
11 misfire_grace_time=3600,
12)
13sched.start()
Советы по безопасной автоматизации
- Добавляйте случайный jitter в расписание, чтобы не создавать предсказуемый шаблон.
- Для HTML-скрейпинга не превышайте 1–2 запроса в секунду.
- При использовании API следите за квотой и настройте оповещения по биллингу.
- Всегда логируйте ошибки и ведите файл «dead-letter» для неудачных запросов.
Бонус Thunderbit: с Thunderbit можно настраивать повторяющиеся сборы прямо в интерфейсе — без кода, cron-задач и настройки сервера.
Главные выводы: эффективный, точный и соответствующий правилам сбор данных Google Maps
Подведём итоги:
- Google Maps — источник №1 для данных о бизнес-локациях, который питает всё: от лидогенерации до исследования рынка.
- Сбор через Python даёт гибкость и контроль, но требует настройки, поддержки и соблюдения правил — особенно по мере усиления антибот-защиты Google и правоприменения.
- Извлечение через API — самый безопасный и масштабируемый путь для большинства команд. Всегда используйте field masks и фильтры на стороне сервера, чтобы контролировать расходы.
- HTML-скрейпинг хрупок и рискован — используйте его только для разовых исследований и никогда не обходите технические ограничения.
- Нацеливайте сбор данных: используйте поиск по фразе, фильтры по локации и рабочие процессы на pandas, чтобы извлекать только необходимое.
- Thunderbit — самый быстрый путь для тех, кто не пишет код: ИИ, без настройки, мгновенный экспорт и встроенное планирование.
- Комплаенс важен: соблюдайте условия Google, законы о конфиденциальности и лимиты запросов, чтобы избежать юридических проблем.
Больше руководств и советов ищите в и на нашем .
FAQ
1. Законно ли в 2026 году собирать данные Google Maps с помощью Python?
Сбор данных Google Maps через официальный API разрешён в рамках условий Google, если вы соблюдаете квоты и не распространяете ограниченные данные. HTML-скрейпинг Google Maps прямо запрещён условиями Google и несёт юридические риски, особенно если вы обходите технические ограничения или собираете персональные данные без согласия. Всегда проверяйте местные законы (GDPR, CCPA и т. д.) и придерживайтесь лучших практик комплаенса.
2. В чём разница между использованием Google Maps API и веб-скрейпингом HTML?
API стабилен, лицензирован и предназначен для извлечения данных, но требует API-ключа и подчиняется квотам и оплате. HTML-скрейпинг использует автоматизацию браузера для извлечения данных с отрендеренной страницы, но он хрупкий (сайт часто меняется), может нарушать условия и несёт более высокий юридический риск. Для большинства бизнес-задач рекомендован именно API.
3. Сколько стоит извлечение данных из Google Maps с помощью Python в 2026 году?
Цены Google Places API рассчитываются за 1 000 запросов и зависят от запрашиваемых полей: от $5 (Essentials) до $25 (Enterprise+Atmosphere). Есть бесплатные ежемесячные пороги (10 000 для Essentials, 5 000 для Pro, 1 000 для Enterprise), но при больших объёмах затраты быстро растут. Всегда используйте field masks и фильтры на стороне сервера, чтобы контролировать расходы.
4. Чем Thunderbit отличается от Python-скрейперов для Google Maps?
Thunderbit — это no-code веб-скрейпер на базе ИИ, который позволяет извлекать данные Google Maps (и не только) без программирования, API-ключей и постоянной поддержки. Он идеально подходит для отделов продаж и маркетинга, которым нужен быстрый и надёжный экспорт в Excel, Google Sheets, Airtable или Notion. Для технических пользователей, которым нужна кастомная логика, Python даёт больше гибкости, но требует больше настройки и управления комплаенсом.
5. Как автоматизировать регулярное извлечение данных Google Maps?
В Python используйте библиотеки планирования вроде schedule или APScheduler, чтобы запускать скрейпер по расписанию — ежедневно, еженедельно и т. д. Добавляйте случайный jitter, чтобы избежать обнаружения, и следите за квотой API. С Thunderbit можно настраивать повторяющиеся сборы прямо в интерфейсе — без кода и без настройки сервера.
Готовы превратить Google Maps в суперсилу для продаж и маркетинга? Независимо от того, любите ли вы Python или хотите самое быстрое no-code-решение, все инструменты уже доступны в 2026 году. Попробуйте для мгновенного ИИ-скрейпинга — или засучите рукава и погрузитесь в API. В любом случае пусть ваши списки лидов будут свежими, выгрузки — чистыми, а кампании — полными локальных клиентов с высокой вероятностью конверсии. Удачного скрейпинга!
Подробнее
