Google Maps Business Scraper avatar

Google Maps Business Scraper

Pricing

from $5.00 / 1,000 business listings

Go to Apify Store
Google Maps Business Scraper

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

Technical Dost Solutions

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

10 days ago

Last modified

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 LocalBusiness JSON-LD (including Restaurant, Store, and Organization).
  • 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 at google.com/maps.
  • searchTerms: Search queries used only in Places API mode (for example coffee 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) when includeReviews is enabled.
  • placeUrl: Canonical place or map URL.
  • sourceUrl: URL where the data was extracted.
  • detectedAt: Timestamp when this Actor extracted the row.
  • extractionMethod: structured_data for JSON-LD listings, or places_api for 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 LocalBusiness JSON-LD for the highest-quality structured output.
  • Keep maxConcurrency low 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 LocalBusiness JSON-LD.
  • A "No usable input" error means you provided neither startUrls nor both placesApiKey and searchTerms.
  • 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.