360 Secure SkillHub
360 安全技能中心

Google Maps Extractor Apify

核心功能:支持按关键词、位置、谷歌地图URL或Place ID提取商家信息,含地址、电话、评分、坐标等字段,可选抓取网站邮箱、社交链接等联系人,支持筛选与预算控制。典型场景适用于本地SEO、竞品分析、CRM补全、线索生成。需APIFY_TOKEN授权,输入支持命令行参数或JSON,输出为结构化JSON数据集。

hundevmode
hundevmode
热度 16.02
最近更新 2026-06-02 11:13:46
分类:数据依赖:代码执行 / 第三方 API / 读写文件应用场景:数据处理 / CRM / 市场分析 / 报告撰写 ...

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add google-maps-extractor-apify
Metadata
name
google-maps-extractor-apify
description
Use this skill when the user needs Google Maps place and business data through an Apify actor, including Google Places data, local business listings, addresses, websites, phones, ratings, review counts, opening hours, coordinates, Place IDs, CIDs, Google Maps URLs, and optional public website contact enrichment from keywords, URLs, Place IDs, or map areas.
version
1.0.0
required_env_vars
["APIFY_TOKEN"]
required-env-vars
["APIFY_TOKEN"]
primary_credential
APIFY_TOKEN
primary-credential
APIFY_TOKEN
metadata
{"short-description":"Run Google Maps extraction with Apify","openclaw":{"requires":{"env":["APIFY_TOKEN"],"bins":["python3"]},"primaryEnv":"APIFY_TOKEN","envVars":[{"name":"APIFY_TOKEN","required":true,"description":"Apify API token used to run the Google Maps Extractor actor."}],"primaryCredential":"APIFY_TOKEN","homepage":"https://github.com/hundevmode/apify-google-maps-extractor-agent-skill"}}

Google Maps Extractor Apify Skill

Overview

This skill helps an AI agent run the Apify Google Maps Extractor actor for Google Maps place data, local business listings, and optional public website contact enrichment.

Default actor:

  • Actor ID: 2A4RTA5PjN7McqJXx
  • Actor name: x_guru/google-maps-extractor
  • Store page: https://apify.com/x_guru/google-maps-extractor
  • Console source: https://console.apify.com/actors/2A4RTA5PjN7McqJXx/source

Use this skill when a user asks to:

  • collect Google Maps places by search term and location
  • scrape Google Maps search URLs or direct place URLs
  • enrich known Google Place IDs
  • build local business lead lists with websites, phones, addresses, ratings, coordinates, Place IDs, and CIDs
  • extract public business website contacts such as emails, extra phone numbers, and social links
  • create Google Maps datasets for local SEO, competitor research, store locator data, CRM enrichment, Sheets, n8n, Airtable, or API workflows

Quick Workflow

  1. Clarify the business type, location, desired count, and whether add-ons are needed.
  2. Build the smallest useful payload first.
  3. Use searchStringsArray, locationQuery, maxCrawledPlacesPerSearch, and language for normal search.
  4. Use startUrls or placeIds for exact known sources.
  5. Enable paid add-ons only when needed: filters, place details, or website contacts.
  6. Set a budget guard with Apify maxTotalChargeUsd when spend matters.
  7. Run scripts/google_maps_extractor_actor.py or call the Apify API directly.
  8. Return compact summary metrics and dataset rows. Check RUN_SUMMARY for diagnostics.

Payload Rules

  • Standard discovery uses searchStringsArray, locationQuery, and maxCrawledPlacesPerSearch.
  • Exact Google Maps URLs use startUrls as objects: [{"url": "https://www.google.com/maps/..."}].
  • Exact Google Place IDs use placeIds.
  • Direct URLs and Place IDs can run without locationQuery.
  • Structured search area uses countryCode, city, state, county, postalCode, customGeolocation, and strictLocationBounds.
  • locationQuery has priority when it is present and specific.
  • Broad visible-map collection uses allPlacesNoSearchAction="all_visible" and optional allPlacesZoom; use it only for concrete local areas.
  • Paid filters include categoryFilterWords, placeCategories, searchMatching, placeMinimumStars, website, and skipClosedPlaces.
  • Use scrapeContacts only when the user needs public website emails, phones, or social links.
  • Use scrapePlaceDetailPage when the user needs richer opening hours, menu links, plus code, popular times, inside places, web results, or detailed place metadata.
  • Place details can be extended with scrapeTableReservationProvider, scrapeOrderOnline, includeWebResults, and scrapeDirectories.
  • Keep initial tests small: 10-50 places before scaling.

