Google Maps Business Scraper
Pricing
from $5.00 / 1,000 business listings
Google Maps Business Scraper
Extract business listings with reviews, hours, photos, ratings, and geo as structured JSON from public business pages (LocalBusiness schema.org) and the official Google Places API.
Pricing
from $5.00 / 1,000 business listings
Rating
0.0
(0)
Developer
Technical Dost Solutions
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
10 days ago
Last modified
Categories
Share
What this Actor does
Extract local business listings (name, contact, hours, rating, reviews, photos, and geo coordinates) as clean, structured JSON.
The Actor runs in two compliant modes:
- Structured-data mode: processes user-supplied public business listing or place pages and parses schema.org
LocalBusinessJSON-LD (includingRestaurant,Store, andOrganization). - Places API mode: when you supply a Google Places API key and search terms, the Actor uses the official Google Places Text Search API, the compliant way to get live Google Maps data.
It normalizes useful fields, deduplicates rows by business name and address, and saves structured records to the Apify dataset.
Why this Actor is useful
Teams pay for this kind of extraction because it saves manual research, builds repeatable lead lists, enriches CRMs, and turns public business data into clean, API-ready datasets, without violating Google's Terms of Service.
Who this is for
- Lead generation agencies
- Local SEO consultants
- B2B sales teams
- Market researchers
- Directory and aggregator builders
- Small business marketers
- Data enrichment teams
Common use cases
- Build local business lead lists for sales outreach
- Enrich CRM records with contact and geo data
- Monitor ratings and review counts for target businesses
- Populate local directories and aggregators
- Run local market research by category and area
Input
You must provide either startUrls or both placesApiKey and searchTerms. If neither is supplied, the Actor stops early with a clear error.
startUrls: Public business listing or place pages to extract from. Use only pages you are allowed to access without login or bypassing access controls. Do not point this atgoogle.com/maps.searchTerms: Search queries used only in Places API mode (for examplecoffee shops in Austin TX).placesApiKey: Optional Google Places API key (stored as a secret). Enables the official Places API mode.maxItems: Maximum number of rows to save.maxConcurrency: Number of pages processed in parallel. The default is intentionally conservative.includeReviews: Include public reviews (author, body, rating) when available.requestTimeoutSecs: Maximum time to spend on a single page or API request.proxyConfiguration: Optional Apify proxy configuration where permitted by your source review.
Output
businessName: Business or organization name.category: Business category or schema.org type.address: Street, locality, region, and country as published.latitude/longitude: Geo coordinates when available.phone: Public phone number.website: Public website URL.rating: Aggregate rating value.reviewCount: Number of ratings or reviews.priceLevel: Price range indicator.hours: Opening hours lines when available.photos: Photo URLs or references.reviews: Public reviews (author, reviewBody, ratingValue) whenincludeReviewsis enabled.placeUrl: Canonical place or map URL.sourceUrl: URL where the data was extracted.detectedAt: Timestamp when this Actor extracted the row.extractionMethod:structured_datafor JSON-LD listings, orplaces_apifor the Google Places API.confidenceScore: Heuristic confidence based on data source and completeness.missingFields: Output fields that were not available from the source.
Sample input
{"startUrls": [{"url": "https://example.com/restaurants/blue-harbor-cafe"}],"maxItems": 50,"maxConcurrency": 3,"includeReviews": true,"requestTimeoutSecs": 30}
Sample output
{"businessName": "Blue Harbor Cafe","category": "Restaurant","address": "120 Harbor St, Austin, TX, US","latitude": 30.2672,"longitude": -97.7431,"phone": "+1-512-555-0142","website": "https://blueharborcafe.example.com","rating": 4.6,"reviewCount": 318,"priceLevel": "$$","hours": ["Monday, Tuesday, Wednesday, Thursday 08:00-21:00","Friday, Saturday 08:00-23:00"],"photos": ["https://example.com/photos/blue-harbor-1.jpg"],"reviews": [{"author": "Jordan M.","reviewBody": "Great coffee and harbor views. Friendly staff.","ratingValue": 5}],"placeUrl": "https://blueharborcafe.example.com","sourceUrl": "https://example.com/restaurants/blue-harbor-cafe","detectedAt": "2026-06-27T00:00:00.000Z","extractionMethod": "structured_data","confidenceScore": 0.9,"missingFields": []}
How to use
Run this Actor on Apify with public listing URLs, or with a Google Places API key plus search terms. Export the dataset as JSON, CSV, Excel, or through the Apify API, then connect the output to Google Sheets, Make, Zapier, a webhook, your CRM, or an internal dashboard. For monitoring, save the input as an Apify task and schedule recurring runs.
Pricing
This Actor is designed for pay-per-event pricing at $0.005 per listing saved to the dataset. You pay only for the business rows you extract.
Best practices
- Provide reviewed public listing URLs, or use Places API mode for live Google Maps data.
- Prefer pages with schema.org
LocalBusinessJSON-LD for the highest-quality structured output. - Keep
maxConcurrencylow for smaller websites. - Use specific
searchTerms(category plus location) in Places API mode to keep results relevant. - Review source website rules and Google Places API terms before scheduling recurring runs.
Compliance and responsible use
This Actor does not scrape google.com/maps directly, which violates Google's Terms of Service. Instead it relies on two compliant sources: public schema.org LocalBusiness JSON-LD published on pages you are allowed to access, and the official Google Places API (which requires your own API key and is billed by Google).
It is for public data only. It must not be used to bypass logins, paywalls, CAPTCHAs, or security systems, collect private or sensitive personal data, or support spam or abuse. You are responsible for following applicable laws, Google's API terms, and source website rules.
Limitations
- Output quality depends on the public structured data available on the source pages.
- Places API mode requires your own Google Places API key and is subject to Google's quotas and billing.
- Some fields may be empty when the source does not publish them; missing values are reported in
missingFields, never invented. - The Actor does not claim support for any specific third-party platform beyond the official Places API.
- Website markup and access policies can change.
Troubleshooting
- Empty output in structured-data mode usually means the page has no public
LocalBusinessJSON-LD. - A "No usable input" error means you provided neither
startUrlsnor bothplacesApiKeyandsearchTerms. - Places API errors usually indicate an invalid key, disabled API, or exceeded quota.
- Slow runs can usually be improved by lowering
maxConcurrency.
Changelog
- v0.1.0: Initial release with structured-data and Google Places API modes.