Google Maps Scraper avatar

Google Maps Scraper

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Google Maps Scraper

Google Maps Scraper

Extracts rich place data from Google Maps at lightning speed ⚡ .. including names, addresses, phone numbers, websites, ratings, reviews, and precise coordinates 📍. Run it on one or multiple search queries and get clean, reliable results in seconds 🚀

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

Mina

Mina

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Extract business listings from Google Maps — name, address, phone number, website, rating, review count, coordinates, and place ID — for any list of search queries you give it. No API key, no quotas, no Places API billing.

What does Google Maps Scraper do?

This Actor scrapes Google Maps results pages directly. For each query you submit (e.g. "restaurants in Miami" or "marketing agencies near Buffalo, New York"), it walks the full paginated result set and saves every place it finds as a structured record in your Apify dataset.

Run it ad-hoc from the Apify Console, schedule it, or call it from your code via the Apify API. Pair it with Apify's proxy rotation to scale up safely.

Why use Google Maps Scraper?

  • Lead generation — build a list of local businesses (with phone, website, and address) for outbound sales or cold email.
  • Local SEO research — see who ranks for the queries that matter to your clients, in the language and country of your choice.
  • Market analysis — count restaurants, gyms, dentists, agencies in any area; compare ratings and review volume.
  • Directory building — seed a niche directory site with thousands of pre-categorized listings.
  • No Places API hassles — no quota caps, no per-request billing, no API key management.

How to use Google Maps Scraper

  1. Click Try for free (or open the Actor and click Run).
  2. In the Input tab, add one search query per line (e.g. restaurants in Miami).
  3. (Optional) Set the language and country codes to localize the results.
  4. (Optional) Set Max results per query if you want to cap each query.
  5. Click Start. Watch the log; results appear in the Output tab as they're scraped.
  6. When the run finishes, download the dataset as JSON, CSV, Excel, XML, or HTML.

Input

The Actor accepts the following input fields (defined in the Input tab):

FieldTypeDescription
queriesarray of stringsOne Google Maps search query per item. Required.
languagestringTwo-letter language code (e.g. en, es, de). Default: en.
countrystringTwo-letter country code (e.g. us, gb, fr). Default: us.
maxResultsPerQueryintegerMax places per query. 0 or empty = no limit (Google Maps typically caps at ~120).
maxConcurrencyintegerQueries scraped in parallel. Default 3. Recommended: 3–5.

Example input JSON:

{
"queries": [
"restaurants in Miami",
"marketing agencies near New York"
],
"language": "en",
"country": "us",
"maxResultsPerQuery": 0,
"maxConcurrency": 3
}

Output

Each item in the dataset is one Google Maps place. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

Example output item:

{
"id": "ChIJN1t_tDeuEmsRUsoyG83frY4",
"url_place": "https://www.google.com/maps/place/?q=place_id:ChIJN1t_tDeuEmsRUsoyG83frY4",
"title": "Joe's Stone Crab",
"category": "Seafood restaurant",
"address": "11 Washington Ave, Miami Beach, FL 33139",
"phoneNumber": "(305) 673-0365",
"completePhoneNumber": "+1 305-673-0365",
"domain": "joesstonecrab.com",
"url": "https://www.joesstonecrab.com/",
"coor": "25.768,-80.135",
"stars": 4.4,
"reviews": 6128,
"source_query": "restaurants in Miami"
}

Data table

FieldTypeDescription
idstringGoogle Maps place ID (stable, unique).
url_placestringDirect Google Maps link to the place.
titlestringBusiness name.
categorystringPrimary category (e.g. Seafood restaurant).
addressstringFull address as shown on Maps.
phoneNumberstringLocal-format phone number (may be empty).
completePhoneNumberstringInternational (E.164-style) phone number (may be empty).
domainstringBare domain of the business website (may be empty).
urlstringFull website URL (may be empty).
coorstringlatitude,longitude pair.
starsnumberAverage star rating.
reviewsnumberReview count.
source_querystringThe query that returned this place.

Duplicate places (same id) are filtered out across all queries in a single run.

How much does it cost to scrape Google Maps?

Cost depends on how many queries you run and how many results each returns. The Actor uses lightweight HTTP requests (no headless browser), so a typical query of ~120 results consumes a few seconds of compute and a small amount of bandwidth. Apify's free tier is more than enough to evaluate the Actor and run small jobs.

Tips and advanced options

  • Localize results. Set language and country to the codes for your target audience — Google's results vary significantly by locale.
  • Tune concurrency. maxConcurrency of 3–5 is a good balance. Going higher risks Google rate-limiting you for the rest of the run.
  • Use proxies for large jobs. When running many queries, attach Apify Proxy via your run settings so requests rotate IPs.
  • Cap costs with maxResultsPerQuery. If you only need the top 20 places per query, set this to 20 and the Actor will stop paginating early.
  • Schedule recurring runs. Use Apify's scheduler to refresh your dataset weekly or monthly.

FAQ, disclaimers, and support

Is scraping Google Maps legal? This Actor only requests publicly accessible Google Maps pages — the same pages any user can view in a browser. You are responsible for ensuring your use of the data complies with Google's Terms of Service and the laws of your jurisdiction. Do not collect personal data without a lawful basis.

Why are some fields empty? Not every business has a website, phone number, or rating on Google Maps. Empty strings are normal.

Why did I get fewer results than expected? Google Maps caps any single query at ~120 results regardless of how many businesses match. To get more, split your query geographically (e.g. by neighborhood or city) and submit them as separate queries.

Found a bug or have a feature request? Open an issue in the Actor's Issues tab — feedback is always welcome, and custom solutions are available on request.