Google Maps Local SEO Scraper avatar

Google Maps Local SEO Scraper

Pricing

Pay per usage

Go to Apify Store
Google Maps Local SEO Scraper

Google Maps Local SEO Scraper

Google Maps Local SEO Scraper helps agencies, marketers, and lead generation teams extract public Google Maps business data for local SEO, competitor analysis, and local lead discovery. It turn Google Maps results into structured business intelligence you can export, filter, and market research.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Shahab Uddin

Shahab Uddin

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

a day ago

Last modified

Share

Google Maps Scraper for Local SEO

Extract public Google Maps business data into structured local SEO datasets for lead generation, competitor research, citation discovery, and market analysis.

This Apify Actor helps agencies, local businesses, and growth teams collect structured Google Maps results without needing a Google Maps API key. It is designed for public business listing intelligence, not private Google Business Profile owner analytics.

Why teams use this Actor

  • Build local SEO audit datasets for a city, service area, or niche
  • Compare top ranking businesses by reviews, ratings, category usage, and profile completeness
  • Create lead lists from businesses with weak websites, low review counts, or incomplete listings
  • Benchmark a target business across related local keywords
  • Export agency-ready data to CSV or JSON for dashboards, reporting, and outreach workflows

Who this Actor is for

  • Local SEO agencies running competitor audits and recurring client reports
  • Lead generation teams sourcing local businesses with visible optimization gaps
  • Consultants mapping category saturation and city-by-city competition
  • Multi-location brands reviewing how local markets differ by query and region

What this Actor extracts

For each Google Maps result, the Actor can collect public fields such as:

  • Business name
  • Category
  • Address
  • Phone number
  • Website
  • Rating
  • Review count
  • Review snippets
  • Opening hours
  • Coordinates
  • Images or photo availability
  • Google Maps URL
  • Ranking position for the query

Depending on public availability, the Actor may also return:

  • Review text snippets
  • Competitor profile completeness signals
  • Keyword relevance indicators
  • Authority and health scores
  • Citation sources discovered from public web pages

Best use cases

Local SEO

Use this Actor to analyze businesses ranking for a keyword in a city or service area and quickly spot where profiles are strong, weak, or under-optimized.

Examples:

  • dentists in chicago
  • real estate agents in toronto
  • mobile repair near me
  • plumbers in dubai

Lead generation

Find local businesses missing key profile elements such as:

  • no website
  • low review count
  • weak ratings
  • incomplete business information

Competitor research

Compare top Google Maps competitors by:

  • ratings
  • review count
  • website presence
  • category usage
  • profile completeness

Agency reporting

Export structured Google Maps data to CSV or JSON and plug it into dashboards, client reports, prospecting systems, or internal scoring workflows.

How it works

  1. Enter a search query, such as a keyword, business type, or location-based phrase.
  2. The Actor requests public Google local results HTML.
  3. It extracts visible Google Maps business cards.
  4. It can optionally enrich businesses with extra public website, citation, and coordinate signals.
  5. It stores normalized business rows in the default dataset.
  6. It stores the full summary payload in the default key-value store as OUTPUT.

Input

The Actor accepts these main inputs:

  • query - required primary search term
  • location - optional city, area, or geo modifier
  • businessName - optional target business for benchmarking
  • keywords - optional extra keywords for rank checks
  • country - Google country code such as us, gb, ca
  • language - Google language code such as en
  • maxResults - number of Google Maps results to collect, up to 20
  • includeBusinessEnrichment - whether to enrich results from public web sources
  • includeKeywordGeoRankings - whether to check the target business across extra keywords
  • useGoogleSerpProxy - whether to use the Apify GOOGLE_SERP proxy group for Google requests

Output

The Actor stores one business per dataset item in the default dataset and now includes Apify output metadata for cleaner Console and API presentation.

Each dataset row includes fields such as:

  • query
  • location
  • rank
  • organicRank
  • businessName
  • category
  • address
  • phone
  • website
  • websiteUrl
  • rating
  • reviewCount
  • openingHours
  • coordinates
  • photos
  • relevanceScore
  • authorityScore
  • healthScore
  • profileClassification
  • googleBusinessProfileUrl
  • googleReviewsUrl
  • fetchedAt

The Actor also writes richer run-level outputs to the default key-value store:

  • OUTPUT - full actor payload
  • SUMMARY - condensed summary, opportunities, competitors, and keyword rank checks

Apify metadata files in .actor/ also define:

  • dataset schema for the default output table
  • output schema for dataset and key-value store links
  • key-value store collections for SUMMARY and OUTPUT

Example dataset item

