Local Business Revenue Leak Finder avatar

Local Business Revenue Leak Finder

Pricing

from $40.00 / 1,000 business analyzeds

Go to Apify Store
Local Business Revenue Leak Finder

Local Business Revenue Leak Finder

Find high-demand local businesses with website, booking, lead capture, and local SEO gaps. Scores Google Maps prospects using real market evidence and website analysis, then ranks the best agency outreach opportunities.

Pricing

from $40.00 / 1,000 business analyzeds

Rating

0.0

(0)

Developer

Furkan Toluç

Furkan Toluç

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Google Maps Agency Lead Scorer — Website & Booking Gaps

Find commercially established local businesses with visible website, booking, conversion, and local SEO opportunities.

This Apify Actor combines Google Maps demand signals, homepage-level website evidence, business-model-aware conversion checks, contactability, and deterministic scoring. It is an agency lead finder—not a generic Maps scraper, full website audit, or AI email generator.

1. What the Actor does

For each business query and location, the Actor:

  1. Calls the existing compass/crawler-google-places Actor with a controlled place and spend limit.
  2. Normalizes and deduplicates the returned Google Maps businesses.
  3. Filters explicitly closed businesses and businesses below the minimum known review count.
  4. Infers whether the business primarily needs appointments, quotes, reservations, phone calls, or a general conversion flow.
  5. Safely fetches only the listed homepage, with SSRF checks, manual redirect validation, a timeout, and a response byte limit.
  6. Detects deterministic CTA, contact, booking, mobile viewport, HTTPS, page identity, noindex, and structured-data evidence.
  7. Produces separate opportunity and confidence scores, a service recommendation, and CONTACT / WATCH / SKIP decisions.
  8. Saves ranked Dataset rows plus OUTPUT JSON and REPORT.md Key-value store records.

The result answers: Which commercially established local businesses have the clearest, evidence-backed digital gap that an agency can realistically pitch?

2. Who it is for

  • Web design and conversion optimization agencies
  • Local SEO agencies
  • Appointment-booking and AI receptionist consultants
  • Automation freelancers and independent web developers
  • Teams doing Google Maps lead generation and local business prospecting

Typical use cases include web design leads, website audit leads, booking automation leads, local SEO leads, appointment booking opportunities, and conversion audit research.

3. How it works

Input
→ Google Maps child Actor (one controlled run per query)
→ strict Maps adapter
→ evidence-aware filtering and deduplication
→ service-model inference
→ safe homepage fetch and deterministic HTML analysis
→ transparent scoring and decision engine
→ global ranking
→ Dataset + OUTPUT + REPORT.md

Raw upstream records never enter business or scoring logic directly. Only the adapter understands upstream field aliases. A missing source field remains unknown; it is never silently converted to false or 0.

Website access errors, blocks, unsafe URLs, non-HTML responses, and unknown website fields do not become website deficiencies.

4. Input

{
"searchQueries": ["dentists"],
"locationQuery": "Austin, Texas, USA",
"maxBusinessesPerSearch": 25,
"minimumReviews": 5,
"includeBusinessesWithoutWebsite": true,
"debug": false
}
FieldRequiredDefaultRules
searchQueriesYes1–5 unique strings, 2–80 characters each
locationQueryYes2–120 characters
maxBusinessesPerSearchNo255–50 per query
minimumReviewsNo50–10,000; only known counts are filtered
includeBusinessesWithoutWebsiteNotrueKeep explicit no-website prospects
debugNofalseAdds safe adapter and scoring evidence; never secrets or raw HTML

Homepage keyword, CTA, contact, and booking detection is English-first in this MVP.

5. Output

The default Dataset contains one globally ranked row per deduplicated business. Useful overview columns appear first: business, decision, opportunity, confidence, reviews, demand, digital gap, main gap, recommended service, website status, phone, website, and outreach angle.

Each record includes:

  • Normalized Google Maps business evidence
  • Matched source queries
  • Inferred service model and inference evidence
  • Homepage analysis status and observed signals
  • Four component scores
  • Opportunity and confidence scores
  • CONTACT / WATCH / SKIP / INSUFFICIENT_EVIDENCE decision
  • Evidence-backed reasons, risks, primary gap, and service recommendation
  • A concise outreach angle—not a generated cold email

