Google Maps Leads Scraper avatar

Google Maps Leads Scraper

Pricing

from $1.10 / 1,000 places

Go to Apify Store
Google Maps Leads Scraper

Google Maps Leads Scraper

Google Maps scraper for leads: export businesses by keyword and city with phone, website, address, rating, hours, and optional emails and social links from their websites. No login.

Pricing

from $1.10 / 1,000 places

Rating

0.0

(0)

Developer

Keklik Technologies

Keklik Technologies

Maintained by Community

Actor stats

0

Bookmarked

19

Total users

6

Monthly active users

12 hours ago

Last modified

Security

Limited permissions

Share

Google Maps Leads Scraper turns Google Maps into a lead list. Type what you're looking for and where, such as dentist in Austin, TX, press Start, and get every matching business with its name, category, address, phone, website, rating, reviews, opening hours and Google IDs. Turn on one switch to add emails and social profiles from each business's own website.

  • Find exactly the places you want: several cities in one run, a circle around an address, an area you draw, every business in a district, or the shops inside malls and airports.
  • Keep only the right ones, for free: Google's own categories (Orthodontist, not every dentist), rating and review count, with or without a website or phone, claimed listings, exact business names. Places a filter leaves out cost nothing.
  • Get more than one Google Maps search shows: a search stops at 200 places, so the scraper searches the area piece by piece.
  • Pay for emails only when a website has them, check every mailbox with your own verification account at no extra charge, and add reviews, photos or more place details if you need them.

No Google account, no login and no API key are needed.

What data can you extract from Google Maps?

Each place becomes one row with up to 80 fields:

