Skip to content
    ↑↓ to choose · Enter to open

    · 19 min read

    Google Maps Scraper: 49 Data Fields, Up to 1,000 Free Results/Month

    By CrawlerBros Engineering Team

    Each record carries 49 output fields, including visible business details such as name, category, address, phone, website, rating, review count, hours, coordinates, place ID, and photos. This Actor processes either a text search query for discovery, or a list of specific Google Maps place URLs or Place IDs for direct extraction, and a first run with example input costs at most $0.025. This tool is designed for practitioners who need structured business data for market analysis or directory building. It is not for anyone who needs email addresses and social media links extracted from business websites, which this Actor does not include.

    Try it before you read further. Apify's free plan includes $5.00 of usage every month with no credit card, enough for up to 1,000 results at $0.005 each before platform usage. Open Google Maps Scraper on Apify and run the prefilled example.

    How reliable is Google Maps Scraper in production?

    Across the last 30 days of public runs on the Apify platform, Google Maps Scraper recorded 87 runs with the following outcomes.

    Outcome Runs Share
    Succeeded 86 98.9%
    Failed 1 1.1%
    Aborted by the user 0 0.0%
    Timed out 0 0.0%
    Total 87 100.0%

    The platform telemetry shows a high degree of reliability for this Actor, with about 1 run in a hundred failing or timing out over the last 30 days. This indicates that for unattended scheduling, you can generally expect consistent results. However, for critical workflows, consider implementing retries for failed runs or splitting very large inputs into smaller batches to mitigate the impact of rare, unexpected issues.

    What does it cost to run Google Maps Scraper?

    Each result costs $0.005 on Apify's free plan, which is $5.00 per 1,000 results. Starting a run is charged separately at $0.02 per GB of Actor memory. Apify also bills the platform usage each run consumes, at the rates of your Apify plan, on top of these charges.

    Apify plan Per result Per 1,000 results
    FREE $0.005 $5.00
    BRONZE $0.00433 $4.33
    SILVER $0.00367 $3.67
    GOLD $0.003 $3.00
    PLATINUM $0.003 $3.00
    DIAMOND $0.003 $3.00

    Worked example: collecting 10,000 results costs $50.00 in result charges before run-start fees and platform usage. With 1.1% of runs failing or timing out in the last 30 days, budget for re-running a portion of those batches rather than assuming every run completes.

    The primary control affecting the bill is "maxResults", which dictates how many business records are collected per search query or URL. Each record returned to the dataset contributes to the per-result charge. To gauge if the Actor provides the data you need before committing to a larger spend, start with a conservative "maxResults" value, such as 5. This allows you to inspect the output and refine your input parameters.

    How do you run Google Maps Scraper from the API?

    None of its 20 controls is strictly required, so the defaults below produce a valid run on their own. Nothing in the payload below is illustrative. Those are the schema's prefilled defaults for Google Maps Scraper, so the request works once your token is in place.

    Call the synchronous endpoint to start a run and receive dataset items in one request:

    curl -X POST "https://api.apify.com/v2/acts/crawlerbros~google-maps-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
      -H "Content-Type: application/json" \
      -d '{"searchQuery":"coffee shop in New York","maxResults":5,"proxyConfiguration":{"useApifyProxy":true}}'
    

    The same run from Python, using the official client:

    from apify_client import ApifyClient
    
    client = ApifyClient("<YOUR_APIFY_TOKEN>")
    
    run_input = {
      "searchQuery": "coffee shop in New York",
      "maxResults": 5,
      "proxyConfiguration": {
        "useApifyProxy": True
      }
    }
    
    run = client.actor("crawlerbros~google-maps-scraper").call(run_input=run_input)
    
    for item in client.dataset(run["defaultDatasetId"]).iterate_items():
        print(item)
    

    And from Node.js:

    import { ApifyClient } from 'apify-client'
    
    const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' })
    
    const input = {
      "searchQuery": "coffee shop in New York",
      "maxResults": 5,
      "proxyConfiguration": {
        "useApifyProxy": true
      }
    }
    
    const run = await client.actor('crawlerbros~google-maps-scraper').call(input)
    const { items } = await client.dataset(run.defaultDatasetId).listItems()
    console.log(items)
    

    Because the call is synchronous, your client waits for the whole run. Keep it for exploration. For scheduled work, start the run without waiting and collect the dataset afterwards, so network trouble costs you a retry rather than the results.

    Which Google Maps Scraper inputs matter, and which can you skip?

    The Actor offers 20 input controls, all of which are optional thanks to intelligent defaults. The "mode" control is key, allowing you to choose between a broad "search", specific "placeUrls", or canonical "placeIds". For a first run, focusing on a single "searchQuery" and "location" is a good starting point. Most practitioners can leave advanced filtering options like "minRating" or "excludeCategories" at their defaults until they understand the raw output.

    • searchQuery (string): What to search for on Google Maps. Include location in the query for best results (e.g., 'coffee shop in New York'). Used when mode is 'search'.
    • maxResults (integer): Requested number of places to collect per search. With a batch of search terms or locations, every search gets its own allowance, so one busy term cannot use up the others. Records stop when the public feed ends, this ceiling is reached for that search, or the bounded runtime deadline expires. Default: 20.
    • proxyConfiguration (object): Proxy settings for the scraper. Using Apify Proxy is recommended for reliable results.
    • mode (string): Search mode uses a text query; placeUrls mode scrapes specific Maps URLs; placeIds mode resolves canonical ChIJ Place IDs through Google's public URL API. Default: "search".
    • location (string): Optional location to append to the search query (e.g., 'Los Angeles, CA'). Leave blank if location is already in the search query.
    • placeUrls (array): List of Google Maps place URLs to scrape directly. Used when mode is 'placeUrls'. Each URL should be a full Google Maps place URL.
    • placeIds (array): Canonical Google Place IDs beginning with ChIJ. The actor resolves them anonymously through Google's public Maps URL API.
    • language (string): Language for Google Maps interface and results. Default: "en".
    • searchTerms (array): Run several search terms in one go, e.g. ["coffee shops", "dentists"]. Used with mode = search. Each term is searched in every location you provide, and every search gets its own maxResults allowance. Default: [].
    • locations (array): Run the search in several places in one go, e.g. ["New York, NY", "Austin, TX"]. Used with mode = search. Each term is searched in each location. Default: [].
    • minRating (number): Only keep businesses rated at or above this value. Leave empty to keep every rating. A business with no published rating does not satisfy a minimum, so it is skipped.
    • maxRating (number): Only keep businesses rated at or below this value. Useful for finding under-served or low-rated prospects.

    The other 8 controls, with their defaults, are listed in the input schema on Google Maps Scraper on Apify.

    Fixed-choice controls: mode accepts search (Search Google Maps), placeUrls (Scrape place URLs), placeIds (Scrape Place IDs); language accepts 11 values (default en), including en (English), es (Spanish), fr (French), de (German).

    What does Google Maps Scraper return?

    Each record typically includes essential business data such as name, category, address, and contact details like phone and website when available. It also provides rating, review count, coordinates, and canonical Google Place IDs. The output is well-suited for building business directories, market research, or lead generation. However, it conspicuously does not contain email addresses or social media links that might be embedded within a business's website content.

    • recordType: business
    • searchTerm: The search that found this business, so batch runs stay traceable
    • name: Business name shown by Google Maps
    • categoryName: Visible category information, when available
    • address: Public address
    • phone: Public phone number, when shown
    • website: Public website, when shown
    • totalScore: Visible rating, when rated
    • reviewsCount: Visible review count
    • priceLevel: Visible price information, when shown
    • plusCode: Public Plus Code, when shown
    • location: Observed latitude and longitude
    • latitude / longitude: The same observed coordinates as plain columns, for spreadsheets and CRM imports
    • placeId: Canonical Google Place ID (the ChIJ... token), when Google exposes one
    • featureId: Legacy public Google Maps feature ID (the 0x...:0x... token), when Google exposes one. It is emitted separately and is never relabelled as a placeId
    • kgmid: Observed Knowledge Graph identifier (the /g/... token in the canonical URL)
    • locatedIn: Parent place when Google shows "Located in:" - useful for shops inside malls, stations, and buildings
    • placeAttributes: Google's own published attribute chips, exactly as shown, e.g. LGBTQ+ friendly, Check-in time: 3:00 PM, Check-out time: 12:00 PM
    • hasStreetView / streetViewCount: Set when Google exposes a Street View control for the place
    • fuelPrices: Fuel grades and their published prices for a gas station, e.g. [{"grade": "Regular", "price": "$4.79"}]. Only a grade with a directly observed price is emitted; stale marks a price Google flags as over 24 hours old.
    • hotelStars / hotelStarRating: Star class as Google labels it, plus the numeric value
    • checkInTime / checkOutTime: Published check-in and check-out times
    • priceOfferAmount / priceOfferCurrency: The nightly price Google currently shows, and its currency
    • priceOfferDateRange: The dates that price applies to
    • priceOfferFreeCancellation: Directly observed, localized free-cancellation note from the target hotel's booking offer; filter labels such as "Free cancellation only" are not emitted
    • hotelAmenities: Named amenities with whether Google marks each one available, e.g. [{"name": "Pool", "available": true}]; localized badge text is preserved exactly as Google displays it, including explicit unavailable entries
    • description: Editorial description visible on the place page
    • hoursStatus / hours: Visible business hours, when available
    • isOpenNow: Live open/closed state Google shows for the place, when available
    • ratingHistogram: Visible rating distribution, when available
    • serviceOptions: Visible service-option labels, such as dine-in, takeout, or delivery
    • amenities: Visible header amenity labels; localized text and Google's availability wording are preserved exactly, and the field is omitted when that source surface is unavailable
    • menuLink: Public menu link, when shown
    • bookingLinks: Public booking, order, or reservation links, when shown
    • photosSample: Public image URLs visible on the place page
    • photoCount: Number of photos Google reports for the place, when available
    • popularTimesSummary: Published popular-times text, when Google exposes it
    • claimed: Set to false only when Google itself shows a "Claim this business" control
    • permanentlyClosed / temporarilyClosed: Set to true only when Google itself marks the place permanently or temporarily closed
    • googleMapsUrl: Canonical or observed Maps URL
    • sourceUrl: URL used as source context
    • scrapedAt: UTC scrape timestamp

    These are the documented fields. Optional ones can be empty on a given record, so measure how often each field your deliverable depends on is populated across a real sample before automating the handoff.

    How do you build the workflow end to end?

    Open Google Maps Scraper and work through these in order. Each step ends with something to check, so a bad configuration surfaces on a small run rather than a scheduled one.

    1. Set the "mode" to "search" and enter a broad "searchQuery" and a specific "location", for example "restaurants" and "London, UK".
    2. Inspect the initial few results for relevant fields like "name", "categoryName", "address", and "totalScore". Check that the "googleMapsUrl" is present and valid.
    3. If the initial results are too broad, refine your "searchQuery" and "location" and add filters like "minRating" or "excludeCategories".
    4. For a batch of searches, populate the "searchTerms" and "locations" arrays instead of single strings. Ensure "maxResults" is set appropriately for each search.
    5. If you have specific Google Maps URLs, change the "mode" to "placeUrls" and provide your list. Verify that all expected fields are present in the output.
    6. When processing a large number of results, consider the "maxResults" per search query to avoid exceeding the natural pagination limits of Google Maps.
    7. Review a sample of the output data for consistency and completeness across various record types. Pay attention to fields like "website" and "phone" which are conditional.

    How do you apply it? Three worked playbooks

    These are Google Maps Scraper's own documented use cases, each worked through as an operating pattern rather than a description.

    Use case 1: Local Market Research

    Outcome: Local market and competitor research.

    Configure: Set "mode" to "search", "searchQuery" to a specific business type (e.g., "cafes"), "location" to your target area (e.g., "Berlin, Germany"), and "maxResults" to 100.

    Working method: Start with a single, highly specific search query and location. Review the initial results for common categories and attributes. Use "minRating" and "minReviews" to focus on established businesses. Expand by adding more "searchTerms" or "locations" to your input.

    Deliverable: A dataset of businesses with names, addresses, ratings, review counts, and contact information for your specified local market, filtered by chosen criteria.

    Stop condition: The dataset contains a significant number of irrelevant businesses, or crucial fields like "website" are consistently missing for a high percentage of results.

    Use case 2: Build Business Directory

    Outcome: Business directory and location-data projects.

    Configure: Set "mode" to "search", provide a list of diverse "searchTerms" (e.g., ["restaurants", "hotels", "museums"]), and a list of "locations" (e.g., ["Paris, France", "Rome, Italy"]). Set "hasWebsite" to true.

    Working method: Begin with a small set of broad categories and locations. Examine the "categoryName" field to understand Google's categorization. Gradually expand the lists of "searchTerms" and "locations". Consider using "excludeCategories" for unwanted business types.

    Deliverable: A comprehensive business directory dataset covering multiple categories and geographies, including public contact details and key attributes for each entry.

    Stop condition: The generated directory contains a large number of duplicate entries despite deduplication, or the coverage for certain categories/locations is unexpectedly sparse.

    Use case 3: Prospecting by Category

    Outcome: Prospecting by category and geography.

    Configure: Set "mode" to "search", "searchQuery" to a target industry (e.g., "auto repair shops"), "location" to your sales territory (e.g., "Chicago, IL"), "minReviews" to 10, "minRating" to 4.0, and "hasPhone" to true.

    Working method: Start with a focused industry and location. Use "minReviews" and "minRating" to identify high-quality prospects. Evaluate the presence of "hasPhone" and "hasWebsite" to ensure contactability. Iterate on different industries or refine location parameters.

    Deliverable: A targeted list of prospective businesses in specific categories and geographies, pre-filtered for quality metrics like ratings and reviews, with available contact information.

    Stop condition: A significant portion of the output prospects lack essential contact information (phone, website) despite filtering, or the overall quality of leads is too low.

    What breaks, and how do you design around it?

    • Over the last 30 days, 1.1% of public runs failed and 0.0% timed out. Build retries and alerting around those rates rather than assuming every run completes.

    Google commonly exposes around 120 or fewer result cards in a single public search feed. If your project requires systematic geographic coverage beyond this limit for a single search window, use the Google Maps Area Scanner instead. When hitting the "maxResults" ceiling for a search, consider refining your search terms or locations to narrow the focus and obtain more relevant records within that limit. For transient page failures, the Actor employs retries; if a page remains degraded after retries, it prioritizes emitting the richest single observed row rather than discarding the result entirely.

    When should you not use Google Maps Scraper?

    Do not use this Actor if your primary need is to extract email addresses and social media links directly from the websites linked in Google Maps listings. This Actor focuses on data directly visible on Google Maps pages and does not perform website crawling for deeper contact information. For that specific requirement, a more suitable alternative would be the Google Maps Email Extractor, which is designed to crawl business websites for contact details. Similarly, if your goal is to obtain comprehensive historical review data, including reviewer profiles and owner responses, this Actor is not the right fit; consider using the Google Maps Reviews Scraper instead. Furthermore, for highly specific geographic analysis requiring full coverage of an area beyond the typical 120-result limit of a single Google Maps search, the Google Maps Area Scanner offers a grid-based approach to ensure complete data extraction across a defined region. This Actor is also not recommended if you need to resolve timezones for coordinates; the Google Maps Timezone & Local Time Lookup is specifically built for that purpose.

    What should you check before trusting the output?

    • Check for missing "website" or "phone" fields if these are critical for your use case, as Google does not expose them for all businesses.
    • Validate that "totalScore" and "reviewsCount" are numeric and within expected ranges (1-5 for rating, non-negative for reviews).
    • Ensure that "permanentlyClosed" is accurately true for businesses that should be skipped if you set "includeClosed" to false.
    • Verify the "categoryName" field for any unexpected or unhelpful categories that might need to be added to "excludeCategories".
    • Confirm that the "placeId" field is present and correctly formatted (starts with ChIJ) for deduplication or external lookups.
    • Monitor the output for any records where only card-level data is returned (missing detail-only fields like coordinates or hours) and determine if this is acceptable for your analysis.

    None of this proves a record is correct. It gives a scheduled Google Maps Scraper run defined points where it should stop instead of quietly passing bad data downstream.

    Frequently asked questions

    What is the typical success rate for this Google Maps scraper?

    In the last 30 days, this Actor achieved a 98.9% success rate, with 86 out of 87 runs completing successfully. This indicates a high level of reliability for data extraction from Google Maps, making it suitable for scheduled, unattended operation. You can generally expect about 1 in a hundred runs to fail or time out.

    How much does it cost to use this Google Maps Actor on the free plan?

    On Apify's free plan, this Actor costs $0.005 per result, which translates to $5.00 per 1,000 results. Apify's free plan includes $5.00 of monthly usage, allowing you to collect up to 1,000 results of this Actor without needing a credit card, before platform usage and run-start fees. A run with the example input that caps at 5 results will cost at most $0.025 in result charges.

    Can I get email addresses or social media links from business websites?

    No, this Actor focuses on extracting data directly visible on public Google Maps pages. It does not crawl linked business websites to extract email addresses or social media links. If your workflow specifically requires these contact details from websites, consider using the Google Maps Email Extractor for that purpose.

    Are all output fields always present in every record?

    No, fields are conditional. Google publishes different information for different businesses and regions. If a business does not have a website, phone number, rating, hours, or photos, those specific fields will simply be omitted from the record rather than appearing as null or fabricated values. This ensures the integrity of the data provided.

    What should I do if a search returns fewer than 120 results?

    Google Maps commonly exposes around 120 or fewer result cards in a single public search feed, even if more businesses match your query. The Actor will follow this feed until it is exhausted or your "maxResults" ceiling is reached. If you need systematic geographic coverage beyond this limit, particularly for comprehensive market mapping, the Google Maps Area Scanner is designed to bypass this limitation through grid-based scanning.

    Where to go next

    When you are ready to run it, open Google Maps Scraper on Apify; the free plan covers up to 1,000 results a month.

    Start with the Google Maps Scraper Actor page for the current input schema, pricing tier, and run history.

    It is part of the Google Maps Scraping Suite, which puts every related Actor on one page with its price and run history.

    If you are comparing approaches rather than committing to one Actor, these category pages list every option we publish:

    Other Actors we maintain for related data:

    Related guides:

    Resources

    • Actor documentation, input schema, and pricing: verified against the published Actor on 2026-09-27.

    • Actor last updated by its maintainers on 2026-09-27.

    • Run outcome figures cover the 30 day public window ending 2026-09-27.

    • Google Maps Scraper on Apify

    Featured actors

    Google Maps Scraper

    Extract business data from Google Maps including ratings, reviews, contact info, prices, coordinates, and images. Fast scraper with automatic pagination for any location or search query.

    Run on Apify ↗