OUTPUT contains a structured summary, safe run economics, query warnings, and top prospects. REPORT.md contains a human-readable summary and the top ten usable prospects.

6. Commercial Demand Score

This 0–100 score is a relative public Maps demand signal—not estimated revenue.

  • Review strength: 65%
  • Search rank: 20%
  • Rating quality: 15%

Review strength combines 60% peer percentile within matched query results and 40% absolute log-normalized review count:

absolute = clamp(log1p(reviews) / log1p(1000) × 100)
review strength = 60% peer percentile + 40% absolute

Rating maps approximately from 3.0 → 0 to 5.0 → 100. Rank starts at 100 for position 1 and declines progressively. Missing components are excluded and the remaining weights are re-normalized.

7. Digital Conversion Gap

Higher means more homepage-level conversion evidence is missing. An explicitly empty Maps website field scores 100. A successfully fetched homepage is evaluated for:

  • Strong primary CTA: 20
  • Contact action: 20
  • Service-model-specific conversion action: 25
  • Mobile viewport: 10
  • HTTPS: 5
  • LocalBusiness structured data: 10
  • Page identity: 5
  • Noindex: 5

Appointment businesses are checked for booking, quote businesses for a quote CTA or lead form, reservation businesses for reservation actions, and phone-first businesses for click-to-call. The model-specific component is excluded for a general business model.

Failed, blocked, unsafe, too-large, non-HTML, or unknown homepage evidence returns a null Digital Conversion Gap.

8. Confidence Score

Confidence is separate from opportunity:

  • Google Maps source completeness: 45%
  • Website evidence quality: 35%
  • Service-model inference confidence: 20%

A complete Maps record with an explicitly empty website field can have high confidence. A failed homepage request sharply reduces confidence and never creates a fake gap.

9. CONTACT / WATCH / SKIP

  • CONTACT: opportunity ≥ 75, confidence ≥ 65, demand ≥ 50, contactability ≥ 35, and usable core evidence.
  • WATCH: opportunity ≥ 60, confidence ≥ 45, meaningful service fit, and usable evidence.
  • SKIP: weak opportunity, weak demand, or no meaningful current service gap.
  • INSUFFICIENT_EVIDENCE: required source evidence is missing or homepage analysis failed while the conclusion depends on it.

All thresholds and weights are centralized and deterministic.

10. Example

{
"rank": 1,
"decision": "CONTACT",
"business": {
"name": "Example Dental",
"rating": 4.8,
"reviewCount": 436,
"phone": "+1...",
"website": "https://example.com"
},
"website": {
"status": "SUCCESS",
"hasBookingAction": false
},
"opportunityScore": 80,
"confidenceScore": 88,
"mainGap": "No online booking action detected on the homepage",
"recommendedService": "BOOKING_AUTOMATION",
"outreachAngle": "Google Maps shows 436 reviews for this business, but no online booking action was detected on the homepage. A booking-flow audit may be relevant."
}

The values are illustrative. Production values are calculated only from observed evidence.

11. API and automation usage

