← Back to Skills Marketplace
futurizerush

Apify Google Maps Scraper

by Futurize Rush · GitHub ↗ · v0.1.1 · MIT-0
cross-platform ⚠ suspicious
97
Downloads
0
Stars
0
Active Installs
2
Versions
Install in OpenClaw
/install apify-google-maps
Description
This skill should be used when the user asks to "scrape Google Maps", "find businesses on Google Maps", "get business listings", "extract business data", "fi...
README (SKILL.md)

Google Maps Scraper with Apify

Search and extract business listings from Google Maps including name, address, phone, website, email, ratings, and opening hours. Supports email extraction from business websites.

Actor: futurizerush/google-maps-scraper

Prerequisites

Set APIFY_API_TOKEN in environment. Get a token at console.apify.com/account/integrations.

Execution Flow

Apify runs are asynchronous. Every request follows 3 steps:

  1. Start a run -- POST to the actor API, receive a run ID and dataset ID
  2. Poll until done -- GET the run status, wait for SUCCEEDED
  3. Fetch results -- GET the dataset items (returns a JSON array)

Typical run time: 1-5 minutes depending on result count and email scraping.

Input Parameters

Parameter Type Required Description
searchQueries array of strings Yes (or startUrls) Search queries (e.g. ["coffee shop taipei"], ["dentist new york"])
startUrls array of objects Yes (or searchQueries) Direct Google Maps URLs in [{"url": "..."}] format
maxResults integer No Max results per query. Default: 50. Min: 50
language string No Language for results. Options: "en", "zh-TW". Default: varies
scrapeEmails boolean No Extract emails from business websites. Default: true

Complete Example (Python)

import requests, os, time

TOKEN = os.environ["APIFY_API_TOKEN"]
BASE = "https://api.apify.com/v2"

# Step 1: Start the run
response = requests.post(
    f"{BASE}/acts/futurizerush~google-maps-scraper/runs?token={TOKEN}",
    json={
        "searchQueries": ["coffee shop taipei"],
        "maxResults": 50,
        "language": "en",
        "scrapeEmails": True,
    },
)
response.raise_for_status()
run = response.json()["data"]
run_id = run["id"]
dataset_id = run["defaultDatasetId"]

# Step 2: Poll until done
while True:
    status = requests.get(
        f"{BASE}/actor-runs/{run_id}?token={TOKEN}"
    ).json()["data"]["status"]
    if status == "SUCCEEDED":
        break
    if status in ("FAILED", "ABORTED", "TIMED-OUT"):
        raise RuntimeError(f"Run failed: {status}")
    time.sleep(5)

# Step 3: Fetch results (JSON array)
items = requests.get(
    f"{BASE}/datasets/{dataset_id}/items?token={TOKEN}"
).json()
for biz in items:
    print(f"{biz['name']} ({biz['businessType']})")
    print(f"  Rating: {biz['rating']} ({biz['reviews']} reviews)")
    print(f"  Address: {biz['address']}")
    print(f"  Phone: {biz['phone']}")
    if biz.get("emails"):
        print(f"  Emails: {', '.join(biz['emails'])}")

Search with direct Google Maps URL

requests.post(
    f"{BASE}/acts/futurizerush~google-maps-scraper/runs?token={TOKEN}",
    json={
        "startUrls": [
            {"url": "https://www.google.com/maps/search/sushi+restaurant+tokyo"}
        ],
        "maxResults": 50,
        "scrapeEmails": True,
    },
)

Multiple queries

requests.post(
    f"{BASE}/acts/futurizerush~google-maps-scraper/runs?token={TOKEN}",
    json={
        "searchQueries": ["dentist new york", "lawyer new york", "accountant new york"],
        "maxResults": 50,
        "scrapeEmails": True,
    },
)

Complete Example (bash)

# Step 1: Start the run
RUN_RESPONSE=$(curl -s -X POST \
  "https://api.apify.com/v2/acts/futurizerush~google-maps-scraper/runs?token=$APIFY_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchQueries": ["coffee shop taipei"], "maxResults": 50, "language": "en", "scrapeEmails": true}')

RUN_ID=$(echo "$RUN_RESPONSE" | jq -r '.data.id')
DATASET_ID=$(echo "$RUN_RESPONSE" | jq -r '.data.defaultDatasetId')

# Step 2: Poll until done
while true; do
  STATUS=$(curl -s "https://api.apify.com/v2/actor-runs/$RUN_ID?token=$APIFY_API_TOKEN" \
    | jq -r '.data.status')
  [ "$STATUS" = "SUCCEEDED" ] && break
  [ "$STATUS" = "FAILED" ] || [ "$STATUS" = "ABORTED" ] && echo "Failed: $STATUS" && exit 1
  sleep 5
done

# Step 3: Fetch results
curl -s "https://api.apify.com/v2/datasets/$DATASET_ID/items?token=$APIFY_API_TOKEN" | jq '.'

Output Format

Each item in the results array (field names verified from real API output on 2026-04-11):

