Google Maps Reputation Lead Scraper — Bad Reviews + Emails
Pricing
Pay per event
Google Maps Reputation Lead Scraper — Bad Reviews + Emails
Scrape Google Maps for low-rated local businesses losing customers to bad reviews. Every lead ships with complaint themes, an AI diagnosis and a verified email.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Data Runner
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Find local businesses with bad Google reviews — and know what to say before you call
Scrape Google Maps for low-rated local businesses whose reviews are costing them customers, and get each one back as a call-ready lead: the complaint themes, an AI reputation diagnosis in plain English, a real customer quote, and a verified contact email.
Built for reputation management agencies, marketing agencies, local SEO consultants, web and CX freelancers — anyone who sells review repair, customer-experience or local-search services and needs a list of local businesses that visibly need it.
Most Google Maps scrapers hand you every business in a category and leave you to work out which ones have a problem. This one filters to the businesses with bad reviews and tells you what the reviews actually say.
You only pay for qualified leads. Scanning Google Maps is free. Businesses that do not match your rating filter are counted in the run summary and never charged.
⚡ Quick start
Give it a business category and a city. That is the whole setup.
{"searchTerms": ["roofers"],"location": "Tampa, FL","maxRating": 3.8,"minReviews": 15,"maxLeads": 40,"maxScanned": 400}
Find up to 40 roofing companies around Tampa rated 3.8 stars or below with at least 15 reviews, read their reviews, and get me their emails.
📊 Output example — one lead record
This is the whole product in one object. The reputationDiagnosis is your opening line on the call.
{"businessName": "Gulfline Roofing & Restoration","category": "Roofing contractor","address": "4417 W Kennedy Blvd, Tampa, FL 33609","city": "Tampa","state": "FL","phone": "+1 813-555-0147","website": "https://gulflineroofing.example","emails": ["office@gulflineroofing.example", "dan@gulflineroofing.example"],"primaryEmail": "dan@gulflineroofing.example","socialLinks": { "facebook": "https://facebook.com/gulflineroofing" },"rating": 2.9,"reviewCount": 63,"reviewsSampled": 15,"sentimentBreakdown": { "positive": 13, "neutral": 7, "negative": 80, "basis": 15 },"complaintThemes": [{ "theme": "crews not showing up on scheduled days", "count": 7 },{ "theme": "final invoice higher than the quote", "count": 5 },{ "theme": "calls and messages never returned", "count": 4 },{ "theme": "leaks returning after the repair", "count": 3 }],"reputationDiagnosis": "Gulfline's rating has fallen to 2.9 because of a scheduling and communication problem, not a quality problem — seven of the fifteen most recent reviews describe crews that never turned up on the agreed day, and four more describe calls that were never returned. Five customers say the final invoice came in above the quote with no explanation. The pattern is current: most of these reviews are from the last three months, and the owner has not replied to any of them.","diagnosisSource": "ai","worstQuote": "took three days off work and nobody ever showed up","opportunityScore": 84,"scoreBreakdown": {"ratingPain": 28.8,"visibility": 25,"negativeRecency": 20,"reachability": 10,"notEvaluated": []},"mapsUrl": "https://www.google.com/maps/place/...","searchTerm": "roofers","status": "ok","scrapedAt": "2026-08-21T14:22:07.118Z"}
Read that diagnosis out loud. That is a consultation, not a cold call — and you did not do a minute of research. (Fictional business, realistic output.)
⚙️ Input reference
| Field | Type | Default | What it does |
|---|---|---|---|
searchTerms | array | — | Business categories to scrape on Google Maps: ["dentists"], ["roofers", "plumbers"] |
location | string | — | City, region or ZIP: "Tampa, FL". Be specific — "Florida" returns a thin scatter |
maxRating | number | 3.9 | Only businesses rated at or below this qualify |
minReviews | integer | 10 | Ignore businesses with too few reviews to have a real reputation problem |
maxLeads | integer | 50 | Hard cap on billable leads. Max 300 |
maxScanned | integer | 500 | How many businesses to scan looking for qualifiers. Free |
reviewsPerBusiness | integer | 15 | Review sample size per lead. Does not change the price |
extractEmails | boolean | true | Visit each lead's website for emails, phones and socials |
requireContact | boolean | false | Drop leads with neither email nor phone |
fastContactPass | boolean | true | Cheap page fetch before opening a browser on a lead's site |
proxyConfiguration | object | Residential US | Google Maps needs it. Leave it on |
🔍 What data does this Google Maps review scraper extract?
For every low-rated local business it keeps, you get:
Firmographics — business name, category, full address, city, state, phone, website, Google Maps URL.
Reputation metrics — star rating, total review count, how many reviews were sampled, and a positive / neutral / negative split computed from the star ratings themselves.
The diagnosis — the top 3–5 complaint themes with how many reviews mention each, a 2–3 sentence reputation diagnosis in plain business English, and one verbatim customer quote short enough to read aloud.
Contact details — every email found on the business website, a ranked primaryEmail (owner and named inboxes beat generic support queues), phone numbers, and social profiles. Link-in-bio pages like Linktree and Beacons are followed automatically.
Prioritisation — a deterministic opportunityScore from 0 to 100, with its full breakdown.
🧭 How it works
- Scrape. Searches Google Maps for your category in your location and scans the results list — up to
maxScannedbusinesses. Free. - Filter by reputation. Keeps only businesses rated at or below
maxRatingwith at leastminReviewsreviews. Everything else is counted and dropped, unbilled. When Google does not render a business's review count in the results list — which happens unpredictably — the business is kept on its rating and its count is confirmed later, free, on a page the scraper was going to open anyway. - Rank. Sorts qualifiers worst-first, so when more businesses qualify than
maxLeadsallows, your budget goes to the worst-rated and most-visible ones — not to whichever ones Google listed first. - Diagnose. Opens each qualifying business's review panel, samples its lowest-rated and most recent reviews, and runs them through an AI engine to extract complaint themes, the diagnosis, and a representative quote.
- Enrich. Visits the business website — including link-in-bio pages — and harvests emails, phones and social links.
🎯 The opportunity score, explained
opportunityScore is a 0–100 number telling you which leads to work first. It is fully deterministic — no AI involved — so the same business always scores the same, and you can sort, filter and threshold on it with confidence.
| Component | Points | How it is measured |
|---|---|---|
| Rating pain | 45 | How bad the rating is. Linear from 0 points at 4.5★ to the full 45 at 2.0★ or below. A 3.25★ business scores exactly half |
| Visibility | 25 | How many people see the problem. Logarithmic from 0 at 10 reviews to the full 25 at 500+. Log, not linear, because 10 → 50 reviews changes visibility far more than 460 → 500 |
| Negative recency | 20 | Whether the damage is current. Counts sampled reviews that are both 1–2★ and from the last 90 days; 5 or more earns the full 20 |
| Reachability | 10 | Whether you can act on it. Email + phone = 10, email only = 8, phone only = 5, neither = 0 |
The anchors are fixed (4.5★→2.0★, 10→500 reviews) rather than relative to your filter, so a score of 84 means the same thing in every run and every export you ever do.
If a component could not be measured it scores zero and says so in scoreBreakdown.notEvaluated. The remaining components are never rescaled to compensate — that would invent urgency the data does not support.
💰 Pricing — pay per qualified lead
| Event | Price | When it fires |
|---|---|---|
| Qualified lead diagnosed | $0.15 | A business passes your reputation filter and gets its reviews scraped and its full AI diagnosis produced |
| Contact email found | $0.02 | The website extraction runs for a diagnosed lead and finds at least one usable email |
What you are never charged for:
- businesses that did not pass your reputation filter, however many were scanned
- qualifiers whose reviews Google blocked us from reading
- qualifiers whose review panel turned out to be empty
- leads where contact extraction ran and found nothing
- leads dropped by your own
requireContactfilter — you asked not to receive them, so you do not pay for them - anything that failed because of a bug on our side
A fully-loaded lead — diagnosed, with an email — costs $0.17. Forty of them costs about $6.80.
Why diagnosis-attached leads cost more than raw scraped leads. The $0.15 is anchored to our own Google Maps Review Scraper & AI Sentiment Analyzer, which charges exactly that for the same unit of work. This scraper does that work and throws in the discovery, the qualification and the ranking for free. The $0.02 is anchored to our Website Email Scraper. You pay the same as running both — and get the qualification layer at no extra cost.
How the caps control spend. maxLeads is a hard ceiling on billable leads: set it and your maximum bill is maxLeads × $0.17, whatever happens.
🆚 How this compares to a plain Google Maps scraper
| Google Maps scrapers | Review scrapers | This scraper | |
|---|---|---|---|
| Business name, address, phone | ✅ | ❌ | ✅ |
| Contact emails from the website | Sometimes | ❌ | ✅ |
| Star rating & review count | ✅ | ✅ | ✅ |
| Full review text | ❌ | ✅ | Sampled |
| Filters to only low-rated businesses | ❌ | ❌ | ✅ |
| Complaint themes, counted | ❌ | ❌ | ✅ |
| Plain-English reputation diagnosis | ❌ | ❌ | ✅ |
| A quote you can read on the call | ❌ | ❌ | ✅ |
| Priority score across the whole list | ❌ | ❌ | ✅ |
| You pay for | Every business | Every review | Only qualified leads |
A Google Maps scraper gives you every business in a category — you still have to work out which ones need you. A review scraper gives you one business's reviews — you still have to read them. This does both and hands you the sentence to open with.
🔗 Works perfectly with
This scraper is the top of the agency funnel. Feed its output straight into the rest of the suite:
| Next step | Actor | Why |
|---|---|---|
| 1. Merge & de-dupe | Lead List Deduplicator & Merger | Combine several cities or categories into one clean list |
| 2. Verify the emails | Email Verifier & Enricher Pro | Confirm deliverability before you send |
| 3. Verify the phones | Phone Number Validator | Check numbers are live before your reps dial |
| 4. Write the outreach | AI Icebreaker Generator | Turn each diagnosis into a personalised first line |
Related scrapers worth pairing with it:
- Website Audit Lead Finder — the same lead scored on its website instead of its reviews. Businesses failing both are your strongest prospects.
- Google Maps Lead Generator — when you want every business in a category, not just the struggling ones.
- Website Email Scraper — bulk email extraction from any list of URLs.
💡 How to find businesses with bad reviews in your city
The most common mistake is scanning too shallow. Google ranks well-rated businesses first, so the businesses you are hunting sit deeper in the list — a scan of the first 50 results in a healthy category will find almost nothing.
Scanning is free. So:
- Raise
maxScanned, notmaxRating. 500–800 in a mid-size city is normal. Loosening the rating filter instead just fills your list with businesses that do not feel they have a problem. - Start at
maxRating3.9. Low enough that the owner knows something is wrong, high enough that the business is still worth saving. Below 3.0 you find businesses in crisis; above 4.2 most owners will not feel the urgency. - Keep
minReviewsat 10 or higher. A 2.0★ rating built on three reviews is one bad week, not a reputation problem. - Run several categories at once.
["roofers", "plumbers", "hvac"]costs the same per lead and finds more qualifiers per run.
🏢 Which industries have the most low-rated businesses?
In practice the richest categories for review-repair work are the ones where a single bad job is expensive and emotional: moving companies, towing, roofing, auto repair, property management and apartment complexes, dental and medical practices, home warranty and pest control, used car dealers, and internet or cable providers.
Categories that tend to rate well — and therefore yield few leads — include boutique retail, salons, cafés and specialist independents, where regulars leave five stars.
📞 How do reputation management agencies use this scraper?
The workflow most agencies land on:
- Run one category per city,
maxRating3.9,maxLeads40. - Export as CSV and sort by
opportunityScoredescending. - Work the top 10 by phone using the Call sheet dataset view — it gives you business name, phone, what to say, and the quote to read, in that order.
- Send the rest to an email sequence, using
reputationDiagnosisas the personalised first line. - Re-run the same search monthly. Businesses that slipped below your threshold since last time are your warmest calls — they are actively watching their rating fall.
🚫 What this scraper does not do
It does not solve CAPTCHAs, and it does not post, reply to or remove any review. It reads what is publicly visible on Google Maps and on the business's own website. If Google rate-limits a visit, the business is counted as blocked, reported in the run summary, and not charged.
⚠️ Honest limitations
- Reviews are sampled, not exhaustive. Up to
reviewsPerBusiness(default 15), weighted toward the lowest-rated and most recent. Enough for reliable complaint themes, but a business with 800 reviews has themes we did not see. - The diagnosis is AI-inferred. It summarises what reviewers wrote; it is not an audit of the business. The customer quote, however, is verified word-for-word against the actual review text before it ships — if the AI engine cannot produce a genuine one, the field falls back to a deterministic pick or stays empty rather than shipping something invented.
- Contact details depend on the business having a website. Businesses with no website listed come back with a phone number at best. In most local categories expect roughly 50–75% of leads to yield an email.
- Google Maps data freshness. Ratings and review counts are whatever Google is showing at the moment of the run.
- Blocking happens, and it is quiet. When Google rate-limits automated browsing it usually does not show an error — it serves a normal-looking business page with the reviews simply missing. This scraper detects that specific shape, counts those businesses as
blocked, says so in the summary, and charges you nothing. Keep the residential proxy on; it is the default for this reason. - Not affiliated with Google. This Actor reads publicly visible business listings and reviews. It is not endorsed by or connected to Google LLC.
❓ FAQ
What exactly counts as a "qualified" lead?
A business rated at or below your maxRating and with at least your minReviews reviews. Both bounds are inclusive: with the defaults, a business at exactly 3.9★ with exactly 10 reviews qualifies. Businesses whose rating could not be read do not qualify — we never bill you for a business whose reputation we did not measure.
How is the reputation diagnosis generated?
The scraper samples each qualifying business's reviews, prioritising the lowest-rated and most recent, and runs them through an AI engine that extracts recurring complaint themes and writes a short summary. Star-rating percentages are computed directly from the review scores rather than asked of the AI, and the customer quote is verified against the source review before it ships. If the AI engine is unavailable the Actor falls back to a built-in keyword analysis and marks the row diagnosisSource: "heuristic" — same price, and you can always tell which rows fell back.
Can I scrape Google Maps reviews for lead generation legally? This Actor collects publicly published business information — company names, business addresses, business phone numbers, business emails from company websites, and publicly visible review text. Reviewer names are not included in the output. Business contact data is generally processable under legitimate interest for B2B outreach, but you are the data controller for how you use it: honour opt-outs, identify yourself in outreach, and check the rules in your jurisdiction.
Can I target my own city or a specific neighbourhood?
Yes. location accepts anything Google Maps understands — a city ("Tampa, FL"), a neighbourhood ("Ybor City, Tampa"), a ZIP, or a region.
How many reviews does it read per business, and does reading more cost more? Default 15, configurable up to 40. It does not change the price — the per-lead price is flat. Raising it slows the run and improves the diagnosis on businesses with very mixed reviews.
What export formats can I get? Everything Apify supports — CSV, JSON, Excel, XML — via the Console, the API, or a direct integration into Google Sheets, HubSpot, Airtable, Zapier or Make. The dataset ships with two ready-made views: Leads (the full record) and Call sheet (just what a rep needs on the phone).
Can I use this for door-to-door or local field sales?
Yes, and it is one of the better uses. Run a tight location, set requireContact to false so phone-only leads are kept, sort by opportunityScore, and use the Call sheet view.
What if I get zero leads?
That means the category is healthy in that location, which is real information. The run summary tells you exactly why: how many businesses rated above your filter, how many had too few reviews, and how many were blocked. The Actor prints a specific suggestion — usually to raise maxScanned or loosen maxRating. You are not charged for a run that produces no qualified leads.
Can I run this on a schedule? Yes. Apify Schedules will run it monthly or weekly, and the output appends to a dataset you can watch. Businesses newly slipping below your rating threshold are the warmest leads this Actor produces.