JavaScript with the Apify API client:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('YOUR_USERNAME/google-maps-agency-lead-scorer').call({
searchQueries: ['dentists'],
locationQuery: 'Austin, Texas, USA',
maxBusinessesPerSearch: 25,
minimumReviews: 5,
includeBusinessesWithoutWebsite: true,
debug: false,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

The Actor can also be called from the Apify CLI, schedules, webhooks, and standard Apify integrations. This MVP does not include direct CRM or automation-platform integrations.

12. Pricing behavior

The Actor calls a separately priced Google Maps Actor. Each child run uses a controlled result limit, timeout, and maxTotalChargeUsd (default $0.50 per query). Check current upstream pricing before production use.

Future pay-per-event scaffolding uses the event name business_analyzed. Charging is disabled by default with ENABLE_BUSINESS_CHARGING=false. When deliberately enabled and supported by the Actor pricing model, a result is chargeable exactly once only when:

  • The normalized business is valid and deduplicated.
  • Website status is SUCCESS or EXPLICIT_NO_WEBSITE.
  • A visible Dataset record is atomically pushed.

Malformed, filtered, duplicate, fetch-error, blocked, unsafe, non-HTML, too-large, and website-unknown records are not charged. No event price is configured in source code.

13. Data sources

  • Google Maps business records through the existing compass/crawler-google-places Actor
  • Public business homepage HTML fetched directly by this Actor

Optional Maps reviews, images, contact enrichment, social enrichment, lead enrichment, and competitor analysis are disabled. No LLM, browser automation, PageSpeed, verified-email, review sentiment, or custom Google Maps crawler is used.

Runtime configuration:

Environment variableDefault
GOOGLE_MAPS_ACTOR_IDcompass/crawler-google-places
GOOGLE_MAPS_MAX_CHARGE_PER_QUERY_USD0.50
GOOGLE_MAPS_CHILD_TIMEOUT_SECS180
ENABLE_BUSINESS_CHARGINGfalse
WEBSITE_FETCH_CONCURRENCY5 (hard-capped at 10)
WEBSITE_FETCH_TIMEOUT_MS10000
MAX_HTML_BYTES2000000

14. Limitations

  • Results are prospecting signals, not guaranteed clients.
  • Commercial Demand Score is based on public Maps signals, not business revenue.
  • Website analysis is homepage-level only.
  • No detected booking link does not prove that no booking option exists elsewhere.
  • Response time is diagnostic request evidence, not a PageSpeed or Core Web Vitals score.
  • Public emails are not verified.
  • Website access failures are not treated as website deficiencies.
  • Google Maps and business websites change over time.
  • English-language CTA and booking detection is the MVP focus.
  • Deterministic booking detection can produce false positives or miss custom widgets.
  • The upstream Actor schema and pricing can change; revalidate its connector fixture before deployment changes.
  • Maps website-field coverage varies. An absent field is WEBSITE_UNKNOWN; only an observed empty field is EXPLICIT_NO_WEBSITE.
  • Some websites block non-browser requests even when they work normally for visitors.
  • Unit economics depend on upstream cost, website success rate, result yield, and the future Store event price.
  • Users should manually review high-priority prospects before outreach.

Local development

npm install
npm run typecheck
npm test
npm run build
npm run check

Tests use offline Maps and homepage fixtures. They do not call paid Actors or real websites.

Private deployment

  1. Install and authenticate the current Apify CLI:

    npm install -g apify-cli
    apify login
  2. From this project directory, verify and upload the Actor:

    npm run check
    apify push
  3. In Apify Console, open the new google-maps-agency-lead-scorer Actor, confirm it remains private, and do not submit it to the Store.

  4. In Actor settings, keep ENABLE_BUSINESS_CHARGING=false. Optionally set the other environment variables listed above.

  5. Build with the latest tag and confirm the image starts with 256–1024 MB memory and no browser.

  6. Run the three private validation inputs below separately. Review the Dataset, OUTPUT, REPORT.md, child-run costs, field coverage, and unsupported-claim safeguards.

First private validation inputs

Dentists in Austin:

{"searchQueries":["dentists"],"locationQuery":"Austin, Texas, USA","maxBusinessesPerSearch":25,"minimumReviews":5,"includeBusinessesWithoutWebsite":true,"debug":true}

Med spas in Miami:

{"searchQueries":["med spas"],"locationQuery":"Miami, Florida, USA","maxBusinessesPerSearch":25,"minimumReviews":5,"includeBusinessesWithoutWebsite":true,"debug":true}

HVAC contractors in Dallas:

{"searchQueries":["HVAC contractors"],"locationQuery":"Dallas, Texas, USA","maxBusinessesPerSearch":25,"minimumReviews":5,"includeBusinessesWithoutWebsite":true,"debug":true}

For CLI testing, save one JSON object as INPUT.json, then run:

Get-Content .\INPUT.json -Raw | apify call YOUR_USERNAME/google-maps-agency-lead-scorer --silent

Do not enable charging until private runs have established upstream cost, homepage success rate, chargeable-result yield, and sustainable unit economics.