Google Maps Scraper: Places, Emails & Phones avatar

Google Maps Scraper: Places, Emails & Phones

Pricing

from $0.35 / 1,000 places

Go to Apify Store
Google Maps Scraper: Places, Emails & Phones

Google Maps Scraper: Places, Emails & Phones

Google Maps scraper for business leads: search places by keyword and location, Maps URL or place ID. Phone, website, address, rating, reviews, opening hours, popular times, menu and photos, plus emails and social profiles from each website as an add-on. No login. Use it as a Google Maps API.

Pricing

from $0.35 / 1,000 places

Rating

0.0

(0)

Developer

DeepMine

DeepMine

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

5 days ago

Last modified

Features

Limited permissions

Share

Google Maps Scraper turns a search like dentist in Boise, ID into a lead list: one row per business with its phone, website, address, rating, reviews and opening hours, plus the emails and social profiles its website lists.

1,000 places with their reviews cost $0.45 on the Starter plan. Reviews and photos are in the place price: set โญ Reviews per place to 15 and each place comes with about 13 (see below). Add emails and social profiles from each website for at most $0.49 more ($0.94 in all): that add-on is charged only for places whose website gave a contact. You pay per place only: no start fee, no compute or proxy bill.

NameRatingReviewsPhoneWebsitePriceEmails
Time Out Market New York4.58,731(917) 810-4855timeoutmarket.com$$infonyc@timeoutmarket.com
Gramercy Tavern4.65,075(212) 477-0777gramercytavern.com$$$$donations@ushgnyc.com
Cecconi's DUMBO4.03,418(718) 650-3900cecconisdumbo.com$$none on the site
The River Cafรฉ4.42,597(718) 522-5200rivercafe.com$$$$none on the site
Boucherie Union Square4.75,520(212) 353-0200boucherieus.com$$$contact@boucherie.nyc (+8 more)

On the form: restaurant in New York, USA, 50 places, with website contacts ticked, so your first run also shows emails and social profiles where the restaurants' websites list them. It costs at most $0.047 on Starter ($0.0225 for the places, up to $0.0245 for contacts) and under $0.05 on the Free plan. Untick contacts and it's $0.0225. Plan prices per 1,000 places: $0.49 Free, $0.45 Starter, $0.39 Scale, $0.35 Business; contacts $0.49 on every plan.

Start in three steps

  1. Enter what you'd type in Google Maps (dentist, coffee shop) and a location (a city, neighborhood, ZIP, state or country), or paste Google Maps links or place IDs.
  2. Choose how many places per search, filters if you want them (category words, minimum rating, with or without a website), and keep or untick ๐Ÿ“ง Emails and social profiles from websites (+$0.49 per 1,000 places that have them).
  3. Run, then export. Open the dataset's ๐Ÿ“Š Overview view (or ๐Ÿ“ง Contacts for the emails) and download CSV, Excel or JSON, or schedule the run.

Copy/paste input for the API (Actor id deepmine/google-maps-scraper), the prefilled run. Through the API, scrapeContacts is off unless you send true:

{
"searchStringsArray": ["restaurant"],
"locationQuery": "New York, USA",
"maxCrawledPlacesPerSearch": 50,
"scrapeContacts": true,
"language": "en"
}

What you can do

  • Search any term in any city, neighborhood, ZIP code, state or country. The scraper takes Google's own best-ranked results first, then searches every ZIP / postal code inside the area and covers the rest with a map grid that goes deeper where places are dense, so big searches aren't stuck at Google's ~200 results per query. The area is the location's own boundary (OpenStreetMap), so "Chicago, IL" stays in Chicago and doesn't fill up with suburbs; for a metro area, list its towns or draw a custom area.
  • Look up places you already have: Google Maps place links, maps.app.goo.gl short links, ?cid= links, place IDs (ChIJ...), CIDs or FIDs. Maps search links (/maps/search/dentist/@43.61,-116.2,13z) run as searches.
  • Filter before you pay: category words, name match, minimum rating, with or without a website, skip closed places. Places a filter leaves out are never charged.
  • Build lead lists: turn on Emails and social profiles from websites to read each place's website (home page plus up to 2 contact pages). Places with an email also land in a separate ๐Ÿ“ง Places with emails dataset.
  • Every place with its full details: address parts, phone, website, rating and the star histogram, opening hours (plus delivery / takeout hours), categories, attributes (accessibility, amenities...), the owner's description and posts, review topics, photos, reservation and order links, and hotel offers and scores. Add up to 15 reviews and up to 100 photos per place.
  • What the Maps app shows on a place: popular times by hour and live busyness ("A little busy", 61%), the typical visit time, price level ($ to $$$$), the menu link and menu or services items with prices, popular dishes, review highlights and the places Google lists under "People also search for". Included in the place price.

