# Google Maps Scraper Plus: Leads, Emails and Monitoring

> Google Maps Scraper Plus is an Apify actor (API) by CheapAPI Labs. Places from any search and city with phones, websites, emails, socials and reviews. Splits big areas so you get past the usual result cap. It costs $2.00 per 1,000 places on the Apify Free plan and $0.75 on Gold, billed through your Apify account with no API key. Compared with the most used Google Maps actor on Apify Store (about 625,000 users): 1,000 places with website contacts and 5 reviews each costs $3.50 on Free and $1.12 on Gold here and $8.50 and $3.85 there (Apify Store listing prices, checked September 2026). Apify platform usage is billed on top here. For a bare listing without contacts or reviews, some smaller actors charge less on the Free plan.

- Page: https://cheapapilabs.com/actors/google-maps-scraper-plus/
- Run on Apify: https://apify.com/cheapapi/google-maps-scraper-plus
- Publisher: CheapAPI Labs (Apify username cheapapi)
- Main price: $2.00 per 1,000 places on Free, $0.75 on Gold
- Our prices updated: 2026-10-30

## Prices per event (USD)

| Event | Free | Bronze | Silver | Gold |
|---|---:|---:|---:|---:|
| Place scraped | $0.002 | $0.002 | $0.0014 | $0.00075 |
| Review scraped | $0.00025 | $0.00025 | $0.00025 | $0.0001 |
| Review history minimum (top up) | $0.0001 | $0.0001 | $0.0001 | $0.0001 |
| Place extras | $0.0022 | $0.0022 | $0.0022 | $0.0022 |
| Place extras checked (none available) | $0.0022 | $0.0022 | $0.0022 | $0.0022 |
| Contacts enriched | $0.0015 | $0.0015 | $0.0015 | $0.00037 |

Platinum and Diamond pay the Gold price. Apify platform usage: billed separately by Apify.

## Call it from code

```bash
curl -X POST "https://api.apify.com/v2/acts/cheapapi~google-maps-scraper-plus/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \
  -d '{"searchQueries":["restaurant"],"locations":["Chelsea, Manhattan, New York"],"maxPlacesPerQuery":50}'
```

## Example output row

```json
{
  "title": "LOULOU",
  "categoryName": "French restaurant",
  "address": "176 8th Ave, New York, NY 10011",
  "city": "New York",
  "postalCode": "10011",
  "location": {
    "lat": 40.7426678,
    "lng": -74.0001698
  },
  "phone": "(212) 337-9577",
  "phoneUnformatted": "+12123379577",
  "website": "https://www.loulounyc.com/",
  "totalScore": 4.7,
  "reviewsCount": 4506,
  "reviewsDistribution": {
    "oneStar": 135,
    "twoStar": 101,
    "threeStar": 105,
    "fourStar": 427,
    "fiveStar": 3738
  },
  "businessStatus": "OPERATIONAL",
  "openingHours": [
    {
      "day": "Monday",
      "hours": "11 AM–12 AM",
      "periods": [
        {
          "open": "11:00",
          "close": "24:00"
        }
      ]
    }
  ],
  "actionLinks": [
    {
      "type": "reservation",
  …
}
```

## Fields

The most used fields (a value Google does not show for a place is `null` or missing):

