Google Maps scraping with Apify: structured business listings in minutes
Quick answer: Apify's Google Maps Scraper extracts business names, addresses, phones, reviews, coordinates, and Place IDs from Google Maps. No code required. Run it from the Apify Store and export CSV or JSON.
Run the Google Maps Scraper now →
Compare best Google Maps scrapers →
What you can extract
| Data | Notes |
|---|---|
| Business name | Primary title |
| Address, city, postal code, country | Geocoding-friendly |
| Phone (formatted + raw) | CRM dialer ready |
| Website URL | Key for email enrichment |
| Rating, review count | Quality signals |
| Categories | ICP filtering |
| Opening hours | Ops / outreach timing |
| Lat/lng, Place ID, Maps URL | Dedupe, deep links |
Emails are usually not in the default Maps payload. Plan a second Actor for email extraction.
What you need
- Apify account: free plan includes $5/month in credits for tests.
- Google Maps Scraper: popular Store Actor compass/crawler-google-places (pay-per-event; see pricing change notes).
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):
| Input | Example | Tip |
|---|---|---|
| Search queries | Italian restaurants, HVAC repair | Prefer concrete categories over businesses |
| Location | Madrid, Spain / Miami, FL | Tie query + location together for ICP fit |
| Max results | 100–500 | Raise 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.
| Field | Description | Example |
|---|---|---|
| title | Business name | La Trattoria di Mario |
| categoryName | Business category | Italian Restaurant |
| address | Full street address | Calle Gran Vía, 42, 28013 Madrid |
| neighborhood | Neighborhood or district | Centro |
| website | Business website URL | https://trattoriamario.es |
| phone | Phone number | +34 912 345 678 |
| totalScore | Average Google rating | 4.6 |
| reviewsCount | Number of Google reviews | 847 |
| openingHours | Weekly opening hours | [{day, hours}, ...] |
| location | GPS coordinates (lat/lng) | {lat: 40.42, lng: -3.70} |
| placeId | Unique Google Place ID | ChIJN1t_tDeu... |
| url | Direct Google Maps link | https://google.com/maps/... |
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/..."
}
Pricing estimate
- Open the Actor Pricing tab on crawler-google-places.
- Note price per event (e.g., per place) plus any run-start fee.
- Multiply by expected number of places for a rough total.
Rates change, so always confirm in the Store before budgeting. Free credits: Apify free plan.
Use cases
| Use case | How Maps data helps |
|---|---|
| Lead generation | Build territory lists, then enrich websites: full pipeline |
| Market research | Density of competitors, ratings, hours |
| Competitive analysis | Compare footprints and review volume by area |
Next steps
- Enrich emails: Extract emails from Google Maps listings (blog)
- Automate: Apify + Make, n8n, or Zapier
- API: Trigger the same Actor via Apify API for scheduled jobs
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.
It uses pay-per-event pricing; exact rates are on the Actor’s Pricing tab. Start with small max results and multiply place count × per-place price. 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).





