Google Maps Local SEO Leads Scraper
Pricing
from $2.00 / 1,000 results
Google Maps Local SEO Leads Scraper
Track how businesses rank on Google Maps for specific keywords and locations, useful for local SEO audits, competitor tracking, and agency reporting.
Pricing
from $2.00 / 1,000 results
Rating
0.0
(0)
Developer
Dmytro Paduchak
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Share
Google Maps Local SEO Rank Tracker
Track where target businesses rank in public Google Maps search results for multiple keywords and locations. The Actor combines every keyword with every location, opens Google Maps search results, extracts listing details, and marks rows that match your target business names or website domains.
No Google Maps API key is required.
What You Can Use It For
- Monitor local SEO visibility across cities, neighborhoods, or service areas
- Track competitor and client positions for important commercial keywords
- Export keyword/location ranking snapshots for reporting
- Audit whether a brand appears in the Google Maps local pack result list
Input
Configure the Actor with keyword and location lists:
{"keywords": ["coffee shop", "cafe"],"locations": ["London", "Manchester"],"targetBusinessNames": ["Example Coffee"],"targetDomains": ["example.com"],"maxResults": 20,"language": "en","country": "uk","apifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"proxyCountries": [],"proxyUrls": [],"proxySessionRetries": 2,"adaptiveThrottle": true}
| Field | Type | Default | Description |
|---|---|---|---|
keywords | string[] | required | Search terms to track, such as coffee shop, dentist, or estate agent. |
locations | string[] | required | Locations to combine with every keyword, such as London, Manchester, or Austin TX. |
targetBusinessNames | string[] | [] | Business names to match against Google Maps result names. Matching is case-insensitive and tolerant of punctuation. |
targetDomains | string[] | [] | Website domains to match against listing websites. Values can be plain domains or full URLs. |
maxResults | number | 50 | Maximum number of results to collect per keyword/location search. |
language | string | "en" | Preferred Google Maps interface language. |
country | string | - | Optional country hint, such as uk, us, de, or fr. |
apifyProxy | boolean | true | Enable Apify Proxy for more reliable scraping. |
apifyProxyGroups | string[] | ["RESIDENTIAL"] | Proxy pools: RESIDENTIAL, DATACENTER, SERP. |
proxyCountries | string[] | [] | Route through specific countries using ISO 2-letter country codes. |
proxyUrls | string[] | [] | Custom proxy URLs. If provided, these override Apify Proxy. |
proxySessionRetries | number | 2 | Number of retryable browser sessions per search after blocking, empty results, or navigation failures. |
adaptiveThrottle | boolean | true | Automatically slows down when Google Maps loads slowly, returns sparse results, or shows blocking signals. |
baseThrottleDelayMs | number | 250 | Starting adaptive delay before business-card actions. |
maxThrottleDelayMs | number | 10000 | Maximum adaptive delay. |
slowLoadThresholdMs | number | 12000 | Load duration that causes the Actor to increase adaptive delay. |
Each source query is built as:
{keyword} in {location}
Output
Each Google Maps result is saved to the default Apify Dataset as one rank row.
{"keyword": "coffee shop","location": "London","rankPosition": 3,"businessName": "Example Coffee","category": "Coffee shop","address": "10 Example Street, London","website": "https://example.com/","googleMapsUrl": "https://www.google.com/maps/place/Example+Coffee/...","placeId": "0x487...","latitude": 51.5072,"longitude": -0.1276,"isTargetMatch": true,"matchedTarget": "domain:example.com","sourceQuery": "coffee shop in London","scrapedAt": "2026-05-13T12:00:00.000Z"}
The Actor outputs these fields:
keyword, location, rankPosition, businessName, category, address, website, googleMapsUrl, placeId, latitude, longitude, isTargetMatch, matchedTarget, sourceQuery, and scrapedAt.
Some listing fields may be missing when they are not publicly visible on Google Maps.
How Matching Works
targetBusinessNames are matched against the extracted business name using normalized case, whitespace, punctuation, and ampersands. targetDomains are normalized to hostnames, so https://www.example.com/page and example.com match the same target domain.
matchedTarget is prefixed with businessName: or domain: so you can see which target rule matched.
Reliability Notes
Google Maps can show captcha or automated-traffic blocking, especially on repeated runs, high result counts, or datacenter IPs. The Actor detects common blocking pages and fails clearly instead of silently saving bad data.
For larger production runs:
- Enable
apifyProxy - Use residential or geographically relevant proxy settings
- Keep
maxResultsmoderate for each keyword/location pair - Increase
proxySessionRetriesandmaxThrottleDelayMsfor long batches - Review output quality before scaling to many searches
Legal Disclaimer
This Actor is intended for academic, educational, and research purposes only. Users are responsible for ensuring that their use of this tool complies with Google's Terms of Service, Google Maps Terms, and any applicable local laws regarding data privacy and scraping.
Automated access to Google services may be restricted. We do not encourage or condone the use of this tool for any activity that violates the rights of others or the service provider.