Google Maps Business & Contact Scraper avatar

Google Maps Business & Contact Scraper

Pricing

from $5.00 / 1,000 results

Go to Apify Store
Google Maps Business & Contact Scraper

Google Maps Business & Contact Scraper

Scrape Google Maps businesses with emails, reviews, images & social links. 33% cheaper than alternatives — emails included in base price. Compass-compatible input.

Pricing

from $5.00 / 1,000 results

Rating

0.0

(0)

Developer

bootforge

bootforge

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Google Maps Scraper — Extract Business Emails, Reviews & Contacts

Extract business data, emails, phone numbers, reviews, images, and social links from Google Maps. Get 24 data fields per business at $5 per 1,000 results — emails included free, no add-on charges. Drop-in replacement for compass/crawler-google-places.

How to Scrape Google Maps for Business Leads

  • $5 per 1,000 results — emails, social links, reviews, images all included (compass charges $6+ with emails)
  • Fast — HTTP-first pipeline, no browser needed for basic scrapes (~1s per query)
  • Deep email extraction — homepage + /contact + /about pages, with personal vs generic classification
  • 24 data fields — more than any other scraper, including neighborhood, timezone, price level, and popular times
  • Compass-compatible — same input field names, easy to switch
  • Zero duplicates — deduplication by Google Maps place ID
  • Open source — inspect the code, no black box

Use Cases

  • Lead generation — Build prospect lists with verified emails and phone numbers for any industry or location
  • Local SEO monitoring — Track ratings, review counts, and ranking positions for your clients or competitors
  • Market research — Analyze business density, pricing, and categories across geographic areas
  • Sales prospecting — Find businesses without websites or with low ratings that need your services
  • Real estate analysis — Map businesses around properties to assess neighborhood commercial activity
  • Franchise expansion — Identify underserved markets by analyzing competitor locations and density

What Data Can You Extract? (24 fields)

Always included (from HTTP — instant, no browser): name, address, phone, website, rating, categories, coordinates, place_id, google_maps_url, neighborhood, timezone, country_code, business_photo, open_status, scraped_at

With scrapeContacts: true (website crawl): emails, email_type (personal/generic), social_links (Facebook, Instagram, LinkedIn, X, YouTube, TikTok)

With maxReviews > 0 or maxImages > 0 (detail page): review_count, hours (full weekly schedule), reviews (author, rating, text, time, owner response), images (Google Maps photo URLs), price_level ($-$$$$), popular_times (current busy status)

Quick Start

{
"searchStringsArray": ["dentist"],
"locationQuery": "Austin, TX",
"maxCrawledPlacesPerSearch": 20,
"scrapeContacts": true
}

Switching from Compass / crawler-google-places?

Same field names — copy your config:

searchStringsArray, locationQuery, maxCrawledPlacesPerSearch, language, scrapeContacts, scrapePlaceDetailPage, placeMinimumStars, skipClosedPlaces, maxReviews, maxImages, scrapeSocialMediaProfiles

Input Parameters

ParameterDefaultDescription
searchStringsArrayrequiredSearch terms
locationQuerynullLocation (e.g., Austin, TX)
maxCrawledPlacesPerSearch100Max results per query
scrapeContactstrueExtract emails & social links from business websites
scrapeSocialMediaProfilesall trueToggle per platform
maxReviews0Reviews per business (0 = skip, saves time)
reviewsSortnewestSort: newest, mostRelevant, highestRating, lowestRating
maxImages0Images per business (0 = skip, saves time)
placeMinimumStars""Min rating filter (e.g., 4, 4.5)
skipClosedPlacestrueSkip permanently closed businesses
websiteallPlacesFilter: allPlaces, withWebsite, withoutWebsite
languageen19 languages supported
geo_splitfalseAuto-split large areas into grid
geo_split_max_cells100Max grid cells (auto-adjusts)
max_concurrency1Parallel detail pages
proxynullOptional proxy config

Sample Output — Google Maps Business Data

