Google Maps Scraper - Places, Leads, Emails & Contacts avatar

Google Maps Scraper - Places, Leads, Emails & Contacts

Pricing

from $15.39 / 1,000 results

Go to Apify Store
Google Maps Scraper - Places, Leads, Emails & Contacts

Google Maps Scraper - Places, Leads, Emails & Contacts

Scrape Google Maps places and local business leads with no API key. Get name, category, phone, website, emails, social links, address, rating, hours, coordinates, plus code, price level, place ID and CID. Filter by rating, category, website, phone, open now. Export JSON, CSV or Excel.

Pricing

from $15.39 / 1,000 results

Rating

0.0

(0)

Developer

Scrapers Lat

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Google Maps Scraper - Places, Leads, Emails & Contacts

Google Maps Scraper - Places, Leads, Emails & Contacts

Google Maps scraper and Google Places data extractor for lead generation, with no API key required. Turn any Google Maps search into clean local business leads: names, categories, addresses, phone numbers, websites, public emails, social profiles, ratings, opening hours, coordinates, plus codes and Google place IDs. A more complete, HTTP based alternative to the official Google Maps and Places API for bulk business listings data.

Here is one real result from a live run, with the fields the actor returns:

{
"businessName": "The Gage",
"category": "American restaurant",
"categories": ["American restaurant", "Bar", "New American restaurant", "Pub"],
"description": "Upscale restaurant with an European-American fare",
"rating": 4.6,
"reviewsCount": null,
"priceLevel": null,
"phone": "(312) 372-4243",
"phoneInternational": "+13123724243",
"website": "https://thegagechicago.com/",
"domain": "thegagechicago.com",
"emails": ["info@thegagechicago.com"],
"facebook": "https://www.facebook.com/thegagechicago/",
"instagram": "https://www.instagram.com/thegagechicago",
"websiteTitle": "The Gage",
"fullAddress": "The Gage, 24 S Michigan Ave, Chicago, IL 60603",
"street": "24 S Michigan Ave",
"neighborhood": "Chicago Loop",
"city": "Chicago",
"state": "Illinois",
"postalCode": "60603",
"countryCode": "US",
"latitude": 41.8813268,
"longitude": -87.6246925,
"plusCode": "86HJV9JG+G4",
"placeId": "ChIJ5a8ra6QsDogRENtJLAp40AE",
"featureId": "0x880e2ca46b2bafe5:0x1d0780a2c49db10",
"cid": "130736374281788176",
"kgmid": "/g/1hc4ljvmz",
"googleMapsUrl": "https://www.google.com/maps/place/?q=place_id:ChIJ5a8ra6QsDogRENtJLAp40AE",
"searchPageUrl": "https://www.google.com/maps/search/restaurants%20Chicago%2C%20IL",
"rank": 3,
"timezone": "America/Chicago",
"claimed": true,
"ownerName": "The Gage",
"businessStatus": "OPERATIONAL",
"permanentlyClosed": false,
"temporarilyClosed": false,
"openNow": true,
"openingHours": [{ "day": "Friday", "hours": "11 AM to 12 AM" }],
"serviceOptions": { "dineIn": null, "takeout": null, "delivery": null, "reservable": true, "onlineOrdering": null },
"reserveTableUrl": "https://www.google.com/maps/reserve/v/dine/c/rvLajbvTHOU",
"reservationLinks": ["https://thegagechicago.com/reservations", "https://www.opentable.com/restaurant/profile/10315?ref=1068"],
"orderLinks": [],
"imageUrls": ["https://lh3.googleusercontent.com/gps-cs-s/AHRPTWnPpqh_2CDHBIStFEti...=w408-h272-k-no"],
"imagesCount": 5,
"searchQuery": "restaurants Chicago, IL",
"observedAt": "2026-09-04T17:00:46.440Z"
}

The most complete HTTP Google Maps scraper for lead generation. It returns the business fields Google Maps exposes (name, category, editorial description, phone, website, address, coordinates, plus code, price level, place IDs, hours, service options, order and reservation links, claimed status, open-now), and it can visit each business website to pull public emails and social profiles (Facebook, Instagram, X, LinkedIn, YouTube, TikTok, Pinterest, Discord) that the base place feed never contains. It gives you more than a dozen input filters so you collect exactly the businesses you want and pay only for the ones that pass.

📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples

Apify Coverage Output Billing

Table of contents

What it does

Give the actor one or more business types (dentist, coffee shop, law firm) and a location, or paste Google Maps search URLs. It collects the matching places from Google Maps and writes one clean record per business to the dataset. Each record carries the business name, primary category and full category list, editorial description, rating, price level, phone in local and E.164 format, website and domain, a parsed address (street, neighborhood, city, state, postal code, country), coordinates, plus code, Google identifiers (placeId, featureId/fid, cid, kgmid), timezone, claimed status, owner name, business status (operational, temporarily closed, permanently closed), open-now, opening hours, service options (dine-in, takeout, delivery), order and reservation links, and photo URLs.

Turn on the contacts add-on and the actor fetches each business website and extracts public emails plus social profile links (Facebook, Instagram, X/Twitter, LinkedIn, YouTube, TikTok, Pinterest, Discord). Two optional AI add-ons write a short business profile and score each business as an outreach lead.

More than a dozen input filters narrow the run before you are billed: minimum rating, category words, only places with a website, phone or email, open now, skip closed, plus multi query search and place deduplication.

Quickstart

Open the actor, paste this into the input, and press Run. It returns up to 10 coffee shops in Austin rated 4.0 or higher, with public emails and social links scraped from each website.

{
"searchQueries": ["coffee shop"],
"location": "Austin, TX",
"maxPlaces": 10,
"minRating": 4,
"onlyWithWebsite": true,
"scrapeContacts": true,
"language": "en",
"region": "us"
}

Run several searches in one job by adding more terms to searchQueries, or paste Google Maps search URLs into searchUrls. Google returns roughly 100 to 120 results per search.

Input reference

FieldTypeRequiredDefaultDescription
searchQueriesstring[]no["coffee shop"]One or more business types or names. Each runs across the whole location.
searchQuerystringno(empty)Single business type or name. Alias for one entry in searchQueries.
locationstringnoAustin, TXCity, area or region. Appended to each query. Takes precedence over city/state/country.
city / state / county / postalCode / countrystringno(empty)Build the location when location is empty.
searchUrlsstring[]no(empty)Google Maps search or place URLs to run directly.
maxPlacesintegerno20Maximum places across all queries.
languageenumnoenInterface language (Google hl): en, es, pt, fr, de, it, nl.
regionenumnousCountry context (Google gl) and proxy country: us, gb, ca, au, mx, br, ar, co, cl, es, fr, de.
minRatingintegerno(none)Keep only places rated at least this many stars (1 to 5).
categoryFilterWordsstring[]no(empty)Keep only places whose category matches one of these words.
onlyWithWebsitebooleannofalseKeep only places that have a website.
onlyWithPhonebooleannofalseKeep only places that have a phone.
onlyWithEmailbooleannofalseKeep only places where a public email was found. Requires scrapeContacts.
openNowOnlybooleannofalseKeep only places open at scrape time.
skipClosedPlacesbooleannofalseDrop permanently or temporarily closed places.
deduplicatePlacesbooleannotrueRemove duplicate places by place ID across all queries.
scrapeImagesbooleannotrueInclude business photo URLs. No extra charge.
maxImagesintegerno10Maximum image URLs per place.
scrapeContactsbooleannofalsePaid add-on. Fetch each website for public emails and social links. Paid plans only.
maxContactEnrichintegerno(all)Cap how many websites the contacts add-on visits.
withAiProfileSummarybooleannofalsePaid AI add-on. Adds a short business profile. Paid plans only.
withAiLeadScorebooleannofalsePaid AI add-on. Scores each business 0 to 100 as a lead. Paid plans only.

Output reference

One dataset item per business. Types: string, integer, number, boolean, string[], object[], or null when the source value is absent.

