Google Maps Scraper avatar

Google Maps Scraper

Pricing

from $3.00 / 1,000 results

Go to Apify Store
Google Maps Scraper

Google Maps Scraper

Extract business data from Google Maps search results — names, addresses, phones, websites, ratings, reviews, opening hours, and 20+ fields. Covers any location or category. Grid search mode finds thousands of places per city.

Pricing

from $3.00 / 1,000 results

Rating

1.0

(1)

Developer

Automly

Automly

Maintained by Community

Actor stats

0

Bookmarked

216

Total users

13

Monthly active users

a day ago

Last modified

Share

What is Google Maps Scraper?

Google Maps Scraper is a tool that lets you scrape business leads from Google Maps: names, phone numbers, websites, addresses, ratings, review counts, categories and opening hours. Type a search like "dentists in Chicago", click Start, and download your list as Excel, CSV or JSON.

  • ⚡ Speed: 1,000 New York restaurants in 22 seconds with Grid Search in our test; a search of 200 places usually finishes in under a minute
  • 🗺️ Grid Search: find thousands of places in a city, not just the first 200
  • 📇 Lead-ready: phone, website and full address on every place, plus a Contacts download built for prospecting
  • 📧 Emails and social profiles: optional, taken from each business's own website
  • ⭐ Reviews and photos inside each place: optional, as many as you ask for
  • 📊 Popular times and more: optional place page details, like how busy a place is right now
  • 🎯 Filters: only certain categories, a minimum rating or review count, with or without a website, open places only
  • 📍 Any location: a city, county, state, postal code or an area you draw on the map
  • 🔓 No login: no Google account or API key needed
  • 💸 Free to try: the $5 of free usage every Apify account gets each month covers about 1,500 places

What can Google Maps Scraper do?

  • Build a lead list of local businesses with phone numbers and websites
  • Find emails and social media profiles of local businesses (Facebook, Instagram, LinkedIn and more)
  • Scrape all restaurants, dentists, plumbers or any business type in a city
  • Get thousands of places in one city with Grid Search
  • Scrape Google Maps for any area you draw, from a neighborhood to a whole region
  • Export Google Maps phone numbers and websites to Excel or Google Sheets
  • Get ratings, review counts and opening hours for competitor research
  • Add reviews with owner replies and photos to every place
  • See popular times and how busy a place is right now
  • Find businesses without a website, or only the ones with 4.5 stars and up
  • Read places you already know from their Google Maps links or place IDs
  • Run many searches in one go, each with its own ranked list
  • Get results in any language Google Maps supports

What data can you extract from Google Maps places?

🏢 Business name📞 Phone number (local and international)🌐 Website
📍 Full address, and the address without the business name🏙️ Street, city, postal code, state, country🏘️ Neighborhood
⭐ Rating💬 Number of reviews🏷️ Main category and all categories
🕒 Opening hours for each day💰 Price level and price range📅 Reservation link
📝 Short description and tagline👤 Owner name shown on the listing🧩 Services and attributes (takeout, Wi-Fi, accessibility)
🗺️ Latitude and longitude🕐 Time zone🔗 Google Maps link
🆔 Place ID and CID📷 Photo and number of photos🚫 Temporarily or permanently closed
🔎 Search query that found it🏅 Rank in the results
🆔 Feature ID and Knowledge Graph ID🙋 Unclaimed listing (no owner)🕓 When it was scraped
📧 Emails from the business's website*📱 Phone numbers from the website*👥 Facebook, Instagram, LinkedIn, X, YouTube, TikTok and Pinterest profiles*
📊 Popular times, busy now**⭐ Review counts per star**🗣️ Review topics**
🔍 People also search for**➕ Plus code**🍽️ Menu link and photo categories**
💬 Reviews with text, rating, date, likes, owner reply and reviewer***🖼️ Photos with their date***

* With Add emails and social profiles turned on. ** With Add place page details turned on. *** With Reviews per place or Photos per place above 0.