{
"place_id": "ChIJb5gBC-u0RIYRHkntaUcdJGs",
"name": "ATX Family Dental",
"address": "1700 S 1st St, Austin, TX 78704, United States",
"phone": "+1 512-717-3147",
"website": "https://www.atxfamilydental.com/",
"emails": ["info@atxfamilydental.com"],
"email_type": "generic",
"rating": 4.9,
"review_count": 802,
"categories": ["Dentist", "Cosmetic dentist", "Pediatric dentist"],
"hours": {"Monday": "8 AM–4 PM", "Tuesday": "8 AM–4 PM"},
"latitude": 30.2482229,
"longitude": -97.7559705,
"google_maps_url": "https://www.google.com/maps/place/...",
"social_links": {
"facebook": "https://facebook.com/...",
"instagram": "https://instagram.com/..."
},
"reviews": [
{
"author": "John Smith",
"rating": 5,
"text": "Great dentist!",
"time": "2 months ago",
"response": "Thank you!"
}
],
"images": ["https://lh3.googleusercontent.com/..."],
"neighborhood": "Bouldin Creek",
"timezone": "America/Chicago",
"country_code": "US",
"business_photo": "https://lh5.googleusercontent.com/...",
"open_status": "Open · Closes 4 PM",
"price_level": "$$",
"popular_times": "Not busy",
"scraped_at": "2026-03-27T01:00:00+00:00"
}

How Much Does It Cost to Scrape Google Maps?

$0.005 per result + $0.001 per run. Emails, social links, reviews, images — all included.

ResultsCostvs Compass (with emails)
100$0.50$0.61 (18% more)
1,000$5.00$6.01 (17% more)
10,000$50.00$60.01 (17% more)

Low start price — run as often as you want.

Proxy Configuration

Works without proxy for small runs. For 100+ results, configure a proxy:

// Apify managed proxy
{"provider": "apify", "group": "RESIDENTIAL"}
// Bright Data
{"provider": "brightdata", "username": "YOUR_USER", "password": "YOUR_PASS", "zone": "residential", "country": "US"}
// Oxylabs
{"provider": "oxylabs", "username": "YOUR_USER", "password": "YOUR_PASS", "proxy_type": "residential", "country": "US"}
// SmartProxy
{"provider": "smartproxy", "username": "YOUR_USER", "password": "YOUR_PASS", "proxy_type": "residential", "country": "US"}
// Any proxy URL
{"provider": "raw_urls", "urls": ["http://user:pass@proxy.example.com:8080"]}

Cost Estimator

Use caseConfigEst. cost
100 businesses, basic datadefault~$0.50
1,000 businesses with emailsscrapeContacts: true~$5.00
1,000 businesses + 5 reviews eachmaxReviews: 5~$5.00
10,000 businesses with emails+ geo_split: true~$50.00

All costs include emails, social links, reviews, and images. No add-ons.

Error Handling

SituationWhat happens
Proxy failsAuto-retries without proxy, logs warning
Google blocks requestFalls back from HTTP to Playwright browser
Place detail page timeoutSkips place, continues with next (60s timeout)
Website unreachable (email extraction)Skips emails for that business, returns other data
0 search resultsReturns empty dataset, no charge
Google consent screenAuto-dismissed, scraping continues

Failed places are logged but don't stop the run. You always get partial results.

Frequently Asked Questions

Do I need a proxy to scrape Google Maps? No for small runs (under 100 results). For larger scrapes, configure a residential proxy to avoid rate limits. See proxy config above.

How many Google Maps results can I scrape? ~120 per search query. Enable geo_split: true to automatically split large areas into a grid and scrape thousands of results.

Why are some emails missing? Not all businesses list emails on their website. Service businesses (law firms, dentists, plumbers) typically have better email coverage than restaurants or retail shops.

How do I extract Google Maps reviews? Set maxReviews to any number greater than 0. Each review includes author name, star rating, review text, date, and owner response.

How fast is the Google Maps scraper? Basic data: ~1s per query. With email extraction: ~5s per business. With reviews and images: slower (requires browser rendering).

Can I cache Google Maps data between runs? Yes. Set cache_provider: "apify" to reuse detail page data across runs. Only places that changed get re-scraped.