GroupFields
BusinessName, main category and all categories, description, logo (the profile picture), owner name and Google profile, claimed profile flag, temporarily or permanently closed flags
ContactPhone (as shown and in international format), website, order-online links, booking links for tables, appointments and waitlists (one per provider: OpenTable, Resy, Fresha, the business's own site...)
LocationFull address, street, city, postal code, county, state or region (and US state code), country code and name, neighborhood, service-area flag, the mall, airport or building it is inside, latitude and longitude, time zone
Malls and airports (optional)The businesses a mall's or airport's Google Maps directory lists, one row each, with the section they are listed under (Clothing, Food & Drink...); the mall's row says how many it lists
ReputationStar rating, number of reviews, link to the reviews
Hours and attributesOpening hours per day, open now with Google's line for it ("Closed · Opens 8 AM"), the About tab (accessibility, payments, amenities, service options...), main photo and photo count
Hotels and gas stationsHotel stars, check-in and check-out times, the nightly price for the dates Google picks with every booking site's offer, and amenities; the fuel price a gas station shows on the map
IDsPlace ID, CID, Knowledge Graph ID, Google Maps link
Place details (optional)Reviews per star (1 to 5), review keywords with counts, price level where Google shows it, a hotel's full amenities list, delivery and takeout hours, plus code, Street View link, delivery and takeout services (DoorDash, Uber Eats...), the owner's posts (updates, events, offers with coupon codes)
Emails and social profiles (optional)Emails and phone numbers found on the website, each email with a deliverability status, the page it was found on, its mail provider and flags for role, free-mailbox and own-domain addresses (mailbox checks with your own verifier key); WhatsApp chat link; Facebook, Instagram, LinkedIn, X, TikTok, YouTube and Pinterest profiles; Yelp and Tripadvisor pages
Reviews (optional)The place's reviews: stars, text, date, owner response and reviewer, newest or in another order, only recent ones or those mentioning your words if you like, with or without reviewer names
Photos (optional)Links to up to 200 of the place's photos, full size
Run detailsThe search term and location the place was found with, whether it is in that location and of the searched type, its rank, the input, and when it was scraped

Use cases

  • Lead generation: build lists of local businesses (dentists, plumbers, restaurants, agencies) with phone numbers, websites and emails for sales outreach.
  • Sales territories: get every business of a kind within 10 km of your office, or inside the area a rep covers, drawn on a map.
  • Web design and marketing agencies: find businesses without a website, with a low rating, few reviews or an unclaimed Google listing.
  • Precise lists: only orthodontists, only vegan restaurants, only roofing contractors, using Google's own categories instead of guessing from names.
  • Retail and franchise research: list every shop inside the malls and airports of a city, or every branch of a chain by its exact name.
  • Market research: count and map every business of a type, or every business of any type in a district, with ratings and review counts, to size a market or find gaps.
  • Competitor and review analysis: compare competitors' ratings, hours and services, and read their recent reviews that mention what matters to you (parking, delivery, price).
  • Data enrichment: get Place IDs, coordinates and opening hours for a list of places or Google Maps links.

Why use Google Maps Leads Scraper?

  • Filters are free, and places they leave out are not charged. The most used Google Maps scrapers on Apify charge for each filter you turn on.
  • Several cities, postal codes or areas in one run, each searched in full, with each place once.
  • Only places inside your location by default: a Brooklyn search doesn't fill your list with Queens.
  • Filters the most used Google Maps scrapers don't offer: maximum rating, a review-count range, with or without a phone, claimed or unclaimed listings, a cap for the whole run, and leaving out places with no email for free.
  • Google's categories as Google Maps shows them: about 4,000 categories plus the labels Google Maps uses of its own, in 38 languages, so US attorneys and UK solicitors both count as lawyers.
  • Emails charged only when found, checked for free (no-reply, throwaway and dead domains left out), with a mailbox check through your own verification account that this scraper doesn't charge for.
  • A form made for people, not developers: what a first run needs at the top, everything else in sections named after what's inside.

How to scrape Google Maps

  1. Open Google Maps Leads Scraper in Apify Console and go to the Input tab.
  2. In 🔍 Search terms, type what you are looking for, one per line: dentist, italian restaurant, plumber.
  3. In 📍 Locations, type where, one per line: Marseille, France, Brooklyn, NY, 75011 Paris.
  4. Set 💯 Max places per search or 🛑 Max places in total to keep the first run small, and turn on 📧 Emails and social profiles if you want email addresses.
  5. Optionally open the sections below them: 🏷️ Categories and filters (free), the add-ons (⭐ Reviews, 📌 Place details, 🖼️ Photos, 🛍️ Shops inside malls and airports), or another way to choose places (🧭 Every place in an area, 📍 Search around an address, 🔗 Google Maps links or place IDs). Click Start and watch the places appear in the Output tab.
  6. Download the data as JSON, CSV, Excel, XML or HTML, or read it through the Apify API.

Input

The form opens with what a first run needs; everything else sits in sections below it. Options marked ($) cost extra, filters are free. The API name is what to use in a JSON input or an API call.

What and where (always shown)

FieldAPI nameWhat it does
🔍 Search termssearchTermsWhat to search for, one per line. Each term is searched in every location.
📍 LocationslocationsWhere to search: a city, district, postal code, county, state or country. The whole area is searched piece by piece, so you get far more than the 200 places one Google Maps search shows. Leave it empty to search the terms as typed ("pizza in Brooklyn"), up to about 200 places per term.
💯 Max places per searchmaxPlacesPerSearchStops each search term in each location (or each Google Maps link) after this many places. Empty covers the whole area.
🛑 Max places in totalmaxResultsStops the whole run after this many places.
📧 Emails and social profiles ($)contactDetailsVisits each place's website (home page and up to 3 contact, about or legal pages) for emails, phone numbers, a WhatsApp link, social profiles and the business's Yelp and Tripadvisor pages. Charged only for places whose website gave something.
🌍 LanguagelanguageLanguage of categories, opening hours and reviews. Pick it from the list, or pass a code such as en, fr, pt-BR.

🏷️ Categories and filters (free)

FieldAPI nameWhat it does
CategoriescategoriesKeep only places with at least one of the categories you pick from Google's list of about 4,000, plus about 400 labels Google Maps uses of its own such as Vacation rental. Any of a place's categories counts, not only its main one. With no search term, each category is searched by its name. Matched in 38 languages. In an API call, pass the names as the form shows them ("Lawyer"); other names of a category ("Attorney", "Solicitor") work too.
Website, PhonewebsiteFilter, phoneFilterwith, without or any.
Min rating, Max ratingminRating, maxRating"2.0" to "4.5", and "1.0" to "4.5" (places with no rating yet are kept by Max rating).
Min reviews, Max reviewsminReviews, maxReviewsAt least, or at most, this many reviews.
Claimed by ownerclaimedFilterclaimed, unclaimed or any.
Name filternameFiltercontains (Starbucks finds "Starbucks Coffee"), exact or any. Case, accents and punctuation are ignored.
Skip closed placesskipClosedLeaves out places marked temporarily or permanently closed.

📧 Email options (with Emails and social profiles on)

FieldAPI nameWhat it does
Skip places without an emailskipWithoutEmailLeaves out places whose website gave no email; they are not charged.
Email verifier, API keyemailVerifier, emailVerifierApiKeyChecks each mailbox with your own account at Reoon, ZeroBounce, NeverBounce, MillionVerifier, DeBounce, Truelist, Bouncer or BounceBan, using your credits there. The key is stored encrypted and checked before scraping starts.
Emails to verify, Leave out invalid emailsverifyEmails, dropInvalidEmailsall or first email of each place; drop (the default) or keep the emails your verifier calls invalid.

Add-ons ($)

FieldAPI nameWhat it does
⭐ Reviews per placereviewsPerPlaceAdds up to this many reviews to each place, in latest_reviews.
Reviews orderreviewsSortnewest, most_relevant, highest_rating or lowest_rating.
Reviews newer thanreviewsNewerThanA date (2026-01-31) or a period (6 months, 1 year; 6m and 1y work too).
Reviews mentioningreviewKeywordsOnly reviews that mention one of these words. With a date or words set, each place's newest 200 reviews are looked through.
Reviewer names and profilesreviewerDetailsOn by default; turn it off to leave out reviewer names, IDs, profile links and photos.
📌 Place detailsplaceDetailsReviews per star, review keywords, delivery and takeout hours and services, the plus code, a Street View link and the owner's posts.
🖼️ Photos per placeimagesPerPlaceLinks to up to this many photos (at most 200), in images.
🛍️ Businesses inside each place, Max businesses per placeplacesInside, maxPlacesInsideThe businesses a mall's, outlet centre's or airport's Google Maps directory lists, one row each with its directory_section. Charged as places; your filters apply to them too.

Other ways to choose places (the sections marked *)

FieldAPI nameWhat it does
🧭 Every place in the locationsallPlacesEvery place in each location, of any kind, with no search term needed. Each location is searched street by street for about 30 broad words and each place is kept once. Max places per search then counts all of a location's places, nearest the centre first.
📍 Near, RadiusradiusCenter, radiusKmEverything within a distance of an address or coordinates (30.2672, -97.7431).
Country, State or region, County, City, Postal codecountry, state, county, city, postalCodeOne location given in parts, for names that exist in many places (Paris, Texas; Springfield).
🔗 Google Maps linksurlsSearch links are searched over the map area they show, with their rating filter. Place links, ?cid= links and maps.app.goo.gl links give one row each.
Place IDsplaceIdsGoogle place IDs (ChIJ...), from the Places API or an earlier run.

⚙️ Advanced

FieldAPI nameWhat it does
Only places inside the locationgeoMatchOn by default. Keeps only places in the location you typed: a Brooklyn search leaves out Queens, a postal code keeps only places with that code. Off, they are kept with in_location false.
Only places of the searched typeskipUnrelatedOn by default. Leaves out the places Google mixes in once an area runs out of real matches, such as osteopaths in a dentist search. Off, they are kept with matches_search false. Not used when Categories are picked.
Custom area (GeoJSON)customAreaA GeoJSON Polygon or MultiPolygon, a Point with radiusKm, a Feature or FeatureCollection, or {"bbox": [west, south, east, north]}. Draw it at geojson.io.
{
"searchTerms": ["dentist", "orthodontist"],
"locations": ["Marseille, France"],
"maxPlacesPerSearch": 500,
"websiteFilter": "with",
"contactDetails": true
}

Output

A shortened row from a real run (a search for dentist in Austin, TX, with Emails and social profiles on):

{
"name": "Parmer Lane Family Dentistry",
"category": "Dentist",
"categories": ["Dentist", "Cosmetic dentist"],
"address": "3704 W Parmer Ln, Austin, TX 78727",
"city": "Austin",
"postal_code": "78727",
"state_code": "TX",
"country_code": "US",
"lat": 30.424677,
"lng": -97.711459,
"phone": "(512) 255-7001",
"website": "http://www.keepaustinsmiling.com/",
"rating": 4.9,
"reviews_count": 330,
"opening_hours": [
{"day": "Monday", "hours": "8 AM–3 PM"},
{"day": "Tuesday", "hours": "8 AM–3 PM"}
],
"open_status": "Closed · Opens 8 AM Mon",
"is_claimed": true,
"place_id": "ChIJGWrM_jrMRIYRCCs1NHg3OoE",
"url": "https://www.google.com/maps?cid=9311816168953424648",
"emails": ["info@keepaustinsmiling.com"],
"email_details": [
{
"email": "info@keepaustinsmiling.com",
"status": "likely_deliverable",
"is_own_domain": true,
"is_role": true,
"is_free_mail": false,
"mail_provider": "Google Workspace / Gmail",
"found_on": "https://keepaustinsmiling.com/",
"found_as": "text"
}
],
"facebook": "https://www.facebook.com/ParmerLaneFamilyDentistry",
"instagram": "https://www.instagram.com/parmerlane_familydentistry",
"search_term": "dentist",
"search_location": "Austin, TX",
"rank": 8,
"scraping_time": "2026-11-06T15:36:57+00:00"
}

You can export the dataset to JSON, CSV, Excel, XML and HTML from the Output tab or through the API. The Output tab shows the data in views, each with only the columns for one job: Places (the overview), Contact, Emails and social profiles, Address and location, Ratings, Hours and photos, Business, Google IDs and links, Hotels and gas stations, Extra place details, Latest reviews, Photos, Places inside (malls and airports) and Search details.

What to know about the data

  • Coverage: one Google Maps search shows at most 200 places, and fewer the wider the map. For a location, the scraper searches the whole area first, then splits it in four and searches each quarter again wherever many matching places remain, until the tiles come back nearly empty. In our test, "dentist" in Marseille gave 871 places from 145 searches, where a single search shows 200.
  • Area edges: the area searched is a rectangle around the location, so Google also shows places just outside it. Only places inside the location (on by default) leaves those out using Google's own record of where each place is; turn it off to keep them, marked with in_location false.
  • Unrelated places: when an area runs out of real matches, Google fills the list with nearby places of other kinds. Only places of the searched type keeps the places whose categories match the best results of the first search (or whose name has the search term, for brand searches such as "Starbucks").
  • Categories: a place lists up to about ten categories, and Google Maps also uses labels of its own beyond its official list (Attorney, Vacation rental). Both are matched, in the run's language; a label Google Maps adds later can be missing until the list is updated.
  • Search in the local language for best results: Google matches your term against business categories. English works almost everywhere; if a search returns little, try the term in the local language (dentiste, Zahnarzt).
  • Emails come from the business's own website, not from Google. Many small businesses don't publish one, and some websites block visitors or load their content with JavaScript only, so expect emails for part of the places.
  • No duplicates: a place appears only once per run, even when several searches or tiles find it.
  • Every place in the locations: Google has no search for "everything", so the scraper searches each street-level tile of the area for about 30 broad words. In our test of South Congress, Austin, it found 1,670 places from 1,368 searches. Places Google files under rare kinds that none of the words reach can be missed.
  • Open now is as of scraping_time, in the place's own time zone.
  • Hotel prices are for the stay dates Google picks (in price_check_in_date and price_check_out_date), in the currency Google uses for the run's country, and change from day to day.
  • Fuel prices: Google shows one price per station on the map, usually regular; it gives no list of every grade.
  • Price level ($ to $$$$): Google shows it to visitors who aren't logged in for few places (some hotels and gas stations, not restaurants), so it is empty for most rows.

How much does it cost to scrape Google Maps?

Google Maps Leads Scraper uses pay-per-event pricing: you pay per place in the dataset, plus each extra you turn on.

EventFreeBronzeSilverGold
Place (every row)$3.00$2.25$1.50$1.10
Place details (when turned on)$1.50$1.50$1.10$0.80
Emails and social profiles (only places where the website gave something)$1.50$1.50$1.10$0.80
Review (each review added with Reviews per place)$0.40$0.35$0.28$0.20
Photos (each place that gets photos with Photos per place, however many)$1.50$1.00$0.75$0.55

Prices are per 1,000 events.

For example, 1,000 dentists with emails and social profiles cost at most $4.50 on the Free plan and $1.90 on Gold. Filters are free: you don't pay for using them, and places they remove cost nothing.

Businesses found inside malls and airports are charged as places. Reviews are charged only for the reviews added, after your date and word filters. The mailbox check with your own verification account costs nothing here; it uses your credits with that service.

Use Max places per search and Max places in total to cap what a run can spend.

Integrations and API

Run Google Maps Leads Scraper from your own code with the Apify API. The Actor ID is keklik/google-maps-leads-scraper.

Python, with apify-client:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("keklik/google-maps-leads-scraper").call(run_input={
"searchTerms": ["plumber"],
"locations": ["Brooklyn, NY"],
"contactDetails": True,
})
for place in client.dataset(run["defaultDatasetId"]).iterate_items():
print(place["name"], place["phone"], place["emails"])

Node.js, with apify-client:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('keklik/google-maps-leads-scraper').call({
searchTerms: ['plumber'],
locations: ['Brooklyn, NY'],
contactDetails: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

You can also:

  • Schedule runs to refresh your lead lists every week or month.
  • Use webhooks to get notified, or trigger your own pipeline, when a run finishes.
  • Connect the results to Google Sheets, HubSpot, Make, Zapier, Slack and other tools through Apify integrations.
  • Let AI agents run the scraper through the Apify MCP server, for example from Claude or Cursor.

FAQ

The scraper collects only public business information that Google Maps shows to visitors who are not logged in. Some of it can still be personal data, such as a sole trader's name, phone number or email, or reviewers' names. Personal data is protected by laws such as the GDPR in the EU, so make sure you have a lawful reason to collect and use it, especially for cold outreach. If in doubt, ask a lawyer.

Do I need a Google account or a Google Maps API key?

No. You don't need a Google account, a login, cookies or a Places API key, and there is no proxy to set up.

How many places can I get?

As many as Google Maps has for your search in the area. A single Google Maps search stops at 200 places, but the scraper searches a large area piece by piece, so a city-wide search goes well beyond that. For a whole country, list its cities or regions as locations.

How do I keep my first run small and cheap?

Set 🛑 Max places in total (for example 50): the run stops there, whatever else you set. 💯 Max places per search limits each search term in each location. Filters are free and places they leave out are not charged, so filtering early (with a website, at least 4 stars, a category) also lowers the cost. Paid options are marked ($) in the form: emails and social profiles, reviews, place details and photos. Emails are charged only for places whose website gave something.

Can I search several keywords or cities at once?

Yes. Each search term is searched in each location, and a place that several searches find appears once.

Can I get every business in an area, not just one type?

Yes. Tick Every place in the locations and type the locations; search terms can stay empty. The scraper searches the area street by street for about 30 broad words (shops, health, offices, restaurants, parks...) and keeps each place once, so you get shops, offices, clinics, restaurants, schools and the rest. A whole city holds tens of thousands of places: start with a district or postal code, or set Max places per search.

Can I search around an address, or in an area I draw?

Yes. Type an address or coordinates in Near and a distance in Radius to get every matching place within that circle, such as all dentists within 3 km of your office. For any other shape, a sales territory, a delivery zone or a district Google has no name for, draw it at geojson.io, copy the GeoJSON and paste it into Custom area:

{
"searchTerms": ["plumber"],
"customArea": {"type": "Polygon", "coordinates": [[[-97.76, 30.25], [-97.72, 30.25], [-97.72, 30.29], [-97.76, 30.29], [-97.76, 30.25]]]}
}

Each polygon of a MultiPolygon or FeatureCollection is searched as its own area. Places outside the shape are left out and not charged, unless you turn off Only places inside the location: they are then kept with in_location set to false. Areas work with search terms, categories and Every place in the locations.

Can I pick exact Google Maps categories?

Yes. Pick them in Categories, from Google's own list of about 4,000. A search for dentist with Orthodontist and Pediatric dentist picked keeps only those specialists. Pick categories with no search term and each one is searched by its name, or turn on Every place in the locations as well to go through every place in the area and keep the ones with those categories.

A place lists up to about ten categories, and it is kept when any of them is picked, so pick the close ones too (Lawyer, Divorce lawyer, Family law attorney) when businesses file themselves differently. Google Maps also uses names of its own beyond its official list, such as Attorney (its US name for Lawyer), Vacation rental or Subway station: they are in the field, shown next to the category they belong to (Lawyer (Solicitor, Attorney)), and picking Lawyer matches all of them.

Categories match in the run's Language, in 38 languages, including English, Spanish, French, German, Portuguese, Italian, Dutch, Japanese and Chinese. Google Maps' own extra names were collected in English, Spanish, Portuguese, French, German, Italian and Dutch; in the other languages, the official names match.

How do I set categories through the API?

Pass the category names as the Categories field shows them, in English: "categories": ["Orthodontist", "Pediatric dentist"]. The other names in brackets in the field work too ("Attorney" or "Solicitor" for Lawyer), and the names stay the same whatever the run's Language, so you can copy them from the category and categories columns of an English run. A run with a name that is not a Google Maps category stops at the start and says which one.

Can I get the shops inside a mall, or the restaurants at an airport?

Yes. Turn on Businesses inside each place and search for the malls, outlet centres or airports (or paste their URLs). Each place's directory on Google Maps is read and every business in it gets its own row, with located_in set to the mall and directory_section to the part of the directory it is listed in, and the mall's row shows places_inside_count. Barton Creek Square in Austin lists 214 businesses; Austin-Bergstrom airport 256.

Filters and Categories apply to those businesses too, so a shopping mall search with Categories set to Shoe store gives the shoe shops inside the malls. Max places per search counts the malls a search finds, Max businesses per place caps each directory, and Max places in total caps the whole run: set it to stop after a number of shops. Each business is charged as a place, and the option adds one request per place found to read its directory.

Can I find businesses with bad ratings or few reviews?

Yes. Set Max rating (for example up to 3.0) or Max reviews (for example 20) to find businesses with unhappy customers or new and small businesses. "Claimed by owner" finds listings the owner hasn't claimed yet.

Will I get places outside the city I typed?

No, not with "Only places inside the location" on (the default). Google shows nearby places around the edges of an area, so a search for Brooklyn also brings up Queens. The scraper keeps only the places Google lists as being in the location you typed. A postal code keeps only places with that postal code. Turn it off to keep everything around the area too: the in_location column then shows which places are outside it.

What is a service-area business?

A business that goes to its customers, such as a plumber, a cleaner or a mobile mechanic, can hide its street address on Google Maps and show the area it serves instead. These places have is_service_area set to true and no street or postal code. A search by postal code leaves them out, since there is no code to check them against.

Can I scrape hotels?

Yes. Search hotel in a city: each hotel has a hotel object with its stars, check-in and check-out times, amenities, the nightly price for the dates Google picks and every booking site's offer (Booking.com, Expedia, the hotel's own site...), each with its price and link. Turn on Place details for the full amenities list.

Will I get an email for every place?

Only where the business publishes one on its own website. Many small businesses don't. You pay for emails and social profiles only for the places where the website gave something.

How are emails checked?

In two levels: free checks on every email, and a mailbox check with your own verification account if you want one.

Free checks (always on)Mailbox check (your own API key)
What is checkedThe email is on the business's own website (home page and up to 3 contact, about or legal pages). No-reply and system addresses (noreply@, postmaster@, abuse@), throwaway domains (a list of about 10,000) and placeholder addresses (your@, name@) are left out. The domain must exist and be able to receive mail, or the email is left out. Typos in big providers (gmial.com) are fixed.Your verification service asks the business's mail server whether that exact mailbox exists.
What it can't tellWhether the mailbox itself exists: john@acme.com passes when acme.com receives mail, even with no "john" there.On catch-all domains, which accept every address, most services can't confirm a mailbox (see the next question).
status you getlikely_deliverable, risky (a typo was fixed; corrected_from has the original) or unchecked (the mail server lookup didn't answer)valid, invalid, catch_all or unknown. Invalid emails are left out unless you turn off Leave out invalid emails.
Other fieldsis_own_domain, is_role (shared inboxes such as info@, kept and labelled), is_free_mail, mail_provider (Google Workspace, Microsoft 365, Zoho...), found_on (the page) and found_as (a mailto link, plain text or hidden by Cloudflare)verified_by, verified_at, verifier_result (the service's own answer) and is_catch_all
CostIncluded in Emails and social profilesYour credits with the service (Reoon, ZeroBounce, NeverBounce, MillionVerifier, DeBounce, Truelist, Bouncer or BounceBan). This scraper charges nothing for it. Check every email or only each place's first one to save credits.

Each place keeps at most 10 emails, those on the business's own domain first.

Which email verifier should I pick?

Any of the eight works for finding dead mailboxes. They differ on catch-all domains, which accept mail for every address, so a normal check can't tell a real mailbox from a made-up one. Reoon, ZeroBounce, NeverBounce, MillionVerifier, DeBounce and Truelist return catch_all for those. Bouncer and BounceBan also try to tell whether the address exists on a catch-all domain, at a higher price per check. Catch-all domains are common among businesses on Google Workspace. If your verifier fails mid-run (a timeout, the credits run out), the run carries on and the emails it couldn't check keep their free status.

Can I get all the reviews of the places?

Reviews per place adds a few reviews to each row, filtered by date and keywords if you like. They are Google's own reviews: the partner reviews Google shows for some hotels (Tripadvisor, Booking.com) are not included. For every review, one row per review, feed the url or place_id column into Google Maps Reviews Scraper.

Can I get the photos of each place?

Yes. Set Photos per place to get links to up to 200 of each place's photos, full size, in the images column. You pay once for each place that gets photos, however many it gets.

Why did some inputs fail?

Inputs that fail are listed, with the reason, in the FAILED record of the run's key-value store (Storage tab), not in the dataset:

  • invalid_input: not a Google Maps search or place URL, or not a Place ID.
  • location_not_found: Google Maps doesn't know the location. Check the spelling, or add the country.
  • not_found: the place doesn't exist or was removed.
  • no_matching_places: the search found no places, or none passed your filters.
  • blocked: Google refused every attempt. Run it again later.
  • google_error: Google answered with an error the scraper doesn't recognise. Please report it.

How does it compare with other Google Maps scrapers on Apify?

Here it is next to the five Google Maps scrapers with the most monthly users on Apify Store, from what each one declares on its Store page. Prices are per 1,000 places on Apify's Starter plan. Checked on 2026-11-06.

keklik/google-maps-leads-scrapercompass/crawler-google-placeslukaskrivka/google-maps-with-contact-detailscompass/google-maps-extractorscraperlink/google-maps-scrapervortex_data/google-maps
Places$2.25$3.00$4.00$4.00$0.45$0.90
Places with emails and social profiles$3.75$5.00$6.00$7.00—$2.30
Each filter you turn onFree+$1.00+$1.00+$1.00FreeFree
Places left out by filtersFreeChargedChargedChargedFreeFree
Fee per runNone$0.00005 per run$0.00005 per run$0.00005 per run$0.00005 per run$0.00005 per run
Several locations in one run✅ Yes❌ No❌ No❌ No✅ Yes✅ Yes
Every place in an area, no search term✅ Yes✅ Yes❌ No❌ No❌ No❌ No
Circle around a point, or an area you draw✅ Yes✅ Yes✅ Yes✅ Yes✅ Yes✅ Yes
Google's categories to pick from✅ Yes✅ Yes✅ Yes✅ Yes❌ No✅ Yes
Exact name match✅ Yes✅ Yes✅ Yes✅ Yes❌ No❌ No
Maximum rating and review-count range✅ Yes❌ No❌ No❌ No❌ No❌ No
With or without a phone, claimed or not✅ Yes❌ No❌ No❌ No❌ No❌ No
Only places inside the location✅ Yes❌ No❌ No❌ No✅ Yes⚠️ Off by default
Cap for the whole run✅ Yes❌ No❌ No❌ No❌ No❌ No
Emails and social profiles✅ Yes✅ Yes✅ Yes✅ Yes❌ No✅ Yes
Email verification✅ Yes✅ Yes✅ Yes✅ Yes❌ No❌ No
Leave out places with no email✅ Yes❌ No❌ No❌ No❌ No❌ No
Reviews with each place✅ Yes✅ Yes❌ No❌ No✅ Yes✅ Yes
Reviews by date and by words✅ Yes✅ Yes❌ No❌ No❌ No❌ No
Shops inside malls and airports✅ Yes✅ Yes✅ Yes✅ Yes❌ No✅ Yes
Photos✅ Yes✅ Yes❌ No❌ No✅ Yes✅ Yes
Star breakdown and review keywords✅ Yes✅ Yes✅ Yes✅ Yes❌ No✅ Yes

Emails are charged only for places whose website gave something with ours and with vortex_data/google-maps; the email verification of the compass and lukaskrivka scrapers is a paid add-on, ours uses your own verification account at no charge here. compass/crawler-google-places, lukaskrivka/google-maps-with-contact-details and compass/google-maps-extractor share one input and output schema. The fee per run is charged per GB of memory. Tell us in the Issues tab if something here is out of date.

What happens when a run fails?

The run's status message says why, and the log names each input that failed. If a mistake in the input stops the run before anything is scraped, the run ends without results and its status message says what to change. Either way the Actor sends us a short error report, so we can fix the cause even if you never open an issue: the Actor's build, the reason, the counts from the end-of-run summary, whether your Apify plan is free or paid and, for an unexpected error, where in our code it happened. Web addresses and @usernames are blanked out first. The report never includes your input, your account, the pages you scraped or your results. Successful runs send nothing. If you need help with a run, open an issue on the Issues tab and attach the run, or email support@kekliktech.com with the run's link; the run's log ends with both.

Support

Found a bug or need a field that isn't there? Open an issue on the Issues tab and we'll look into it. Need a scraper for another site or a custom version of this one? Get in touch through the Issues tab too.