How to scrape Google Maps places

  1. Create a free Apify account (no credit card needed).
  2. Open Google Maps Scraper.
  3. Add one or more search queries, like plumbers, and a Location, like Austin, TX (or put the city in the query: plumbers in Austin Texas).
  4. Set Max Places Per Search, turn on Enable Grid Search if you want more than about 200 places, add any filters or extras, and click Start.
  5. When the run finishes, download your places as Excel, CSV, JSON, HTML or XML.

How much does it cost to scrape Google Maps places?

Google Maps Scraper costs $3.00 per 1,000 places, plus $0.01 per run start. You also pay the Apify platform usage of the run.

For example, 1,000 places cost $3.01 ($3.00 for the places plus $0.01 for the start), plus platform usage. A place found by two different queries appears once for each query, and is charged once for each.

With Add emails and social profiles on, each place where contact details are found on its website costs extra (see the Pricing tab). Places with no website, or none found, are not charged for it.

The other extras (place page details, reviews, photos) may also cost extra per place, review or photo saved; the Pricing tab always shows the current prices. Filters cost nothing extra: places they skip are not saved and not charged.

Every Apify account gets $5 of free usage each month, enough for about 1,500 places. See the Pricing tab for details.

⬇️ Input

Google Maps Scraper input form with the search "dentists in Chicago"

SettingWhat it does
Search QueriesWhat to search on Google Maps, like restaurants in new york. Each query runs on its own
LocationWhere to search, like Austin, TX, 10001 or Germany. Only places inside it are kept
Max Places Per SearchHow many places to get per query (default 100, up to 10,000)
LanguageLanguage of the results, like en, fr or ar (default en)
Country CodeCountry preference, like us, ae or eg (default us). Put the city or region in the query too
City, County, State, Postal codeAnother way to name the location, in parts
Custom search areaAn exact area as GeoJSON: a polygon, or a point with a radius in km
Google Maps links, Place IDsPlaces you already know, one row each, or a Google Maps search link read as it is
Only these categoriesKeep places with one of these categories, like dentist
Name must match the search termKeep places whose name contains, or is exactly, the search term
Minimum rating, Minimum number of reviewsKeep well-rated or well-reviewed places only
WebsiteAll places, only places with a website, or only places without one
Skip closed placesLeave out temporarily or permanently closed places
Add emails and social profilesAlso add the emails, phone numbers and social media profiles published on each business's own website (costs extra per place where they are found)
Add place page detailsPopular times, review counts per star, review topics, people also search for, plus code, menu link
Reviews per placeHow many reviews to add to each place (0 adds none), with sort order, a start date and an option to leave out reviewer details
Photos per placeHow many photo links to add to each place (0 adds none)
Enable Grid SearchSearch the city in smaller areas to get far more than about 200 places
Grid Cell Size (km)Size of each smaller area, from 0.5 to 50 km (default 5)
Max Pages Per Grid CellHow deeply each smaller area is searched, from 1 to 11 (default 5). Raise it for busy city centers
Custom Search BoundsThe area to cover, as south, west, north and east edges. Use it for any place, it replaces the city list

Example: 4.5-star dentists in Austin with a website, their popular times and 10 newest reviews each.

{
"searchStringsArray": ["dentist"],
"locationQuery": "Austin, TX",
"maxCrawledPlacesPerSearch": 50,
"placeMinimumStars": "fourAndHalf",
"website": "withWebsite",
"scrapePlaceDetailPage": true,
"maxReviews": 10,
"reviewsSort": "newest"
}

Example: up to 1,000 restaurants inside a custom area of New York, with Grid Search.

{
"searchStringsArray": ["restaurants"],
"maxCrawledPlacesPerSearch": 1000,
"language": "en",
"countryCode": "us",
"enableGridSearch": true,
"gridCellKm": 2,
"customBounds": { "south": 40.63, "west": -74.05, "north": 40.85, "east": -73.73 }
}

