Google Maps Local Rank Monitor
Pricing
Pay per event
Google Maps Local Rank Monitor
Track Google Maps local rankings for a target business across keywords, cities, and grid points. Export competitor rows for SEO reports.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
17
Total users
8
Monthly active users
18 hours ago
Last modified
Categories
Share
Track where a target business ranks in Google Maps for local keywords, locations, and optional grid points.
What It Does
Google Maps Local Rank Monitor checks bounded Google Maps result sets and returns the target position alongside competing local businesses. It is built for monitoring and reporting, not broad lead extraction.
Use Cases
- Local SEO rank tracking
- Google Business Profile reporting
- Competitor visibility monitoring
- Franchise and multi-location checks
- Weekly or daily scheduled rank snapshots
- Local pack audit exports
Who Is It For
This actor is for local SEO agencies, franchise operators, in-house marketing teams, agencies managing Google Business Profiles, and local businesses that need repeatable evidence of Google Maps visibility.
Input
Provide a target business and the local searches to check.
Target Business
Use targetName for normal matching. Add targetPlaceId when you know the Google Maps CID or place ID and want stricter matching.
Keywords
The keywords field accepts a list such as:
- pizza
- emergency plumber
- dentist
- coffee shop
- personal injury lawyer
Locations
The locations field accepts city, neighborhood, region, or address text. Each keyword is combined with each location.
Grid Points
Use gridPoints when you want rank checks from exact map coordinates. Each point accepts:
labellatlngzoom
Result Limit
maxResults is capped at 20 per search. This keeps the actor focused on local rank monitoring and avoids exhaustive pagination.
Competitor Rows
When includeCompetitors is enabled, the dataset contains every ranked competitor row plus target rank metadata.
Summary Mode
When includeCompetitors is disabled, the actor outputs only the matched target row for each search. If the target is not found, it outputs a summary row with targetMatched=false.
Output Fields
The dataset includes:
- checked time
- keyword
- location
- grid point
- search query
- target name
- target matched flag
- target position
- competitor rank
- target row flag
- business name
- category
- rating
- address
- neighborhood
- website
- phone
- CID
- place ID
- map URL
- latitude
- longitude
- competitor count
Example Input
{"targetName": "Serious Pie Downtown","keywords": ["pizza"],"locations": ["Seattle, WA"],"maxResults": 20,"includeCompetitors": true}
Example Grid Input
{"targetName": "Serious Pie Downtown","keywords": ["pizza"],"locations": ["Seattle, WA"],"gridPoints": [{ "label": "Downtown", "lat": 47.6062, "lng": -122.3321, "zoom": 14 }],"maxResults": 20}
Output Example
{"keyword": "pizza","location": "Seattle, WA","targetMatched": true,"targetPosition": 2,"rank": 2,"isTarget": true,"businessName": "Serious Pie Downtown","category": "Pizza restaurant, Italian restaurant, Pizza Takeout","rating": 4.5,"address": "2001 4th Ave, Seattle, WA 98121","mapUrl": "https://www.google.com/maps?cid=..."}
Scheduling
Run the actor on an Apify schedule to build a rank history over time.
Monitoring Workflow
- Choose one target business.
- Add the keywords that matter commercially.
- Add city or neighborhood locations.
- Optional: add exact grid points.
- Export the dataset to compare rank changes.
Matching Behavior
Name matching is case-insensitive and ignores punctuation. CID or place ID matching is preferred when provided.
Google Maps Data
The actor extracts from the Google Maps web response. Available fields may vary by query, location, and Google response format.
Limits
This actor does not crawl every Google Maps page. It checks the top visible Maps results for the requested search combinations.
Pricing
The actor charges a small start event and a result event for output rows. Final tiered pricing is calculated after cloud validation.
Reliability Notes
Google Maps is dynamic and may change its internal response format. The actor keeps extraction bounded and validates output fields to reduce noisy results.
Best Practices
Use specific commercial keywords and realistic locations. For grid reports, keep the first run small and expand after verifying the target match.
Troubleshooting
If the target is not found, try adding the exact Google Maps CID or place ID, checking a narrower location, or increasing maxResults up to 20.
Data Export
The dataset can be exported as JSON, CSV, Excel, XML, RSS, or HTML through Apify.
Recommended Columns
For reporting dashboards, start with these columns:
- keyword
- location
- gridLabel
- targetPosition
- rank
- isTarget
- businessName
- rating
- category
- address
- mapUrl
API Usage
Run the actor through the Apify API with the same JSON input used in the console.
Node.js:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/google-maps-local-rank-monitor').call({targetName: 'Serious Pie Downtown',keywords: ['pizza'],locations: ['Seattle, WA'],maxResults: 20,includeCompetitors: true});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python:
from apify_client import ApifyClientimport osclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("automation-lab/google-maps-local-rank-monitor").call(run_input={"targetName": "Serious Pie Downtown","keywords": ["pizza"],"locations": ["Seattle, WA"],"maxResults": 20,"includeCompetitors": True,})items = client.dataset(run["defaultDatasetId"]).list_items().itemsprint(items)
cURL:
curl -X POST "https://api.apify.com/v2/acts/automation-lab~google-maps-local-rank-monitor/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"targetName":"Serious Pie Downtown","keywords":["pizza"],"locations":["Seattle, WA"],"maxResults":20,"includeCompetitors":true}'
MCP
Use the Apify MCP server to run this actor from AI tools that support Apify actors. Pass the same JSON input shown above and read the default dataset items for rank rows.
Claude Code setup:
$claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/google-maps-local-rank-monitor"
Claude Desktop, Cursor, and VS Code setup:
Add this actor-scoped server to each client's MCP JSON configuration and authenticate with your Apify account when prompted:
{"mcpServers": {"apify-google-maps-local-rank-monitor": {"url": "https://mcp.apify.com?tools=automation-lab/google-maps-local-rank-monitor"}}}
Example prompts:
- Run
automation-lab/google-maps-local-rank-monitorfor Serious Pie Downtown with keyword pizza in Seattle. - Check my target rank for three plumbing keywords across these five grid points.
- Export the competitor rows from the latest run and summarize businesses outranking the target.
Legality
The actor collects public Google Maps search result data. Users are responsible for using the output lawfully, respecting applicable terms, and avoiding prohibited personal-data workflows.
FAQ
Does this scrape every Google Maps result? No. It intentionally checks the bounded top result set for rank monitoring.
Can I monitor multiple keywords? Yes. Add multiple keywords and locations; each combination is checked.
Should I use grid points? Use grid points when you need location-sensitive local SEO heatmap reporting.
Related
Related actors in this workspace include Google Maps Reviews Scraper, Google Search Scraper, and Google News Scraper.
Privacy
The actor works with public Google Maps search results. Do not submit private credentials or personal account data.
Changelog
Initial development version for APIA-1471.