CoreClaw
Store
Pricing
Start Free Trial
CoreClaw

Google Maps Local Business Leads Scraper (by Keyword)

Pricing
Try for free
CoreClaw

Google Maps Local Business Leads Scraper (by Keyword)

coreclaw/google-maps-scraper

Extract data from thousands of Google Maps locations and businesses, including reviews, reviewer details, images, contact info, public emails, social profiles, opening hours, prices, reservation data, online ordering, popular times & more. Export data as JSON or CSV, run via the CoreClaw REST API, check run status, and fetch or export results programmatically.

Try for Free
2,000 Free Results

Google Maps Scraper README

📍 What is Google Maps Scraper?

Google Maps Scraper lets you extract business data from Google Maps, helping you generate leads, analyze competitors, and fuel growth with just a few clicks.

  • Generate qualified leads: extract business names, websites, emails, and phone numbers to build prospect lists for your sales team
  • Track competitors across regions: monitor where competitors operate, how they're rated, and how many reviews they've received
  • Perform market analysis: analyze market saturation, identify service gaps, or benchmark local businesses by category, rating, and visibility
  • Support partnerships: discover top-rated or high-volume locations for outreach and collaboration
  • Automate research workflows: replace manual search tasks with repeatable workflows that keep results fresh and consistent.

The scraper expands Google Maps data extraction beyond a single visible map screen. When a base location can be resolved, it can use paginated list search, country hotspot search, or bounds/grid search to collect more results than a one-screen manual lookup.

What data does Google Maps Scraper extract?

🔗 Title/place name📝 Category, place IDs, and Google Maps URL
📍 Address🧭 Location, plus code and exact coordinates
☎️ Phone number🌐 Website, if available
📝 Company contact details from website (public emails and social media profiles)📱 Social media profile enrichment for Facebook, Instagram, YouTube, TikTok, and LinkedIn
➡️ List of detailed characteristics (attributes)🔎 Google web search results
⭐ Average rating (review_rating)📊 Review count and review distribution
🖼️ List of images🔓 Open/closed status
🕒 Opening hours⏱️ Popular times - peak histogram and live occupancy
🍽️ Menu💵 Price range
🪑 Reservation provider data🛵 Online order availability and delivery/pickup methods
👥 People also search🧑 Owner information

For maximum usefulness, Google Maps Scraper has the following abilities:

  • Extract anything important: names, addresses, websites, phone numbers, ratings, review counts, categories, images, opening hours, menus, and popular times
  • Flexible search: scrape using search terms and a base location, such as a city, state, postal code, region, or country
  • Define the area to scrape: focus on a precise location, or request broader coverage when geocoded bounds or country hotspots are available
  • Flexible output format: export results as JSON or CSV for spreadsheets, databases, CRMs, or internal workflows
  • Use optional enrichment: enrich results with website contacts, public emails, social profiles, reviews, place details, reservation data, online ordering, and web results.

⬇️ Input

The input for Google Maps Scraper should be a location in combination with one or more search terms. You can also extract additional details such as reviews, website contact data, social profiles, amenities, reservation providers, online ordering, and web results. You can set up the input programmatically or use the fields in the scraper interface.

Search terms

Using multiple similar search terms can increase the number of scraped places, but it also increases the time a run takes. We recommend using a combination of search terms that are distinct or overlap only slightly in meaning. Using a long list of duplicate search terms will just increase runtime without providing many more results.

Example of a good list of search terms: [restaurant, bar, pub, cafe, buffet, ice cream, tea house]

Example of a bad list of search terms: [restaurant, restaurants, chinese restaurant, cafe, coffee, coffee shop, takeout]

Google Maps search results often include categories adjacent to your search. For example, restaurant might also capture some cafes or bars, but you will usually get better coverage if you use clearly distinct terms separately.

In the CoreClaw interface, use the keyword string-list field for search terms. In lower-level runtime payloads, the active keyword may be passed as string.

Categories

⚠️ Category filtering is not a separate public input in this CoreClaw version.

Search terms can sometimes include irrelevant places. Google Maps categories returned in the output can help you filter results after export, using fields such as primary_category, category_2, category_3, category_4, and all_categories.