FieldTypeDescription
businessNamestringBusiness name.
category / categoriesstring / string[]Primary category and full category list.
descriptionstringEditorial one-line business description when Google provides one, else null.
ratingnumberGoogle rating out of 5, or null.
reviewsCountintegerTotal reviews when Google includes it in the list feed, else null.
reviewsLinkstringLink to the reviews page when present, else null.
priceLevel / priceRangeinteger / stringPrice level 1 to 4 ($ to $$$$) and price string when Google exposes it, else null.
phone / phoneInternationalstringPhone in local and E.164 format.
website / domainstringBusiness website and domain.
emailsstring[]Public emails from the website (contacts add-on).
facebook, instagram, twitter, linkedin, youtube, tiktok, pinterest, discordstringSocial profile URLs from the website (contacts add-on).
websiteTitlestringTitle of the business website (contacts add-on).
fullAddress, street, neighborhood, city, state, postalCode, countryCodestringParsed address parts.
latitude / longitudenumberCoordinates.
plusCodestringGoogle Plus Code (Open Location Code) derived from the coordinates.
placeId, featureId, fid, cid, kgmidstringGoogle place identifiers.
googleMapsUrl / placeUrlstringDirect Google Maps place URL.
searchPageUrlstringGoogle Maps search page URL for the query.
rankintegerPosition of the place in the result set.
timezonestringIANA timezone.
claimed / ownerNameboolean / stringWhether the listing is claimed, and the owner profile name.
businessStatusstringOPERATIONAL, CLOSED_TEMPORARILY or CLOSED_PERMANENTLY.
permanentlyClosed / temporarilyClosedbooleanClosure flags.
openNow / openNowTextboolean / stringOpen state at scrape time.
openingHoursobject[]Opening hours, each with day and hours.
additionalInfoobject[]Amenities and attributes grouped by category, when Google exposes them.
serviceOptionsobjectFlags for dine-in, takeout, delivery, curbside/in-store pickup, reservable and online ordering, when Google exposes them.
reserveTableUrlstringReservation or booking URL when present.
reservationLinksstring[]Reservation provider URLs (OpenTable, Google Reserve, etc.) when present.
orderLinksstring[]Online ordering and delivery provider URLs when present.
imageUrls / imagesCountstring[] / integerPhoto URLs and their count.
searchQuerystringThe resolved query that produced this record.
aiProfileSummary, aiLeadScore, aiLeadScoreRationalestring / integerAI add-on fields, present only when enabled.
observedAtstringISO timestamp of collection.
errorstringNull on success. On a failed page a record with a populated error field is written and not charged.

Example output record

See the real record at the top of this page. Fields Google does not expose for a given business are returned as null, never invented. reviewsCount, reviewsLink, priceLevel, description, additionalInfo, serviceOptions, reserveTableUrl and orderLinks appear when Google includes them in the list feed and are null or empty otherwise. plusCode is derived from the coordinates, so it is present for every place that has a location.

Run via API and CLI

Start a run and read the dataset. Replace <TOKEN> with your Apify API token.

Run synchronously and get dataset items in one call:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~google-maps-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"searchQueries":["plumber"],"location":"Miami, FL","maxPlaces":50}'

Start a run asynchronously with the contacts add-on:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~google-maps-scraper/runs?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"searchQueries":["law firm"],"location":"Austin, TX","scrapeContacts":true,"maxPlaces":100}'

Apify CLI:

apify call scrapers_lat/google-maps-scraper \
--input '{"searchUrls":["https://www.google.com/maps/search/coffee+shop+in+Seattle+WA"],"maxPlaces":25}'

Fetch results

Every run writes to a dataset. Fetch items as JSON, CSV or Excel by changing format:

# JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
# CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"
# Paginate large datasets
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"

<DATASET_ID> is returned as defaultDatasetId in the run object.

Billing and limits

  • Pay per result. You are charged per business returned (result event). See the pricing tab for the current per-result price.
  • Website contacts. When scrapeContacts is on and a business website yields emails or social links, that place is billed one extra details event. No contact data found means no details charge.
  • AI add-ons (ai_profile_summary, ai_lead_score) are billed as separate events only when they produce output. Off by default.
  • No charge on failure. If a page cannot be retrieved, the actor writes a record with a populated error field and does not charge. Empty runs cost nothing.
  • Spend cap respected. Set maxTotalChargeUsd on the run. Once reached, the actor stops emitting and charging further results and add-ons.
  • Free Apify plans are capped at 10 records per run and cannot use the paid contact or AI add-ons. Upgrade for higher maxPlaces.

How we compare

Objective comparison against the leading Google Maps actors on the Apify Store. Where a competitor is stronger on an axis, that is stated plainly.

