Google Maps MCP avatar
Google Maps MCP

Pricing

$3.99 / 1,000 results

Go to Apify Store
Google Maps MCP

Google Maps MCP

Developed by

Crawler Bros

Crawler Bros

Maintained by Community

Unified Apify MCP server for Google Maps. Search for businesses and extract comprehensive data including ratings, reviews, contact info, and more. Scrape detailed reviews from any Google Maps place.

5.0 (2)

Pricing

$3.99 / 1,000 results

0

1

0

Last modified

2 days ago

Google Maps MCP Server

A unified Apify MCP (Model Context Protocol) server for comprehensive Google Maps scraping. This actor provides a single interface to search for businesses and scrape reviews using browser automation with Playwright.

๐Ÿš€ Features

Multi-Mode Scraping

This MCP server supports two scraping modes:

  1. Search Mode - Search and scrape business listings from Google Maps
  2. Reviews Mode - Scrape reviews from a specific Google Maps business

Key Capabilities

โœ… Unified Interface - Single actor for all Google Maps scraping needs โœ… Browser Automation - Reliable scraping using Playwright โœ… No API Key Required - Scrape public content without authentication โœ… Comprehensive Data - Extract all relevant business details and reviews โœ… Automatic Pagination - Load multiple results and reviews automatically โœ… Structured Output - Clean JSON data ready for AI consumption

๐Ÿ“‹ Input Parameters

Common Parameters

ParameterTypeRequiredDescription
modestringYesScraping mode: search or reviews

Search Mode Parameters

ParameterTypeDefaultDescription
searchQuerystring-What to search for (e.g., "restaurant")
locationstring""Where to search (e.g., "New York, NY")
maxResultsinteger20Maximum number of businesses to scrape (1-100)

Reviews Mode Parameters

ParameterTypeDefaultDescription
placeUrlstring-Google Maps place URL
maxReviewsinteger50Maximum number of reviews to scrape (1-1000)

๐Ÿ“ Input Examples

Example 1: Search for Businesses

{
"mode": "search",
"searchQuery": "pizza restaurant",
"location": "New York, NY",
"maxResults": 20
}

Example 2: Scrape Reviews

{
"mode": "reviews",
"placeUrl": "https://www.google.com/maps/place/Joe's+Pizza/@40.7308314,-73.9973325,17z",
"maxReviews": 100
}

๐Ÿ“Š Output Format

Search Mode Output

Each business includes:

{
"index": 1,
"name": "Joe's Pizza",
"category": "Pizza restaurant",
"rating": 4.5,
"review_count": 1234,
"price_level": "$$",
"address": "7 Carmine St, New York, NY 10014",
"phone": "+1 212-366-1182",
"website": "https://www.joespizzanyc.com",
"url": "https://www.google.com/maps/place/Joe's+Pizza/@40.7308314,-73.9973325,17z",
"place_id": "ChIJxxx...",
"latitude": 40.7308314,
"longitude": -73.9973325,
"scraped_at": "2025-11-02T20:30:00"
}

Reviews Mode Output (Flattened Format)

One review per row for easy analysis - each dataset item represents a single review with place metadata:

{
"place_metadata": {
"place_url": "https://www.google.com/maps/place/...",
"scraped_at": "2025-11-02T20:30:00",
"business_name": "Joe's Pizza",
"rating": 4.5,
"total_reviews": 1234,
"category": "Pizza restaurant",
"address": "7 Carmine St, New York, NY 10014"
},
"review_id": "ChZDSUhNMG9nS0VJQ0FnSUQ...",
"reviewer_name": "John Smith",
"reviewer_avatar": "https://lh3.googleusercontent.com/...",
"rating": 5.0,
"review_text": "Best pizza in NYC! The crust is perfect and the sauce is amazing...",
"review_date": "2 months ago",
"likes": 42
}

Benefits of Flattened Format:

  • โœ… Each row is one review (perfect for CSV export and data analysis)
  • โœ… Easy to query, filter, and aggregate in databases
  • โœ… Compatible with pandas DataFrames and SQL tables
  • โœ… Place metadata included in every row (no joins needed)
  • โœ… Simplified data pipeline integration

๐ŸŽฏ Use Cases

Business Intelligence

  • Market Research - Analyze competitor locations and ratings
  • Location Planning - Find optimal areas for new business locations
  • Competitive Analysis - Track competitor reviews and ratings
  • Customer Insights - Understand what customers value in your industry

