Local Business Opportunity Scanner (Google Maps)
Under maintenancePricing
from $1.00 / 1,000 results
Local Business Opportunity Scanner (Google Maps)
Under maintenanceShould you open business here, or is the area already too crowded? Scan any local market to see how saturated it is, how strong demand looks, and where competitors are weak. Get the verdict as a shareable PDF, backed by real customer reviews.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
Leafy
Maintained by CommunityActor stats
1
Bookmarked
3
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Share
Local Business Opportunity Scanner
Should you open here, or is the area already too crowded? Enter a business type and a specific area to see how saturated the market is, how strong demand looks, and where competitors are weak. You get the verdict as a shareable PDF, a scored competitor list, and what customers actually praise and complain about.
Built for owners validating a location, franchise buyers comparing territories, and agencies prospecting local clients with weak digital presence. It reads public Google Maps signals, with no APIs to wire up and no data to prepare.
What you get
Every run produces three things:
📄 1. A ready-to-share PDF report (REPORT.pdf)
A single document that answers "is this area worth it?" in plain language. Contents:
Local Business Opportunity Reportcoffee shop · Makati, Metro Manila · 124 competitorsExecutive Summary Opportunity 64/100: "promising but competitive"Market Scores Competition 82 · Demand 78 · Digital weakness 61Market Interpretation "Review volume suggests demand appears strong,but the area is already competitive..."Competitor Landscape 124 analyzed · 88 have websites · 19 look weakDigital Weakness missing sites, no booking links, no socialsWhat Customers Value & praise: ambiance, friendly staffComplain About complaints: slow service, pricing (+ real quotes)Top Strong / Weak CompetitorsRecommended Strategy differentiation angles based on the aboveCaveat
🏪 2. A scored competitor list (dataset)
One row per business: rating, review count, competitive strength, threat level, web-presence score, and the specific digital gaps (no_booking_link, no_instagram, missing website…) you could exploit.
💬 3. The voice of the customer (reviews, per business)
For the most-reviewed competitors, the actor samples recent Google reviews and mines them (no paid API) into what people love vs. complain about, then attaches the raw reviews to each business row so you can read the sentiment yourself. Complaints become differentiation ideas, like "competitors are dinged for slow service, so getting that right could be an opening."
Input
Two fields is all it needs:
{"businessType": "coffee shop","location": "Makati, Metro Manila"}
| Field | Type | Default | Description |
|---|---|---|---|
businessType * | string | coffee shop | The category to analyze (coffee shop, dental clinic, gym, salon, med spa, plumber…). |
location * | string | Makati, Metro Manila | Must be specific. Use Place, City/Region or a postal/ZIP code. A bare country/state is rejected. |
radiusKm | number | 3 | Catchment radius (0.5 to 50), used only for the density metric. |
mapsConcurrency | integer | 3 | Parallel Maps page extractions (1 to 10). Higher is faster and heavier. |
proxyConfiguration | object | off | Leave off unless you hit blocks/captchas. |
* required. Website audit and review analysis are always on, because they're core to the result rather than toggles.
✅ Makati, Metro Manila · Soho, London · Austin, TX · 90210
❌ Philippines · Texas · London (too broad, rejected with a clear message)
No result cap by design. To measure saturation the actor collects every business Maps surfaces (Maps itself caps a search at ~120). If an internal safety ceiling is ever hit, the summary sets
result_limit_reached: true, so read the count as "at least N".
Output
Dataset (one row per business)
| Field | Meaning |
|---|---|
business_name | Business name (first column). |
rating · review_count | Google rating and total review count. |
competitive_strength | strong · moderate · weak. |
threat_level | How much of a threat this competitor is. |
web_presence_score | Digital strength, 0 to 100. |
weakness_tags | Exploitable gaps, e.g. ["no_booking_link","no_instagram"]. |
opportunity_note | One-line read on this competitor. |
website_status | working · missing · error. |
reviews_sampled · reviews_text | Sampled reviews as readable text (renders in the Apify table). |
reviews | The same reviews as a structured array (rating, sentiment, aspects, date, text). |
{"business_name": "Example Coffee","rating": 4.6,"review_count": 240,"competitive_strength": "strong","threat_level": "high","web_presence_score": 72,"weakness_tags": ["no_booking_link", "no_instagram"],"opportunity_note": "Strong overall, but has digital gaps a new entrant could exploit.","reviews_sampled": 5,"reviews_text": "[5★ · positive, 2 weeks ago] Friendly baristas and great coffee\n\n[2★ · negative, a month ago] Service was slow...","reviews": [{ "rating": 5, "sentiment": "positive", "aspects": ["service & staff"], "date": "2 weeks ago", "text": "Friendly baristas and great coffee" }]}
Two dataset tabs: Overview (business + key metrics + readable reviews) and All fields. If Maps returns nothing usable, a single no_data_found row is pushed instead of crashing.
Key-value store
| File | What it is |
|---|---|
REPORT.pdf | The full shareable report (above). Falls back to REPORT.md if rendering fails. |
MARKET_SUMMARY.json | The headline verdict: four scores + levels, market status, interpretation, recommended strategy, and voice_of_customer. |
REVIEW_THEMES.json | The value-vs-complain breakdown: { sentiment, theme, mentions, sample_quote }[]. |
The four scores (0 to 100, directional)
| Score | What it measures |
|---|---|
| Competition | How crowded and strong the market looks. |
| Demand signal | Observed demand, proxied by review activity. |
| Digital weakness | How exploitable competitors' online presence is. |
| Overall opportunity | demand × 0.55 + (100 − competition) × 0.25 + digitalWeakness × 0.20. |
High competition isn't automatically bad. A crowded market often means demand is proven, so the report reads demand and competition together (proven-but-competitive, risky/saturated, digital-first opening, and so on).
How the customer-review read works
For the most-reviewed competitors (about 15 businesses), the actor pulls up to 5 recent Google reviews each and reads them with no paid API:
- Star rating is the sentiment signal. 4 to 5 stars counts as positive, 1 to 2 as negative, 3 as neutral.
- Aspect lexicons tag what each review is about: service & staff, price & value, wait time, quality, food & menu, cleanliness, ambiance, parking, amenities, booking.
- Frequent phrases are pulled from the positive bucket and the negative bucket separately.
The result is a plain-language read like "Reviews frequently praise: ambiance, friendly staff" vs "Common complaints mention: slow service, price," backed by example quotes. Recurring complaints also turn into a differentiation hint in the recommended strategy ("competitors are dinged for X, so getting X right could be an opening").
It's directional keyword-and-sentiment scanning, English-centric, and not full NLP.
Feedback, issues & requests
Found a bug, want a new metric, or have a business type that doesn't parse cleanly? I'd genuinely like to hear it. Email leafydevjr@gmail.com and I'll take a look.


