# Google Maps Scraper 💰$0.80/1K – Business Leads, Emails, Phones (`rt-solutions/google-maps-scraper-leads`) Actor

Extract businesses from Google Maps: name, category, address, phone, website, rating, reviews count, opening hours, GPS, photos. Deep search covers whole cities, optional emails and social links from websites. Same fields as the most popular Google Maps scraper, $0.80 per 1,000 places.

- **URL**: https://apify.com/rt-solutions/google-maps-scraper-leads.md
- **Developed by:** [RT SOLUTIONS](https://apify.com/rt-solutions) (community)
- **Categories:** Lead generation, Travel, E-commerce
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 1,000 places

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Google Maps Scraper – Business Leads, Emails & Phones

Extract **businesses from Google Maps** for any search and location: name, category, full address, **phone**, **website**, rating, reviews count, rating distribution, opening hours, GPS coordinates, photos, "claim this business" status, place ID and Maps link. Optional: **emails and social profiles** (Facebook, Instagram, LinkedIn, X, YouTube, TikTok, Pinterest) read from each business website.

**$0.80 per 1,000 places — 5× cheaper than the most popular Google Maps scraper — with the same output field names**, so you can switch without changing your integration. No start fee, no blocked runs (licensed Google Maps data), pay only for places delivered.

### Why this one

- **Deep search** splits a city into tiles to go beyond Google's ~150-200 results per search: Paris "restaurant" with 5×5 tiles → 3,000 unique places in under a minute.
- **Lead filters**: minimum rating, only with / without website (sell websites to businesses that have none), category words, skip closed places.
- **Contacts**: 200 roofing contractors in Dallas → 95 emails and 105 social profiles in 2.5 minutes.
- Any country and language, non-Latin searches (寿司, مطعم) included.

### Input

```json
{
  "searchStringsArray": ["plumber", "electrician"],
  "locationQuery": "Austin, Texas",
  "maxCrawledPlacesPerSearch": 500,
  "deepSearch": 3,
  "placeMinimumStars": 4,
  "website": "withWebsite",
  "scrapeContacts": true
}
```

You can also paste Google Maps **search** links (`google.com/maps/search/pizza/@40.71,-74.00,14z`): the map area of the link is used.

### Output (one row per place)

`title`, `categoryName`, `categories`, `address`, `neighborhood`, `street`, `city`, `postalCode`, `state`, `countryCode`, `phone`, `phoneUnformatted`, `website`, `domain`, `totalScore`, `reviewsCount`, `reviewsDistribution`, `price`, `location {lat,lng}`, `placeId`, `cid`, `url`, `openingHours`, `openNow`, `permanentlyClosed`, `temporarilyClosed`, `claimThisBusiness`, `imageUrl`, `imagesCount`, `bookingUrl`, `searchString`, `rank` — plus with contacts: `emails`, `phones`, `facebooks`, `instagrams`, `linkedIns`, `twitters`, `youtubes`, `tiktoks`, `pinterests`.

### Pricing

| Event | Free plan | Bronze | Silver | Gold+ |
|---|---|---|---|---|
| Place | $0.0008 | $0.0007 | $0.0006 | $0.0005 |
| Contact details (only when at least one email or social profile is found) | $0.001 | $0.001 | $0.001 | $0.001 |

Places filtered out or returned twice are never charged. Set a maximum cost per run and the Actor stops there.

**Apify free plan:** one free trial run (1 search, 50 places, contacts included). Then use any paid Apify plan, or add your own DataForSEO login in the "Apify free plan" section.

### Limits

- One search (no deep search) returns up to ~150-200 places — Google's own limit. Use Deep search 3–6 for more.
- Locations are found with OpenStreetMap ("Austin, Texas", "Brooklyn", "Paris, France").
- Contacts come from the business website (home page + contact page); sites without a website or that block visitors give no contacts and are not charged for them.

### Use cases

- **Lead generation**: phones, websites, emails and social profiles of local businesses by category and city.
- **Web design agencies**: find businesses with no website using the "Only without website" filter.
- **Local SEO**: ratings, reviews count, rating distribution and "claim this business" status.
- **Market research**: map businesses and competitors in an area with categories and GPS coordinates.
- **CRM enrichment**: add place IDs, addresses and opening hours to your existing lists.

### Use with AI agents (MCP)

You can run this Actor from Claude, ChatGPT, Cursor or any other MCP client through the Apify MCP server (https://mcp.apify.com), using the Actor ID `rt-solutions/google-maps-scraper-leads`. Ask in plain language, for example: *"Find 300 plumbers in Austin, Texas with at least 4 stars and a website, and get their emails."* The agent starts the run and reads the results for you. The Actor also works through the Apify API and integrations such as Make, n8n and Zapier.

### Related scrapers

- [Google Maps Reviews Scraper](https://apify.com/rt-solutions/google-maps-reviews-scraper)
- [Google Search Results Scraper](https://apify.com/rt-solutions/google-search-results-scraper)
- [Tripadvisor Reviews Scraper](https://apify.com/rt-solutions/tripadvisor-reviews-scraper)

### FAQ

**Is it legal?** It returns public business listings through a licensed data provider and public website contact pages. You are responsible for respecting anti-spam and privacy laws (GDPR, CAN-SPAM) when contacting businesses.

**How do I scrape Google Maps without the Google API?** Enter search terms and a location (or paste a Google Maps search link) and start the run. The data comes from a licensed provider, so there are no blocked runs.

**How much does it cost to scrape 10,000 Google Maps places?** $8 on the free plan, $7 on Bronze, $6 on Silver and $5 on Gold and above. Contact details add $0.001 per place, only when at least one email or social profile is found (up to $10 more for 10,000 places).

**How do I get more than 200 results per search?** Turn on Deep search (3–6): it splits the area into tiles to go beyond Google's ~150-200 results per search.

**Why are emails empty for some businesses?** Contacts are read from the business website (home page + contact page). Places without a website, or whose site blocks visitors, give no contacts and are not charged for them.

**Need another field?** Open an issue — we answer in writing within 24 h.

# Actor input Schema

## `searchStringsArray` (type: `array`):

What you would type in Google Maps: "plumber", "italian restaurant", "dentist"… One search per line.

## `locationQuery` (type: `string`):

City, region or country, e.g. "Austin, Texas", "Paris, France", "Brooklyn".

## `maxCrawledPlacesPerSearch` (type: `integer`):

You pay only for places delivered. One normal search returns up to ~150-200 places; use Deep search for more.

## `deepSearch` (type: `integer`):

Split the location into a grid to get many more places: 3 = 3×3 tiles (≈ up to 9× more), 5 = 5×5. 0 = off. Duplicates are removed.

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

Language of results (en, fr, de, es, ar…).

## `placeMinimumStars` (type: `number`):

Only places with at least this Google rating (e.g. 4).

## `website` (type: `string`):

"Only without website" is great for selling websites to local businesses.

## `categoryFilterWords` (type: `array`):

Keep only places whose category contains one of these words (e.g. "plumber").

## `skipClosedPlaces` (type: `boolean`):

Skip places marked permanently or temporarily closed.

## `scrapeContacts` (type: `boolean`):

Visit each business website to collect emails, phones and Facebook, Instagram, LinkedIn, X, YouTube, TikTok, Pinterest links. Charged only for places where something is found.

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

Links like https://www.google.com/maps/search/plumber/@30.26,-97.74,13z — the map area of the link is used.

## `dataForSeoLogin` (type: `string`):

Only needed on the Apify free plan after your free trial run. Paid Apify plans need no key.

## `dataForSeoPassword` (type: `string`):

From app.dataforseo.com → API Access.

## Actor input object example

```json
{
  "searchStringsArray": [
    "plumber"
  ],
  "locationQuery": "Austin, Texas",
  "maxCrawledPlacesPerSearch": 100,
  "deepSearch": 0,
  "language": "en",
  "placeMinimumStars": 0,
  "website": "allPlaces",
  "skipClosedPlaces": false,
  "scrapeContacts": false
}
```

# Actor output Schema

## `results` (type: `string`):

One row per place.

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

Main fields.

# 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 = {
    "searchStringsArray": [
        "plumber"
    ],
    "locationQuery": "Austin, Texas"
};

// Run the Actor and wait for it to finish
const run = await client.actor("rt-solutions/google-maps-scraper-leads").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 = {
    "searchStringsArray": ["plumber"],
    "locationQuery": "Austin, Texas",
}

# Run the Actor and wait for it to finish
run = client.actor("rt-solutions/google-maps-scraper-leads").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 '{
  "searchStringsArray": [
    "plumber"
  ],
  "locationQuery": "Austin, Texas"
}' |
apify call rt-solutions/google-maps-scraper-leads --silent --output-dataset

```

## MCP server setup

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

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/1kQn4TF3JeSe2IL8D/builds/xKSgWeox4b3lhAF3U/openapi.json
