MapSweep - Google Maps Grid Scraper & Lead Monitor
Pricing
from $9.00 / 1,000 place scrapeds
MapSweep - Google Maps Grid Scraper & Lead Monitor
Full-coverage Google Maps scraper: grid search past the 12000-result cap, change tracking, contact enrichment, lead scoring and review analytics.
Pricing
from $9.00 / 1,000 place scrapeds
Rating
0.0
(0)
Developer
Safwan Daud
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Share
MapSweep extracts every business in an area, not just the first 120 search results. It splits the area into a grid, searches each cell, and splits any cell that comes back full until coverage is complete.
What makes it different
- Full coverage. Adaptive grid search past Google's result cap. Give a city name or a GeoJSON polygon.
- Change tracking. Re-run on a schedule and get only new, changed or closed places. Each place gets a
changeStatus(new,changed,unchanged,closed) and achangesobject. - Contact enrichment. Crawls each website for emails, phone numbers and social links, with optional email verification (mail server check and a confidence value).
- Lead scoring. A 0-100 score using missing website, review volume, rating, contact availability, unclaimed listing and review activity.
- Review analytics. Review velocity (last 30 days), owner reply rate, topic sentiment (price, service, wait, quality, location) and a one-line summary.
- Filters. Rating, review count, category, with/without website, skip closed places.
- Spend cap. Stops the run when charges reach your limit.
Input (main fields)
| Field | Purpose |
|---|---|
searchStrings | Business types to search, e.g. dentist |
location or polygon | City/region name, or a GeoJSON Polygon/MultiPolygon |
enableGridSplit, startCellKm, minCellKm, saturationThreshold | Coverage control |
minRating, minReviews, websiteFilter, categories, skipClosed | Filters |
outputMode, trackingStoreName | newOrChangedOnly needs a tracking name; reuse the same name on every scheduled run |
enrichContacts, verifyEmails, maxPagesPerWebsite | Website contact enrichment |
scrapeReviews, maxReviewsPerPlace, reviewsSort, analyzeReviews | Reviews and analytics |
leadScoring, maxSpendUsd, proxyConfiguration | Scoring, cap, proxy |
Example:
{"searchStrings": ["dentist"],"location": "Johor Bahru, Malaysia","websiteFilter": "withoutWebsite","minReviews": 20,"leadScoring": true,"outputMode": "newOrChangedOnly","trackingStoreName": "jb-dentists"}
Output
One dataset row per place: placeId, title, categories, address, location, phone, website, rating, reviewsCount, openingHours, claimed, plus (when enabled) emails, socials, leadScore, changeStatus, changes, reviews, reviewVelocity30d, ownerReplyRate, topicSentiment, reviewSummary. A RUN_SUMMARY record in the key-value store lists run counts and estimated spend.
Pay-per-event pricing (set in Console > Monetization)
| Event name | Suggested price |
|---|---|
place-scraped | $0.009 |
contact-enrichment | $0.006 |
review-scraped | $0.001 |
review-analysis | $0.003 |
The spend cap uses these same prices, so keep them in sync with PRICES in src/pipeline.js.
Maintenance note
All Google Maps page selectors are in SELECTORS at the top of src/extract.js (plus the review field selectors inside scrapeReviews). If Google changes its layout and fields come back empty, update them there; nothing else needs to change.