Data Analysis & Research

  • Sentiment Analysis - Analyze customer sentiment from reviews
  • Trend Detection - Identify popular locations and emerging trends
  • Service Quality - Compare service quality across locations
  • Price Analysis - Study pricing patterns across regions

AI & ML Applications

  • Training Data - Build datasets for recommendation systems
  • RAG Systems - Feed business and review data to AI models
  • Chatbot Training - Use reviews for customer service bots
  • Content Generation - Analyze successful business descriptions

๐Ÿ› ๏ธ Local Development

Prerequisites

pip install -r requirements.txt
playwright install chromium

Create Input File

Create storage/key_value_stores/default/INPUT.json:

For Search Mode:

{
"mode": "search",
"searchQuery": "coffee shop",
"location": "San Francisco, CA",
"maxResults": 10
}

For Reviews Mode:

{
"mode": "reviews",
"placeUrl": "https://www.google.com/maps/place/Blue+Bottle+Coffee/@37.7749295,-122.4194155,17z",
"maxReviews": 50
}

Run Locally

cd Google/mcp
apify run

Check Results

Results are saved in:

  • storage/datasets/default/ - Individual records
  • storage/key_value_stores/default/OUTPUT.json - Complete output

๐Ÿš€ Deployment

Using Apify CLI

# Login to Apify
apify login
# Push to Apify platform
apify push

Manual Upload

  1. Create a new actor on Apify Console
  2. Upload all files including Dockerfile, requirements.txt, and .actor/ directory
  3. Configure input parameters
  4. Run the actor

๐Ÿ“š API Integration

JavaScript/Node.js

const { ApifyClient } = require("apify-client");
const client = new ApifyClient({ token: "YOUR_API_TOKEN" });
// Search for businesses
const searchInput = {
mode: "search",
searchQuery: "sushi restaurant",
location: "Los Angeles, CA",
maxResults: 25
};
const run = await client.actor("YOUR_ACTOR_ID").call(searchInput);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Found ${items.length} businesses`);

Python

from apify_client import ApifyClient
client = ApifyClient('YOUR_API_TOKEN')
# Scrape reviews
reviews_input = {
'mode': 'reviews',
'placeUrl': 'https://www.google.com/maps/place/...',
'maxReviews': 100
}
run = client.actor('YOUR_ACTOR_ID').call(run_input=reviews_input)
for item in client.dataset(run['defaultDatasetId']).iterate_items():
print(f"Review: {item['review_text']}")
print(f"Rating: {item['rating']}")

โšก Performance Tips

Optimize Speed

  • Start with lower maxResults/maxReviews for testing
  • Use specific search queries for better results
  • Limit location scope for faster searches
  • Process fewer businesses per run for faster completion

Best Practices

  • Add delays between requests (built-in)
  • Don't scrape the same content repeatedly
  • Respect Google's servers - use reasonable limits
  • Consider batching requests across multiple runs

โš ๏ธ Limitations

  • Public Content Only - Cannot access restricted or private data
  • No Authentication - Requires public access to content
  • Rate Limits - Google may throttle excessive requests
  • Browser-Based - Slower than direct API but more reliable
  • Dynamic Content - Some features may change if Google updates layout

๐Ÿ› Troubleshooting

No Results Returned

  • Verify search query and location are correct
  • Check if the place URL is valid and accessible
  • Try with smaller maxResults/maxReviews values first
  • Review logs for specific error messages

Timeout Errors

  • Content may be loading slowly
  • Try with fewer items or smaller limits
  • Check if Google Maps is accessible from your location

Missing Data Fields

  • Some fields may be null if not available
  • Not all businesses have all information
  • Reviews may vary in completeness

๐Ÿ“„ License

This actor is provided as-is for scraping public Google Maps data in accordance with Google's terms of service.

  • ../google-maps/ - Dedicated business search scraper
  • ../google-maps-reviews/ - Dedicated reviews scraper

๐Ÿ’ก Notes

  • This MCP server uses browser automation to access Google Maps public interface
  • Always respect Google's robots.txt and terms of service
  • Use responsibly and avoid overwhelming Google's servers
  • Consider implementing additional rate limiting for large-scale scraping
  • The actor works best with the Apify platform's infrastructure

๐Ÿ†˜ Support

For issues, questions, or feature requests, please open an issue in the repository or contact support.


Made with โค๏ธ for the AI community | Powered by Apify