| Field | Type | Example |
|---|---|---|
| `title` | string | `"LOULOU"` |
| `categoryName` | string | `"French restaurant"` |
| `placeId` | string | `"ChIJLT_ZhspZwokR5p4Rn-hVEeQ"` |
| `address` | string | `"176 8th Ave, New York, NY 10011"` |
| `city` / `postalCode` / `countryCode` | string | `"New York"` / `"10011"` / `"US"` |
| `location` | object | `{ "lat": 40.7426678, "lng": -74.0001698 }` |
| `phone` / `phoneUnformatted` | string | `"(212) 337-9577"` / `"+12123379577"` |
| `website` | string | `"https://www.loulounyc.com/"` |
| `totalScore` | number | `4.7` |
| `reviewsCount` | integer | `4506` |
| `reviewsDistribution` | object | `{ "oneStar": 135, …, "fiveStar": 3738 }` |
| `businessStatus` | string | `"OPERATIONAL"` |
| `openingHours` | array | `[{ "day": "Monday", "hours": "11 AM–12 AM" }]` |
| `claimThisBusiness` | boolean | `false` |
| `reviews` | array | top 5 reviews with text, stars, date, owner reply |
| `imageUrls` | array | full size photo URLs (usually 3 to 5) |
| `email` | string | `"info@loulounyc.com"` (leads enrichment) |
| `instagram` / `facebook` / `linkedin` | string | `"https://www.instagram.com/loulou.nyc"` |
| `contacts.websiteStatus` | string | `"ok"`, `"parked"`, `"social_only"` … |
| `contacts.emails` | array | `["info@loulounyc.com"]`, all business mailboxes found on the website |
| `contacts.emailsDetailed` | array | `[{ "email": "info@loulounyc.com", "type": "generic", "domainMatchesWebsite": true, "mxValid": true }]` |
| `contacts.phonesFromWebsite` | array | extra phone numbers from the website, E.164, deduplicated |
| `contacts.socialProfiles` | object | `{ "instagram": ["https://www.instagram.com/loulou.nyc"] }` (13 networks) |
| `contacts.websiteSignals` | object | `{ "https": true, "mobileFriendly": true, "bookingSystems": ["Resy"] }` |
| `leadScore` | integer | `95` |
| `leadScoreBreakdown` | array | `[{ "points": 15, "reason": "Has phone number" }, …]`, every point explained |
| `leadScoreCoverage` | number | `1`, share of the 10 score criteria that could be evaluated |
| `leadSignals` | array | `["no_website", "unclaimed_listing"]` |
| `changeStatus` | string | `"NEW"`, `"UPDATED"`, `"UNCHANGED"` (monitoring) |
| `searchQuery` / `searchLocation` | string | `"restaurant"` / `"Chelsea, Manhattan, New York"` |
| `scrapedAt` | string | ISO timestamp of the run |
| `dataQuality` | object | `{ "googleView": "full", … }` |

### All fields, by group

- **Identity**: `title`, `categoryName`, `categories`, `placeId`, `cid`, `fid`, `kgmid`, `url`, `cidUrl`
- **Location**: `address`, `street`, `neighborhood`, `city`, `postalCode`, `state`, `countryCode`, `plusCode`, `location {lat,lng}`, `timezone`
- **Contact**: `phone`, `phoneUnformatted` (E.164), `website`, `websiteDomain`
- **Reputation**: `totalScore`, `reviewsCount`, `reviewsDistribution` (1 to 5 stars), `reviewsTags` (what reviews talk about, with counts), `reviews` (top reviews with text, stars, ISO date, per aspect ratings like Food/Service/Atmosphere, visit context like "Price per person", owner reply, photos)
- **Business**: `businessStatus` (`OPERATIONAL` / `CLOSED_TEMPORARILY` / `CLOSED_PERMANENTLY`), `openingHours` (text + machine readable periods), `additionalOpeningHours` (brunch, delivery, happy hour…), `openingHoursStatus`, `claimThisBusiness`, `ownerName`, `description`, `ownerDescription`, `ownerUpdates` (business posts)
- **Extras**: `isOpenNow`, `additionalInfo` (amenities: accessibility, service options, payments…), `highlights`, `actionLinks` (reservation / order online / shopping providers and URLs), `priceInfo` (hotel nightly price, fuel price), `hotel` (stars, check in/out dates, amenities), `placesInside` (stores inside a mall, restaurants inside a hotel…), `imagesCount`, `imageUrls`, `mainImageUrl`
- **Leads** (optional): flat CSV friendly `email`, `facebook`, `instagram`, `linkedin`, `twitter`, `youtube`, `tiktok` columns plus the full `contacts` object: `contacts.emails`, `contacts.emailsDetailed` (type `generic` / `business` / `published`, on domain, free provider, MX valid), `contacts.personalEmailsHidden`, `contacts.multiLocationPage`, `contacts.phonesFromWebsite` (normalized, deduplicated), `contacts.socialProfiles` (Facebook, Instagram, X, LinkedIn, YouTube, TikTok, Pinterest, WhatsApp, Telegram, Discord, Threads, Yelp, Tripadvisor), `contacts.websiteStatus` (`ok`, `platform_page`, `social_only`, `parked`, `dns_error`, `blocked`, `redirects_elsewhere`, `under_construction`, `skipped_closed`…), `contacts.websiteSignals`
- **Scoring**: `leadScore`, `leadScoreCoverage` (share of criteria that could be evaluated), `leadScoreBreakdown`, `leadSignals`
- **Monitoring**: `changeStatus`, `changes[] {field, from, to}`, `metricsDelta` (rating / review count movement), `firstSeenAt`
- **Meta**: `searchQuery`, `searchLocation`, `rank` (position in the Google result list of the map view it was found in), `scrapedAt`, `dataQuality`

