# Google Maps Scraper (`poidata/google-maps-scraper`) Actor

Quickly extract data from thousands of locations. Scrape Google Maps using keywords, categories, coordinates or GeoJSON polygons. Collect rich business data including addresses, contacts, opening hours, ratings, and more. Export results in multiple formats, run via API and integrate seamlessly.

- **URL**: https://apify.com/poidata/google-maps-scraper.md
- **Developed by:** [Poidata](https://apify.com/poidata) (community)
- **Categories:** Lead generation
- **Stats:** 2,418 total users, 65 monthly users, 99.8% runs succeeded, 29 bookmarks
- **User rating**: 4.90 out of 5 stars

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Advanced Google Maps Business Scraper 🗺️

⚡ **Ultimate Business Intelligence Tool** - Extract up to **15,000 results** with advanced geographic targeting and real-time data collection.

Transform your business research with our powerful Google Maps scraper featuring **coordinate-based searches**, **polygon area targeting**, **radius filtering**, and **smart data collection** for maximum efficiency.

---

### 🚀 Key Features

* **📍 Advanced Geographic Targeting:**
  Search by location name, precise coordinates, radius filtering, or custom polygon boundaries for complete area coverage.

* **🔍 Smart Data Collection:**
  Get comprehensive results with systematic area coverage, fast processing, and automatic duplicate removal.

* **📊 Rich Business Intelligence:**
  Extract complete business data including names, addresses, phone numbers, websites, ratings, hours, and more.

* **🎯 Coordinate-Based Search:**
  Use exact latitude/longitude coordinates with radius filtering (1-100 miles) for precise location targeting.

* **🔷 Polygon Area Support:**
  Define custom geographic boundaries using GeoJSON polygons for complex area coverage.

* **⚡ High Performance:**
  Optimized for speed and efficiency with smart processing and reliable operation.

* **🌍 Global Coverage:**
  Search worldwide with support for multiple languages and geographic regions.

* **📱 Easy Integration:**
  Simple API with webhook support, task scheduling, and multiple export formats.

---

### 🔍 Advanced Filtering Options

Zero in on the exact businesses you need:

#### 🔢 **Multiple Terms**

- **Multi-Term Searching**: Find more with multiple search terms in one go
- Example: `"terms": ["pizza restaurants", "Italian restaurants", "pizzeria"]`

#### 🌟 **Rating Filter**
- Only show well-rated businesses (1-5 stars)
- Example: `"min_rating": 4.2`

#### 📊 **Review Count Filter**
- Skip businesses with too few reviews
- Example: `"min_reviews": 100`

#### 🌐 **Website Presence**
- Only include businesses with websites
- Example: `"has_website": true`

#### 🏷️ **Category Matching**
- Filter by specific business categories 
- Example: `"categories": ["Italian restaurant", "Indian restaurant"]`
- Complete list of [Google Maps Categories](https://api.apify.com/v2/key-value-stores/epxZwNRgmnzzBpNJd/records/categories)

#### 📸 **Photo Count Filter**
- Find businesses with plenty of photos
- Example: `"min_photos": 10`

#### 🔤 **Business Name Filter**
- Search within business names
- Example: `"name_filter": "coffee"` or `"name_filter": ["coffee", "espresso"]`

---

### 🎯 Use Cases

#### 🏢 **Market Research & Analysis**
- **Competitive Intelligence**: Analyze competitor distribution and density
- **Market Penetration**: Identify underserved areas and opportunities
- **Geographic Expansion**: Plan new locations with data-driven insights

#### 📈 **Lead Generation & Sales**
- **Targeted Prospecting**: Build precise business lists by location and criteria
- **Territory Planning**: Optimize sales territories with geographic data
- **Account-Based Marketing**: Identify high-value prospects in specific areas

#### 🏗️ **Real Estate & Development**
- **Site Selection**: Find optimal locations for new businesses
- **Market Analysis**: Understand business density and competition
- **Investment Research**: Evaluate commercial real estate opportunities

#### 📱 **App Development & Integration**
- **Location Services**: Populate apps with comprehensive business data
- **Search Functionality**: Build powerful local search features
- **Data Enrichment**: Enhance existing databases with fresh information

---

### 🔧 Advanced Features

#### 📍 **Coordinate-Based Crawling**

Search with precise geographic coordinates and radius control:

```json
{
  "term": "restaurants",
  "latitude": "40.730610",
  "longitude": "-73.935242",
  "radius": 5,
  "totalAroundCoordinate": 100
}
````

**Features:**

- **Precise Targeting**: Exact coordinate-based searches
- **Radius Control**: 1-100 mile radius filtering
- **Systematic Coverage**: Complete area coverage within radius
- **Target Control**: Stop when desired number of results reached

#### 🎯 **Polygon Area Support**

Define custom geographic boundaries for complex area targeting:

```json
{
  "term": "coffee shops",
  "polygon": {
    "type": "Polygon",
    "coordinates": [[
      [-74.041885, 40.570396],
      [-73.855682, 40.570396],
      [-73.855682, 40.739234],
      [-74.041885, 40.739234],
      [-74.041885, 40.570396]
    ]]
  },
  "totalAroundCoordinate": 200
}
```

**Features:**

- **Custom Boundaries**: Any polygon shape supported
- **Complex Areas**: Handle irregular geographic regions
- **Validation**: Automatic polygon format validation
- **Efficient Processing**: Optimized processing within polygon bounds

#### 🔍 **Smart Filtering System**

Advanced filtering options for precise results:

```json
{
  "term": "restaurants",
  "location": "New York",
  "min_rating": 4.5,
  "min_reviews": 100,
  "has_website": true,
  "categories_filter": ["Italian restaurant", "Pizza"],
  "min_photos": 10,
  "name_filter": "pizza"
}
```

**Filter Options:**

- **Rating Filter**: Minimum star rating (0-5)
- **Review Count**: Minimum number of reviews
- **Website Presence**: Only businesses with websites
- **Category Matching**: Specific business categories
- **Photo Count**: Minimum number of photos
- **Name Filtering**: Business name keyword matching

***

### 📊 Data Fields Returned

#### 🏢 **Business Information**

```json
{
  "name": "Carmine's - Times Square",
  "address": "200 W 44th St, New York, NY 10036",
  "street": "200 W 44th St",
  "city": "New York",
  "state": "New York",
  "zip": "10036",
  "country": "US",
  "neighborhood": "Manhattan"
}
```

#### 📞 **Contact Details**

```json
{
  "phone": "(212) 221-3800",
  "phoneIsd": "+1 212-221-3800",
  "website": "carminesnyc.com",
  "email": "info@carminesnyc.com"
}
```

#### 📍 **Geographic Data**

```json
{
  "latitude": 40.757498,
  "longitude": -73.986654,
  "distance_miles": 2.3
}
```

#### ⭐ **Ratings & Reviews**

```json
{
  "rating": 4.5,
  "reviewCount": 17231,
  "photoCount": 18178
}
```

#### 🏷️ **Categories & Classification**

```json
{
  "categories": [
    "Italian restaurant",
    "Caterer",
    "Delivery service",
    "Family restaurant"
  ],
  "priceRange": "$$",
  "priceRangeText": "Moderately expensive"
}
```

#### 🕒 **Operating Hours**

```json
{
  "openingHours": [
    {"day": "Monday", "hours": "11:30 AM-11 PM"},
    {"day": "Tuesday", "hours": "11:30 AM-11 PM"},
    {"day": "Wednesday", "hours": "11:30 AM-11 PM"}
  ]
}
```

#### 🔗 **Google Maps Integration**

```json
{
  "url": "https://www.google.com/maps?cid=1155783591561813087",
  "placeId": "RxDxZ7qzJNbi7_UPuOvG4QM",
  "gid": "0x89c25854faa8d447:0x100a2b0d8c445c5f"
}
```

#### 📋 **Additional Information**

```json
{
  "additionalInfo": {
    "Accessibility": ["Wheelchair accessible"],
    "Amenities": ["Wi-Fi", "Restroom", "Bar onsite"],
    "Service options": ["Takeout", "Dine-in", "Delivery"],
    "Atmosphere": ["Historic", "Romantic", "Cozy"]
  }
}
```

***

### 📍 Example of Scraped Data

<img src="https://i.ibb.co/qXnqrz0/fast-google-maps-business-detail-phone-scraper-extractor.png" alt="google maps business detail phone scraper extractor" style="width:100%;" />

````json
{
   "count": 20,
   "query": "Restaurants in New York",
   "results": [
      {
         "name": "Carmine's - Time Square",
         "original_rank": 1,
         "display_rank": 1,
         "status": "Open",
         "isClaimed": "Yes",
         "rating": 4.5,
         "photoCount": 18178,
         "reviewCount": 17231,
         "neighborhood": "Manhattan",
         "street": "200 W 44th St",
         "city": "New York",
         "zip": "10036",
         "state": "New York",
         "country": "US",
         "phone": "(212) 221-3800",
         "phoneIsd": "+1 212-221-3800",
         "website": "carminesnyc.com",
         "priceRange": "$$",
         "priceRangeText": "Moderately expensive",
         "address": "200 W 44th St, New York, NY 10036",
         "longitude": -73.986654,
         "latitude": 40.757498,
         "cid": "1155783591561813087",
         "gid": "0x89c25854faa8d447:0x100a2b0d8c445c5f",
         "placeId": "RxDxZ7qzJNbi7_UPuOvG4QM",
         "providerId": "/g/1td59jdq",
         "searchLocation": "New York",
         "searchCategory": "Restaurants",
         "categories": [
            "Italian restaurant",
            "Caterer",
            "Delivery service",
            "Family restaurant",
            "Restaurant"
         ],
         "shortDescription": "Family-friendly Italian option",
         "longDescription": "Relaxed, family-friendly restaurant serving a menu of homestyle Southern Italian meals.",
         "openingHours": [
            { "day": "Saturday", "hours": "11:30 AM-12 AM" },
            { "day": "Sunday", "hours": "11:30 AM-11 PM" },
            { "day": "Monday", "hours": "11:30 AM-11 PM" },
            { "day": "Tuesday", "hours": "11:30 AM-11 PM" },
            { "day": "Wednesday", "hours": "11:30 AM-11 PM" },
            { "day": "Thursday", "hours": "11:30 AM-12 AM" },
            { "day": "Friday", "hours": "11:30 AM-12 AM" }
         ],
         "additionalInfo": {
            "info": {
               "Accessibility": [
                  "Wheelchair accessible restroom",
                  "Wheelchair accessible seating",
                  "Wheelchair accessible parking lot",
                  "Wheelchair accessible entrance"
               ],
               "Amenities": ["Wi-Fi", "Restroom", "Bar onsite"],
               "Atmosphere": ["Historic", "Romantic", "Cozy", "Casual", "Trendy"],
               "Children": ["Good for kids", "High chairs", "Kids' menu"],
               "Crowd": ["Family-friendly", "Transgender safespace", "Tourists", "LGBTQ+ friendly", "Groups"],
               "Dining options": ["Lunch", "Catering", "Dessert", "Seating", "Dinner", "Brunch"],
               "Highlights": ["Great dessert", "Great wine list", "Great coffee", "Great cocktails", "Fast service", "Great beer selection"],
               "Offerings": ["Coffee", "Comfort food", "Wine", "Happy hour drinks", "Private dining room", "Food", "Alcohol", "Late-night food", "Cocktails", "Hard liquor", "Beer"],
               "Parking": ["Paid street parking", "Parking", "Paid parking garage"],
               "Payments": ["Debit cards", "Credit cards", "NFC mobile payments"],
               "Planning": ["Usually a wait", "Lunch reservations recommended", "Dinner reservations recommended", "Reservations required", "Accepts reservations"],
               "Popular for": ["Lunch", "Dinner"],
               "Service options": ["Delivery", "Onsite services", "Takeout", "Dine-in", "Curbside pickup", "No-contact delivery", "Outdoor seating"]
            }
         },
         "reservationWebsites": [
            {
               "website": "https://carminesnyc.com/bookings"
            }
         ],
         "timestamp": "2025-04-05 13:13:13.002273",
         "photo": "https://lh3.googleusercontent.com/gps-cs-s/AC9h4nqyN-qhzO50RUhJj2AQ1K0fC2N8TOWGF365PISQKHWJ2Q1hPrNUzkhpb5-yXKbyQG8YW0iam1w_AZfVGy2gjfTnugKAZd_XxGL0pL6eaGtMfiEQEmNQBzc4eGf5S9nKDHxjf9xs=w1000-h1000-k-no",
         "url": "https://www.google.com/maps?cid=1155783591561813087",
         "language_code": "en",
         "language_name": "English",
         "country_code": "us",
         "country_name": "United States"
      }
   ],
   "language_code": "en",
   "language_name": "English",
   "country_code": "us",
   "country_name": "United States"
}

---

### 🚀 Performance & Scalability

#### ⚡ **High-Performance Architecture**
- **Fast Processing**: Optimized for speed and efficiency
- **Smart Optimization**: Efficient area coverage system
- **Reliable Performance**: Stable and consistent operation
- **Memory Efficient**: Streamlined data processing and storage

#### 📈 **Scalability Features**
- **Multi-Term Support**: Up to 50 search terms per request
- **Large Result Sets**: Up to 15,000 results per search
- **Efficient Processing**: Optimized handling for large datasets
- **Smart Termination**: Stop when target results reached

#### 🔄 **Reliability & Error Handling**
- **Automatic Retries**: Smart retry system for failed requests
- **Error Recovery**: Graceful handling of network issues
- **Data Validation**: Comprehensive input and output validation
- **Progress Tracking**: Real-time monitoring of progress

---

### 🌍 Geographic Coverage

#### 📍 **Global Reach**
- **240+ Countries**: Worldwide business coverage
- **70+ Languages**: Local language support
- **Regional Targeting**: Country and language-specific results

#### 🗺️ **Advanced Geographic Features**
- **Coordinate Precision**: High accuracy for location targeting
- **Polygon Support**: Complex geographic boundary definitions
- **Radius Calculations**: Accurate distance-based filtering
- **Systematic Coverage**: Complete area coverage

---

### 🔧 Technical Specifications

#### 📊 **Input Parameters**

##### **Required Fields**
- `term`: Search term(s) - string or array of strings

##### **Location Options** (choose one)
- `location`: City/area name (e.g., "New York")
- `latitude` + `longitude`: Precise coordinates
- `polygon`: Custom geographic boundary

##### **Coordinate-Specific Options**
- `radius`: Search radius in miles (1-100)
- `totalAroundCoordinate`: Target unique results

##### **Filtering Options**
- `min_rating`: Minimum star rating (0-5)
- `min_reviews`: Minimum review count
- `has_website`: Only businesses with websites
- `categories_filter`: Specific business categories
- `min_photos`: Minimum photo count
- `name_filter`: Business name keywords

#### 📈 **Output Format**
- **JSON**: Structured data format
- **CSV**: Spreadsheet-compatible format
- **Excel**: Microsoft Excel format
- **XML**: Extensible markup language format

---

### 🎯 Example Implementations

#### 🏢 **Market Research Analysis**
```json
{
  "term": ["coffee shops", "cafes", "espresso bars"],
  "polygon": {
    "type": "Polygon",
    "coordinates": [[
      [-74.041885, 40.570396],
      [-73.855682, 40.570396],
      [-73.855682, 40.739234],
      [-74.041885, 40.739234],
      [-74.041885, 40.570396]
    ]]
  },
  "min_rating": 4.0,
  "min_reviews": 50,
  "has_website": true,
  "totalAroundCoordinate": 500
}
````

#### 📍 **Competitive Intelligence**

```json
{
  "term": "pizza restaurants",
  "latitude": "40.730610",
  "longitude": "-73.935242",
  "radius": 10,
  "min_rating": 4.2,
  "categories_filter": ["Italian restaurant", "Pizza"],
  "totalAroundCoordinate": 200
}
```

#### 🏗️ **Site Selection Research**

```json
{
  "term": ["restaurants", "retail stores", "services"],
  "location": "Austin, TX",
  "min_rating": 3.5,
  "min_reviews": 20,
  "totalAroundCoordinate": 1000
}
```

***

### 🔄 Integration & Automation

#### 🔌 **API Integration**

- **RESTful API**: Simple HTTP requests
- **Webhook Support**: Real-time notifications
- **Scheduling**: Automated data collection
- **Multiple Formats**: Flexible output options

#### 📊 **Data Processing**

- **Real-Time Processing**: Immediate result availability
- **Batch Operations**: Large-scale data collection
- **Custom Filtering**: Advanced result filtering
- **Export Options**: Multiple format support

#### 🔗 **Workflow Integration**

- **CRM Integration**: Direct data import
- **Analytics Platforms**: Seamless data flow
- **Business Intelligence**: Enhanced reporting
- **Marketing Automation**: Targeted campaigns

***

### 📈 Performance Metrics

#### ⚡ **Speed & Efficiency**

- **Fast Processing**: Optimized for quick results
- **Result Volume**: Up to 15,000 results per search
- **Coverage Area**: Unlimited geographic boundaries
- **Data Freshness**: Real-time business information

#### 📊 **Accuracy & Reliability**

- **Data Accuracy**: High accuracy rate
- **Duplicate Prevention**: Smart duplicate removal system
- **Error Handling**: Robust error recovery
- **Validation**: Comprehensive data validation

***

### 🎯 Best Practices

#### 📍 **Geographic Targeting**

- **Use Coordinates**: For precise location targeting
- **Define Polygons**: For complex area boundaries
- **Set Appropriate Radius**: Balance coverage vs. performance
- **Choose Coverage Level**: Optimal settings for your needs

#### 🔍 **Search Optimization**

- **Multiple Terms**: Use related search terms for comprehensive coverage
- **Smart Filtering**: Apply filters to focus on relevant results
- **Target Setting**: Set realistic result targets
- **Category Matching**: Use specific business categories

#### 📊 **Data Management**

- **Regular Updates**: Schedule periodic data refreshes
- **Quality Control**: Validate data accuracy
- **Storage Optimization**: Efficient data storage practices
- **Backup Strategy**: Secure data backup procedures

***

### 🚀 Getting Started

#### 1. **Choose Your Target**

- Define your geographic area (location, coordinates, or polygon)
- Set your search terms and filters
- Determine your result target

#### 2. **Configure Your Search**

- Select appropriate filtering criteria
- Set performance parameters
- Choose output format

#### 3. **Execute & Monitor**

- Run your search with real-time monitoring
- Track progress and performance
- Download results in your preferred format

#### 4. **Analyze & Act**

- Process and analyze your data
- Generate insights and reports
- Take action based on findings

***

### 📞 Support & Documentation

#### 📚 **Resources**

- **API Documentation**: Comprehensive technical guides
- **Use Case Examples**: Real-world implementation examples
- **Best Practices**: Optimization and efficiency tips
- **Troubleshooting**: Common issues and solutions

#### 🆘 **Support Options**

- **Technical Support**: Expert assistance for complex implementations
- **Custom Solutions**: Tailored solutions for specific requirements
- **Training**: Comprehensive training and onboarding
- **Consulting**: Strategic guidance for business applications

***

### 🔒 Security & Compliance

#### 🛡️ **Data Protection**

- **Secure Processing**: Encrypted data transmission
- **Privacy Compliance**: GDPR and CCPA compliant
- **Access Control**: Secure API access management
- **Audit Trails**: Comprehensive activity logging

#### 📋 **Compliance Standards**

- **Data Privacy**: Full compliance with privacy regulations
- **Security Standards**: Industry-standard security practices
- **Quality Assurance**: Rigorous data quality standards
- **Performance Monitoring**: Continuous performance optimization

***

### 🔗 Related Tools & Alternatives

#### 📧 **Email & Contact Extraction**

Looking for email addresses, phone numbers, and social media links? Check out our specialized email extraction tool:

**[📩 Google Maps Email Extractor](https://apify.com/poidata/google-maps-email-extractor)** - Extract email addresses, phone numbers, and social media links from Google Maps businesses and their websites. Perfect for lead generation and contact database building.

**Key Features:**

- **Email Extraction**: Automatically visit business websites and extract email addresses
- **Social Media Links**: Capture Facebook, Instagram, LinkedIn, and YouTube profiles
- **Contact Details**: Get phone numbers and website information
- **Advanced Search**: Support for coordinate radius and GeoJSON polygon searches
- **Concurrent Processing**: Fast email extraction at 5 RPS
- **Deduplication**: Smart duplicate removal by Google ID

**Perfect for:**

- Lead generation and sales prospecting
- Building contact databases
- Social media outreach campaigns
- Email marketing list building

***

### 🛠️ Tools & Resources

#### 🗺️ **GeoJSON Polygon Creation**

Need to create custom geographic boundaries for polygon searches? Use this free tool:

**[Keene College Polyline Tool](https://www.keene.edu/campus/maps/tool/)** - Create and generate GeoJSON polygons for precise geographic targeting.

**Features:**

- **Interactive Map**: Click on the map to create polygon vertices
- **GeoJSON Export**: Generate properly formatted GeoJSON coordinates
- **Right-Hand Rule**: Automatically conforms to proper coordinate ordering
- **Free to Use**: No registration required
- **Simple Interface**: Easy-to-use polygon drawing tool

**How to Use:**

1. Visit the [Polyline Tool](https://www.keene.edu/campus/maps/tool/)
2. Right-click on the map to begin drawing
3. Click to add vertices and create your polygon
4. Use the "Close Shape" button to complete your polygon
5. Copy the generated GeoJSON coordinates
6. Use the coordinates in your polygon search parameters

**Perfect for:**

- Creating custom search areas for polygon-based searches
- Defining precise geographic boundaries
- Targeting specific neighborhoods or regions
- Complex area coverage requirements

***

### 📩 Need Custom Data?

For bulk datasets by city, country, or global coverage, contact us at [Poidata.io](https://poidata.io/contact-us).

***

*Transform your business intelligence with the most advanced Google Maps scraper available. Get comprehensive, accurate, and actionable business data for any geographic area worldwide.*

# Actor input Schema

## `term` (type: `array`):

The term or search terms to look for (e.g. restaurant, cafe, dentist, etc). Must be 25 characters or less.

## `location` (type: `string`):

The location to search in (e.g. New York, Paris). Must be 50 characters or less.

## `language` (type: `string`):

Language for search results

## `country` (type: `string`):

Country context for search results

## `total` (type: `integer`):

Up to 300 results per term, max 4,500 for 50 terms

## `coordinateSection` (type: `string`):

Scrape with geo-coordinates

## `latitude` (type: `string`):

Latitude of the location (optional if location is provided).

## `longitude` (type: `string`):

Longitude of the location (optional if location is provided).

## `polygon` (type: `string`):

Polygon of the location (optional if location is provided).

## `radius` (type: `integer`):

Set radius to scrape around the geocoordinate location.

## `totalAroundCoordinate` (type: `integer`):

Set total results to scrape around the geocoordinate location per term.

## `advanceOptionSection` (type: `string`):

Filters

## `min_rating` (type: `string`):

Minimum star rating (0–5, decimals allowed)

## `min_reviews` (type: `integer`):

Minimum number of reviews

## `min_photos` (type: `integer`):

Minimum number of photos

## `has_website` (type: `boolean`):

Filter to only businesses with websites (checked) or without websites (unchecked)

## `name_filter` (type: `string`):

Filter businesses by name (case-insensitive substring match)

## `categories_filter` (type: `array`):

Filter businesses by category (comma-separated, case-insensitive)

## Actor input object example

```json
{
  "term": [
    "Restaurant"
  ],
  "location": "New York, USA",
  "language": "en",
  "country": "us",
  "total": 20,
  "radius": 1,
  "totalAroundCoordinate": 20,
  "min_rating": "0",
  "min_reviews": 0,
  "min_photos": 0
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("poidata/google-maps-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("poidata/google-maps-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call poidata/google-maps-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=poidata/google-maps-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Google Maps Scraper",
        "description": "Quickly extract data from thousands of locations. Scrape Google Maps using keywords, categories, coordinates or GeoJSON polygons. Collect rich business data including addresses, contacts, opening hours, ratings, and more. Export results in multiple formats, run via API and integrate seamlessly.",
        "version": "0.0",
        "x-build-id": "3wUvCmu7OsNIrge6V"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/poidata~google-maps-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-poidata-google-maps-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/poidata~google-maps-scraper/runs": {
            "post": {
                "operationId": "runs-sync-poidata-google-maps-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/poidata~google-maps-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-poidata-google-maps-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "term"
                ],
                "properties": {
                    "term": {
                        "title": "👉 Search Term",
                        "maxItems": 50,
                        "type": "array",
                        "description": "The term or search terms to look for (e.g. restaurant, cafe, dentist, etc). Must be 25 characters or less.",
                        "default": [
                            "Restaurant"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "location": {
                        "title": "🌍 Location",
                        "maxLength": 50,
                        "type": "string",
                        "description": "The location to search in (e.g. New York, Paris). Must be 50 characters or less.",
                        "default": "New York, USA"
                    },
                    "language": {
                        "title": "🔠 Language",
                        "enum": [
                            "en",
                            "es",
                            "fr",
                            "de",
                            "it",
                            "pt-BR",
                            "pt-PT",
                            "nl",
                            "pl",
                            "ru",
                            "ja",
                            "ko",
                            "zh-CN",
                            "zh-TW",
                            "ar",
                            "hi",
                            "tr",
                            "vi",
                            "id",
                            "th",
                            "sv",
                            "no",
                            "fi",
                            "da",
                            "cs"
                        ],
                        "type": "string",
                        "description": "Language for search results",
                        "default": "en"
                    },
                    "country": {
                        "title": "Country Context",
                        "enum": [
                            "us",
                            "gb",
                            "ca",
                            "au",
                            "fr",
                            "de",
                            "it",
                            "es",
                            "jp",
                            "in",
                            "br",
                            "mx",
                            "ar",
                            "cn",
                            "ru",
                            "za",
                            "sg",
                            "ae",
                            "nl",
                            "ch",
                            "se",
                            "dk",
                            "no",
                            "fi",
                            "nz"
                        ],
                        "type": "string",
                        "description": "Country context for search results",
                        "default": "us"
                    },
                    "total": {
                        "title": "🔢 Total Results",
                        "minimum": 20,
                        "maximum": 300,
                        "type": "integer",
                        "description": "Up to 300 results per term, max 4,500 for 50 terms",
                        "default": 20
                    },
                    "coordinateSection": {
                        "title": "Scrape with Geo-coordinates",
                        "type": "string",
                        "description": "Scrape with geo-coordinates"
                    },
                    "latitude": {
                        "title": "Latitude",
                        "type": "string",
                        "description": "Latitude of the location (optional if location is provided)."
                    },
                    "longitude": {
                        "title": "Longitude",
                        "type": "string",
                        "description": "Longitude of the location (optional if location is provided)."
                    },
                    "polygon": {
                        "title": "Polygon",
                        "type": "string",
                        "description": "Polygon of the location (optional if location is provided)."
                    },
                    "radius": {
                        "title": "Radius",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Set radius to scrape around the geocoordinate location.",
                        "default": 1
                    },
                    "totalAroundCoordinate": {
                        "title": "Total Results Around Coordinate",
                        "minimum": 20,
                        "maximum": 100000,
                        "type": "integer",
                        "description": "Set total results to scrape around the geocoordinate location per term.",
                        "default": 20
                    },
                    "advanceOptionSection": {
                        "title": "⚙️ Filters",
                        "type": "string",
                        "description": "Filters"
                    },
                    "min_rating": {
                        "title": "Minimum Rating",
                        "pattern": "^(?:[0-4](?:\\.\\d+)?|5(?:\\.0+)?)$",
                        "type": "string",
                        "description": "Minimum star rating (0–5, decimals allowed)",
                        "default": "0"
                    },
                    "min_reviews": {
                        "title": "Minimum Reviews",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum number of reviews",
                        "default": 0
                    },
                    "min_photos": {
                        "title": "Minimum Photos",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum number of photos",
                        "default": 0
                    },
                    "has_website": {
                        "title": "Has Website",
                        "type": "boolean",
                        "description": "Filter to only businesses with websites (checked) or without websites (unchecked)"
                    },
                    "name_filter": {
                        "title": "Business Name Filter",
                        "type": "string",
                        "description": "Filter businesses by name (case-insensitive substring match)"
                    },
                    "categories_filter": {
                        "title": "Multiple Categories Filter",
                        "type": "array",
                        "description": "Filter businesses by category (comma-separated, case-insensitive)",
                        "items": {
                            "type": "string"
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
