Google Maps Lead Finder & Website Opportunity Scores avatar

Google Maps Lead Finder & Website Opportunity Scores

Pricing

from $3.00 / 1,000 enriched local business leads

Go to Apify Store
Google Maps Lead Finder & Website Opportunity Scores

Google Maps Lead Finder & Website Opportunity Scores

Find local businesses by niche and location and assess public website, review and contact signals. Export explainable opportunity scores for agency prospecting. Results depend on source access and available public data.

Pricing

from $3.00 / 1,000 enriched local business leads

Rating

0.0

(0)

Developer

Scopras Data Labs

Scopras Data Labs

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

18 days ago

Last modified

Share

Google Maps Local Business Opportunity Finder

Generate qualified local business leads for web agencies, SEO consultants and sales teams. Search Google Maps by niche and location, find businesses with clear digital gaps, and prioritize outreach using explainable scores.

Discovers local businesses from Google Maps searches or direct place URLs and scores each one for website, SEO, reputation and outreach opportunity using a deterministic formula.

Input

FieldTypeDefaultNotes
searchQueriesstring[][]Categories/keywords. Combined with every location.
locationsstring[][]One task per query × location. Without searchQueries, the generic term "business" is searched.
startUrlsarray[]Google Maps search URLs or direct place URLs ({ "url": "..." } or a bare string). Invalid or non-Maps URLs are skipped with a warning; requestsFromUrl is not supported.
maxResultsPerSearchinteger20Cap per search task.
maxTotalResultsinteger100Global cap on unique businesses emitted.
includeClosedBusinessesbooleanfalseWhen false, permanently/temporarily closed places are dropped; their status is still reported when true.
languagestring"en"hl hint passed to Google Maps.
requestTimeoutSecsinteger30Per-request timeout for Maps and website fetches.
enrichFromWebsitebooleantrueEnables the SSRF-guarded website crawl.
maxWebsitePagesPerBusinessinteger2Homepage + N−1 same-origin secondary pages.
websiteConcurrencyinteger5Parallel website fetches.
respectRobotsTxtbooleantrueSkip pages disallowed by the site's robots.txt.
maxWebsiteBytesinteger1500000Hard byte ceiling per website page.

Every input field changes behaviour; there are no inert options.

Output

One dataset item per unique business — see .actor/dataset_schema.json for the full contract. Highlights:

  • placeId — a real ChIJ… Place ID or 0x…:0x… CID only when present in the source. URL slugs never become a Place ID; the value is null otherwise.
  • identityKey — deterministic name + address + rounded geo (or Place ID, or name + phone). The source URL is deliberately excluded so the same business found via different URLs merges while the same name at another address stays separate.
  • matchedSearches — every search input that produced the business; unioned on merge.
  • businessStatus — OPERATIONAL | CLOSED_TEMPORARILY | CLOSED_PERMANENTLY | UNKNOWN.
  • websiteEnrichment — requested / attempted / status (ok | skipped | failed | not-requested) / reason, plus HTTPS, mobile viewport, title, meta description, and only literally present emails, phones and social profiles. No email guessing.
  • opportunityScore, leadPriorityScore (0–100), opportunityGrade (A–F), opportunityReasons, recommendedPitch, scoreBreakdown.

The run writes a SUMMARY record to the default key-value store with search / dedupe / website counters and failuresByReason.

Scoring

opportunityScore is a weighted average of 0–1 signals: no website (w3), insecure website (w2), no mobile viewport (w2), missing meta description (w1), weak reputation vs. a 3.0–4.8 benchmark (w2), low review count (w2). Missing data lowers a signal — it never fabricates an opportunity. leadPriorityScore blends the opportunity with reachability (phone/website/email/social) and review volume. Grades use the shared 80/65/50/35 bands.

Safety

  • Google Maps host allow-list; non-Maps hosts and non-http(s) URLs are rejected with an actionable ConfigError.
  • Website fetches go through the shared safeFetch: http/https only, DNS checked against private/loopback/link-local/CGNAT/metadata ranges on every hop, manual redirects with a cap + loop detection, content-type allow-list, real byte ceiling, AbortController timeout always cleared in finally.
  • robots.txt is honoured for website pages when respectRobotsTxt is on.
  • Only same-origin secondary pages are crawled.
  • No CAPTCHA solving, no login, no private endpoints.

Known limitations

  • Google Maps returns its JavaScript shell to plain HTTP requests. This Actor reads Maps with simple HTTP fetches (no browser). Google's response to such a request contains no place listings (they are loaded afterwards by JavaScript), so live runs will usually find 0 businesses. In that case the run still finishes normally, the status message says so, and nothing is charged. Scoring, deduplication and website enrichment work, but they need places to work on; a browser-based collector is required for reliable Maps data.
  • Input problems (bad URLs, out-of-range numbers) are repaired or skipped with a warning instead of failing the run.
  • categoryName is only populated when the payload exposes it.

Pricing

Events are charged only after leads are written to the dataset, and only if at least one lead was delivered: actor-start once, lead-enriched per lead. Runs with zero results cost nothing. Delivery stops at your max-charge limit.