Pricing

Pay per result, no start fee:

  • $0.45 per 1,000 places on the Starter plan ($0.49 Free, $0.39 Scale, $0.35 Business), each with its full details. Reviews (up to 15) and photos (up to 100) are included in that price.
  • Website contacts (opt-in): $0.49 per 1,000 places whose website gave at least one email, phone or social profile. A place without a website, or whose site gave nothing, isn't charged it.

Each place is charged once per run, even when several search terms find it.

Input

FieldWhat it does
๐Ÿ” Search termsWhat you'd type in Google Maps (dentist, coffee shop)
๐Ÿ“ LocationCity, neighborhood, ZIP, state or country
๐Ÿ’ฏ Number of places per search termCap per term (empty = every place in the area)
๐Ÿ“ง Emails and social profiles from websites ($)Website contacts add-on
๐ŸŽ›๏ธ FiltersCategories, name match, minimum rating, website, skip closed
๐Ÿ”— Google Maps URLs / ๐Ÿ—ƒ๏ธ Place IDsPlaces or searches you already have
๐Ÿ“ก Location by parts / ๐Ÿ›ฐ๏ธ Custom search areaCountry, city, state, county, postal code; or a GeoJSON polygon / point + radius
โญ Reviews per placeUp to 15 reviews per place (13-14 in the 2026-10-26 checks): newest first, most relevant first, or the 5 highest or lowest rated (included in the price)
๐Ÿ–ผ๏ธ Photos per placeUp to 6 from the place's photo strip; more (up to 100) from its photo gallery, with size, upload date and owner / visitor (included in the price)
๐Ÿ—‚๏ธ Photos per categoryUp to 10 photo links from each photo category (Menu, Food & drink, Vibe, By owner...), and the category names (included in the price)

Output

One row per place. Views: ๐Ÿ“Š Overview (photo, name, category, rating, reviews, phone, website, address, Google Maps link, search, rank), ๐Ÿ“ˆ Stats (rating, reviews per star, photos), ๐Ÿ“ Location (address parts, coordinates, plus code, time zone), ๐Ÿ“ง Contacts (emails, site phones and social profiles; with website contacts on) and ๐Ÿšฆ Busyness (live busyness, how busy it usually is at this hour, typical visit, open now).

Fields, in row order: title, subTitle, description, ownerDescription, price, categoryName, address, neighborhood, street, city, postalCode, state, countryCode, website, phone, phoneUnformatted, claimThisBusiness, location, locatedIn, parentPlaceUrl, floor, plusCode, plusCodeGlobal, menu, totalScore, permanentlyClosed, temporarilyClosed, placeId, categories, fid, cid, reviewsCount, reviewsDistribution, imagesCount, imageCategories, reserveTableUrl, googleFoodUrl, hotelStars, hotelDescription, checkInDate, checkOutDate, hotelPrice, hotelAds, hotelAmenities, hotelReviewSummary, similarHotelsNearby, popularTimesLiveText, popularTimesLivePercent, popularTimesHistogram, openingHours, openingHoursStatus, wasOpenAtScrapeTime, additionalOpeningHours, peopleAlsoSearch, placesTags, reviewsTags, additionalInfo, gasPrices, questionsAndAnswers, url, language, imageUrl, imageUrls, images, kgmid, businessProfileId, tableReservationLinks, tableReservationProviders, restaurantData, orderBy, bookingLinks, ownerUpdates, ownerName, ownerId, ownerProfileUrl, additionalPhones, domain, timezone, reviews, popularTimesLiveUsualPercent, popularTimesWaitPeaks, timeSpent, popularDishes, menuAndServices, reviewHighlights, editorialSummary, priceLevel, photosByCategory, then with website contacts on emails, phones, phonesUncertain, whatsapps, linkedIns, twitters, instagrams, facebooks, youtubes, tiktoks, pinterests, discords, yelps, tripadvisors, websiteCheck, contactPageUrl, and last searchString, rank, searchPageUrl, inputStartUrl, inputPlaceId, isAdvertisement, scrapedAt.