⬆️ Output

Google Maps Scraper results table with dentists in Chicago: name, category, rating, reviews, phone, website and address

You get one row per place. View them in Apify Console in tables (Overview, Contacts, Hours and services, Full Details, Place page details and Reviews, one row per review), or download them as Excel, CSV, JSON, HTML or XML. The Contacts CSV or Excel download keeps just the prospecting columns. Here is a real row, shortened:

{
"title": "Elephant District",
"categoryName": "Thai restaurant",
"address": "Elephant District, 9 Old Fulton St, Brooklyn, NY 11201",
"streetAddress": "9 Old Fulton St, Brooklyn, NY 11201",
"city": "Brooklyn",
"postalCode": "11201",
"countryCode": "US",
"website": "https://www.elephantdistrict.com/",
"phone": "(845) 314-3606",
"phoneUnformatted": "+18453143606",
"totalScore": 4.8,
"reviewsCount": 2711,
"placeId": "ChIJIQFtrv1bwokRkEaNwb8ltZQ",
"cid": "10715512393914205840",
"url": "https://www.google.com/maps/place/?q=place_id:ChIJIQFtrv1bwokRkEaNwb8ltZQ",
"location": { "lat": 40.7029036, "lng": -73.9938162 },
"openingHours": [{ "day": "Friday", "hours": "11 AM–11 PM" }],
"permanentlyClosed": false,
"searchString": "restaurants in new york",
"rank": 1
}

placeId identifies the same business across runs, so you can match and update your lists. rank is the place's position in the search. With Grid Search it is the order places were found, not Google's own ranking.

How can I use Google Maps data?

  • Lead generation: build prospect lists of local businesses with phone numbers, websites and addresses
  • Sales territory planning: find every business of a type in a city, then split them by neighborhood or postal code
  • Competitor research: compare ratings, review counts, prices and opening hours in any area
  • Market research: see how many businesses of a kind a city has, and where they cluster on the map
  • Local SEO: check how your listing ranks for a search and how it compares with nearby rivals

Grid Search: find thousands of places in a city

One Google Maps search returns up to about 200 places. A city has far more. Grid Search searches the city in many smaller areas and puts the results together, so you get thousands of places from one query.

  • A place found twice is kept once, so your list has no duplicates within a query.
  • Only places inside the area are returned. You don't pay for places outside it.
  • Smaller areas find more places. Set Grid Cell Size (km): 5 for a quick scan, 2 for a thorough one, 1 for the most complete list. Smaller sizes take longer.

Cities detected automatically: Cairo, New York, London, Dubai, Paris, Tokyo, Istanbul, Riyadh, Mumbai, Berlin, Los Angeles, Chicago, Singapore, Bangkok, Rome, Jeddah, Alexandria, Doha, Amman and Beirut. Put the city name in your query (dentists in London) and Grid Search covers the whole city.

Any other place: add a Custom Search Bounds area with its south, west, north and east edges. It applies to every query in the run. If neither a known city nor a custom area is given, the query runs as a normal search. If the area is too large for the chosen size, the run tells you to pick a larger size or a smaller area.

Search any city, postal code or area you draw

Type a Location (Austin, TX, 10001, Bavaria, Germany) or fill in City, County, State or Postal code, and every search term runs there. Only places inside the area are kept, so you can search for pizza instead of pizza in Austin. Turn on Grid Search to cover a large area such as a state in full.

For an exact area, draw it as GeoJSON in Custom search area (coordinates as longitude, latitude), for example a 3 km circle around a point:

{ "type": "Point", "coordinates": [-73.9857, 40.7484], "radiusKm": 3 }

Polygons and multi-polygons work too; geojson.io draws them for you.

