Google Maps Lead Qualifier | Website Gaps + Outreach avatar

Google Maps Lead Qualifier | Website Gaps + Outreach

Under maintenance

Pricing

from $4.00 / 1,000 qualified opportunities

Go to Apify Store
Google Maps Lead Qualifier | Website Gaps + Outreach

Google Maps Lead Qualifier | Website Gaps + Outreach

Under maintenance

Turn Google Maps results or existing business lists into qualified sales opportunities. Audit public websites, detect booking and lead-generation gaps, rank leads by confidence, recommend services, and generate evidence-backed outreach.

Pricing

from $4.00 / 1,000 qualified opportunities

Rating

0.0

(0)

Developer

Murilo Lira

Murilo Lira

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

16 days ago

Last modified

Share

Find the local businesses worth contacting, not just another list of Google Maps leads.

Turn Google Maps results or existing business lists into qualified sales opportunities. The Actor audits public websites, detects booking and lead-generation gaps, assigns opportunity and confidence scores, recommends a matching service, and generates evidence-backed outreach only when the result meets the qualification contract.

Who this Actor is for

This Actor is designed for:

  • marketing agencies;
  • web designers and developers;
  • local SEO specialists;
  • booking-system and CRM consultants;
  • automation freelancers;
  • outbound sales teams.

It answers five practical questions:

  1. Which businesses are worth contacting?
  2. Why is each business an opportunity?
  3. Which service matches the observed gap?
  4. How reliable is the conclusion?
  5. What evidence supports the next action?

The technical Actor slug remains local-business-funnel-gap-finder.

Why this is not another Google Maps scraper

A traditional Maps scraper returns business records. This Actor adds the qualification layer after discovery.

Google Maps data
-> website audit
-> verified gap detection
-> opportunity score
-> confidence score
-> qualification decision
-> recommended service
-> evidence-backed outreach

Use one-click Maps discovery, or provide an existing Apify dataset, business list, or domain list.

Quick start

{
"inputMode": "maps_search",
"searchQueries": ["dentists in Miami FL"],
"maxResultsPerQuery": 10,
"maxTotalResults": 10,
"maxDiscoveryCostUsd": "0.50",
"targetService": "auto",
"minimumOpportunityScore": 40,
"minimumConfidenceScore": 0.75,
"onlyReturnOpportunities": true,
"generatePitchAngle": true,
"generateOutreachForAllResults": false,
"outputLanguage": "en"
}

Discovery modes

{
"inputMode": "maps_search",
"searchQueries": ["dentists in Miami FL"],
"mapsProviderActorId": "compass/crawler-google-places",
"maxResultsPerQuery": 10,
"maxTotalResults": 10,
"maxDiscoveryCostUsd": "0.50"
}

Maps mode calls the configured child Actor with hard item, cost, memory, and timeout limits. The provider adapter uses the timeout parameter exposed by the installed Apify client and remains compatible with newer clients that expose run_timeout. The default dataset of the child run is streamed into the audit pipeline.

Existing Apify dataset

{
"inputMode": "dataset",
"apifyDatasetId": "YOUR_DATASET_ID",
"maxTotalResults": 100,
"websiteField": "website",
"nameField": "title"
}

Recognized fallbacks include website, websiteUrl, website_url, title, name, businessName, rating, totalScore, reviewsCount, and reviewCount.

Business objects

{
"inputMode": "businesses",
"businesses": [
{
"title": "Relax and Smile Dental Care",
"website": "https://www.relaxandsmile.com/",
"category": "Dentist",
"rating": 4.9,
"reviewsCount": 500
}
]
}

Domains

{
"inputMode": "domains",
"domains": ["https://www.relaxandsmile.com/"]
}

Exactly one source mode is accepted. Conflicting source fields and unknown top-level fields are rejected.

Website audit behavior

The auditor fetches public HTML with httpx. It does not execute JavaScript.

OutcomeauditStatusCommercial scoring
Valid homepage, no secondary failuresuccessEnabled
Valid homepage, secondary-page failurepartialVerified checks only
Structurally incomplete or commercially unresolved homepage after controlled retriespartialDisabled, absence checks remain null, score is 0, confidence is capped at 0.35
Timeout, DNS, TLS, 403, 404, 429, 5xx, empty body, or non-HTML homepagefailedDisabled
Source explicitly supplies an empty website fieldno_websiteSource evidence only
Audit disabled or website field missing from sourceskippedDisabled

A failed secondary page cannot convert a valid homepage into a broken-website opportunity.

The auditor retries homepage responses that are structurally incomplete or commercially sparse. It uses controlled browser header profiles, ranks candidate responses by verified conversion signals and HTML completeness, and selects the most credible response. When every response remains unresolved, the Actor records the page as incomplete instead of treating missing elements as verified sales gaps.

Unknown values

Unknown data is preserved as null.

null = unknown, unavailable, or not checked
false = checked and absent
true = checked and present

A missing source field is not converted to zero or false. In particular:

  • an unknown rating is null, not 0;
  • an unknown review count is null, not 0;
  • a disabled detector returns null and does not affect scoring or outreach;
  • an unresolved homepage leaves absence detectors as null and cannot generate evidence, a service recommendation, or outreach.

Qualification contract