{
"query": "dentist",
"location": "Chicago, IL",
"searchQuery": "dentist, Chicago, IL",
"country": "us",
"language": "en",
"fetchedAt": "2026-04-15T12:00:00.000Z",
"source": "google-local-results-html",
"usedGoogleSerpProxy": true,
"rank": 1,
"organicRank": 1,
"sponsored": false,
"businessName": "Smile Dental",
"category": "Dentist",
"address": "123 N Michigan Ave, Chicago, IL 60601",
"phone": "+1 312-555-0148",
"website": "smiledentalchicago.com",
"websiteUrl": "https://www.smiledentalchicago.com/",
"rating": 4.7,
"reviewCount": 186,
"reviews": [
{
"snippet": "Friendly staff and same-day appointments.",
"source": "google-local-card"
}
],
"openingHours": {
"summary": "Open until 7 PM",
"currentStatus": "Open now",
"note": "Closes 7 PM",
"weeklyHours": null
},
"coordinates": {
"lat": 41.8837,
"lng": -87.6233
},
"photos": [
{
"id": "photo-1",
"url": "https://lh3.googleusercontent.com/p/example-photo",
"source": "google-local-card"
}
],
"priceLevel": "$$",
"serviceMentions": ["Emergency dentist", "Dental implants"],
"googleBusinessProfileUrl": "https://www.google.com/maps/search/?api=1&query=Smile%20Dental%2C%20123%20N%20Michigan%20Ave%2C%20Chicago%2C%20IL%2060601%2C%20Chicago%2C%20IL",
"googleReviewsUrl": "https://www.google.com/search?tbm=lcl&hl=en&gl=us&q=Smile%20Dental%20123%20N%20Michigan%20Ave%20Chicago%20IL%2060601%20Chicago%20IL%20reviews",
"phoneUrl": "tel:+13125550148",
"citationSources": [
"https://www.yelp.com/biz/smile-dental-chicago",
"https://www.healthgrades.com/dentist/dr-example"
],
"relevanceScore": 60,
"relevanceLabel": "Strong Match",
"completenessScore": 85,
"authorityScore": 81,
"healthScore": 75,
"healthLabel": "Strong",
"profileClassification": "Leader"
}

Example SUMMARY record

{
"query": "dentist",
"location": "Chicago, IL",
"fetchedAt": "2026-04-15T12:00:00.000Z",
"summaryMetrics": {
"totalResults": 10,
"averageRating": 4.5,
"averageReviewCount": 92,
"businessesWithWebsite": 8,
"businessesWithPhone": 9,
"openNowCount": 7,
"exactMatchCount": 1,
"businessesMissingWebsite": 2,
"businessesMissingReviews": 1
},
"groupedInsights": {
"topCategories": [
{ "category": "Dentist", "count": 7 },
{ "category": "Cosmetic Dentist", "count": 2 }
],
"keywordMatchDistribution": {
"Strong Match": 6,
"Partial Match": 3,
"Weak Match": 1
},
"averageCompletenessScore": 72,
"averageAuthorityScore": 69,
"openNowVsClosed": {
"open": 7,
"closed": 2
}
},
"opportunities": [
{
"type": "Missing Website",
"businessName": "City Dental Care",
"description": "Has no linked website. Could easily be overtaken by a competitor with a strong localized landing page.",
"impact": "High Impact",
"rank": 3
}
],
"competitors": [
{
"businessName": "City Dental Care",
"category": "Dentist",
"organicRank": 2
}
],
"keywordGeoRankings": [
{
"keyword": "emergency dentist",
"location": "Chicago, IL",
"rank": 1,
"found": true,
"topResults": [
{ "rank": 1, "businessName": "Smile Dental", "category": "Dentist" },
{ "rank": 2, "businessName": "City Dental Care", "category": "Dentist" }
]
}
]
}

Apify project structure

.
├── .actor/
│ ├── actor.json
│ ├── INPUT_SCHEMA.json
│ ├── dataset_schema.json
│ ├── key_value_store_schema.json
│ └── output_schema.json
├── assets/
│ ├── apify-store-image.png
│ └── apify-store-image.svg
├── src/
│ ├── google_maps.js
│ ├── intelligence.js
│ └── main.js
├── Dockerfile
├── package.json
└── README.md

The assets/ folder includes an editable SVG plus an upload-ready PNG for the Apify Store listing image.

Run on Apify

Open the Actor on Apify Store, fill in the input form, and start the run.

If you are scraping Google results on the Apify platform, keeping useGoogleSerpProxy enabled is recommended when your plan supports the GOOGLE_SERP proxy group.

Run locally

Install dependencies:

$npm install

Start the actor:

$npm start

For local runs with the Apify CLI:

$apify run

Example input

{
"query": "dentist",
"location": "Chicago, IL",
"businessName": "Smile Dental",
"keywords": ["emergency dentist", "family dentist"],
"country": "us",
"language": "en",
"maxResults": 10,
"includeBusinessEnrichment": true,
"includeKeywordGeoRankings": true,
"useGoogleSerpProxy": true
}
  • restaurant in london
  • real estate agency in mississauga
  • mobile phone repair in peshawar
  • dentist near me
  • car dealer in houston
  • gym in dubai

Important limitations

This Actor is intended for public Google Maps data.

It does not provide private business-owner metrics such as:

  • Google Business Profile views
  • Calls from owner dashboard
  • Website clicks from owner dashboard
  • Direction requests from owner dashboard
  • Private profile performance analytics

Public Google HTML structure can change over time, so selectors may require updates if Google changes the layout. Some enrichment fields are best-effort and may be empty depending on what is publicly visible.

FAQ

Do I need a Google Maps API key?

No. This Actor is built for public Google Maps result extraction and does not rely on a Google Maps API key.

Does it scrape private Google Business Profile analytics?

No. It only works with publicly visible listing data.

Can I use it for local SEO?

Yes. This Actor is built specifically for local SEO research, local competitor analysis, and local business discovery.

Can I export the results?

Yes. Results are stored in the default dataset and can be exported in multiple formats.

Why did Apify say .actor/.actor/INPUT_SCHEMA.json does not exist?

That happens when the input field inside .actor/actor.json points to .actor/INPUT_SCHEMA.json. The correct path from inside .actor/actor.json is ./INPUT_SCHEMA.json.

Support

If you need custom features such as:

  • keyword clustering
  • review intelligence
  • local rank tracking workflows
  • competitor scoring
  • white-label exports

contact the Actor maintainer through the Apify Store page.