If you need category-like targeting, use category names as search terms, such as divorce lawyer, pet shelter, or pizza restaurant. The scraper will return the place categories it finds, and you can use those category fields to refine the exported results.

For this reason, we recommend using fewer, clearer search terms and filtering the exported results by category when needed.

Search without geolocation

The public input schema requires base_location, and we recommend using it for every run. Put the geography in base_location, not in the keyword field.

Rather than searching only for a phrase like restaurants in berlin, use:

json
{
  "keyword": [{ "string": "restaurants" }],
  "base_location": "Berlin, Germany"
}

More precise locations usually produce more accurate and stable results. Very broad or vague locations may return fewer results, less predictable ordering, or results concentrated around major cities.

Specific places or brand lists

If you already know the places or brands you want to research, use their names as search terms and provide the most precise base_location available. For example, combine a brand name with a city, state, or country to find matching Google Maps places and enrich the returned records with contact details, reviews, place attributes, social profiles, and other enabled fields.

Input fields

FieldRequiredDefaultDescription
keywordYeshairstylist, pizzaSearch terms entered as a string list in the CoreClaw interface.
base_locationYesNew York, USALocation used to anchor the Google Maps search. City, state, county, region, postal code, and country inputs are supported when they can be geocoded.
langNoenLanguage used for Google Maps requests and returned text. Examples:en, zh-CN, fr, de, ja.
max_resultsYes20Maximum number of places to return. Values above 5000 are automatically clamped.
fetch_social_infoNofalseVisit merchant websites to extract public emails and social profile URLs.
facebookNofalseEnrich the first discovered Facebook profile when fetch_social_info is enabled.
instagramNofalseEnrich the first discovered Instagram profile when fetch_social_info is enabled.
youtubeNofalseEnrich the first discovered YouTube channel when fetch_social_info is enabled.
tiktokNofalseEnrich the first discovered TikTok profile when fetch_social_info is enabled.
linkedinNofalseEnrich the first discovered LinkedIn company/profile URL when fetch_social_info is enabled.
fetch_place_detailsNofalseExtract dynamic Google Maps place attributes, such as service options, accessibility, amenities, payments, and links.
fetch_reservation_dataNofalseExtract structured reservation provider data into reservation_data.
fetch_online_orderNofalseExtract online ordering availability and methods such as Delivery and Pickup.
fetch_web_resultNofalseFetch Google web results for each place and store them in web_results.
fetch_reviewsNofalseFetch structured Google Maps reviews.
max_reviews_per_placeNo5 when reviews are enabledMaximum reviews per place. Values above 1000 are automatically clamped. Ignored when fetch_reviews is false.
review_sort_byNonewestReview sorting. Supported values:newest, oldest, highestRating, lowestRating, mostRelevant.
review_keywordNoemptyOptional keyword used to filter fetched reviews.
include_reviewer_infoNotrueInclude reviewer name, profile URL, profile ID, avatar URL, public review count, and photo count.

Example input

json
{
  "keyword": [
    { "string": "pizza" },
    { "string": "coffee shop" }
  ],
  "base_location": "New York, USA",
  "lang": "en",
  "max_results": 100,
  "fetch_social_info": true,
  "instagram": true,
  "facebook": true,
  "fetch_place_details": true,
  "fetch_reservation_data": true,
  "fetch_online_order": true,
  "fetch_web_result": true,
  "fetch_reviews": true,
  "max_reviews_per_place": 10,
  "review_sort_by": "newest",
  "include_reviewer_info": true
}

⬆️ Output

The results are returned as structured output that can be viewed in table form or exported as JSON or CSV. JSON preserves nested fields such as reviews, attributes, reservation_data, web_results, and people_also_search. CSV is convenient for spreadsheet analysis; nested values may be flattened or serialized depending on the export.

