Google Maps Scraper avatar

Google Maps Scraper

Pricing

from $0.90 / 1,000 results

Go to Apify Store
Google Maps Scraper

Google Maps Scraper

Scrape Google Maps business search results — name, type, rating, review count, address, phone, website.

Pricing

from $0.90 / 1,000 results

Rating

0.0

(0)

Developer

Elorm Dokosi

Elorm Dokosi

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

20 hours ago

Last modified

Categories

Share

Google Maps Scraper (Apify Actor)

Scrapes Google Maps business search results — name, type, rating, review count, address, phone, and website.

Input

FieldTypeDefaultNotes
querystringRequired. What to search, e.g. "coffee shops"
locationstringWhere to search, e.g. "London". Combined as "<query> in <location>". Optional
maxResultsintegerMax results to return. Leave empty to return all available
scrapeContactDetailsbooleanfalseAdd emails + social profiles for each business (slower, more proxy data)
scrapePlaceDetailsbooleanfalseAdd full hours, price, description, attributes, links & more for each business (slower, more proxy data)
scrapeReviewsbooleanfalseAdd the top reviews (author, rating, time, text) for each business. Implies scrapePlaceDetails. Ignored when maxReviews is set
maxReviewsinteger0Page through and return up to N reviews per business. 0 = off. Much slower (browser-based); supersedes scrapeReviews
proxyConfigurationobjectRESIDENTIALProxy settings (residential recommended)

Output

One dataset item per business:

{
"business_name": "Monmouth Coffee Company",
"business_type": "Coffee shop",
"average_rating": "4.5",
"review_count": 3069,
"address": "27 Monmouth St, London WC2H 9EU, United Kingdom",
"phone": "+44 20 7232 3010",
"website": "http://www.monmouthcoffee.co.uk/",
"latitude": 51.5055334,
"longitude": -0.0914069,
"place_id": "ChIJ94DTm1cDdkgRibmgxzXy2EQ",
"feature_id": "0x4876037c9bd380f7:0x44d8f235c7a0b989",
"google_maps_url": "https://www.google.com/maps/place/?q=place_id:ChIJ94DTm1cDdkgRibmgxzXy2EQ",
"opening_hours": { "Monday": "7:30 am–6 pm" }
}

When scrapeContactDetails is enabled, each item also includes contact fields (found from the business's website; null/empty when the site doesn't list them):

{
"emails": ["info@prufrockcoffee.com"],
"facebook": "https://www.facebook.com/Prufrockcoffee",
"instagram": "https://www.instagram.com/prufrockcoffee/",
"twitter": "https://twitter.com/PrufrockCoffee",
"linkedin": null,
"youtube": null,
"tiktok": null,
"pinterest": null
}

When scrapePlaceDetails is enabled, each item is filled out with everything Google publishes for the place — full week hours, pricing, an editorial summary, booking links, and the complete grouped attribute list. Any field Google doesn't publish is simply omitted (e.g. price is absent for banks/museums, menu_url for non-restaurants):

{
"opening_hours": {
"Monday": "11:30 AM–9:30 PM",
"Tuesday": "11:30 AM–9:30 PM",
"Wednesday": "11:30 AM–9:30 PM",
"Thursday": "11:30 AM–10:30 PM",
"Friday": "11:30 AM–10:30 PM",
"Saturday": "11:30 AM–10:30 PM",
"Sunday": "11:30 AM–9:30 PM"
},
"price_level": "$$$$",
"price_description": "Expensive",
"description": "High-end New American meals on 60th floor",
"plus_code": "PX5R+5C New York",
"timezone": "America/New_York",
"menu_url": "https://www.manhattarestaurant.com/restaurant-menu/",
"reservation_url": "https://www.opentable.com/restaurant/profile/1021741",
"order_url": "https://www.ubereats.com/store/...",
"attributes": {
"Service options": ["Dine-in", "Delivery", "Outdoor seating"],
"Accessibility": ["Wheelchair accessible entrance", "Wheelchair accessible restroom"],
"Offerings": ["Alcohol", "Coffee", "Vegan options", "Vegetarian options"],
"Dining options": ["Lunch", "Dinner", "Brunch", "Catering"],
"Amenities": ["Bar onsite", "Restroom", "Wi-Fi", "Gender-neutral restroom"],
"Atmosphere": ["Cozy", "Romantic", "Upscale"],
"Crowd": ["Groups", "LGBTQ+ friendly", "Tourists"],
"Planning": ["Accepts reservations", "Reservations required"],
"Payments": ["Credit cards", "Debit cards", "NFC mobile payments"],
"Children": ["Good for kids", "High chairs", "Kids' menu"],
"Parking": ["Paid street parking"],
"From the business": ["Identifies as women-owned"]
}
}

The attributes groups vary by place type (a museum has Highlights, Crowd, Planning; a shop has Service options, Payments, Recycling, etc.).

When scrapeReviews is enabled (top reviews) or maxReviews is set (up to N reviews), each item includes a reviews array:

{
"reviews": [
{
"author": "Joe Hunt",
"author_review_count": 42,
"rating": 5,
"relative_time": "2 months ago",
"text": "The guest roast Lumen coffee from Colombia was amazing. Great service too.",
"profile_url": "https://www.google.com/maps/contrib/1234567890"
}
]
}

Run locally

echo '{ "query": "coffee shops", "location": "London" }' \
> storage/key_value_stores/default/INPUT.json
apify run

Results land in storage/datasets/default/. (Add "maxResults": 40 to cap the number of results; omit it to get everything.)

Deploy

apify login
apify push

Monetization (pay-per-event)

The actor emits pay-per-event charge events so the premium enrichments bill only when used. Configure prices for these event names under the actor's Monetization → Pay per event settings in the Apify Console:

EventPrice (live)ChargedWhen
apify-default-dataset-item (primary)$0.90 / 1,000per business returnedalways (built-in, automatic)
place-details$2.50 / 1,000per business enrichedscrapePlaceDetails / scrapeReviews
review$2.00 / 1,000per review returnedscrapeReviews / maxReviews
contact-details$2.50 / 1,000per business enrichedscrapeContactDetails
apify-actor-start$0.00005per runalways (built-in)

Pricing model is pay-per-event with platform usage included (the customer pays only the event prices; compute + proxy are absorbed). The place-details, review and contact-details events run a browser / crawl websites, so their prices are set above raw proxy + compute cost.

The base per-result charge is Apify's built-in apify-default-dataset-item event (billed automatically on dataset writes); the three custom events above meter the premium enrichments on top. Charges are best-effort: until the pay-per-event pricing is configured in the Console, the events are ignored and runs are unaffected.

Notes

  • Proxies recommended. The input defaults to the RESIDENTIAL Apify Proxy group; keep it for best results.
  • Leave maxResults empty to return all available results; set it to cap the output.