Google Maps Lead Qualifier | Website Gaps + Outreach avatar

Google Maps Lead Qualifier | Website Gaps + Outreach

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

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

0

Monthly active users

4 hours ago

Last modified

Share

Find local businesses you can pitch today

Enter a niche and US city. Get contactable local businesses with verified booking or lead-capture gaps, the service to pitch, and a tailored first message. Sales-ready leads and high-quality near misses are delivered separately.

This Actor combines Google Maps discovery, public website auditing, contact-route extraction, commercial qualification, and channel-specific outreach. It is built for agencies and freelancers selling online booking, lead capture, websites, tracking, or CRM automation to local businesses.

What you receive

ResultIncluded information
BusinessName, category, address, rating, reviews, website, and Google Maps URL
Best contact routePublic email, phone, checked contact form, or public WhatsApp URL, with source provenance
Verified opportunityOpportunity score, lead tier, top gaps, supporting evidence, and recommended service
Ready outreachEmail subject/body, call opener, form message, or WhatsApp message for the available channel
Quality controlsEvidence confidence, profile completeness, audit completeness, missing fields, and qualification explanation

The default view puts the sales decision first:

Business -> lead tier -> best contact -> opportunity -> top gaps
-> service to sell -> first message -> website -> Google Maps
  1. Leave Input mode set to Google Maps search.
  2. Enter a niche, city, and state, such as auto repair shops in Tampa FL.
  3. Choose how many businesses to inspect and run the Actor.
{
"inputMode": "maps_search",
"searchQueries": ["auto repair shops in Tampa FL"],
"maxResultsPerQuery": 20,
"maxTotalResults": 20,
"maxDiscoveryCostUsd": "0.50",
"targetService": "auto",
"minimumOpportunityScore": 40,
"nearMissMinimumOpportunityScore": 25,
"minimumConfidenceScore": 0.90,
"minimumInformationCompletenessScore": 0.85,
"includeNearMisses": true,
"generatePitchAngle": true,
"outputLanguage": "en"
}

Good starting searches for the US-first offer include:

  • auto repair shops in Tampa FL;
  • roofing contractors in Charlotte NC;
  • beauty salons in Phoenix AZ.

What makes a lead sales-ready

A row reaches the default Sales-ready leads dataset only when every required gate passes:

opportunity score >= 40
evidence confidence >= 90%
business profile completeness >= 85%
website audit completeness >= max(87%, configured profile floor)
commercial output completeness = 100%
overall applicable information completeness >= 87%
usable public contact route is required
critical identity and provenance fields are valid
audit status is success, partial, or trusted no_website

The sales-ready score cutoff is fixed at 40. This keeps qualification and per-result charging deterministic; input changes cannot relabel a standard sales-ready score as research output without the qualified event.

The 85% profile and 90% evidence values are minimums and may be raised. The audit gate is always at least 87% and rises with a stricter configured profile floor. The profile minimum allows one optional field to be absent when six of seven profile fields are valid: 6 / 7 = 85.71%. That subscore is exposed separately as weakestGroupCompletenessScore; the buyer-facing informationCompletenessScore is the actual known/applicable total and has its own hard 87% gate.

Critical requirements cannot be compensated by percentages. A sales-ready lead needs:

  • a credible business identity;
  • a valid website or trusted Google Maps no-website claim;
  • a usable email, phone, checked contact form, or public WhatsApp URL;
  • evidence supporting at least one commercial gap;
  • a matching service recommendation;
  • complete channel-specific outreach.

false and numeric 0 are known information. null, blank strings, placeholders, malformed URLs, and unusable phone numbers are not.

Near misses

Near misses are useful leads that pass the same evidence, information, audit, provenance, contactability, and commercial-output gates but score below the sales-ready threshold.

With the defaults, a near miss has an opportunity score from 25 through 39. It is written to the separate Near misses dataset with:

  • nearMissReason;
  • opportunityPointsNeeded;
  • the best contact route;
  • top verified gaps;
  • the matching service and outreach fields.

Near misses do not trigger the qualified-opportunity event. Records below the quality gates are not disguised as near misses; they appear only in optional audit evidence and aggregate run diagnostics.

Contact extraction and outreach

The Actor searches checked public pages for:

  • mailto: email addresses and visible email text;
  • the Google Maps source phone;
  • same-host contact pages with a usable form;
  • public WhatsApp contact links.

The preferred route is selected in this order: usable public email, valid phone, checked contact form, then WhatsApp. The output records both the selected value and its source.

Important email terminology:

  • domain_matched means the public email domain matches the business website;
  • public_free_provider means the public email uses a common mailbox provider;
  • public_syntax_valid means the public address is syntactically usable;
  • none of these labels claims inbox ownership or guaranteed deliverability.

Generated outreach is evidence-specific and channel-specific. The Actor does not send messages automatically; review the evidence and copy before contacting a business.

Output datasets

Sales-ready leads

The default dataset contains only contactable, fully qualified opportunities. Qualified publication and the qualified-opportunity charge occur atomically.

Important fields include:

businessName
leadTier
bestContactChannel
bestContactValue
bestContactSourceType
bestContactSourceUrl
bestEmail
phone
contactFormUrl
whatsappUrl
opportunityScore
topVerifiedGaps
serviceToSell
emailSubject
emailBody
callOpener
contactFormMessage
whatsappMessage
website
mapsUrl

