# Google Maps Scraper $2/1k Email Phone Website Full Data (`makework36/google-maps-scraper-full`) Actor

Extract emails, phones, websites & 23 fields from Google Maps. $1/1K leads. Perfect for cold outreach, lead gen and market research.

- **URL**: https://apify.com/makework36/google-maps-scraper-full.md
- **Developed by:** [deusex machine](https://apify.com/makework36) (community)
- **Categories:** Lead generation, AI, Real estate
- **Features:** Limited permissions
- **Stats:** 68 total users, 0 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

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

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 Lead Scraper — Phone, Email, Website, Reviews & Hours API

> ⭐ **Useful?** [Leave a review](https://apify.com/makework36/google-maps-scraper-full/reviews) — it takes 10 seconds and is the single biggest thing that helps other B2B sales teams, lead-gen agencies, local SEO consultants and field-sales ops managers find this Google Maps scraper.

A comprehensive **Google Maps scraper** that extracts full business contact data from [Google Maps](https://www.google.com/maps) — business name, category, rating, review count, full street address, phone number, website URL, emails scraped from each site, opening hours per day, photo URLs, GPS coordinates (latitude / longitude), Place ID and Maps permalink. No Google Maps API key, no Places API quota, no OAuth dance. Just pass search queries like `"dentists"`, `"restaurants"`, `"personal injury lawyers"` plus a location like `"Miami, FL"` or `"Mexico City"` and get back clean JSON or CSV ready for your CRM, outbound-sequencer, data warehouse or local SEO dashboard.

Built for B2B lead generation teams, cold outbound SDRs, marketing agencies prospecting small businesses, local SEO consultants, citation-building tools, field-sales ops, data enrichment vendors, franchise development teams, academic market researchers and anyone who needs Google Maps business data at scale without burning through Google's paid Places API budget.

### What this Google Maps scraper does

Given a list of search queries and an optional location, this actor queries Google Maps, paginates through the results list, opens each business detail panel and extracts the full public business profile. In "full" mode it additionally visits the business website and parses out contact emails from the homepage, contact page and common `mailto:` patterns — the single most valuable signal for cold-email outbound.

Every run pulls fresh data from live Google Maps — businesses open and close daily, phone numbers change, websites get rebuilt, reviews pile up. The scraper hits live results each time so your CRM never goes stale. A typical run of 100 results per query completes in roughly 1–2 minutes.

### Why use this Google Maps scraper instead of the official Places API

Google's [Places API](https://developers.google.com/maps/documentation/places/web-service/overview) is the sanctioned way to pull business data, but it has serious trade-offs for lead-gen use cases:

- **Cost** — Place Details requests cost $17 per 1,000 calls. A full contact profile (basic + contact + atmosphere) can run $35+ per 1K. Email enrichment is not even available.
- **No email addresses** — the Places API never returns emails. You'd still need a second scraper that visits each website. This actor does both in a single run.
- **Field mask complexity** — the Places API v1 requires a correctly formatted `X-Goog-FieldMask` header for every request and silently charges more when you add fields. Easy to misconfigure.
- **Quotas** — default quotas are tight. Bursting past them requires a billing review and often a quota increase form.

This scraper reads the public Google Maps business listings — the same data any user sees in a browser — and adds website-email enrichment on top. The result: a Google Maps lead-generation API that's typically 5–10× cheaper per verified-contact than the Places API, with email coverage that the Places API can't provide at any price.

### Data fields the Google Maps scraper extracts

One item per business, flat JSON. Maps cleanly to a CRM column layout, a Google Sheet or a SQL table.

#### Business identity

| Field | Type | Description |
|-------|------|-------------|
| `name` | string | Business display name as shown on Google Maps |
| `category` | string | Primary business category (e.g. `"Pizza restaurant"`, `"Chiropractor"`) |
| `placeId` | string | Google Place ID — stable unique identifier across Google services |
| `mapsUrl` | string | Direct Google Maps URL for the listing |

#### Contact data (the lead-gen gold)

| Field | Type | Description |
|-------|------|-------------|
| `phone` | string | Phone number in E.164-friendly display format |
| `website` | string | Business website URL |
| `emails` | array | Emails scraped from the business website (when `includeWebsiteEmails=true`) |

#### Reputation signals

| Field | Type | Description |
|-------|------|-------------|
| `rating` | number | Average star rating on a 0–5 scale |
| `reviewsCount` | integer | Total number of Google reviews |

#### Location and hours

| Field | Type | Description |
|-------|------|-------------|
| `address` | string | Full formatted street address |
| `lat` | number | GPS latitude |
| `lng` | number | GPS longitude |
| `openingHours` | array | Array of `{day, hours}` objects, one per day of the week |

#### Imagery

| Field | Type | Description |
|-------|------|-------------|
| `imageUrls` | array | Photo URLs from the Google business profile |

#### Run metadata

| Field | Type | Description |
|-------|------|-------------|
| `searchQuery` | string | The search term used to find this business |
| `locationQuery` | string | The location filter applied |
| `scrapedAt` | string | ISO 8601 timestamp of extraction |

### Use cases for this Google Maps data API

- **B2B cold outbound** — build targeted prospect lists with verified phone and email. A campaign of "500 dentists in Miami with websites but no online booking" becomes one query instead of a week of list-building.
- **Agency lead generation** — find businesses without websites (`website == null`) or with poor ratings (`rating < 3.5`) as targets for marketing agency outreach. Segmenting on reputation is trivial with this data shape.
- **Local SEO audits** — pull every pizza place in a ZIP code, rank by reviews, identify NAP (name/address/phone) inconsistencies across the competitive set. Feed into Google Business Profile optimization reports.
- **Field sales territory planning** — aggregate businesses by category and GPS. Build heat maps, plan routes, assign reps by cluster.
- **CRM enrichment** — given a partial record (name + city), pull the Place ID and enrich with phone, email, hours and coordinates.
- **Data products and directories** — power a vertical directory (plumbers, mechanics, chiropractors) with fresh Maps data. Monetize via featured listings or lead-forwarding fees.
- **Market sizing and competitive analysis** — "how many artisanal coffee shops opened in Austin in the last 12 months?" Join scraped data across snapshots to measure market dynamics.
- **Franchise development** — scout territories for franchise expansion. Find under-served ZIPs by category density.
- **Due diligence and investment research** — for PE and SMB acquisition firms, a scan of public Google Maps data on every location a target operates is surprisingly valuable.
- **Academic and journalism** — reproducible business-census snapshots for economic geography research or local journalism projects.

### How to use this Google Maps scraper

#### Mode 1 — basic Google Maps search

Pass an array of categories and a single location.

```json
{
    "searchQueries": ["dentists", "chiropractors"],
    "locationQuery": "Miami, FL",
    "maxResults": 100
}
```

#### Mode 2 — full lead profile with email enrichment

Add `includeWebsiteEmails: true` to visit each business website and extract emails.

```json
{
    "searchQueries": ["personal injury lawyers"],
    "locationQuery": "Los Angeles, CA",
    "maxResults": 50,
    "includeWebsiteEmails": true
}
```

#### Mode 3 — multi-city expansion in one run

Embed the location in the query when each category lives in a different city.

```json
{
    "searchQueries": [
        "dentists in Chicago, IL",
        "dentists in Houston, TX",
        "dentists in Phoenix, AZ"
    ],
    "maxResults": 75,
    "includeWebsiteEmails": true
}
```

#### Mode 4 — high-volume territory scan

Up to 500 results per query when you need volume for an outbound campaign.

```json
{
    "searchQueries": ["HVAC contractors", "plumbers", "electricians"],
    "locationQuery": "Dallas-Fort Worth, TX",
    "maxResults": 500,
    "includeWebsiteEmails": true
}
```

### Input parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `searchQueries` | array | — | Search terms, e.g. `["restaurants", "dentists"]` (required) |
| `locationQuery` | string | `""` | City or region. Leave empty if the city is already in each query |
| `maxResults` | integer | `100` | Max businesses per query (1–500) |
| `includeWebsiteEmails` | boolean | `false` | Visit each business website to extract email addresses |

### Output example (JSON)

```json
{
    "name": "Joe's Pizza",
    "category": "Pizza restaurant",
    "rating": 4.5,
    "reviewsCount": 12847,
    "address": "7 Carmine St, New York, NY 10014",
    "phone": "+1 212-366-1182",
    "website": "https://joespizzanyc.com",
    "emails": ["info@joespizzanyc.com", "hello@joespizzanyc.com"],
    "openingHours": [
        { "day": "Monday", "hours": "11 am–11 pm" },
        { "day": "Tuesday", "hours": "11 am–11 pm" },
        { "day": "Wednesday", "hours": "11 am–11 pm" },
        { "day": "Thursday", "hours": "11 am–11 pm" },
        { "day": "Friday", "hours": "11 am–12 am" },
        { "day": "Saturday", "hours": "11 am–12 am" },
        { "day": "Sunday", "hours": "11 am–11 pm" }
    ],
    "imageUrls": ["https://lh3.googleusercontent.com/..."],
    "lat": 40.7305,
    "lng": -74.0021,
    "placeId": "0x89c2598f57ae9429:0x89b3e834c0ae8612",
    "mapsUrl": "https://www.google.com/maps/place/...",
    "searchQuery": "pizza restaurants",
    "locationQuery": "New York, NY",
    "scrapedAt": "2026-04-22T20:00:00.000Z"
}
```

Export the full dataset as **CSV**, **Excel**, **XML**, **JSONL** or **HTML table** directly from the Apify console run page, or via the Apify API.

### How to call this Google Maps scraper from your code

#### curl

```bash
curl -X POST 'https://api.apify.com/v2/acts/makework36~google-maps-scraper-full/run-sync-get-dataset-items?token=YOUR_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{
    "searchQueries": ["dentists"],
    "locationQuery": "Miami, FL",
    "maxResults": 100,
    "includeWebsiteEmails": true
  }'
```

#### Python (apify-client)

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("makework36/google-maps-scraper-full").call(run_input={
    "searchQueries": ["personal injury lawyers", "criminal defense attorneys"],
    "locationQuery": "Los Angeles, CA",
    "maxResults": 100,
    "includeWebsiteEmails": True,
})
for biz in client.dataset(run["defaultDatasetId"]).iterate_items():
    if biz.get("emails"):
        print(biz["name"], biz["phone"], biz["emails"][0])
```

#### Node.js (apify-client)

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

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('makework36/google-maps-scraper-full').call({
  searchQueries: ['HVAC contractors'],
  locationQuery: 'Dallas, TX',
  maxResults: 200,
  includeWebsiteEmails: true,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
const withEmail = items.filter((b) => b.emails && b.emails.length);
console.log(`${withEmail.length}/${items.length} businesses have an email.`);
```

#### Export to CSV for CRM import

From the run page → *Export* → *CSV*. Or via API:

```
https://api.apify.com/v2/datasets/DATASET_ID/items?format=csv&token=YOUR_TOKEN
```

#### Load straight into HubSpot / Salesforce via webhook

```python
import requests
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("makework36/google-maps-scraper-full").call(run_input={
    "searchQueries": ["dentists"], "locationQuery": "Austin, TX",
    "maxResults": 100, "includeWebsiteEmails": True,
})
for biz in client.dataset(run["defaultDatasetId"]).iterate_items():
    if biz.get("emails"):
        requests.post("https://hooks.hubspot.com/your-webhook", json={
            "company": biz["name"], "email": biz["emails"][0],
            "phone": biz["phone"], "website": biz["website"],
        })
```

### Performance & cost

- **~$2 per 1,000 results** in full mode (phone, website, hours, photos, coordinates, Place ID)
- **Email extraction hit rate** typically 30–60% of businesses — depends on whether the site displays a contact email
- **1–2 minutes per 100 results** in full mode
- **No proxy required** for most searches — the actor ships with sensible defaults
- Runs fine on Apify's 256 MB tier

### Google Maps scraper comparison

Several Google Maps scrapers exist on the Apify Store. Here's how this one stacks up on what actually matters for lead-generation workflows.

| Feature | This scraper | Alternative A | Alternative B | Alternative C |
|---------|--------------|---------------|---------------|---------------|
| Phone number extraction | **Yes** | Yes | Yes | Yes |
| Website extraction | **Yes** | Yes | Partial | Yes |
| Emails from website | **Yes (built-in)** | Separate actor ($) | No | No |
| Opening hours per day | **Yes (structured array)** | Text blob | Yes | Partial |
| GPS coordinates | **Yes (`lat`/`lng`)** | Yes | Yes | Yes |
| Place ID | **Yes** | Yes | No | Yes |
| Photos | **Yes** | Yes | Partial | Yes |
| Max results per query | **500** | 120 | 100 | 300 |
| Multi-query per run | **Yes (array)** | Yes | Single only | Yes |
| Multi-location per run | **Yes (query-embedded)** | Yes | Single only | Partial |
| Official Places API key needed | **No** | No | No | No |
| Code examples in README | **Python / Node / curl / HubSpot** | None | None | None |
| Price per result (full profile with email) | Competitive mid-market | Higher | Cheaper, no emails | Higher |

The honest take: if you don't need email enrichment and only want name / address / rating, a cheaper basic scraper will do. If you need a single run that delivers an outbound-ready lead with phone, website and email all in one dataset item, this actor removes an entire enrichment step from your pipeline.

### Step-by-step tutorial — your first run in 3 minutes

1. **Sign up for Apify** — go to [apify.com](https://apify.com) and create a free account with $5 trial credit.
2. **Open the actor** — click [Google Maps Lead Scraper](https://apify.com/makework36/google-maps-scraper-full) → "Try for free".
3. **Fill the input form** — set `searchQueries` to something concrete like `["dentists"]`. Set `locationQuery` to your target city. Enable `includeWebsiteEmails`.
4. **Click "Start"** — the actor runs. 100 results with email enrichment usually takes 1–2 minutes.
5. **View the dataset** — the Dataset tab shows name, category, rating, phone, website, emails and hours. Click *Export* to grab CSV for your CRM.
6. **Automate** — *Schedules* → *Create new schedule*. Run weekly to keep your lead list fresh as new businesses open.

That's it. No Google Cloud billing account, no Places API key, no quota form.

### Advanced usage patterns

#### Pattern 1 — no-website audit for agency outreach

Pull every business in a category/city combination with `maxResults=500` and email enrichment on. Filter client-side for `!website || website == ""`. These are agency-outreach gold: businesses that are visible on Google Maps but have no web presence.

#### Pattern 2 — poor-reputation repair leads

Filter for `rating < 3.5 && reviewsCount > 20`. These businesses are actively losing customers to reviews. Reputation-management services, review-gating platforms and local SEO firms all sell to exactly this list.

#### Pattern 3 — ZIP-level competitive density

Scrape every business in a specific category inside a metro area. Aggregate by ZIP using the `lat`/`lng` fields. Output a heat map of category density. Franchise teams use this for territory planning; investors use it for market sizing.

#### Pattern 4 — fresh-listings alert

Run the actor weekly on the same query. Diff this week's `placeId` set against last week's. New IDs = new businesses that opened or got listed. Notify your sales team — first to reach out, first to close.

#### Pattern 5 — CRM enrichment by Place ID

If your CRM already stores `placeId` for each account, schedule the actor to re-scrape a target list weekly and update hours, rating and reviews count. Keeps your CRM truthful without any manual data-hygiene work.

### Troubleshooting

**`emails` array is empty**
Either `includeWebsiteEmails` is `false`, the business has no website, or the website exists but doesn't publish an email on the homepage / contact page. Rate of coverage is typically 30–60% across industries.

**Fewer results than `maxResults`**
Google Maps caps any single search at around 120 organic results. To go beyond that, split your query by sub-area (ZIP, neighborhood) and combine client-side.

**Address format varies by country**
`address` is returned exactly as Google formats it. For structured parts (street, city, state, postal code) pipe the field through [libpostal](https://github.com/openvenues/libpostal) or the Google Geocoding API.

**Phone number format**
Google returns phones in the display format used on Maps. For programmatic calling or E.164 normalization, pipe through [libphonenumber](https://github.com/google/libphonenumber).

**Business that closed permanently**
Google marks them "Permanently closed". The scraper still returns the listing but the hours and phone may be stale. Filter client-side if freshness matters.

**Large-run timeouts**
`maxResults=500` with `includeWebsiteEmails` on a slow category can take 10+ minutes. Split into several runs or raise the Apify run timeout in the console.

### Pricing

Pay-per-result model:

| Plan | Price per 1K results (full + emails) | 10K results | 100K results | 1M results |
|------|---------------------------------------|--------------|---------------|-------------|
| FREE trial | $0 (up to $5 credit) | N/A | N/A | N/A |
| BRONZE | $2.00 | $20 | $200 | $2,000 |
| SILVER | $1.80 | $18 | $180 | $1,800 |
| GOLD | $1.60 | $16 | $160 | $1,600 |
| DIAMOND | $1.40 | $14 | $140 | $1,400 |

Apify gives every new user a $5 trial credit — enough for ~2,500 Google Maps results. No subscription, no minimum commitment, no egress fees.

### FAQ

**Do I need a Google Maps or Places API key?**
No. This scraper reads public Google Maps pages — no API key, no OAuth, no billing account on Google Cloud.

**Is scraping Google Maps legal?**
This actor only reads publicly visible data on [google.com/maps](https://www.google.com/maps). Review Google's Terms of Service and your local privacy / data-protection laws. Don't store personal data beyond your legal basis. For sensitive use cases, consult legal counsel.

**How accurate are the emails?**
Emails come straight from each business's website — homepage, contact page and `mailto:` patterns. Accuracy is high for emails actually published on the site; the 30–60% coverage reflects that not every small business publishes a contact email.

**What's the difference versus the basic Google Maps scraper?**
A basic scraper ($1 per 1K) typically returns name, address, rating and coordinates. This one adds phone, website, emails, reviews count, hours and photos in a single run — removing the need to chain multiple scrapers.

**Can I scrape multiple cities in one run?**
Yes. Embed the city in each query — `["dentists in Chicago", "dentists in Houston"]` — or set `locationQuery` and let it apply to every query.

**Can I filter by rating or review count on the server side?**
Not in the input. Filter client-side on the `rating` / `reviewsCount` fields — Google's ranking already surfaces the best-rated businesses near the top of each query.

**Can I scrape reviews themselves?**
This actor returns `reviewsCount` and `rating` but not individual review text. For the reviews bodies, drop a feature request on the [issues tab](https://apify.com/makework36/google-maps-scraper-full/issues).

**How often should I re-scrape to keep data fresh?**
Weekly is enough for most lead-gen workflows. Monthly is fine if you mostly care about discovering new businesses. Daily is overkill unless you're running a real-time directory.

**Do I need a residential proxy?**
No. Works without proxies for most queries. For very high-volume scans, Apify Proxy can be enabled to rotate IPs automatically.

### Changelog

- **v1.0** (2026-04-22) — Full SEO rewrite, pricing tiers, comparison table, HubSpot webhook example, advanced patterns.
- **v0.4** (2026-03-15) — Increased max results to 500 per query.
- **v0.3** (2026-02-10) — Structured `openingHours` array per day.
- **v0.2** (2026-01-18) — Website email extraction.
- **v0.1** (2025-12-20) — Initial release — full business profile with phone, website, hours and GPS.

### Related scrapers from the same author

- [Google Play Reviews Scraper](https://apify.com/makework36/play-store-reviews-scraper) — Android app reviews
- [YouTube Shorts Scraper](https://apify.com/makework36/youtube-shorts-scraper) — trending Shorts with engagement metrics
- [Telegram Channel Scraper](https://apify.com/makework36/telegram-channel-scraper) — public Telegram channel messages
- [Fast Airbnb Price Scraper](https://apify.com/makework36/fast-airbnb-price-scraper) — Airbnb listings, prices and coordinates
- [Reddit MCP Server](https://apify.com/makework36/reddit-mcp-server) — Reddit data via MCP for AI agents
- [Google Maps Basic Scraper](https://apify.com/makework36) — the lightweight name/address/rating variant

### Legal & ethics note

This scraper accesses only publicly available pages on [google.com/maps](https://www.google.com/maps) and publicly available business websites — the same pages any anonymous browser visitor can read. Email addresses are extracted only from pages the business owner published on their own site. Output follows open conventions described at [schema.org/LocalBusiness](https://schema.org/LocalBusiness) and [schema.org/Organization](https://schema.org/Organization). You are responsible for complying with Google's Terms of Service, the [CAN-SPAM Act](https://www.ftc.gov/business-guidance/resources/can-spam-act-compliance-guide-business), the EU's ePrivacy Directive, GDPR, CCPA, Mexico's LFPDPPP and any similar regulations in your jurisdiction. Don't email people who opted out; honor unsubscribes; include physical address and opt-out link in every message.

***

> 🙏 **Ran this scraper successfully?** [Leaving a review](https://apify.com/makework36/google-maps-scraper-full/reviews) helps the algorithm surface this to other B2B lead-gen teams and local SEO consultants. Much appreciated.

# Changelog

This Actor's version history is a separate document: https://apify.com/makework36/google-maps-scraper-full/changelog.md

# Actor input Schema

## `searchQueries` (type: `array`):

List of search terms. Example: \['restaurants', 'dentists', 'hotels']

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

Location to search in. Example: 'New York, NY' or 'Mexico City'. Leave empty if location is included in search query.

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

Maximum number of places to scrape per search query.

## `includeWebsiteEmails` (type: `boolean`):

Visits each place's website to extract email addresses. Best for lead generation.

## Actor input object example

```json
{
  "searchQueries": [
    "restaurants",
    "dentists"
  ],
  "locationQuery": "New York, NY",
  "maxResults": 20,
  "includeWebsiteEmails": false
}
```

# Actor output Schema

## `dataset` (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 = {
    "searchQueries": [
        "restaurants"
    ],
    "locationQuery": "New York, NY",
    "maxResults": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("makework36/google-maps-scraper-full").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 = {
    "searchQueries": ["restaurants"],
    "locationQuery": "New York, NY",
    "maxResults": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("makework36/google-maps-scraper-full").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 '{
  "searchQueries": [
    "restaurants"
  ],
  "locationQuery": "New York, NY",
  "maxResults": 20
}' |
apify call makework36/google-maps-scraper-full --silent --output-dataset

```

## MCP server setup

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

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/u5p7frYHTqEfefIN8/builds/1j2bbV7kiSskcRHxI/openapi.json