Filters: only the places you want

  • Only these categories: dentist keeps dentists and skips the spa next door. A category matches when it holds every word you give, so restaurant matches Chinese restaurant. List every name a category can have.
  • Name must match the search term: keep only Starbucks locations when you search for Starbucks.
  • Minimum rating and Minimum number of reviews: keep well-known, well-rated places.
  • Website: only places with a website, or only places without one (leads for web designers).
  • Skip closed places: leave out places marked temporarily or permanently closed.

Skipped places are not saved, not charged and do not count toward Max Places Per Search, so you still get the number you asked for when there are enough.

  • Add place page details adds what a place's own page shows: popularTimesHistogram (how busy it usually is each hour of the week), popularTimesLiveText and popularTimesLivePercent (how busy it is right now), reviewsDistribution (reviews per star), reviewsTags (topics reviewers mention), peopleAlsoSearch, plusCode, menu and imageCategories.
  • Reviews per place adds a reviews list to each place: text, rating, date, likes, the owner's reply and the reviewer's name, profile and review count. Sort them by newest, most relevant, highest or lowest rating, keep only reviews newer than a date (2025-01-01 or 3 months), and turn off Include reviewer details to keep reviewers' profiles out.
  • Photos per place adds images (each photo link at full size with the date it was added) and imageUrls.
{
"title": "Katz's Delicatessen",
"plusCode": "P2C7+V2 New York",
"reviewsDistribution": { "oneStar": 1821, "twoStar": 1422, "threeStar": 3368, "fourStar": 8863, "fiveStar": 40250 },
"popularTimesLiveText": "As busy as it gets",
"popularTimesLivePercent": 87,
"popularTimesHistogram": { "Su": [{ "hour": 12, "occupancyPercent": 66 }] },
"reviewsTags": [{ "title": "pastrami", "count": 8758 }],
"reviews": [{ "rating": 5, "text": "Best pastrami in town...", "publishedAt": "2026-09-30T18:04:11Z", "authorName": "Ann", "ownerResponseText": null }],
"imageUrls": ["https://lh3.googleusercontent.com/..."]
}

Already have a list? Paste Google Maps links (place links, share links, ?cid= links) into Google Maps links, or place IDs (ChIJ..., the placeId of any result) into Place IDs. Each gives one row with the same fields as a search, plus any extras you turned on. A Google Maps search link (/maps/search/pizza/@40.75,-73.98,15z) is read like a search term at that spot on the map.

Emails and social profiles from business websites

Turn on Add emails and social profiles to turn a Google Maps list into a full lead list. For every place with a website, the actor reads the business's own website (its home page and pages such as Contact and About) and adds three fields:

  • emails: the email addresses published there, the business's own domain first
  • phones: phone numbers listed there, in international format (+15125550123)
  • socialProfiles: links to the business's profiles, by network
{
"title": "Austin City Dental",
"website": "http://www.austincitydental.com/",
"emails": ["info@austincitydental.com"],
"phones": ["+15124518256"],
"socialProfiles": {
"facebook": ["https://www.facebook.com/AustinCityDental"],
"instagram": ["https://www.instagram.com/austincitydental"]
}
}

Only what a business publishes on its own public website is added: no guessed addresses and no other sources. When a website has no contact details or cannot be opened, the fields stay empty and the place is not charged for them; the run's status tells you for how many places nothing was found. The Website contacts tab of the Output shows these columns side by side. Runs take longer with this option.

Monitor businesses on a schedule

Schedule the actor to run every week or month with the same queries. Match places by placeId to spot new businesses, closures (permanentlyClosed, temporarilyClosed) and changes in rating or review count. Send each run to Google Sheets, Slack or email with an integration.

Use it from your own code

Run Google Maps Scraper from your own code with the Apify API or the Python and JavaScript clients:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("automly/google-maps-scraper").call(run_input={
"searchStringsArray": ["dentists in chicago"],
"maxCrawledPlacesPerSearch": 500,
"enableGridSearch": True,
})
for place in client.dataset(run["defaultDatasetId"]).iterate_items():
print(place["title"], place["phone"], place["website"])