Authentication

Use the Apify API token from the environment:

export APIFY_TOKEN='apify_api_xxx'

Never hardcode or print the full token in user-facing output.

Script Usage

The bundled script uses only Python standard library.

Run a quick search:

APIFY_TOKEN='apify_api_xxx' \
python3 scripts/google_maps_extractor_actor.py quick-search \
  --query "bike repair shop" \
  --location "Portland, Oregon, USA" \
  --limit 25 \
  --budget-usd 1

Run with public website contact enrichment:

APIFY_TOKEN='apify_api_xxx' \
python3 scripts/google_maps_extractor_actor.py quick-search \
  --query "roofing contractor" \
  --location "Denver, Colorado, USA" \
  --limit 50 \
  --with-contacts \
  --only-with-website \
  --budget-usd 2

Run by Google Maps URL:

APIFY_TOKEN='apify_api_xxx' \
python3 scripts/google_maps_extractor_actor.py quick-url \
  --url "https://www.google.com/maps/search/restaurants+near+New+York,+NY" \
  --limit 50 \
  --budget-usd 1

Run by Place ID:

APIFY_TOKEN='apify_api_xxx' \
python3 scripts/google_maps_extractor_actor.py quick-place-id \
  --place-id "ChIJN1t_tDeuEmsRUsoyG83frY4" \
  --details \
  --budget-usd 1

Run custom JSON:

APIFY_TOKEN='apify_api_xxx' \
python3 scripts/google_maps_extractor_actor.py run \
  --input-file references/sample_input.json \
  --budget-usd 1

Recommended Inputs

Local business discovery

{
  "searchStringsArray": ["bike repair shop"],
  "locationQuery": "Portland, Oregon, USA",
  "maxCrawledPlacesPerSearch": 100,
  "language": "en"
}

Contact lead generation

{
  "searchStringsArray": ["roofing contractor"],
  "locationQuery": "Denver, Colorado, USA",
  "maxCrawledPlacesPerSearch": 50,
  "website": "withWebsite",
  "scrapeContacts": true
}

Exact URLs

{
  "startUrls": [
    {
      "url": "https://www.google.com/maps/search/restaurants+near+New+York,+NY"
    }
  ],
  "maxCrawledPlacesPerSearch": 100,
  "language": "en"
}

Place IDs

{
  "placeIds": ["ChIJN1t_tDeuEmsRUsoyG83frY4"],
  "maxCrawledPlacesPerSearch": 1,
  "scrapePlaceDetailPage": true
}

Output Contract

The runner returns JSON:

  • ok
  • actorId
  • fetchedAt
  • inputUsed
  • itemCount
  • rows[]

Rows are actor dataset items. Important groups:

  • Identity: title, subTitle, description, price, categoryName, categories, rank, isAdvertisement
  • Address: address, street, city, state, postalCode, countryCode, location, plusCode
  • Contacts: website, phone, phoneUnformatted, emails, additionalPhones, social profile arrays
  • Ratings: totalScore, reviewsCount, reviewsDistribution, reviewsTags
  • Details: openingHours, popularTimesHistogram, menu, servicesLink, reserveTableUrl, googleFoodUrl, peopleAlsoSearch, placesTags
  • Google IDs: placeId, fid, cid, kgmid, url, searchPageUrl, searchPageLoadedUrl
  • Runtime: searchString, language, scrapedAt

For the full contract, read references/input-output-contract.md.

Agent Response Rules

  • If rows are empty, say the run succeeded but no matching places were saved, then suggest checking RUN_SUMMARY.
  • If contact fields are empty, first check whether scrapeContacts was enabled.
  • If detail fields are missing, first check whether scrapePlaceDetailPage was enabled.
  • Explain missing fields as normal best-effort behavior when Google Maps or the business website does not expose data.
  • Use maxTotalChargeUsd for any user concerned about spend.
  • Do not promise review rows or large image lists from this extractor. Use the separate Google Maps Reviews Scraper for review datasets.

References

  • references/input-output-contract.md
  • references/sample_input.json
  • references/troubleshooting.md