`ownerName` is the display name of the Google Business Profile owner account (usually the business name itself), not a named decision maker.

## Compared with alternatives

**1,000 places + website contacts + 5 reviews per place**, compared with the most used Google Maps Actor on the Apify Store (~625,000 users). That Actor sells details, contacts, reviews and filters as separate add ons; we price its base place + contacts add on (per place) + 5 reviews (per review). We count our contacts event on all 1,000 places (worst case, in practice it is charged only when the website adds something new).

| Apify plan | Most used Actor (~625k users), event prices | **Google Maps Scraper Plus**, event prices | Difference (event prices) |
|---|---|---|---|
| Free | $4.00 + $2.00 + $2.50 = **$8.50** | $2.00 + $1.50 = **$3.50** | 59 % less |
| Bronze | $3.00 + $2.00 + $2.50 = **$7.50** | $2.00 + $1.50 = **$3.50** | 53 % less |
| Silver | $2.00 + $1.50 + $1.85 = **$5.35** | $1.40 + $1.50 = **$2.90** | 46 % less |
| Gold | $1.50 + $1.05 + $1.30 = **$3.85** | $0.75 + $0.37 = **$1.12** | 71 % less |
| Platinum | $1.26 + $0.63 + $0.79 = **$2.68** | $0.75 + $0.37 = **$1.12** | 58 % less |
| Diamond | $0.76 + $0.38 + $0.47 = **$1.61** | $0.75 + $0.37 = **$1.12** | 30 % less |

**These totals exclude Apify platform usage.** Our runs bill platform usage (compute, storage, proxy) separately. At the default 1024 MB, a 1,000-place run with website contacts typically adds roughly **$0.03 to $0.15** (about 5 to 20 minutes at 1 GB, i.e. 0.1 to 0.35 compute units at typical compute unit rates, an estimate, not a benchmark; every run shows its exact usage in Console). Our measured small test runs (1 to 6 places) used $0.001 to $0.01. Added to our price, the Diamond difference narrows to roughly 21 to 29 %, while the other plans stay more than 40 % below. The most used Actor's public pricing data does not mark platform usage as billed to the user, so compare our price plus usage with its price alone. It also charges a start fee of $0.00005 per GB of memory.

Its optional "additional place details" add on (reservation data, web results, questions) costs another $2.00 / 1,000 on Free and $1.05 on Gold, and each filter adds $1.00 / 1,000 on Free ($0.525 on Gold); filters are free here.

**Bare listing only** (no contacts, no reviews): the most used Actor charges $4.00 / $3.00 / $2.00 / $1.50 / $1.26 / $0.76 per 1,000 places (Free → Diamond) against our $2.00 / $2.00 / $1.40 / $0.75 / $0.75 / $0.75, on Diamond the two are practically the same, and ours costs slightly more once platform usage is added. Several smaller Actors (~3,000 to 4,000 users) charge **$0.50 / 1,000 on Free and $0.40 on Gold** for a bare listing, which is cheaper than us if the listing is all you need.

*Prices from public Apify Store listings, checked September 2026. Store prices change, check the listing of any alternative you consider.*

Set *Maximum cost per run* in the run options and the Actor stops gracefully when it is reached; prices for your plan are read at run time, so the budget is always respected.

## Limits

- **Reviews**: every place includes its top 5 reviews. Set "Reviews per place" higher to get the most recent review history, up to 5,000 per place (Google itself stops listing older reviews after roughly 4,500). About half of Google reviews are star only without text; that is how they were posted.
- **Popular times** exist only for place types where Google shows them (restaurants, bars, shops…, not e.g. dentists). Q&A no longer exists on Google Maps. Extended profiles and long review histories add a few minutes to a run (longer for very large runs), because they are completed in one batch after the map search.
- **Limited view**: Google randomly serves a reduced place page (about half of all requests) without review data, without the ownership marker and with only today's opening hours. The Actor request agains such places (`limitedViewRetries`), fills the week's hours from the search results when possible, and labels any record that stayed reduced (`dataQuality.googleView: limited`, `dataQuality.openingHoursPartial`). In monitoring, partial data never counts as a change.
- **Emails** come from the business's own website; MX checking confirms the domain accepts mail, not that a specific mailbox exists. **Privacy rule:** by default an address is returned only when it is clearly a business mailbox, one of its name parts is or starts with a role word (info@, bookings2@, front.desk@, events@…), it contains a word from the business name or website domain, or the business published it in its structured data (schema.org). On ordering/booking/site builder pages only the business's own, freemail (gmail…) or self published addresses are kept, and vendor addresses found on privacy/terms pages are ignored. Everything else might be a person's mailbox and is hidden (counted in `personalEmailsHidden`) unless you enable `includePersonalEmails`. On franchise pages listing many branches, the address matching this branch's name or city is put first and `multiLocationPage` is set.
- **Ordering, booking and site builder pages** (Toast, DoorDash, Booksy, Vagaro, GlossGenius, Wix sites…) are labelled `websiteStatus: platform_page`; the platform's own emails and social profiles are removed so they are never attributed to the business. `RUN_SUMMARY.suspectSharedContacts` lists any address found on 3+ different websites (usually a web agency footer).
- **Photos**: Google exposes about 3 to 5 photos per place to logged out visitors; `imagesCount` shows the total on Google.
- **Very large areas** (whole countries in *Thorough* mode) are capped at 2,500 starting tiles closest to the centre; split them into regions for full coverage.
- **Not included**: employee or decision maker names, job titles and personal LinkedIn profiles; mailbox level email verification (MX only, no SMTP probing); anything that requires a Google login (e.g. full photo galleries).