reviews holds up to 15 reviews per place (text, stars, date, reviewer, local-guide flag, the reviewer's ratings for food / service / atmosphere and context like price per person, photos, the owner's reply, link). Signed-out Google Maps shows a place's 5 newest and its most relevant: on 2026-10-26 three places with 2,600 to 381,000 reviews each gave 13-14 different reviews each, the 5 newest plus the 8-9 most relevant from the web page and the Maps app's place sheet. The Which reviews first option picks newest first (the 5 newest, then the most relevant), most relevant first (then the newest), or the 5 highest or lowest rated (signed-out Google Maps shows 5 in those orders; they are never topped up with reviews in another order). reviewsOrigin: "google" keeps Google's own reviews only, and reviewsStartDate (a date or a span like 3 months) keeps the ones published since then. This version can't page through all of a place's reviews: every anonymous route we tested past these (Google's review list on the web and in the Android app) asks for a signed-in or device-verified client, so a maxReviews above 15 gives up to 15 and the run says so. imageUrls lists the photo strip Google shows on the place (about 6), or, with more than 6 photos asked for, the place's photo gallery, which also fills images (photo ID, URL, width and height, video link, upload date, owner or visitor upload, whether it came with a review). imagesCount is Google's total photo count; the gallery Google lists can hold fewer (in a 100-dentist test, places with 37-54 photos listed 20-28), and you get what it lists.

price, menu, popularTimesHistogram, the live popular-times fields and peopleAlsoSearch come from the place sheet of the Google Maps app, read for every place alongside its web record (no login). price is the price level as $ (inexpensive) to $$$$ (very expensive), or a range like $10-20 when the place record has one, and priceLevel gives it in words. They stay empty where Google shows nothing for a place: a place without enough visits has no popular times, a shop no menu. openingHours days also carry periods (24-hour open / close times, overnight when a period ends the next day). questionsAndAnswers is in every row but stays empty in this version.

Coming from compass/crawler-google-places?

Every input option of compass/crawler-google-places, and what this Actor does with it, so you can check before you switch. A compass input runs here as it is: an option this version doesn't do, or does only in part, is named in the run's log, its status line and notDone in the run's OUTPUT record, and so is any input name the Actor doesn't read at all (a typo, an option of another Actor). Nothing is swapped silently.

compass optionHere
searchStringsArray, locationQuery, maxCrawledPlacesPerSearchSame names, same meaning. The older searchString and maxCrawledPlaces are read too.
languageSame. Any Google language code, including all of compass's (es-419, iw...).
categoryFilterWordsSame filter. As in compass, with no search term, link or ID the categories are searched too.
searchMatching, placeMinimumStars, website, skipClosedPlacesSame names and values. A value outside the choices turns that filter off and the run says so.
countryCode, city, state, county, postalCode, customGeolocationSame.
startUrls, placeIdsSame: place links, short links, CID links, place IDs, Maps search links.
scrapePlaceDetailPage, scrapeTableReservationProviderNothing to switch: every place comes with its details and its reservation providers.
scrapeContactsSame: emails, phones and social profile links from the website (the $0.49 per 1,000 add-on).
maxReviewsSame name. Up to 15 per place (13-14 measured on 2026-10-26, see Output); a higher number gives what Google shows signed out, and the run says so.
reviewsSortSame values: newest, mostRelevant, highestRanking, lowestRanking (the last two: up to 5 per place).
reviewsOriginSame: google keeps Google's own reviews.
reviewsStartDateA date (2026-05-03) or a span (3 months): keeps the reviews each place gets from then on. It can't reach older reviews than those (the run says so).
scrapeReviewsPersonalDataSame: off leaves out reviewer names, IDs, links and photos.
maxImagesSame name. Up to 100 photos per place; a higher number gives 100 and the run says so (the Google Maps Photos Scraper lists every photo).
scrapeOrderOnlineIn part: order providers come as orderBy and googleFoodUrl links, without fees or delivery times.
maxQuestionsNot available yet: questionsAndAnswers stays empty.
reviewsFilterStringNot available: reviews aren't filtered by keyword.
scrapeImageAuthorsNot available: images[].uploadedBy says owner or visitor, not the name.
scrapeSocialMediaProfilesNot available: website contacts give the profile links, not profile details.
maximumLeadsEnrichmentRecords, leadsEnrichmentDepartments, verifyLeadsEnrichmentEmailsNot available: no named decision-makers or email verification.
includeWebResults, scrapeDirectoriesNot available: no web results, no listing of places inside malls or airports.
enableCompetitorAnalysis, maxCompetitorsToAnalyzeNot available.
allPlacesNoSearchActionNot available: give search terms or categories. A run with only this stops with a message and no charge.

