Skip to main content

Google Maps scraping with Apify: structured business listings in minutes

Quick answer: Apify's Google Maps Scraper (compass/crawler-google-places) extracts business names, addresses, phones, reviews, coordinates, and Place IDs from Google Maps — no code required. Pricing is pay-per-event: Free-plan accounts pay $0.004 per place scraped, about $4 per 1,000 places (verified 2026-09-09). Run it from the Apify Store and export CSV or JSON.

Run the Google Maps Scraper now →
Compare best Google Maps scrapers →

Time~5–15 min first run
Cost$0.004/place on Free plan (pay-per-event)
DifficultyBeginner
OutputCSV / Excel / JSON

What you can extract​

DataNotes
Business namePrimary title
Address, city, postal code, countryGeocoding-friendly
Phone (formatted + raw)CRM dialer ready
Website URLKey for email enrichment
Rating, review countQuality signals
CategoriesICP filtering
Opening hoursOps / outreach timing
Lat/lng, Place ID, Maps URLDedupe, deep links

Emails are usually not in the default Maps payload. Plan a second Actor for email extraction.


What you need​

Open Google Maps Scraper input form →


Step 1: Open the Actor​

Go to the Google Maps Scraper page and click Try for free (or Open Console) to reach the run UI.

Browse alternatives anytime: Google Maps scrapers in the Store.


Step 2: Configure inputs​

Typical fields (names can vary slightly by Actor version, so use the in-UI schema as source of truth):

InputExampleTip
Search queriesItalian restaurants, HVAC repairPrefer concrete categories over businesses
LocationMadrid, Spain / Miami, FLTie query + location together for ICP fit
Max results100–500Raise gradually after a successful small run

Result caps: Broad single queries often hit practical listing limits (commonly around ~120 visible results). Use multiple specific queries, neighborhoods, or grid-style searches for larger coverage. Context: Google Places / Maps limits.


Step 3: Optional settings​

  • Language / region: match your market.
  • Filters: rating thresholds, open-now, etc., if exposed.
  • Enrichment: some flows offer add-ons for extra fields; emails usually need a separate enrichment Actor.

Step 4: Run and monitor​

Click Start. Watch the Log tab for blocked pages or input errors. When status is Succeeded, open Storage → Dataset.

If runs are blocked or unstable at scale, review the Actor README and consider Apify Proxy.


Step 5: Download output​

From the dataset view, export CSV, Excel (XLSX), JSON, or other supported formats. Import to Sheets, your CRM, or a downstream enrichment workflow.

Output Data Fields
FieldDescriptionExample
titleBusiness nameLa Trattoria di Mario
categoryNameBusiness categoryItalian Restaurant
addressFull street addressCalle Gran Vía, 42, 28013 Madrid
neighborhoodNeighborhood or districtCentro
websiteBusiness website URLhttps://trattoriamario.es
phonePhone number+34 912 345 678
totalScoreAverage Google rating4.6
reviewsCountNumber of Google reviews847
openingHoursWeekly opening hours[{day, hours}, ...]
locationGPS coordinates (lat/lng){lat: 40.42, lng: -3.70}
placeIdUnique Google Place IDChIJN1t_tDeu...
urlDirect Google Maps linkhttps://google.com/maps/...
Sample output (one place, JSON)

Each item in your dataset is one JSON object; field names match the Actor version you run.

{
"title": "La Trattoria di Mario",
"categoryName": "Italian Restaurant",
"address": "Calle Gran Vía, 42, 28013 Madrid, Spain",
"neighborhood": "Centro",
"street": "Calle Gran Vía, 42",
"city": "Madrid",
"postalCode": "28013",
"state": "Madrid",
"countryCode": "ES",
"website": "https://trattoriamario.es",
"phone": "+34 912 345 678",
"phoneUnformatted": "+34912345678",
"totalScore": 4.6,
"reviewsCount": 847,
"openingHours": [
{ "day": "Monday", "hours": "12:00 PM – 11:00 PM" },
{ "day": "Tuesday", "hours": "12:00 PM – 11:00 PM" }
],
"location": { "lat": 40.42, "lng": -3.7025 },
"placeId": "ChIJN1t_tDeuEmsRUsoyG83frY4",
"url": "https://www.google.com/maps/place/..."
}

How much does it cost?​

The Actor is pay-per-event, priced per place scraped rather than per minute of run time. A Free-plan account pays $0.004/place subject to change · verified 2026-09-09 for the base scrape — about $4 per 1,000 places — and the rate drops automatically as your paid-plan tier goes up:

EventFree planDiamond tier
Place scraped (base)$0.004$0.000756
+ Filter applied (per filter)$0.001$0.000189
+ Extra place details$0.002$0.000378
+ Contact/email enrichment$0.002$0.000378
+ Review scraped$0.0005$0.0000945
+ Image scraped$0.0005$0.0000945

Pulled live from the Actor's own pricing API on 2026-09-09 — the same numbers Apify's console shows you before you run it. Add-ons only bill when you turn that field on, so a plain name/address/phone run costs just the base rate. Multiply the base rate by the number of places you expect, add any add-ons you've enabled, and check the Actor's Pricing tab before a large run since rates do change over time.

When this isn't worth automating: if you need a few dozen listings once, copying them by hand from Google Maps is faster than configuring an Actor. This setup earns its keep once you're pulling hundreds of places on a recurring basis, or feeding a pipeline that would otherwise mean a lot of manual copy-paste.

Free credits: Apify free plan covers testing this without a card.


Use cases​

Use caseHow Maps data helps
Lead generationBuild territory lists, then enrich websites: full pipeline
Market researchDensity of competitors, ratings, hours
Competitive analysisCompare footprints and review volume by area

Next steps​

Frequently Asked Questions

Public business listings are often treated as public data in many jurisdictions, but laws and Google’s terms vary by use case and volume. Read Is web scraping legal? and restrict to legitimate business purposes.

No. Configure the Actor in the browser, click Start, and download CSV or JSON. Developers can also start runs via the Apify API.

Pay-per-event pricing: Free-plan accounts pay $0.004 per place scraped, about $4 per 1,000 places, verified 2026-09-09 on the Actor's pricing API. Add-ons (filters, extra details, contact enrichment, reviews, images) bill separately and only when enabled. The free tier includes $5/month in credits for experiments.

Usually not directly from the base Maps dataset. Use website URLs from the export with a contact or email extractor Actor, or follow Extract emails from Google Maps listings.

Common exports include CSV, Excel, JSON, JSONL, XML, and RSS. Pick what your CRM or BI tool accepts.

Google Maps often returns a limited window per search. Use narrower queries, multiple locations, or additional runs rather than one giant generic search.

Yes. Use Apify Schedules in the console or call the Actor on a cron via the API so lists stay fresh for lead generation.

Common mistakes and fixes

Fewer results than max results (often ~120 per query).

Split cities or neighborhoods, use specific categories, add multiple queries, or follow Apify docs on Maps listing limits.

Run fails or times out.

Lower max results, retry off-peak, read the run log; enable or upgrade proxies if the Actor recommends it ([Apify Proxy](https://apify.com/proxy?fpr=use-apify)).

No email column in the export.

Emails usually need a separate enrichment Actor or add-on; see [Extract emails from Google Maps listings](/blog/extract-emails-google-maps-2026).