opportunityScore measures the observed size of the commercial gap from 0 to 100.

confidenceScore measures evidence completeness from 0.0 to 1.0.

Default qualification requires:

opportunityScore >= 40
confidenceScore >= 0.75
auditStatus in success, partial, no_website

Each output includes isQualifiedOpportunity. It is true only when all three conditions are satisfied.

Failed and skipped audits never qualify. Every scoring rule includes a stable rule name, awarded points, and localized human-readable evidence.

By default, outreach is generated only for qualified opportunities. Set generateOutreachForAllResults to true only when you deliberately want outreach for lower-scored results.

Target services

targetService supports:

  • auto;
  • online_booking;
  • website_redesign;
  • lead_capture;
  • tracking;
  • crm_automation.

A service is recommended only when matching evidence exists.

Languages

outputLanguage supports en, pt-BR, and es.

The selected language controls:

  • evidence;
  • score-breakdown evidence;
  • recommended service;
  • opportunity reasons;
  • gap summary;
  • outreach angle;
  • first message.

Output

The Actor exposes two outputs.

Qualified opportunities and audit results

The default dataset contains qualified opportunities by default. Set onlyReturnOpportunities to false to include all audit outcomes.

The primary output link opens the qualified-opportunities view, which prioritizes score, confidence, qualification status, recommended service, gap summary, and first message. With the default onlyReturnOpportunities setting, every row in this view is qualified.

Important fields include:

businessName
category
website
rating
reviewsCount
websiteDataStatus
auditStatus
failureType
bookingDetected
bookingProvidersDetected
bookingUrls
contactFormDetected
contactPageDetected
chatDetected
whatsappDetected
ctaDetected
httpsDetected
mobileViewportDetected
googleAnalyticsDetected
googleTagManagerDetected
metaPixelDetected
opportunityScore
confidenceScore
isQualifiedOpportunity
scoreBreakdown
evidence
serviceToSell
opportunityReasons
gapSummary
outreachAngle
firstMessage
pagesChecked
errors

Run summary

The RUN_SUMMARY key-value store record reconciles:

  • discovered, normalized, unique, and duplicate records;
  • audited, qualified, filtered, pushed, and charged records;
  • worker and push failures;
  • rejected or unsafe domain inputs and their reasons;
  • spending-limit termination;
  • child Actor ID, run ID, dataset ID, and status;
  • configured Maps cost ceiling and reported child cost.

Domain naming

In domains mode, the Actor starts with a hostname-derived fallback. It then evaluates business names from JSON-LD, Open Graph site metadata, application-name metadata, logo labels, headings, page-title segments, and hostname affinity. Generic SEO phrases, template names, and unclean HTML entities are penalized or rejected before a name is used in output or outreach.

Deduplication

Deduplication uses this priority:

  1. Google Maps placeId;
  2. canonical website hostname;
  3. normalized phone number;
  4. normalized business name plus a non-empty address.

A business name without an address is not sufficient to merge records, which avoids removing legitimate branches.

Bounded processing

Discovery is streamed. Full business records are retained only in the active batch.

The default batch size is 25 and processing occurs in concurrency-sized waves. When the user spending limit is reached, the Actor does not start the next wave or batch.

Security boundaries

Before each homepage, redirect, or secondary-page request, the Actor:

  • accepts only HTTP and HTTPS;
  • rejects credentials embedded in URLs;
  • validates DNS results;
  • blocks private, loopback, link-local, reserved, multicast, and unspecified addresses;
  • blocks localhost and metadata targets;
  • validates each redirect target;
  • limits redirects and response size;
  • validates content type;
  • crawls secondary pages only on the same normalized hostname.

External booking URLs may be recorded as evidence but are not crawled as internal pages. Unsafe, private, empty, or invalid domain inputs are not requested and are listed in RUN_SUMMARY.rejectedInputs with a reason.

Responsible use

The Actor audits publicly accessible business websites. Users are responsible for complying with applicable privacy, marketing, outreach, and data-protection laws.

Review the evidence and the target jurisdiction's rules before using generated outreach.

Limitations

  • JavaScript-rendered forms and widgets may not appear in source HTML.
  • Detection is heuristic and should be reviewed before outreach.
  • The Maps provider is an external Actor with its own schema and lifecycle.
  • DNS is validated immediately before requests, while the HTTP transport performs its own connection-time resolution.
  • Dataset storage is append-only, so duplicate source-query merging is complete inside the active batch while identity deduplication remains global.
  • Dataset views organize columns but do not apply server-side row filtering. The default onlyReturnOpportunities setting is what guarantees a qualified-only dataset.

Development and validation

python -m compileall src scripts
python -m ruff check .
python -m mypy src
python -m pytest -v
python -m pytest --cov=src --cov-report=term-missing
python -m pytest -m smoke -v
python scripts/validate_schemas.py
apify validate-schema
docker build -t local-business-opportunity-finder .
docker run --rm local-business-opportunity-finder

GitHub Actions validates dependency resolution, unit tests, coverage, lint, type contracts, schemas, Docker, and mock integration. Cost-bearing live validation requires an APIFY_TOKEN secret and an explicit spending ceiling.

Support

When reporting a problem, include the Actor run ID, input mode, redacted input, relevant dataset item, expected behavior, and observed behavior.