Reviews are stored in the reviews array. For easier table processing, the first three reviews are also expanded into fields such as reviews/0/name, reviews/0/rating, reviews/0/text, reviews/1/*, and reviews/2/*.

Table view

The table view can be manipulated in different ways. You can sort or filter by contact info, location, category, rating, review count, opening status, social profile fields, reservation data, or other output columns.

JSON file

Here's the amount of data you'd get for a single scraped place. Example of 1 scraped restaurant in New York:

json
[
  {
    "source_keyword": "pizza",
    "source_location": "New York, USA",
    "search_query": "pizza New York, USA",
    "scraped_at": "2026-05-28 00:00:00",
    "search_rank": 1,
    "title": "Example Pizza",
    "data_id": "0x123:0x456",
    "cid": "1234567890",
    "address": "123 Example St, New York, NY 10001, USA",
    "street": "123 Example St",
    "city": "New York",
    "postal_code": "10001",
    "state": "New York",
    "country": "United States",
    "primary_category": "Pizza restaurant",
    "all_categories": "Pizza restaurant, Italian restaurant",
    "latitude": 40.7128,
    "longitude": -74.006,
    "website": "https://example-pizza.test/",
    "all_emails": "hello@example-pizza.test",
    "email_1": "hello@example-pizza.test",
    "facebook_url_1": "https://www.facebook.com/examplepizza",
    "facebook_followers_count": 12000,
    "instagram_url_1": "https://www.instagram.com/examplepizza/",
    "instagram_followers_count": "34500",
    "phone": "+1 212-555-0100",
    "plus_code": "P27Q+MC New York",
    "review_rating": 4.6,
    "review_count": "842",
    "rating_5_count": "612",
    "rating_4_count": "140",
    "reviews_link": "https://search.google.com/local/reviews?placeid=example",
    "reviews": [
      {
        "title": "Example Pizza",
        "rating": 5,
        "text": "Great slice and fast service.",
        "published_at_date": "2026-05-22",
        "publish_at_time": "18:29:53",
        "likes_count": 2,
        "reviewer_name": "Heather M",
        "reviewer_profile_url": "https://www.google.com/maps/contrib/105978294072623409799",
        "reviewer_profile_id": "105978294072623409799",
        "reviewer_avatar_url": "https://lh3.googleusercontent.com/example=s120",
        "review_url": "https://www.google.com/maps/place/Example+Pizza/data=!4m7&reviewId=ChExample0",
        "review_origin": "Google Maps",
        "review_image_urls": [],
        "images": null,
        "visited_in": "a week ago"
      }
    ],
    "reviews/0/name": "Heather M",
    "reviews/0/rating": 5,
    "reviews/0/text": "Great slice and fast service.",
    "status": "Open now",
    "description": "Neighborhood pizza shop.",
    "timezone": "America/New_York",
    "price_range": "$10-25",
    "price_range/min": 10,
    "price_range/max": 25,
    "price_range/currency": "$",
    "opening_hours/0/day": "Monday",
    "opening_hours/0/hours": "11 AM-10 PM",
    "open_now": true,
    "popular_times_live_percent": 42,
    "popular_times_live_text": "Usually not too busy",
    "popular_times/peak_day": "Saturday",
    "popular_times/peak_hour": 18,
    "popular_times/peak_value": 100,
    "images_count": 2,
    "images/0/title": "Storefront",
    "images/0/image": "https://lh3.googleusercontent.com/place-image-1",
    "menu_link": "https://example-pizza.test/menu",
    "reservation_data": {
      "reservation_available": true,
      "reservation_provider_count": 2,
      "reservation_provider_names": ["Resy", "OpenTable"],
      "reservation_provider_urls": ["https://example.test/resy", "https://example.test/opentable"]
    },
    "online_order_available": true,
    "online_order_methods": "Delivery, Pickup",
    "attributes": [
      {
        "name": "Service options",
        "options": [
          { "name": "Delivery", "enabled": true },
          { "name": "Takeaway", "enabled": true },
          { "name": "Dine-in", "enabled": true }
        ]
      }
    ],
    "web_results": [
      {
        "title": "Example Pizza - Official Website",
        "url": "https://example-pizza.test/",
        "displayed_url": "example-pizza.test",
        "description": "Official website and merchant information for Example Pizza."
      }
    ],
    "owner_id": "1122334455",
    "owner_name": "Example Pizza",
    "owner_link": "https://www.google.com/maps/contrib/1122334455",
    "people_also_search": [
      { "title": "Nearby Pizza", "review_count": 320, "total_score": 4.4 }
    ],
    "url": "https://www.google.com/maps/place/example"
  }
]

🏢 Company contacts enrichment

When fetch_social_info is enabled, Google Maps Scraper visits each merchant website and extracts public contact data when available:

json
{
  "title": "Example Pizza",
  "website": "https://example-pizza.test/",
  "all_emails": "hello@example-pizza.test, catering@example-pizza.test",
  "email_1": "hello@example-pizza.test",
  "email_2": "catering@example-pizza.test",
  "facebook_url_1": "https://www.facebook.com/examplepizza",
  "instagram_url_1": "https://www.instagram.com/examplepizza/",
  "youtube_url_1": "https://www.youtube.com/@examplepizza",
  "tiktok_url_1": "https://www.tiktok.com/@examplepizza",
  "linkedin_url_1": "https://www.linkedin.com/company/example-pizza",
  "twitter_url": "https://x.com/examplepizza"
}

📱 Social Media Profile Enrichment

When social media profile enrichment is enabled, Google Maps Scraper can enrich discovered social media URLs with detailed profile information such as follower counts, descriptions, channel stats, business account status, and verification status.

Important Notes:

  • Social media profile enrichment requires fetch_social_info to be enabled
  • Each platform is controlled by its own switch: facebook, instagram, youtube, tiktok, and linkedin
  • All social profile enrichment options are disabled by default
  • Twitter/X URLs can be discovered from merchant websites and exported as twitter_url; profile enrichment switches are available for Facebook, Instagram, YouTube, TikTok, and LinkedIn

🧾 Reviews

When fetch_reviews is enabled, Google Maps Scraper can extract detailed information about reviews on Google Maps. Note that reviewer information can include personal data, so only enable include_reviewer_info when you have a legitimate reason to process it.

📝 Review text📅 Published date and time
⭐ Stars🔁 Review ID and URL
👍 Likes/helpful votes🖼️ List of review images
💬 Owner response date📍 Visited timing text
👤 Reviewer's name🧾 Reviewer's public review count
🖼️ Reviewer's avatar🔗 Reviewer's profile ID and URL

Use max_reviews_per_place to control review volume. Use smaller values for faster runs.

📍📌 Using geolocation for pinpoint accuracy

Location, country, state, county, city, and postal code

Using free text in the Base Location field should normally be enough to start scraping. For a more precise search, use city, state, county, postal code, region, or country names.

Google Maps Scraper resolves locations into coordinates and bounds when available. For country-only searches, it can use configured hotspot cities to improve national coverage. For larger requests where bounds are available, the scraper can use a grid search strategy to cover the area more thoroughly.

Recommended examples:

  • New York, USA
  • Los Angeles, California, USA
  • Berlin, Germany
  • 10001, New York, USA
  • United Kingdom

Custom search area

Use Base Location to define the target geography. City, postal code, state, region, and country-level inputs are usually enough for local market research, lead generation, and competitor monitoring. When the location can be resolved into bounds, the scraper can use a grid strategy for broader coverage.

How high-volume searches are handled

The scraper chooses its collection strategy based on the resolved location and requested result count:

  • Paginated list search: used for ordinary city or point searches
  • Country hotspot search: used for country-level locations when hotspot data is available
  • Bounds/grid search: used for larger result requests when bounds are available
  • Approximate center bounds: used as a fallback when a center point is available but explicit bounds are not

Very broad locations and very high max_results values take longer and may still return fewer rows than requested if Google Maps exposes fewer matching places for the query.

❤️ FAQ

How does Google Maps Scraper work?

It works similarly to searching through Google Maps and copying information from each page you find. It resolves your base location, searches the selected keyword, pages through result candidates, fetches place details, deduplicates places, and then writes visible data into structured output. Optional enrichment steps run only when their input switches are enabled.

What are the disadvantages of the Google Maps API?

The official Google Places API is useful for many applications, but it has product-specific pricing, quota, and result-pagination constraints. For bulk market research, local lead generation, and review analysis, a Google Maps scraper can provide a more flexible collection of public Google Maps page data. You should still evaluate Google's Terms of Use for your use case.

Can I scrape places from multiple locations?

The public input schema accepts one base_location per active run. To collect multiple locations, start separate runs or create a CoreClaw workflow that executes the scraper for each location and merges the exports downstream.

How can I increase the speed of the scraper?

Use a precise base_location, reduce max_results, keep fetch_reviews disabled unless you need reviews, lower max_reviews_per_place, and enable website/social/place-detail enrichment only when those fields are required.

Can I use Google Maps Scraper to extract Google reviews?

Yes. Enable fetch_reviews, then set max_reviews_per_place, review_sort_by, review_keyword, and include_reviewer_info as needed.

How can I get one review per row in the output?

The scraper returns reviews as a nested reviews array and also flattens the first three reviews into reviews/0/*, reviews/1/*, and reviews/2/* fields. If you need every review as a separate row, export JSON and transform the reviews array in your downstream processing.

Can I integrate Google Maps Scraper with other apps?

Yes. Export JSON or CSV from CoreClaw and import it into spreadsheets, databases, CRMs, BI tools, or automation workflows. You can also use the CoreClaw REST API to start scraper runs, check run status, retrieve paginated results, or export results as JSON or CSV.

Can I use Google Maps Scraper as its own API?

Yes. You can use the CoreClaw REST API to run Google Maps Scraper programmatically. CoreClaw API requests use the api-key header and the base URL https://openapi.coreclaw.com.

A typical API workflow is:

  1. Get the scraper details from /api/scraper and use the returned version and custom parameter schema.
  2. Start a run with /api/v1/scraper/run, passing scraper_slug, version, is_async, and the scraper input under input.parameters.custom.
  3. Save the returned run_slug.
  4. Check run status with /api/v1/run/detail.
  5. Fetch results with /api/v1/run/result/list, or export a JSON/CSV file with /api/v1/run/result/export.

Is it legal to scrape Google Maps data?

Web scraping is legal if you are extracting publicly available data, which is most data on Google Maps. However, you should respect boundaries such as personal data and intellectual property regulations. You should only scrape personal data if you have a legitimate reason to do so, and you should also consider Google's Terms of Use.

Your feedback

We're always working on improving the performance and coverage of this scraper. If you find a bug or notice missing fields, share the input settings, approximate run time, and a small output sample so the behavior can be reproduced.

Pricing

Failed results don't count

Rating

4.9

Developer

CoreClaw
Maintained by CoreClaw

Worker Stats

4.2K Total runs
Success rate: 97.38%
Last updated: Jun 08, 2026

Categories

Social mediaGoogle Map

Share

You might also like

Explore more popular scrapers from our marketplace

View All Scrapers
Google Maps Business Detail Finder(by Detail URL)

Google Maps Business Detail Finder(by Detail URL)

by CoreClaw

No-code Google Maps scraper fetches full details of single business. Capture business email, phone, website, social accounts, reviews, opening hours and location data, instantly export complete valid B2B leads.

4.7
169 runs
From $3/results
Google Maps Reviews Scraper(by place detail URL)

Google Maps Reviews Scraper(by place detail URL)

by CoreClaw

Google Maps Review Scraper bulk extracts star ratings, text, reviewer details, owner responses, and image URLs. Precisely analyze customer sentiment, monitor competitors, optimize local SEO, and comprehensively boost your business reputation. Supports keyword filtering and multilingual translation, delivers structured data.

4.7
146 runs
From $3/results
View All Scrapers
CoreClaw

Deploy ready-to-use Workers to accelerate your data collection workflows.

Email: support@coreclaw.com

Resources

  • Quick Start
  • API Reference
  • Leads

Recommend

  • Store
  • Pricing

Address

Apex DataWorks Limited

UNIT 9, 1/F, THE CLOUD, 111 TUNG CHAU STREET, TAI KOK TSUI, KOWLOON,HONG KONG