Near misses

When includeNearMisses is true, high-quality records below the opportunity threshold are published to the run-scoped near_misses dataset. They never enter the default export.

Audit evidence

Set outputMode to all_audits to publish every audit outcome to the separate audit_results dataset. This mode is for research and troubleshooting; it does not change membership in Sales-ready leads or Near misses.

Rows that are neither qualified nor valid near misses keep technical diagnostics, scores, detector states, website, and Maps provenance, but salesPackageRedacted is true and usable contact values, discovered secondary-page URLs, raw crawl errors, booking URLs, service recommendations, top gaps, and outreach copy are removed. This prevents stricter or disabled gates from turning the audit dataset into an uncharged sales export.

Dataset views control columns and their order. They do not filter rows. Physical dataset separation provides the output guarantee.

The legacy output.results link and qualified-opportunities view remain available for existing integrations; new clients should use qualifiedLeads and the sales-ready view.

Run summary

The RUN_SUMMARY key-value-store record reconciles:

  • discovered, normalized, unique, and duplicate records;
  • audited, qualified, near-miss, filtered, pushed, and charged records;
  • rejected or unsafe inputs and their reasons;
  • worker or publication failures;
  • spending-limit termination;
  • child Maps Actor ID, run ID, dataset ID, status, cost ceiling, and reported cost;
  • all active thresholds, qualification rate, and opportunity-score statistics;
  • an explicit zero-qualified reason and suggested next actions.

Pricing

The current primary event costs $0.004 per sales-ready qualified opportunity:

Qualified leadsQualified-opportunity events
100$0.40
1,000$4.00

Near misses do not trigger that event, and zero qualified leads means zero qualified-opportunity events. The small Apify Actor-start event and the compute/discovery work still exist, so near misses do not add a qualified-opportunity event charge, but the run is not cost-free.

Google Maps discovery runs through a child Actor with an explicit maxDiscoveryCostUsd ceiling. The reported child cost is included in RUN_SUMMARY so the run can be reconciled.

Input modes

Exactly one source mode is accepted. Unknown top-level fields and conflicting sources are rejected.

The default provider is compass/crawler-google-places. Discovery has hard item, cost, memory, and timeout limits, and its dataset 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/"]
}

Manual domains do not inherit Google Maps profile fields. If critical profile or contact data cannot be established, the result fails closed instead of being presented as a qualified lead.

Website audit behavior

The auditor fetches public HTML and same-host contact or booking pages. It does not execute JavaScript.

OutcomeauditStatusCommercial behavior
Valid homepagesuccessVerified checks may score
Valid homepage with a secondary-page failurepartialVerified checks only
Commercially unresolved sparse homepagepartialAbsence checks remain unknown; no false gap scoring
Timeout, DNS, TLS, blocked response, 4xx/5xx, empty body, or non-HTMLfailedCannot qualify
Trusted Maps record explicitly has no websiteno_websiteSource-backed no-website evidence may score
Audit disabled or source website field is unknownskippedCannot qualify

Unknown evidence is preserved as null:

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

Failed and skipped audits never qualify. Disabled booking, contact, or chat checks block website qualification because required evidence would be missing.

Opportunity scoring and services

opportunityScore measures observed commercial gaps from 0 to 100. confidenceScore measures technical evidence confidence; it does not claim that the business profile is complete.

Verified checks include online booking, booking providers and URLs, contact form/page, CTA, chat, WhatsApp, HTTPS, mobile viewport, Google Analytics, Google Tag Manager, Meta Pixel, and other technology signals.

targetService supports:

  • automatic selection, prioritizing booking and lead capture;
  • online booking;
  • website redesign;
  • lead capture;
  • tracking;
  • CRM automation.

An explicit service is recommended only when matching evidence exists.

Languages

outputLanguage supports English, Brazilian Portuguese, and Spanish. It controls evidence, score explanations, service recommendations, gap summaries, and outreach copy.

Deduplication and bounded processing

Deduplication priority is Google Maps place ID, canonical website hostname, normalized phone, then normalized name plus a non-empty address. A name without an address is not sufficient to merge records.

Discovery is streamed. Processing occurs in bounded batches and concurrency-sized waves. When the user spending limit is reached, the Actor stops starting new work and records unpublished items in the summary.

Security and responsible use

Before each homepage, redirect, or secondary request, the Actor validates the URL and DNS target, blocks private and metadata addresses, checks every redirect, limits response size, validates content type, and keeps secondary crawling on the same normalized hostname.

The Actor audits publicly accessible business information. Users are responsible for complying with applicable privacy, marketing, outreach, and data-protection laws. Review the evidence and the target jurisdiction's rules before contacting a business.

Limitations

  • JavaScript-rendered forms and widgets may not appear in source HTML.
  • Detection is heuristic and should be reviewed before outreach.
  • Public-email extraction does not prove deliverability or mailbox ownership.
  • The Maps provider is an external Actor with its own schema and lifecycle.
  • Dataset storage is append-only.

Development and validation

python -m compileall src scripts
python -m ruff check .
python -m mypy src
python -m pytest -v
python scripts/validate_schemas.py
apify validate-schema
docker build -t local-business-opportunity-finder .

GitHub Actions validates dependencies, tests, coverage, lint, types, 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.

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