Google Maps Business Scraper
Pricing
from $3.00 / 1,000 business listings
Google Maps Business Scraper
Find local businesses by search term, such as "dentist in Chicago": name, address, phone, website, email, opening hours and coordinates. Free OpenStreetMap search by default; add your Google Places API key for Google ratings and reviews.
Pricing
from $3.00 / 1,000 business listings
Rating
0.0
(0)
Developer
Technical Dost Solutions
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
0
Monthly active users
8 days ago
Last modified
Categories
Security
Limited permissionsShare
What this Actor does
Find local businesses by category and place, e.g. dentist in Chicago or cafe in Seattle, and get name, address, phone, website, email, opening hours and coordinates as clean, structured JSON.
The Actor has three modes:
- Free search mode (default): enter search terms and run. Results come from OpenStreetMap, so no API key is needed. Works best with a category plus a city, such as
restaurant in Brooklyn,hairdresser in Torontoorhotel in Paris(up to 50 places per search term). - Google Places API mode: add your own Google Places API key to the same search terms to get live Google Maps data, including ratings, review counts and reviews, through the official API.
- Business page mode: paste business website or location pages; the Actor reads their schema.org
LocalBusinessdata (name, address, phone, hours, rating).
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:openstreetmapfor free search mode,places_apifor the Google Places API, orstructured_datafor business pages.confidenceScore: Heuristic confidence based on data source and completeness.missingFields: Output fields that were not available from the source.
Sample input
{"searchTerms": ["dentist in Chicago"],"maxItems": 20}
Sample output
{"businessName": "Dentistry at Millennium Park","category": "dentist","address": "8 South Michigan Avenue, Chicago, Illinois, 60603, United States","latitude": 41.8819317,"longitude": -87.6248124,"phone": "+1 224-249-5977","website": "https://www.datmp.com/","email": "info@datmp.com","rating": null,"reviewCount": null,"priceLevel": null,"hours": ["Mo,We 09:00-16:30; Tu,Th 08:00-16:30; Fr 08:00-14:00 \"by appointment\"; Sa,Su off"],"photos": [],"reviews": [],"placeUrl": "https://www.openstreetmap.org/node/14212143300","sourceUrl": "https://nominatim.openstreetmap.org","detectedAt": "2026-10-21T12:09:34.192Z","extractionMethod": "openstreetmap","confidenceScore": 0.85,"missingFields": [],"searchTerm": "dentist in Chicago"}
How to use
Run this Actor on Apify with search terms such as dentist in Chicago (free), optionally with a Google Places API key for Google data, or with public business page URLs. 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.003 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.
Use Google Maps Business Scraper with AI agents (MCP)
Give Claude, ChatGPT, Cursor, VS Code or any MCP client this Actor as a tool through the hosted Apify MCP server. The agent sees the input fields with descriptions and example values, runs the Actor, and reads the results.
MCP server URL (this Actor only):
https://mcp.apify.com/?tools=technicaldost/google-maps-business-scraper
Claude Code:
$claude mcp add --transport http apify "https://mcp.apify.com/?tools=technicaldost/google-maps-business-scraper" --header "Authorization: Bearer YOUR_APIFY_TOKEN"
Cursor, VS Code, Claude Desktop and other clients (mcp.json or the client's MCP settings):
{"mcpServers": {"apify": {"url": "https://mcp.apify.com/?tools=technicaldost/google-maps-business-scraper","headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }}}}
Clients that support sign-in (such as Claude.ai connectors) can use the URL without a token and log in to Apify instead. Get your token in Apify Console → Settings → API & Integrations, or generate a ready config for your client at mcp.apify.com. In the agent the tool is named technicaldost--google-maps-business-scraper; ask it, for example, to "run Google Maps Business Scraper with {"searchTerms": ["dentist in Chicago"], "maxItems": 20}".
AI agents without an Apify account can also run and pay for this Actor per request with x402 agentic payments.
Run Google Maps Business Scraper via API
Run the Actor and get its results in one call (replace YOUR_APIFY_TOKEN):
curl -X POST "https://api.apify.com/v2/acts/technicaldost~google-maps-business-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"searchTerms": ["dentist in Chicago"], "maxItems": 20}'
Python (pip install apify-client):
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("technicaldost/google-maps-business-scraper").call(run_input={"searchTerms": ["dentist in Chicago"], "maxItems": 20})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
JavaScript / TypeScript (npm install apify-client):
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('technicaldost/google-maps-business-scraper').call({"searchTerms": ["dentist in Chicago"], "maxItems": 20});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Long runs: start them with POST /v2/acts/technicaldost~google-maps-business-scraper/runs and fetch the dataset when the run finishes, or receive a webhook.
Related Actors
- Google Maps Reviews — Extract reviews from Google Maps with sentiment analysis. Perfect for reputation management
- Google Maps Review Analyzer: Service Gaps — Analyze exported Google Maps review datasets or inline records for service-gap themes, recurring complaints an
- Google Jobs Scraper & Fresh Lead Monitor — Scrape public Google Jobs results by query and location into structured job leads with employer, source, posti
- Local Business Finder (OpenStreetMap) — Find local businesses by category and city using OpenStreetMap - a free, legal alternative to Google Maps scra
- Yellow Pages Scraper — US Business Leads, Phones & Addresses: Scrape YellowPages.com business listings by keyword and city: name, phone, full address, website, categories, rating, reviews, years in business, open…
FAQ
Can I use Google Maps Business Scraper with AI agents like Claude or ChatGPT?
Yes. Connect the Apify MCP server with ?tools=technicaldost/google-maps-business-scraper (see above) and the agent can run the Actor and read its results on its own.
Can I call Google Maps Business Scraper from my own code?
Yes. Use the REST API, or the official Python and JavaScript clients shown above. Results are available as JSON, CSV, Excel, XML or HTML.
How do I run it on a schedule?
Save your input as a task in Apify Console and add a schedule (for example, daily). Use webhooks or integrations to send each run's results onward.
Is it legal to use this Actor?
It works with publicly available data. Make sure your use complies with the source website's terms and with data protection laws such as GDPR, especially for personal data.
Something doesn't work or I need a feature. What should I do?
Open an issue in the Issues tab on this Actor's page with an example input, and we'll look into it.