## FAQ

**Is there a limit on the Apify Free plan?**
Only for two add ons: the full review history (beyond the first 5 reviews) and extended profiles share $0.25 per calendar month on the Free plan. Apify pays developers nothing for Free plan usage while those add ons cost us data fees. Place data, contacts and the first 5 reviews are unlimited; the allowance resets on the 1st of the month. Any paid Apify plan has no limit.

**Is scraping Google Maps legal?**
Scraping publicly available business data is generally allowed, but personal data (e.g. reviewer names) is protected by laws such as GDPR. Reviewer personal data is off by default; only enable it with a legitimate reason. Consult your lawyer if unsure.

**How fresh is the data?**
Every run collects the data from Google Maps at the moment it runs, nothing is served from an old cache. Each record carries `scrapedAt`.

**Why did I get fewer results than expected?**
Common reasons: the per search limit (`maxPlacesPerQuery`, 200 when empty, 50 in the Console form), filters (minimum rating, website/phone/ownership filters, name match), places outside the location boundary (widen with `includeNearbyKm`), *Fast* coverage mode, or your *Maximum cost per run*. `RUN_SUMMARY` lists filtered places by reason, search terms that hit a limit and unresolved inputs. A location is skipped when OpenStreetMap only found unrelated places for that name, use the official name (e.g. "The Heights, Jersey City") or draw the area as `customGeolocation`; skipped inputs are listed in `RUN_SUMMARY.unresolvedInputs`.

**Why was I charged `review-minimum` or `place-extras-checked`?**
`review-minimum`: reviews are loaded in pages of 10, and each page has a real cost even when its reviews are not delivered. If the reviews you received for a place (beyond the free first 5) are worth less than the minimum of the pages loaded for it, for example *Reviews per place* = 10 (only 5 charged reviews), *Only reviews since* removed most of them, or Google returned fewer reviews than the place lists, the difference is charged in $0.0001 units. Minimum per place (rounded up to $0.0001):

**Is Apify platform usage included?**
No. The prices on this page are for results only; Apify bills platform usage (compute, storage, proxy) separately. At the default 1024 MB a small run typically uses about $0.002 to $0.01 and a 1,000-place lead run roughly $0.03 to $0.15 (estimate).

**How do I control my spend?**
Set *Maximum cost per run* in the run options, the Actor stops gracefully when it is reached. `maxPlacesPerQuery` and `maxPlacesTotal` cap the number of places, and filtered places are never charged.

**Can I monitor an area on a schedule?**
Yes. Schedule the Actor with `monitoringMode` (and optionally `outputOnlyChanges`) and the same `monitoringName`. Each run labels places NEW / UPDATED / UNCHANGED, reports verified REMOVED places and writes a `CHANGES` record for alerts.

**Which export formats are supported?**
JSON, CSV, Excel, XML, HTML and RSS from the dataset. Emails and social profiles are also in flat columns (`email`, `facebook`, `instagram`…) so CSV/Excel exports stay readable.

**Do I need residential proxies?**
No. The default Apify datacenter proxy works for these endpoints and is the cheapest option.

**Can I get the names of owners, managers or employees?**
No. The Actor returns business level contacts only (business phone, business mailboxes, social profiles). `ownerName` is the display name of the Google Business Profile owner account, usually the business name itself, not a person.

**Where do I get help?**
Open an issue in the Actor's **Issues** tab in Apify Console with your run ID (and the input, if you can share it).
