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

Extract business data from Google Maps: names, ratings, reviews, addresses, phones. Perfect for lead generation, market research, and sales prospecting.

- **URL**: https://apify.com/meaningful\_quarry/google-maps-scraper.md
- **Developed by:** [Avira](https://apify.com/meaningful_quarry) (community)
- **Categories:** Lead generation
- **Stats:** 208 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

$0.50 / 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.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## Google Maps Business Scraper

A powerful and beginner-friendly Apify actor for scraping business listings from Google Maps. Extract business names, ratings, reviews, addresses, phone numbers, and more for lead generation, market research, and competitive analysis.

### Features

- **Easy to use**: Simple search query input
- **Comprehensive data**: Name, rating, reviews, address, phone, category
- **Flexible**: Customizable result limits and language options
- **Optional extras**: Extract reviews and images
- **Fast & reliable**: Built with Crawlee and Puppeteer
- **Scalable**: Run on Apify's cloud infrastructure

### Use Cases

- **Lead Generation**: Find potential customers in specific locations
- **Market Research**: Analyze competitors and market trends
- **Business Intelligence**: Build databases of local businesses
- **SEO Analysis**: Gather data for local SEO strategies
- **Directory Building**: Create comprehensive business directories

### Input Parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `searchQuery` | String | Yes | - | What to search for (e.g., "restaurants in New York") |
| `maxResults` | Integer | No | 20 | Maximum number of businesses to scrape (1-500) |
| `language` | String | No | "en" | Google Maps interface language |
| `includeReviews` | Boolean | No | false | Extract reviews for each business |
| `maxReviews` | Integer | No | 5 | Max reviews per business (1-50) |
| `includeImages` | Boolean | No | false | Extract image URLs |

### Example Input

```json
{
  "searchQuery": "coffee shops in San Francisco",
  "maxResults": 50,
  "language": "en",
  "includeReviews": false,
  "maxReviews": 5,
  "includeImages": false
}
```

### Output Format

Each business listing includes:

```json
{
  "name": "Blue Bottle Coffee",
  "rating": 4.5,
  "reviewCount": 1234,
  "category": "Coffee shop",
  "address": "315 Linden St, San Francisco, CA 94102",
  "phone": "(510) 653-3394",
  "url": "https://www.google.com/maps/place/...",
  "searchQuery": "coffee shops in San Francisco",
  "scrapedAt": "2025-01-15T10:30:00.000Z"
}
```

### Getting Started - Step by Step

#### Step 1: Prerequisites

Before you begin, make sure you have:

- Node.js 18+ installed ([Download here](https://nodejs.org/))
- An Apify account (free tier available at [apify.com](https://apify.com/))
- Git installed (optional, for version control)

#### Step 2: Set Up Locally

1. **Navigate to the project folder**
   ```bash
   cd google-maps-scraper
   ```

2. **Install dependencies** (this will take 2-3 minutes as it downloads Chromium)
   ```bash
   npm install
   ```

3. **Edit INPUT.json** with your search query
   ```json
   {
     "searchQuery": "coffee shops in San Francisco",
     "maxResults": 20,
     "language": "en",
     "includeReviews": false,
     "maxReviews": 5,
     "includeImages": false
   }
   ```

4. **Run the scraper locally**
   ```bash
   npm start
   ```

5. **View results** in `storage/datasets/default/` folder (JSON files)

#### Step 3: Deploy to Apify Platform

1. **Install Apify CLI** (one-time setup)
   ```bash
   npm install -g apify-cli
   ```

2. **Login to your Apify account**
   ```bash
   apify login
   ```
   - This will open your browser to authenticate
   - Copy your API token from Apify Console

3. **Initialize the actor** (if not already done)
   ```bash
   apify init
   ```
   - Follow the prompts or press Enter to accept defaults

4. **Push to Apify platform**
   ```bash
   apify push
   ```
   - This uploads your code to Apify
   - Takes 1-2 minutes for first deployment

5. **Test on Apify platform**
   - Go to [console.apify.com](https://console.apify.com/)
   - Find your actor under "Actors"
   - Click "Try it" and enter your search query
   - Click "Start" and watch it run!

#### Step 4: Publish & Monetize (Start Earning!)

1. **Prepare your actor for publication**
   - Add screenshots (run locally and capture results)
   - Write a clear description
   - Test thoroughly with different search queries

2. **Set actor visibility to Public**
   - Go to your actor settings in Apify Console
   - Change "Visibility" from Private to **Public**
   - Your actor will appear in Apify Store!

3. **Configure pricing** (Optional - for paid actors)
   - Go to "Settings" → "Monetization"
   - Enable "Paid runs"
   - Set price per compute unit (recommended: $0.50-$2.00 per 1000 results)
   - Or offer **free tier** with paid upgrades

4. **Optimize your actor listing**
   - Add a compelling title: "Google Maps Scraper - Fast Business Data Extraction"
   - Write detailed description with use cases
   - Add 3-5 screenshots showing:
     - Input configuration
     - Running actor
     - Output results
     - Use cases
   - Add relevant tags: lead-generation, google-maps, scraper, business-data

5. **Market your actor**
   - Share on social media (LinkedIn, Twitter, Reddit)
   - Write a blog post about use cases
   - Create a YouTube tutorial
   - Join Apify Discord/Slack community
   - Respond to user questions quickly

6. **Monitor and improve**
   - Check analytics in Apify Console
   - Read user feedback and ratings
   - Fix bugs quickly
   - Add requested features
   - Keep it updated when Google Maps changes

#### Step 5: Advanced Features (Increase Value)

To earn more, consider adding:

1. **More data points**
   - Business hours
   - Website URLs
   - Popular times
   - Place IDs
   - Coordinates (latitude/longitude)

2. **Bulk processing**
   - Multiple search queries at once
   - City-wide scanning
   - Export to different formats (CSV, Excel, Google Sheets)

3. **Smart features**
   - Email finder integration
   - Duplicate detection
   - Data validation
   - Auto-categorization

4. **Premium options**
   - Deep review extraction
   - Competitor analysis
   - Change tracking (monitor price/rating changes)
   - API access

#### Quick Start Commands

```bash
## Clone and setup
cd google-maps-scraper
npm install

## Test locally
npm start

## Deploy to Apify
apify login
apify push

## Update existing actor
apify push
```

### Tips for Best Results

1. **Be specific with queries**: "Italian restaurants in Manhattan" works better than "restaurants"
2. **Use location names**: Include city, neighborhood, or zip code
3. **Start small**: Test with 20-50 results before scaling up
4. **Check rate limits**: Google may throttle excessive requests
5. **Verify data**: Always validate extracted data for accuracy

### Limitations

- Google Maps may change their layout, requiring updates
- Very high volumes may trigger rate limiting
- Some businesses may have incomplete information
- Review and image extraction adds processing time

### Pricing on Apify

Running costs depend on:

- Number of results scraped
- Whether reviews/images are included
- Platform compute units used

Estimated cost: $0.01-0.05 per 100 results (varies by complexity)

### Monetization Strategy - How to Earn Money

#### Pricing Models

**Option 1: Free with Premium Features**

- Free tier: Up to 100 results per run
- Premium: Unlimited results, reviews, images ($5-20/month subscription)

**Option 2: Pay-per-Use**

- $0.50-$1.00 per 1000 results
- $0.10-$0.25 per 100 reviews extracted
- Bulk discounts for large volumes

**Option 3: Freemium**

- 100 free credits per month
- Additional usage charged per compute unit

#### Revenue Expectations (Realistic Estimates)

**Month 1-3**: $0-$100/month

- Building reputation
- Getting first users
- Collecting reviews

**Month 4-6**: $100-$500/month

- Established presence
- Regular users
- Good ratings (4.5+)

**Month 7-12**: $500-$2000/month

- Popular in store
- Word of mouth
- Featured placement potential

**Year 2+**: $2000-$5000+/month

- Top performer status
- Enterprise clients
- Strong brand recognition

#### Success Factors

1. **Quality** - Fast, accurate, reliable
2. **Support** - Respond within 24 hours
3. **Updates** - Fix issues within 1 week
4. **Marketing** - Active promotion
5. **Features** - Regular improvements
6. **Documentation** - Clear guides and examples

#### Marketing Checklist

- \[ ] Create Apify Store listing with great screenshots
- \[ ] Write blog post on Medium/Dev.to about use cases
- \[ ] Share on LinkedIn with case study
- \[ ] Post on Reddit (r/entrepreneur, r/sales, r/SaaS)
- \[ ] Create YouTube tutorial (screen recording)
- \[ ] Join Apify community and help users
- \[ ] Add to Product Hunt
- \[ ] Create Twitter thread about the tool
- \[ ] Reach out to lead generation companies
- \[ ] Guest post on marketing blogs

#### Support & Help

**For Users**

- Documentation: This README
- Issues: Report on GitHub
- Apify Docs: [docs.apify.com](https://docs.apify.com/)
- Community: Apify Discord

**For Developers**

- Apify SDK Docs: [crawlee.dev](https://crawlee.dev/)
- Actor Examples: [apify.com/store](https://apify.com/store)
- Best Practices: [docs.apify.com/academy](https://docs.apify.com/academy)

### Technical Details

- **Platform**: Apify
- **Framework**: Crawlee 3.x
- **Browser**: Puppeteer with Chromium
- **Language**: Node.js (ES modules)
- **License**: Apache-2.0

### Legal & Ethical Use

- For personal and commercial use
- Respect Google's Terms of Service
- Use reasonable rate limits
- Don't scrape personal/private data
- Follow data protection laws (GDPR, CCPA)

### Version History

- **1.0.0** - Initial release with core scraping functionality

### Contributing

Contributions welcome! Feel free to submit issues and pull requests.

***

Built with ❤️ for the Apify community

# Actor input Schema

## `searchQuery` (type: `string`):

What to search for (e.g., 'restaurants in New York', 'coffee shops near Los Angeles')

## `maxResults` (type: `integer`):

Maximum number of business listings to scrape

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

Language for Google Maps interface

## `includeReviews` (type: `boolean`):

Extract recent reviews for each business

## `maxReviews` (type: `integer`):

How many reviews to extract per business (only if includeReviews is enabled)

## `includeImages` (type: `boolean`):

Extract image URLs for each business

## Actor input object example

```json
{
  "searchQuery": "coffee shops in San Francisco",
  "maxResults": 10,
  "language": "en",
  "includeReviews": false,
  "maxReviews": 5,
  "includeImages": false
}
```

# 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 = {
    "searchQuery": "coffee shops in San Francisco"
};

// Run the Actor and wait for it to finish
const run = await client.actor("meaningful_quarry/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 = { "searchQuery": "coffee shops in San Francisco" }

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

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

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

```

## CLI example

```bash
echo '{
  "searchQuery": "coffee shops in San Francisco"
}' |
apify call meaningful_quarry/google-maps-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,meaningful_quarry/google-maps-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/fL5gE8bsE4dan5hyZ/builds/XZcLBxglVXIpP4ghy/openapi.json