{
  "name": "RUFOUS COFFEE",
  "placeId": "ChIJW03Z2y6qQjQRkIeeuqF3-mU",
  "latitude": 25.0235003,
  "longitude": 121.5436548,
  "rating": 4.6,
  "reviews": 1756,
  "address": "No. 339號, Section 2, Fuxing S Rd, Da'an District, Taipei City, Taiwan 106",
  "businessType": "Coffee shop",
  "phone": "+886 2 2736 6880",
  "website": "https://www.rufous.com.tw/",
  "email": null,
  "emails": [],
  "url": "https://www.google.com/maps/place/RUFOUS+COFFEE/data=...",
  "hours": [
    "Monday: 12 to 8 PM",
    "Tuesday: 12 to 8 PM",
    "Wednesday: 12 to 8 PM",
    "Thursday: Closed",
    "Friday: 12 to 8 PM",
    "Saturday: 12 to 8 PM",
    "Sunday: 12 to 8 PM"
  ],
  "hoursDetail": {
    "Monday": "12 to 8 PM",
    "Tuesday": "12 to 8 PM",
    "Thursday": "Closed"
  },
  "sourceUrl": "https://www.google.com/maps/search/coffee%20shop%20taipei?hl=en",
  "query": "coffee shop taipei",
  "timestamp": "2026-04-11T06:10:14.294Z",
  "scrapeDuration": 233
}

Note: Field names use camelCase. email is a single string (or null), emails is an array (may be empty even with scrapeEmails: true if no email is found on the website). hours is an ordered array; hoursDetail is a keyed object.

Error Handling

Error Cause Fix
401 Unauthorized Invalid or missing API token Check APIFY_API_TOKEN
invalid-input: "must be >= 50" maxResults below minimum Set maxResults to at least 50
No results Query too specific or no businesses match Broaden the search query

Tips

  • Use scrapeEmails: true for lead generation -- the actor visits each business website to find emails.
  • Email scraping adds time (visiting each website), so runs take longer with it enabled.
  • placeId is a stable Google Maps identifier -- use it for deduplication across queries.
  • hours is an ordered array (Monday-Sunday), hoursDetail is a keyed object -- use whichever is more convenient.
  • latitude and longitude can be used for distance calculations or map visualizations.
  • Multiple search queries run in a single actor execution.
  • No Google Maps API key required.

Links

Usage Guidance
Before installing, note that the runtime instructions require APIFY_API_TOKEN even though the registry metadata doesn't declare it. If you plan to use this skill: 1) verify the actor owner and the actor 'futurizerush/google-maps-scraper' on Apify to ensure you trust it; 2) create a scoped/restricted Apify API token (not your main account token) and never share it publicly; 3) be aware runs may crawl external websites to extract emails (possible privacy/ToS/legal implications) and may incur Apify usage costs; 4) confirm the registry metadata is updated to declare APIFY_API_TOKEN, and consider revoking or rotating the token after use. If any of these checks fail or you cannot trust the remote actor, do not provide your token.
Capability Analysis
Type: OpenClaw Skill Name: apify-google-maps Version: 0.1.1 The skill is a standard integration for a Google Maps scraper hosted on Apify. The provided Python and Bash examples in SKILL.md correctly demonstrate how to interact with the official Apify API (api.apify.com) using a user-provided API token. While the documentation includes an affiliate link (?fpr=rush), the code logic is transparent, aligns with the stated purpose of business data extraction, and shows no signs of malicious intent, data exfiltration, or prompt injection.
Capability Assessment
Purpose & Capability
The name/description match the instructions: the skill invokes an Apify actor to scrape Google Maps and (optionally) business websites for emails. That capability is coherent with the stated purpose.
Instruction Scope
SKILL.md explicitly instructs the agent to call api.apify.com endpoints (start runs, poll run status, fetch dataset items) and to set/use APIFY_API_TOKEN. All network calls are to Apify (and Google Maps URLs supplied as inputs). There is no instruction to read unrelated local files, but the instructions do require an environment credential that is not declared in the metadata.
Install Mechanism
This is an instruction-only skill with no install spec and no code files, so there is no on-disk installation or third-party package download risk in the bundle itself.
Credentials
SKILL.md requires APIFY_API_TOKEN (sensitive credential granting access to the user's Apify account), but the skill metadata lists no required environment variables nor a primary credential. The token requirement is appropriate for an Apify-based scraper but its absence from declared requirements is an incoherence and a risk if users are not warned.
Persistence & Privilege
The skill is not always-enabled and does not request system config paths or other long-term privileges; autonomous invocation is allowed but is the platform default.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install apify-google-maps
  3. After installation, invoke the skill by name or use /apify-google-maps
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v0.1.1
Add discovery tags for SEO
v0.1.0
Initial release. Extract business listings with emails, ratings, and hours. All output fields verified.
Metadata
Slug apify-google-maps
Version 0.1.1
License MIT-0
All-time Installs 0
Active Installs 0
Total Versions 2
Frequently Asked Questions

What is Apify Google Maps Scraper?

This skill should be used when the user asks to "scrape Google Maps", "find businesses on Google Maps", "get business listings", "extract business data", "fi... It is an AI Agent Skill for Claude Code / OpenClaw, with 97 downloads so far.

How do I install Apify Google Maps Scraper?

Run "/install apify-google-maps" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is Apify Google Maps Scraper free?

Yes, Apify Google Maps Scraper is completely free, licensed under MIT-0. You can download, install and use it at no cost.

Which platforms does Apify Google Maps Scraper support?

Apify Google Maps Scraper is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created Apify Google Maps Scraper?

It is built and maintained by Futurize Rush (@futurizerush); the current version is v0.1.1.

💬 Comments