CapabilityThis actorcompass/crawler-google-places (flagship)compass/google-maps-extractorlukaskrivka/google-maps-with-contact-detailscompass/google-maps-reviews-scraper
Core place fields (name, category, phone, website, address, coordinates)YesYesYesYesPlace context only
Google IDs: placeId, cid, fid, kgmidAll fourAll fourplaceIdplaceId, cidplaceId
Input filters (rating, category, has website/phone/email, open now, skip closed)14+ filters incl. contact-presence filtersMany, plus polygon geolocation and zoomMany, plus polygon geolocationMany, plus polygon geolocationReviews filters only
Emails and socials from the business websiteYes, 8 networks incl. Pinterest and Discord, in the same runPaid add-onPaid add-onYes, its core featureNo
Open now, business status, closed flagsYesYesYesYesClosed flags
Editorial description, price level, service optionsYes, when Google exposes themYesYesPartialNo
Plus code (Open Location Code)Yes, for every place (from coordinates)SometimesSometimesSometimesNo
Order and reservation linksYesYesYesPartialNo
Reviews count and distributionWhen Google exposes it in the list feed, else nullYes, from the place detail pageYes, with detail scrapingYesYes
Full reviews array (text, author, rating, date, owner reply)NoYesNoNoYes, deepest
Popular times and Q and ANoYesYes, with detail scrapingYesNo
Multi query search in one runYesYesYesYesPer place
Speed (list run)Roughly 4 to 5 seconds for 15 places, plus website time when contacts are onHigh volume, detail scraping slows itFastAdds a website crawl per placeOptimized for review volume
AdoptionNew listingMillions of runs, the market leaderLargeLargeLarge
PricePer result, not the cheapestFrom about 1.50 USD per 1,000 places on the top tierAbout 2.10 to 5 USD per 1,000From about 2.10 USD per 1,000About 0.30 USD per 1,000 reviews

Where competitors win, honestly: the flagship has millions of runs, the widest adoption and a lower headline price on its top tier, and it returns the full reviews array, popular times and Q and A from the place detail page. The dedicated reviews scraper is the deepest source for review text and is cheaper per review. All of the compass actors support polygon and zoom geolocation, which this actor does not.

Where this actor wins: it unifies place data and website contact enrichment (emails plus eight social networks, including Pinterest and Discord) in a single run, adds contact-presence input filters (only with email, phone or website) that the others do not combine, returns the complete Google ID set (placeId, cid, fid, kgmid) that many cheaper clones drop, runs fast by default because it only visits websites when you ask for contacts, and never charges for a place that fails or gets filtered out. For deep review mining, pair it with a dedicated reviews scraper.

FAQ and troubleshooting

Why is reviewsCount null for some places? Google serves this scraper's list feed in two variants. When Google includes the review count in the response it is returned, otherwise it is null. It is never invented. For guaranteed review counts and full review text, use a dedicated Google Maps reviews scraper.

How do I get contact emails and socials? Turn on scrapeContacts (paid plans). For each place with a website, the actor fetches the site and extracts public emails and social profile links into emails, facebook, instagram and the other social fields.

How do I get only businesses with an email? Set scrapeContacts and onlyWithEmail both true. The actor keeps only places where a public email was found.

A run returned fewer results than maxPlaces. Why? Google returns roughly 100 to 120 organic results per search, and your filters remove non matching places before billing. Add more terms to searchQueries or pass multiple searchUrls to widen coverage.

Do I need a Google Maps or Places API key? No. This actor needs no Google API key, no billing account and no per request quota. It returns Google Maps business listings data directly, so it works as a drop-in alternative to the official Google Maps and Places API for bulk lead generation and business listings extraction.

What is plusCode? It is the Google Plus Code (Open Location Code) for the place, computed from its coordinates. Because it is derived from latitude and longitude, it is present for every place that has coordinates.

Why are phone or website null? The listing did not publish that field. Missing source values are returned as null, never invented.

Which regions and languages are supported? Twelve regions (US, UK, Canada, Australia, Mexico, Brazil, Argentina, Colombia, Chile, Spain, France, Germany) and seven interface languages. Set region and language.

Is this an official Google tool? No. This actor is independent and has no affiliation with Google. It reads only data that is publicly visible on Google Maps. Use it in accordance with the Google terms of service.

More scrapers at scrapers.lat

Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.


Independent tool, not affiliated with Google. Accesses only publicly available Google Maps data. Use in accordance with the Google terms of service.