Local Lead Finder - Great Reviews, Weak Website & Booking avatar

Local Lead Finder - Great Reviews, Weak Website & Booking

Pricing

$10.00 / 1,000 leads

Go to Apify Store
Local Lead Finder - Great Reviews, Weak Website & Booking

Local Lead Finder - Great Reviews, Weak Website & Booking

Find local businesses that are loved offline but weak online: great Google Maps ratings with no website, no HTTPS, no mobile viewport, no online booking, an outdated site or owners who never reply to reviews. Scored leads for web, booking and AI-receptionist agencies.

Pricing

$10.00 / 1,000 leads

Rating

0.0

(0)

Developer

Cobi Hilliard

Cobi Hilliard

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

14 days ago

Last modified

Security

Limited permissions

Share

Local Lead Finder: find good businesses with a sloppy online presence

Find local businesses that customers love on Google Maps but that are weak online: no website, a broken or outdated one, no online booking, not mobile-friendly, and owners who never answer reviews. Every business gets a lead score (0-100) and a one-sentence reason it is a lead.

Built for agencies and freelancers who sell websites, booking systems, review management or AI receptionists to local businesses. No emails or personal data are collected, only business listing data (name, address, business phone).

Important: how data is sourced and who pays for what

This actor never requests Google itself. It gets places from the popular Google Maps Scraper (compass/crawler-google-places):

  • Search mode (searchQuery + location): the actor starts a Google Maps Scraper run under your Apify account, and you pay that run's usage and fees directly to Apify. This is separate from, and in addition to, this actor's price. Keep maxPlaces small for a first test.
  • Dataset mode (datasetId): analyse the dataset of a Google Maps Scraper run you already made. No child run, no extra Maps cost. For owner-reply data, run it with maxReviews of 5-10.

What you get (one flat row per lead)

  • name, category, address, city, phone, website, mapsUrl
  • rating, reviewsCount, ownerReplyRate (0-1, share of fetched reviews with an owner response)
  • Signals (booleans): noWebsite, siteDown, noHttps, noMobileViewport, noBookingLink, outdatedSite, lowOwnerReplyRate
  • leadScore (0-100) and leadReasons
  • Rows are sorted by leadScore, highest first

Sample result

{
"name": "Fake Pipe & Co (TEST)",
"category": "Plumber",
"city": "Faketown",
"phone": "(555) 010-0101",
"website": null,
"rating": 4.8,
"reviewsCount": 212,
"ownerReplyRate": 0,
"noWebsite": true,
"noBookingLink": true,
"lowOwnerReplyRate": true,
"leadScore": 90,
"leadReasons": "4.8★ from 212 reviews, but no website and the owner never replies to reviews."
}

How scoring works

Businesses must pass minRating (default 4.0) and minReviews (default 50). Then points are added and capped at 100:

SignalPointsMeaning
noWebsite45No website, or only a Facebook/Instagram/Yelp-type page
siteDown40Homepage errors, times out or returns 4xx/5xx
noBookingLink25No link or script for booking tools (Calendly, Acuity, Square, Vagaro, Booksy, Setmore, Housecall Pro, Jobber, ServiceTitan, Mindbody, Fresha, OpenTable, Resy, Tock, "book online"...). Also set when there is no website
lowOwnerReplyRate20Owner replied to under 20% of the fetched reviews
noHttps, noMobileViewport, outdatedSite10 eachHomepage not on HTTPS, no meta viewport, copyright year older than 2 years or response over 5 s

onlyLeads (default on) drops anything under 30.

The homepage of each business is fetched once, only if robots.txt allows it, with a 10 second timeout.

Input

FieldDefaultDescription
searchQueryplumberBusiness type
locationAustin, TXCity/state or country
maxPlaces50Places the Maps child run scrapes
datasetIdUse an existing Maps scraper dataset instead of searching
minRating4.0Minimum Google rating
minReviews50Minimum review count
onlyLeadstrueDrop scores under 30
maxItems100Max leads output
concurrency8Parallel website checks

Examples: {"searchQuery":"dentist","location":"Denver, CO","maxPlaces":100} or {"datasetId":"YOUR_MAPS_DATASET_ID","minReviews":100}.

Pricing

$10 per 1,000 leads ($0.01 per lead row saved). 100 leads cost $1.00. In search mode, add the cost of the Google Maps Scraper child run to your own account (see above).

Use cases

Web design and SEO agencies, booking and CRM resellers, review-management and reputation services, AI receptionist and call-answering sellers, freelancers building a local prospect list.

FAQ

Is it legal? Google Maps data comes through the third-party Maps Scraper that you run; website checks fetch only public homepages and obey robots.txt. No personal data (emails, names of people) is collected. You remain responsible for how you use outreach data under local rules.

Limitations. Owner-reply rate is based on a small sample of recent reviews (10 in search mode). The booking check looks at the homepage only. Sites behind bot protection may appear as down. Facebook/Instagram/Yelp pages count as no website.

Integrations / API. Use the Apify API, webhooks, Zapier, Make or n8n to pipe leads into your CRM.

Integrations / API

1. Weekly prospect list into Google Sheets (n8n or Make)

Schedule node (Mondays) → Apify: Run Actor wakachobi/local-lead-finder with {"searchQuery": "roofing contractor", "location": "Denver, CO", "maxPlaces": 40} → Apify: Get dataset items → Google Sheets: Append rows. Filter on leadScore >= 60 to keep only the strongest prospects. Each row's leadReasons makes a ready-made first line for your outreach ("Saw you have 4.8★ from 212 reviews, but no way to book online…").

2. Clay table enrichment

Start a Clay table from your own city/niche list, add an Apify column that runs this Actor per row with searchQuery + location from the row, and map website, phone, leadScore and leadReasons into columns. Use Clay's own enrichment to find a contact person at the shortlisted businesses.

3. Re-score a Maps run you already have

Already scraped Google Maps with compass/crawler-google-places? Pass its dataset ID instead of a search: {"datasetId": "<your dataset id>", "minReviews": 30}. No new Maps run, so you only pay for the scoring.

4. Plain API call

curl -X POST "https://api.apify.com/v2/acts/wakachobi~local-lead-finder/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"searchQuery":"dentist","location":"Tampa, FL","maxPlaces":30}'