Output: 83 of the 101 properties compass declares are in our rows under the same name, including title, categoryName, address, phone, website, totalScore, reviewsCount, placeId, openingHours, reviews, price, menu, popularTimesHistogram and peopleAlsoSearch, and each review has compass's review keys (textTranslated, translatedLanguage, likesCount, rating and visitedIn stay empty: we haven't found them in what Google shows signed out). orderOnline isn't a field here; order links are in orderBy and googleFoodUrl. A location with nothing to search for, or only links that aren't Google Maps places, stops the run with a message and no charge (the example search runs only for an empty input).

Google Maps API: export places with Python, HTTP, schedules and integrations

Every run is also an API call. Use your API token from the Apify Console (Settings โ†’ API & Integrations).

Python, with the official Apify client (pip install apify-client): run a search and read the places from the run's dataset. scrapeContacts is off unless you send True (the $0.49 per 1,000 add-on).

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("deepmine/google-maps-scraper").call(run_input={
"searchStringsArray": ["dentist"],
"locationQuery": "Boise, ID",
"maxCrawledPlacesPerSearch": 100,
"website": "withWebsite",
"scrapeContacts": True,
})
for place in client.dataset(run["defaultDatasetId"]).iterate_items():
print(place["title"], place.get("phone"), place.get("website"), place.get("emails"))

Any language, one HTTP call: start the run and get its places back as CSV in the same request. This endpoint waits up to 5 minutes for the run; for big searches, start the run with /runs and read its dataset when it finishes.

curl -X POST "https://api.apify.com/v2/acts/deepmine~google-maps-scraper/run-sync-get-dataset-items?format=csv&fields=title,categoryName,address,phone,website,totalScore,reviewsCount,url" \
-H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \
-d '{"searchStringsArray": ["dentist"], "locationQuery": "Boise, ID", "maxCrawledPlacesPerSearch": 100}' \
-o places.csv

format takes csv, xlsx, json, jsonl, xml or html; fields picks the columns (leave it out for every field). The API tab shows the same calls for JavaScript (Node.js) and the other clients.

Schedule it: save your input as a task, then add a schedule in the Apify Console (Schedules โ†’ Create, for example every Monday at 7:00) to collect the same search every week. Each scheduled run is billed like any run, per place. Send it on: Apify's integrations connect finished runs to Google Sheets, Slack, Zapier, Make and Airbyte, and a webhook can call your own endpoint when a run finishes.

Local business scraper: build a lead list

  1. Search a category in a city (plumber in Austin, TX), and set a minimum rating or "only places with a website" in the filters. Places a filter leaves out aren't charged.
  2. Turn on website contacts to read each website's home page and up to 2 contact pages for emails, phones and social profile links. Places with an email also land in the ๐Ÿ“ง Places with emails dataset.
  3. Download the Contacts view as CSV or Excel, or schedule the same search weekly to catch new businesses.

A list of emails and links is not a list of named decision-makers: the contacts are what each business publishes on its own website, and a place without a website, or with a website that shows nothing, comes back without them.

More Actors for the same job

Did it help?

If the data was useful, a short review on this page helps other people find the Actor. Missing a field, or a search that doesn't come back the way you expect? Open an issue on the Issues tab and we'll look into it.

⌂ ๆข็ฝ‘ๅ€