Scrape more local business data

ActorWhat it does
Website Email ScraperFinds emails and contacts on websites. Feed it the websites from your Google Maps list to add emails to your leads
Trustpilot Reviews ScraperScrapes Trustpilot reviews, ratings, company replies and company data

🤖 Use with AI agents (MCP)

This actor works as a tool for AI agents. Connect any MCP-compatible AI assistant or agent to the Apify MCP server at https://mcp.apify.com (sign in with your Apify account), and it can find this actor, fill in the input and read the results by itself. Ask in plain words, for example "Find plumbers in Denver with their phone numbers and ratings", and the agent runs automly/google-maps-scraper with an input like {"searchStringsArray": ["plumbers in Denver"], "maxCrawledPlacesPerSearch": 50}. Every input and output field has a plain description, so the agent knows what to type and what each column means. Agent runs cost the same as runs you start yourself.

❓FAQ

How much does it cost to scrape Google Maps?

$3.00 per 1,000 places plus $0.01 per run start, plus the Apify platform usage of the run. See the cost section above and the Pricing tab. The $5 of free usage every month covers about 1,500 places.

One search returns up to about 200 places. Turn on Grid Search for more: it covers a city in smaller areas and can return thousands of places from one query, up to 10,000 per query.

Where does a search look?

Where the query says. coffee near Lyon, France returns places in Lyon. Name a city or area in every query. A query without one, like just coffee, is placed wherever Google Maps chooses.

Can I scrape Google Maps in another language or country?

Yes. Set Language (for example fr or ar) to get names, categories and attributes in that language, and Country Code for your market. Country Code is a preference, not a border, so also put the city or region in your query.

Can I run several searches at once?

Yes. Add as many lines to Search Queries as you like. Each query runs on its own and gets its own ranked list. A place found by two queries appears once under each.

Do I need a Google account or API key?

No. You don't need a Google account, a Google Maps API key or any cookies.

Is the output the same as Google Maps Scraper by Compass?

The common field names match Google Maps Scraper by Compass, including title, phone, website, totalScore, reviewsCount, placeId, cid, fid, kgmid, phoneUnformatted, openingHours, additionalInfo, plusCode, reviewsDistribution, popularTimesHistogram, peopleAlsoSearch, reviewsTags, imageUrls and claimThisBusiness, and so do most inputs (locationQuery, placeIds, startUrls, categoryFilterWords, placeMinimumStars, website, skipClosedPlaces, maxReviews, maxImages), so your existing workflows keep working. For emails and social profiles, turn on Add emails and social profiles.

Can I scrape private information?

No. You get only what a business shows on its public Google Maps listing and, with Add emails and social profiles on, on its own public website. Fields they don't show are left empty.

Can I connect Google Maps Scraper to other tools or AI agents?

Yes. Use the Apify API and the Python or JavaScript clients, or connect it to Make, Zapier, n8n, Google Sheets, Slack and webhooks with integrations. AI assistants and agents can run it through the Apify MCP server at mcp.apify.com.

This scraper only collects public business listings: the name, phone, address, website, hours and ratings a business chose to publish on Google Maps. It does not collect private data such as personal email addresses. Reviews, when you ask for them, carry the reviewer's public name and profile; turn off Include reviewer details to leave the profiles out. Some listings, like those of sole traders, can still contain personal data, which may be protected by laws such as GDPR. Only scrape it for a legitimate reason, and ask a lawyer if you are unsure. You can read more in Is web scraping legal?

Google Maps Scraper is an independent tool. It is not affiliated with, endorsed by or sponsored by Google.

Something isn't working. What should I do?

Open the Issues tab and tell us your search query and what you expected.

⭐ Your feedback

Have an idea or found a problem? Tell us on the Issues tab. If Google Maps Scraper saved you time, a short review on the Reviews tab helps other people find it.