# Fast Google Maps Search Scraper API | Business Listings & Leads (`agents/google-maps-search`) Actor

Find high-value leads fast with our low-cost Google Maps scraper. Instantly extract business names, contact details, emails, phone numbers, and reviews—perfect for sales prospecting and outreach. Affordable, reliable, and built for scale.

- **URL**: https://apify.com/agents/google-maps-search.md
- **Developed by:** [Agents](https://apify.com/agents) (community)
- **Categories:** Travel, Social media, Lead generation
- **Stats:** 567 total users, 43 monthly users, 77.2% runs succeeded, 19 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## Fast Google Maps Search Scraper API: Extract Business Listings, Ratings & Contact Data at Scale

The **Google Maps Search Scraper** is an Apify Actor that extracts structured business listings from Google Maps—including names, addresses, phone numbers, websites, ratings, review counts, operating hours, GPS coordinates, and business categories—without requiring a Google Places API key. This **google maps scraper api** collects 20+ data fields per listing from keyword searches and direct URLs.

**Why scrapers instead of the Google Places API?** The Google Places API charges $32 per 1,000 Nearby Search requests and imposes strict daily quotas. This scraper delivers complete business data at $0.016 per query with the first ~40 results FREE on every search—no API key, no rate limits, no OAuth setup. Extract business names, phone numbers, websites, and addresses at scale for lead generation, market research, or directory building.

Use this **google maps data extractor** for lead generation, competitor analysis, market research, or local business intelligence. **Download Google Maps business data** to JSON, CSV, or Excel for sales prospecting, location analytics, and competitive benchmarking.

**Pricing:** $0.016/query (first ~40 items FREE) | $0.0004/listing | **No Google API key required**

---

### Table of Contents

1. [What Does the Google Maps Search Scraper Do?](#what-does-the-google-maps-search-scraper-do)
2. [Features and Capabilities](#features-and-capabilities)
3. [Pricing](#pricing)
4. [Input Parameters](#input-parameters)
5. [Output Format and Data Fields](#output-format-and-data-fields)
6. [Custom Map Function](#custom-map-function)
7. [AI Agent Integration via MCP](#ai-agent-integration-via-mcp)
8. [Related Tools](#related-tools)
9. [Demo Mode and Free Testing](#demo-mode-and-free-testing)
10. [Automated Scheduling and Monitoring](#automated-scheduling-and-monitoring)
11. [Quick Start Guide](#quick-start-guide)
12. [Use Cases and Industries](#use-cases-and-industries)
13. [Troubleshooting](#troubleshooting)
14. [Frequently Asked Questions](#frequently-asked-questions)
15. [Contact](#contact)

---

### What Does the Google Maps Search Scraper Do?

**Google Maps business data extraction** is the automated process of collecting business listings, contact details, ratings, and location metadata from Google Maps search results. Google Maps indexes over 200 million businesses worldwide, making it the most comprehensive source for local business intelligence, lead generation, and market research.

The **Agents Google Maps Search Scraper** is a high-performance data extraction tool built to scrape Google Maps business listings from keyword searches and direct URLs at scale. Extract structured business data quickly and reliably—without needing the Google Places API, API keys, or complex authentication.

This tool serves as a practical alternative to the official Google Places API for bulk business data collection. The Places API charges $32/1,000 Nearby Search requests and requires billing setup with quotas—this Actor delivers equivalent data at **$0.016 per query** with no daily limits.

#### What You Get From Every Business Listing

When you extract Google Maps business data, you receive:

**Business Identity and Contact**

- Business name, full address (street, city, state, postal code, country)
- Phone number and website URL
- Google Maps Place ID and direct URL
- Neighborhood classification

**Ratings and Reputation**

- Star rating (1.0–5.0 aggregate)
- Total review count
- Price level indicator (e.g., "$", "$$", "$$$")

**Classification and Context**

- Business categories (e.g., "Restaurant", "American cuisine", "Bar & grill")
- Full operating hours for every day of the week

**Geographic Data**

- GPS coordinates (latitude, longitude)
- Google Maps FID identifier

---

### Features and Capabilities

#### Input Flexibility

| Input Type         | Example                                                             | Best For                                            |
| ------------------ | ------------------------------------------------------------------- | --------------------------------------------------- |
| **Keyword Search** | `"Italian restaurants in downtown Chicago"`                         | Discovering businesses by category and location     |
| **Direct URL**     | `https://www.google.com/maps/search/coffee+shops+near+Times+Square` | Extracting from specific Google Maps search results |

#### Core Features

- **High-Speed Extraction** — Extract hundreds of business listings efficiently
- **Free Tier** — First ~40 items FREE with every search query
- **No API Key** — No Google Places API key or OAuth setup required
- **Full Contact Data** — Phone numbers, websites, and full addresses
- **Operating Hours** — Complete weekly schedule for every business
- **GPS Coordinates** — Latitude and longitude for geographic analysis
- **Business Categories** — Multi-label classification for filtering and segmentation
- **Multiple Export Formats** — JSON, CSV, Excel direct download
- **Custom Transformations** — Reshape output with custom JavaScript map functions
- **API Integration** — RESTful API for Python, Node.js, or any HTTP client
- **Scheduled Runs** — Automate recurring extraction for market monitoring

---

### Pricing

#### Event-Based Cost Structure

Pay only for what you scrape—no subscriptions, no hidden fees. This **google maps scraper api** uses transparent pay-per-event pricing:

| Event Type       | Price           | What's Included          |
| ---------------- | --------------- | ------------------------ |
| **Query**        | $0.016/query    | First ~40 items FREE     |
| **Dataset Item** | $0.0004/listing | Each business in results |

#### Cost Comparison: This Scraper vs. Google Places API

| Feature                     | This Scraper               | Google Places API               |
| --------------------------- | -------------------------- | ------------------------------- |
| **Cost per 1,000 listings** | ~$0.40                     | $32.00 (Nearby Search)          |
| **Results per request**     | Unlimited (use `maxItems`) | 20 max (60 with pagination)     |
| **API key required**        | No                         | Yes (with billing)              |
| **Free tier**               | ~40 items FREE/query       | $200 monthly credit             |
| **Rate limits**             | No hard limits             | Strict daily quotas             |
| **Operating hours**         | Full weekly schedule       | Requires additional call        |
| **Phone numbers**           | Included                   | Requires Place Details call ($) |

> **Example:** Extracting 10,000 business listings costs approximately **$4.02** with this scraper vs. **$320.00** with Google Places API Nearby Search—a **98.7% cost reduction**.

---

### Input Parameters

| Field               | Type   | Description                                                                                | Default    |
| ------------------- | ------ | ------------------------------------------------------------------------------------------ | ---------- |
| `startUrls`         | array  | Direct Google Maps URLs from which to extract business listings                            | `[]`       |
| `keywords`          | string | Search terms to find businesses (e.g., "restaurants near me", "hotels in Paris")           | `null`     |
| `maxItems`          | number | Maximum number of business listings to extract                                             | `Infinity` |
| `customMapFunction` | string | JavaScript function to transform each business object (transformation only, not filtering) | `null`     |

#### Input Examples

**Keyword Search — Lead Generation:**
```json
{
    "keywords": "Italian restaurants in downtown Chicago",
    "maxItems": 200
}
````

**Direct URL — Specific Search Results:**

```json
{
    "startUrls": ["https://www.google.com/maps/search/coffee+shops+near+Times+Square"],
    "maxItems": 100
}
```

**Broad Market Research — Multiple Categories:**

```json
{
    "keywords": "dentists in Los Angeles",
    "maxItems": 500
}
```

***

### Output Format and Data Fields

Each extracted business listing is a structured JSON object containing 20+ fields. Here is a sample:

```json
{
  "id": "0x8898a0fc93d02c8b:0xb7c1863bdd5355eb",
  "name": "City Bistro & Grill",
  "address": "123 Main Street, New York, NY 10001",
  "neighborhood": "Manhattan",
  "street": "123 Main Street",
  "city": "New York",
  "state": "NY",
  "postalCode": "10001",
  "country": "United States",
  "phone": "+1 212-555-0123",
  "website": "https://citybistrogrill.com",
  "rating": 4.5,
  "totalReviews": 342,
  "priceLevel": "$$",
  "categories": ["Restaurant", "American cuisine", "Bar & grill"],
  "hours": {
    "monday": "11:00 AM - 10:00 PM",
    "tuesday": "11:00 AM - 10:00 PM",
    "wednesday": "11:00 AM - 10:00 PM",
    "thursday": "11:00 AM - 10:00 PM",
    "friday": "11:00 AM - 11:00 PM",
    "saturday": "10:00 AM - 11:00 PM",
    "sunday": "10:00 AM - 9:00 PM"
  },
  "location": {
    "lat": 40.7614327,
    "lng": -73.9776216
  },
  "placeId": "ChIJiyyAjAyRyzsRm1XT3TuGHLs",
  "url": "https://www.google.com/maps/place/City+Bistro+%26+Grill/@40.7614327,-73.9776216,17z",
  "scrapedAt": "2025-04-04T12:03:59.811Z"
}
```

#### Complete Field Reference

| Field          | Type   | Description                                |
| -------------- | ------ | ------------------------------------------ |
| `id`           | string | Google Maps FID identifier                 |
| `name`         | string | Business name                              |
| `address`      | string | Full formatted address                     |
| `neighborhood` | string | Neighborhood or district name              |
| `street`       | string | Street address                             |
| `city`         | string | City name                                  |
| `state`        | string | State or province code                     |
| `postalCode`   | string | Postal/ZIP code                            |
| `country`      | string | Country name                               |
| `phone`        | string | Business phone number                      |
| `website`      | string | Business website URL                       |
| `rating`       | number | Aggregate star rating (1.0–5.0)            |
| `totalReviews` | number | Total number of Google reviews             |
| `priceLevel`   | string | Price indicator ("$", "$$", "$$$", "$$$$") |
| `categories`   | array  | Business category tags                     |
| `hours`        | object | Operating hours for each day of the week   |
| `location`     | object | GPS coordinates (`lat`, `lng`)             |
| `placeId`      | string | Google Maps Place ID                       |
| `url`          | string | Direct Google Maps URL                     |
| `scrapedAt`    | string | ISO 8601 extraction timestamp              |

#### Data Fields by Use Case

| Use Case                     | Key Fields                                                           |
| ---------------------------- | -------------------------------------------------------------------- |
| **Lead Generation**          | `name`, `phone`, `website`, `address`, `categories`                  |
| **Market Research**          | `categories`, `rating`, `totalReviews`, `priceLevel`, `city`         |
| **Local SEO Auditing**       | `rating`, `totalReviews`, `categories`, `address`, `url`             |
| **Directory Building**       | `name`, `address`, `phone`, `website`, `hours`, `categories`         |
| **Geographic Analysis**      | `location.lat`, `location.lng`, `city`, `neighborhood`, `postalCode` |
| **Competitive Intelligence** | `name`, `rating`, `totalReviews`, `priceLevel`, `categories`         |

***

### Custom Map Function

Transform each business listing before it's saved to the dataset. The `customMapFunction` parameter accepts a JavaScript function that reshapes every listing object. Use this to extract specific fields, rename properties, or compute derived values.

**Important:** The custom map function is for **transformation only**, not filtering. Every listing will still be saved—you're changing its shape, not deciding whether to include it.

#### Example: Flatten for Lead Generation CRM

```javascript
(business) => ({
    companyName: business.name,
    phoneNumber: business.phone,
    website: business.website,
    fullAddress: business.address,
    city: business.city,
    state: business.state,
    rating: business.rating,
    reviewCount: business.totalReviews,
    category: business.categories?.[0] || null
})
```

#### Example: Extract for Geographic Analysis

```javascript
(business) => ({
    name: business.name,
    latitude: business.location?.lat,
    longitude: business.location?.lng,
    neighborhood: business.neighborhood,
    city: business.city,
    postalCode: business.postalCode,
    categories: business.categories?.join(", "),
    priceLevel: business.priceLevel
})
```

***

### AI Agent Integration via MCP

Apify provides a hosted **Model Context Protocol (MCP) server** at `mcp.apify.com` that allows AI agents and LLM-based applications to discover and run Apify Actors as tools—including this Google Maps Search Scraper.

#### What This Means

If you're building AI agents using Claude Desktop, VS Code with MCP support, or any framework that implements the MCP specification, you can give your agent the ability to search Google Maps and extract business data autonomously. The agent can call this scraper as a tool, receive structured JSON results, and use them in downstream reasoning.

#### How to Connect

Add this scraper to your MCP client configuration by pointing to the Apify MCP server with the actor specified:

```
https://mcp.apify.com?tools=agents/google-maps-search
```

Or use the CLI for local development:

```bash
npx @apify/actors-mcp-server --tools agents/google-maps-search
```

#### Use Cases for AI Agent Integration

- **Autonomous lead research** — An AI agent receives a prompt like "Find all Italian restaurants in downtown Chicago" and calls this scraper to retrieve structured data, then formats it into a prospecting spreadsheet.
- **Market analysis workflows** — Feed business data into an LLM for summarization, competitive analysis, or report generation.
- **Multi-step research pipelines** — Combine this scraper with the [Google Maps Reviews Scraper](https://apify.com/agents/google-maps-reviews?fpr=yhdrb) in a single agent workflow: first discover businesses, then extract their reviews.

For full setup instructions, see the [Apify MCP documentation](https://docs.apify.com/platform/integrations/mcp).

***

### Related Tools

#### Agents Data Intelligence Suite

All tools below are built and maintained by [Agents](https://apify.com/agents?fpr=yhdrb)—a team of ex-Big Tech engineers, former ad agency strategists, and data specialists delivering intelligence, precision, and impact at scale.

| Tool                                                                                      | What It Extracts                                   | Best For                                        |
| ----------------------------------------------------------------------------------------- | -------------------------------------------------- | ----------------------------------------------- |
| **Google Maps Search Scraper**                                                            | Business listings, contact, ratings, hours         | Lead generation, directories **(You are here)** |
| **[Google Maps Reviews Scraper](https://apify.com/agents/google-maps-reviews?fpr=yhdrb)** | Reviews, ratings, reviewer profiles, location data | Sentiment analysis, reputation monitoring       |
| **[Trustpilot Reviews Scraper](https://apify.com/agents/trustpilot-reviews?fpr=yhdrb)**   | Reviews, TrustScores, company replies              | SaaS/B2B analysis                               |
| **[Yelp Reviews Scraper](https://apify.com/agents/yelp-reviews?fpr=yhdrb)**               | Reviews, ratings, reviewer profiles                | Restaurant/hospitality                          |
| **[Yelp Business Scraper](https://apify.com/agents/yelp-business?fpr=yhdrb)**             | Business profiles, ratings, contact                | Business data, prospecting                      |
| **[TripAdvisor Reviews Scraper](https://apify.com/agents/tripadvisor-reviews?fpr=yhdrb)** | Hotel/restaurant reviews, ratings                  | Hospitality intelligence                        |

***

### Demo Mode and Free Testing

If you run on Apify's Free plan, you can still use this **google maps search scraper** with limited results. For unrestricted usage and full API access at scale, subscribe to a paid Apify plan.

**Free Plan Benefits:**

- First ~40 items FREE with every search query
- Test the API before committing to larger runs
- Validate output format and data quality
- No credit card required to start

**Upgrade for Full Access:**

- No listing limits per query
- Full API access for integration with your systems
- Scheduled runs for automated monitoring
- Webhook notifications for pipeline automation

***

### Automated Scheduling and Monitoring

Business landscapes change constantly—new businesses open, others close, ratings shift, and contact details update. For accurate market intelligence and lead generation, set up automated recurring runs to keep your data current.

#### Why Schedule Extraction?

- **Lead pipeline freshness** — Ensure your prospect lists always reflect the latest businesses
- **Market monitoring** — Track new entrants and closures in your target areas
- **Rating trend tracking** — Monitor how competitor ratings change over time
- **Directory maintenance** — Keep business directories up to date automatically
- **Agency reporting** — Automated data for client market intelligence dashboards

#### How to Set Up Scheduled Runs

1. Open the Actor in Apify Console
2. Configure your input parameters (keywords, maxItems, etc.)
3. Click **Schedule** and set frequency (daily, weekly, monthly)
4. Optionally add a **webhook** to push new data to your pipeline

#### Webhook Integration

Combine scheduled runs with webhooks to build fully automated data pipelines:

```
Scheduled Run → Business Data Extracted → Webhook fires → Your CRM/database receives data
```

Use webhooks to trigger:

- CRM updates with new lead data
- Database syncs for directory platforms
- Spreadsheet refreshes for market reports
- Slack alerts when new businesses match your criteria

***

### Quick Start Guide

#### For Non-Technical Users (Apify Console)

1. Go to **[Google Maps Search Scraper](https://apify.com/agents/google-maps-search?fpr=yhdrb)** on Apify
2. Click **Try for free**
3. Enter your search keywords (e.g., "plumbers in Seattle") or paste a Google Maps URL
4. Set `maxItems` to your desired listing count
5. Click **Start** and wait for results
6. **Export Google Maps business data to CSV** from the Storage tab

#### For Developers (Python API)

```python
from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("agents/google-maps-search").call(run_input={
    "keywords": "Italian restaurants in downtown Chicago",
    "maxItems": 200
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
```

#### For Sales Teams (Lead Generation)

```json
{
    "keywords": "software companies in San Francisco",
    "maxItems": 300
}
```

> Schedule weekly. Export to CSV. Import into your CRM. Each listing includes phone number, website, address, and business category—everything you need for targeted outreach.

#### For Market Researchers (Geographic Analysis)

```json
{
    "keywords": "coffee shops in Manhattan",
    "maxItems": 500,
    "customMapFunction": "(b) => ({ name: b.name, lat: b.location?.lat, lng: b.location?.lng, rating: b.rating, reviews: b.totalReviews, neighborhood: b.neighborhood })"
}
```

> Use the custom map function to flatten output for direct import into mapping tools or GIS software.

***

### Use Cases and Industries

#### Lead Generation and Sales Prospecting

Extract business names, phone numbers, websites, and addresses for targeted outreach campaigns. Filter by category, location, and rating to build high-quality prospect lists. A sales team searching for "accounting firms in Houston" receives structured contact data ready for CRM import.

**Key fields:** `name`, `phone`, `website`, `address`, `categories`, `rating`

#### Market Research and Competitive Analysis

Analyze business density, category distribution, and rating patterns across geographic areas. Compare competitor ratings, review volumes, and price levels. Identify underserved markets by mapping business coverage against population data.

**Key fields:** `categories`, `rating`, `totalReviews`, `priceLevel`, `city`, `location`

#### Business Directory and Aggregator Platforms

Build comprehensive local business databases with verified contact information, operating hours, and categorization. Keep directories current with scheduled extraction runs. Each listing includes the full weekly operating schedule—data that typically requires manual collection.

**Key fields:** `name`, `address`, `phone`, `website`, `hours`, `categories`

#### Local SEO Auditing

Audit Google Business Profile performance across a client's locations or competitor set. Track rating distribution, review volume, and category classification. Identify which businesses rank for specific keyword searches and how their profiles compare.

**Key fields:** `rating`, `totalReviews`, `categories`, `url`, `address`

#### Real Estate and Location Intelligence

Research the commercial ecosystem around properties or neighborhoods. Map business density, category mix, and quality signals (ratings, reviews) to assess area desirability. GPS coordinates enable direct integration with GIS platforms and mapping tools.

**Key fields:** `location`, `neighborhood`, `city`, `categories`, `rating`, `priceLevel`

#### Academic and Urban Research

Build datasets for studying urban commercial patterns, business lifecycle analysis, or economic geography. Structured output with GPS coordinates, categories, and neighborhood data supports spatial analysis and statistical modeling.

**Key fields:** `location`, `city`, `postalCode`, `neighborhood`, `categories`, `rating`, `totalReviews`

***

### Troubleshooting

#### Common Issues and Solutions

| Issue                           | Cause                         | Solution                                                                                                                 |
| ------------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------------------------------ |
| **Fewer results than expected** | Search query too broad        | Use specific keywords with location modifiers (e.g., "Italian restaurants in downtown Chicago" instead of "restaurants") |
| **Empty results**               | Invalid URL format            | Verify the Google Maps URL opens correctly in a browser before using it as input                                         |
| **Duplicate listings**          | Overlapping search areas      | Use more specific location terms or limit `maxItems`                                                                     |
| **Missing phone numbers**       | Business hasn't listed one    | Some businesses don't have phone numbers on Google Maps—this is expected                                                 |
| **Missing operating hours**     | Business hasn't provided them | Not all businesses list hours on their Google profile                                                                    |

#### Performance Tips

- **Be specific:** "Italian restaurants in downtown Chicago" returns better results than "restaurants in Chicago"
- **Use location modifiers:** Include city names, neighborhoods, or "near \[landmark]" in keywords
- **Start small:** Use the free tier (~40 items) to validate your search before scaling to larger runs
- **Batch by location:** For national-scale research, run separate queries per city or region rather than one broad query
- **Monitor costs:** Check the Apify Console billing section to track per-run costs before scaling

***

### Frequently Asked Questions

#### What data can I extract from Google Maps business listings?

Extract **business names**, **full addresses** (street, city, state, postal code, country), **phone numbers**, **website URLs**, **star ratings** (1.0–5.0), **review counts**, **price levels**, **business categories**, **operating hours** for every day of the week, **GPS coordinates** (latitude/longitude), **Google Place IDs**, and **neighborhood data**—all in structured JSON or CSV format.

#### Can I export Google Maps business data to CSV?

Yes. **Download Google Maps business data** directly from Apify Console in JSON, CSV, or Excel format. This is ideal for CRM import, spreadsheet analysis, and database loading.

#### How is this different from the Google Places API?

The Google Places API charges **$32 per 1,000 Nearby Search requests**, returns a maximum of **20 results per request** (60 with pagination), and requires an API key with billing enabled. This scraper delivers equivalent data at **$0.016 per query** (~$0.40 per 1,000 listings) with no per-request limits and no API key. It also includes operating hours and phone numbers in the base response—data the Places API charges separately for via Place Details requests.

#### Can I use Python to scrape Google Maps?

Yes. Full Python support via the Apify Client library. See the [Quick Start Guide](#quick-start-guide) above for Python integration with `client.actor("agents/google-maps-search")`.

#### Can I search by keyword and location?

Yes. Use the `keywords` parameter with location-specific terms like "dentists in Los Angeles" or "coffee shops near Times Square." Google Maps resolves the location from your search query.

#### Can I scrape from a specific Google Maps URL?

Yes. Use the `startUrls` parameter to provide one or more direct Google Maps search result URLs. This is useful when you've already performed a search in Google Maps and want to extract the results programmatically.

#### How many businesses can I extract per search?

There is no hard limit from the scraper side. Set the `maxItems` parameter to control how many listings to extract. The actual number depends on Google Maps' results for your query—some searches return hundreds of results while others return fewer.

#### Can AI agents use this scraper?

Yes. Through Apify's **Model Context Protocol (MCP) server**, AI agents built with Claude Desktop, VS Code, or any MCP-compatible framework can call this scraper as a tool. This enables autonomous lead research, market analysis, and multi-step data pipelines. See the [AI Agent Integration via MCP](#ai-agent-integration-via-mcp) section for setup details.

#### Does this extract Google Maps reviews?

No. This scraper focuses on **business listings and contact data**. For reviews, use the **[Google Maps Reviews Scraper](https://apify.com/agents/google-maps-reviews?fpr=yhdrb)** which extracts full review text, star ratings, reviewer profiles, and review photos.

#### Can I extract operating hours for businesses?

Yes. Every listing includes the full weekly operating schedule in a structured `hours` object with entries for each day of the week (e.g., `"monday": "11:00 AM - 10:00 PM"`). Not all businesses list their hours on Google Maps—when hours are unavailable, the field may be empty.

#### Is this legal to use?

This tool extracts publicly available data from Google Maps. Always ensure your use case complies with Google's Terms of Service and applicable data protection regulations.

#### This Scraper vs. Google Places API

| Feature                 | This Scraper               | Google Places API           |
| ----------------------- | -------------------------- | --------------------------- |
| API Key Required        | No                         | Yes (with billing)          |
| Cost per 1,000 listings | ~$0.40                     | $32.00 (Nearby Search)      |
| Results per request     | Unlimited                  | 20 max (60 with pagination) |
| Free Tier               | ~40 items FREE             | $200 monthly credit         |
| Operating Hours         | Included                   | Requires Place Details ($)  |
| Phone Numbers           | Included                   | Requires Place Details ($)  |
| MCP Integration         | Yes (via Apify MCP server) | No                          |

***

### Contact

**Built by [Agents](https://apify.com/agents?fpr=yhdrb)** — Where others search, we uncover. Our team of ex-Big Tech engineers, growth hackers, and data specialists builds high-performance scraping tools engineered for speed, precision, and reliability.

For questions or further assistance:

- **Email:** Reach out at **whoaretheagents@gmail.com**
- **Discord:** Join our community to connect with our support team

***

**Ready to start extracting Google Maps business data?** With transparent event-based pricing, first ~40 items FREE, and no API key required, this **Google Maps Search Scraper API** by [Agents](https://apify.com/agents?fpr=yhdrb) is the definitive tool for **lead generation**, **market research**, **directory building**, and **competitive intelligence**. Start scraping today.

# Actor input Schema

## `startUrls` (type: `array`):

URLs to start with. It should be list or detail URL

## `placeFIDs` (type: `array`):

Place FIDs to start with. `fid` attribute of the place must be used

## `searchTerms` (type: `array`):

The keywords that you can search on Google Maps

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

Restricts places to the given language, given by an ISO 639-1 code.

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

Restricts places to the given country, given by an ISO 3166-1 alpha-2 code.

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

Latitude coordinate used to locate places near a specific point.

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

Longitude coordinate used to locate places near a specific point.

## `zoom` (type: `string`):

Specifies the map zoom level to control the search radius.

## `maxItems` (type: `integer`):

Maximum number of items that you want as output.

## `customMapFunction` (type: `string`):

Function that takes each of the objects as argument and returns data that will be mapped by the function itself.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.google.com/maps/place/San+Francisco+Museum+of+Modern+Art/@37.7891211,-122.4075952,14.81z/data=!4m6!3m5!1s0x8085807d623572e7:0xc87ca0dcbc7559fd!8m2!3d37.7857182!4d-122.4010508!16zL20vMDEyXzF0?entry=ttu&g_ep=EgoyMDI1MDUyNy4wIKXMDSoASAFQAw%3D%3D"
  ],
  "language": "en",
  "country": "US"
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# 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 = {
    "startUrls": [
        "https://www.google.com/maps/place/San+Francisco+Museum+of+Modern+Art/@37.7891211,-122.4075952,14.81z/data=!4m6!3m5!1s0x8085807d623572e7:0xc87ca0dcbc7559fd!8m2!3d37.7857182!4d-122.4010508!16zL20vMDEyXzF0?entry=ttu&g_ep=EgoyMDI1MDUyNy4wIKXMDSoASAFQAw%3D%3D"
    ],
    "language": "en",
    "country": "US"
};

// Run the Actor and wait for it to finish
const run = await client.actor("agents/google-maps-search").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 = {
    "startUrls": ["https://www.google.com/maps/place/San+Francisco+Museum+of+Modern+Art/@37.7891211,-122.4075952,14.81z/data=!4m6!3m5!1s0x8085807d623572e7:0xc87ca0dcbc7559fd!8m2!3d37.7857182!4d-122.4010508!16zL20vMDEyXzF0?entry=ttu&g_ep=EgoyMDI1MDUyNy4wIKXMDSoASAFQAw%3D%3D"],
    "language": "en",
    "country": "US",
}

# Run the Actor and wait for it to finish
run = client.actor("agents/google-maps-search").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 '{
  "startUrls": [
    "https://www.google.com/maps/place/San+Francisco+Museum+of+Modern+Art/@37.7891211,-122.4075952,14.81z/data=!4m6!3m5!1s0x8085807d623572e7:0xc87ca0dcbc7559fd!8m2!3d37.7857182!4d-122.4010508!16zL20vMDEyXzF0?entry=ttu&g_ep=EgoyMDI1MDUyNy4wIKXMDSoASAFQAw%3D%3D"
  ],
  "language": "en",
  "country": "US"
}' |
apify call agents/google-maps-search --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Fast Google Maps Search Scraper API | Business Listings & Leads",
        "description": "Find high-value leads fast with our low-cost Google Maps scraper. Instantly extract business names, contact details, emails, phone numbers, and reviews—perfect for sales prospecting and outreach. Affordable, reliable, and built for scale.",
        "version": "0.0",
        "x-build-id": "GTdecq5X9wrkBkhAF"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/agents~google-maps-search/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-agents-google-maps-search",
                "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/agents~google-maps-search/runs": {
            "post": {
                "operationId": "runs-sync-agents-google-maps-search",
                "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/agents~google-maps-search/run-sync": {
            "post": {
                "operationId": "run-sync-agents-google-maps-search",
                "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",
                "properties": {
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "URLs to start with. It should be list or detail URL",
                        "items": {
                            "type": "string"
                        }
                    },
                    "placeFIDs": {
                        "title": "Place FIDs",
                        "type": "array",
                        "description": "Place FIDs to start with. `fid` attribute of the place must be used",
                        "items": {
                            "type": "string"
                        }
                    },
                    "searchTerms": {
                        "title": "Search Terms",
                        "type": "array",
                        "description": "The keywords that you can search on Google Maps",
                        "items": {
                            "type": "string"
                        }
                    },
                    "language": {
                        "title": "Language",
                        "enum": [
                            "ab",
                            "aa",
                            "af",
                            "ak",
                            "sq",
                            "am",
                            "ar",
                            "an",
                            "hy",
                            "as",
                            "av",
                            "ae",
                            "ay",
                            "az",
                            "bm",
                            "ba",
                            "eu",
                            "be",
                            "bn",
                            "bi",
                            "bs",
                            "br",
                            "bg",
                            "my",
                            "ca",
                            "ch",
                            "ce",
                            "ny",
                            "zh",
                            "cu",
                            "cv",
                            "kw",
                            "co",
                            "cr",
                            "hr",
                            "cs",
                            "da",
                            "dv",
                            "nl",
                            "dz",
                            "en",
                            "eo",
                            "et",
                            "ee",
                            "fo",
                            "fj",
                            "fi",
                            "fr",
                            "fy",
                            "ff",
                            "gd",
                            "gl",
                            "lg",
                            "ka",
                            "de",
                            "el",
                            "kl",
                            "gn",
                            "gu",
                            "ht",
                            "ha",
                            "he",
                            "hz",
                            "hi",
                            "ho",
                            "hu",
                            "is",
                            "io",
                            "ig",
                            "id",
                            "ia",
                            "ie",
                            "iu",
                            "ik",
                            "ga",
                            "it",
                            "ja",
                            "jv",
                            "kn",
                            "kr",
                            "ks",
                            "kk",
                            "km",
                            "ki",
                            "rw",
                            "ky",
                            "kv",
                            "kg",
                            "ko",
                            "kj",
                            "ku",
                            "lo",
                            "la",
                            "lv",
                            "li",
                            "ln",
                            "lt",
                            "lu",
                            "lb",
                            "mk",
                            "mg",
                            "ms",
                            "ml",
                            "mt",
                            "gv",
                            "mi",
                            "mr",
                            "mh",
                            "mn",
                            "na",
                            "nv",
                            "nd",
                            "nr",
                            "ng",
                            "ne",
                            "no",
                            "nb",
                            "nn",
                            "ii",
                            "oc",
                            "oj",
                            "or",
                            "om",
                            "os",
                            "pi",
                            "ps",
                            "fa",
                            "pl",
                            "pt",
                            "pa",
                            "qu",
                            "ro",
                            "rm",
                            "rn",
                            "ru",
                            "se",
                            "sm",
                            "sg",
                            "sa",
                            "sc",
                            "sr",
                            "sn",
                            "sd",
                            "si",
                            "sk",
                            "sl",
                            "so",
                            "st",
                            "es",
                            "su",
                            "sw",
                            "ss",
                            "sv",
                            "tl",
                            "ty",
                            "tg",
                            "ta",
                            "tt",
                            "te",
                            "th",
                            "bo",
                            "ti",
                            "to",
                            "ts",
                            "tn",
                            "tr",
                            "tk",
                            "tw",
                            "ug",
                            "uk",
                            "ur",
                            "uz",
                            "ve",
                            "vi",
                            "vo",
                            "wa",
                            "cy",
                            "wo",
                            "xh",
                            "yi",
                            "yo",
                            "za",
                            "zu"
                        ],
                        "type": "string",
                        "description": "Restricts places to the given language, given by an ISO 639-1 code."
                    },
                    "country": {
                        "title": "Country",
                        "enum": [
                            "AF",
                            "AL",
                            "DZ",
                            "AS",
                            "AD",
                            "AO",
                            "AI",
                            "AQ",
                            "AG",
                            "AR",
                            "AM",
                            "AW",
                            "AU",
                            "AT",
                            "AZ",
                            "BS",
                            "BH",
                            "BD",
                            "BB",
                            "BY",
                            "BE",
                            "BZ",
                            "BJ",
                            "BM",
                            "BT",
                            "BO",
                            "BA",
                            "BW",
                            "BR",
                            "IO",
                            "BN",
                            "BG",
                            "BF",
                            "BI",
                            "KH",
                            "CM",
                            "CA",
                            "CV",
                            "KY",
                            "CF",
                            "TD",
                            "CL",
                            "CN",
                            "CO",
                            "KM",
                            "CD",
                            "CG",
                            "CR",
                            "CI",
                            "HR",
                            "CU",
                            "CY",
                            "CZ",
                            "DK",
                            "DJ",
                            "DM",
                            "DO",
                            "EC",
                            "EG",
                            "SV",
                            "GQ",
                            "ER",
                            "EE",
                            "SZ",
                            "ET",
                            "FJ",
                            "FI",
                            "FR",
                            "GA",
                            "GM",
                            "GE",
                            "DE",
                            "GH",
                            "GR",
                            "GD",
                            "GT",
                            "GN",
                            "GW",
                            "GY",
                            "HT",
                            "HN",
                            "HU",
                            "IS",
                            "IN",
                            "ID",
                            "IR",
                            "IQ",
                            "IE",
                            "IL",
                            "IT",
                            "JM",
                            "JP",
                            "JO",
                            "KZ",
                            "KE",
                            "KI",
                            "KP",
                            "KR",
                            "KW",
                            "KG",
                            "LA",
                            "LV",
                            "LB",
                            "LS",
                            "LR",
                            "LY",
                            "LI",
                            "LT",
                            "LU",
                            "MG",
                            "MW",
                            "MY",
                            "MV",
                            "ML",
                            "MT",
                            "MH",
                            "MR",
                            "MU",
                            "MX",
                            "FM",
                            "MD",
                            "MC",
                            "MN",
                            "ME",
                            "MA",
                            "MZ",
                            "MM",
                            "NA",
                            "NR",
                            "NP",
                            "NL",
                            "NZ",
                            "NI",
                            "NE",
                            "NG",
                            "MK",
                            "NO",
                            "OM",
                            "PK",
                            "PW",
                            "PA",
                            "PG",
                            "PY",
                            "PE",
                            "PH",
                            "PL",
                            "PT",
                            "QA",
                            "RO",
                            "RU",
                            "RW",
                            "KN",
                            "LC",
                            "VC",
                            "WS",
                            "SM",
                            "ST",
                            "SA",
                            "SN",
                            "RS",
                            "SC",
                            "SL",
                            "SG",
                            "SK",
                            "SI",
                            "SB",
                            "SO",
                            "ZA",
                            "SS",
                            "ES",
                            "LK",
                            "SD",
                            "SR",
                            "SE",
                            "CH",
                            "SY",
                            "TW",
                            "TJ",
                            "TZ",
                            "TH",
                            "TL",
                            "TG",
                            "TO",
                            "TT",
                            "TN",
                            "TR",
                            "TM",
                            "TV",
                            "UG",
                            "UA",
                            "AE",
                            "GB",
                            "US",
                            "UY",
                            "UZ",
                            "VU",
                            "VA",
                            "VE",
                            "VN",
                            "YE",
                            "ZM",
                            "ZW"
                        ],
                        "type": "string",
                        "description": "Restricts places to the given country, given by an ISO 3166-1 alpha-2 code."
                    },
                    "latitude": {
                        "title": "Latitude",
                        "type": "string",
                        "description": "Latitude coordinate used to locate places near a specific point."
                    },
                    "longitude": {
                        "title": "Longitude",
                        "type": "string",
                        "description": "Longitude coordinate used to locate places near a specific point."
                    },
                    "zoom": {
                        "title": "Zoom",
                        "type": "string",
                        "description": "Specifies the map zoom level to control the search radius."
                    },
                    "maxItems": {
                        "title": "Maximum number of items on output",
                        "type": "integer",
                        "description": "Maximum number of items that you want as output."
                    },
                    "customMapFunction": {
                        "title": "Custom map function",
                        "type": "string",
                        "description": "Function that takes each of the objects as argument and returns data that will be mapped by the function itself."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
