Google Maps Business Leads Extractor avatar

Google Maps Business Leads Extractor

Pricing

$5.00 / 1,000 lead results

Go to Apify Store
Google Maps Business Leads Extractor

Google Maps Business Leads Extractor

Extract Google Maps businesses, enrich public contact data, remove duplicates, audit websites, and rank actionable leads for agencies and sales teams.

Pricing

$5.00 / 1,000 lead results

Rating

0.0

(0)

Developer

Khoa Nguyen

Khoa Nguyen

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

Turn local-business search results into ranked, sales-ready leads. The Actor discovers Google Maps listings, normalizes and deduplicates business records, enriches public website contact details, audits common local-marketing gaps, and explains why each lead is worth contacting.

What you get

Each output item combines:

  • Business identity: name, category, status, place ID, address, coordinates, phone, website, rating, and review count.
  • Public contact enrichment: emails displayed on scanned pages, phone links, and supported social profiles.
  • Website intelligence: HTTPS, mobile viewport, title/meta/H1, schema markup, forms, calls to action, booking, ordering, analytics, technologies, content depth, and freshness signals.
  • Lead intelligence: opportunity, contactability, and data-confidence scores; final 0–100 lead score; A–D tier; recommended service; and evidence-backed reasons.
  • Provenance: source URL, query, location, run ID, and ISO timestamp.
  • Exports: dataset, OUTPUT.json, browser-friendly HTML report, CSV, and structured error report.

The default run uses realistic offline fixtures and executes the same normalization, filtering, deduplication, website-audit, scoring, reporting, and schema-validation pipeline as imported or live data. It needs no credentials and returns a non-empty dataset for Store QA.

Best use cases

  • Local SEO agencies prioritizing businesses with weak on-page SEO or low review volume.
  • Web-design agencies finding businesses without a website, mobile support, forms, or strong calls to action.
  • Reputation-management teams finding low-review or rating-improvement opportunities.
  • Franchise and multi-location teams building clean prospect datasets without collapsing distinct locations that share one domain.
  • Sales operations importing existing lists for normalization, deduplication, enrichment, and scoring.
  • Scheduled prospecting runs that output only businesses not seen in earlier runs.

Quick start

Apify Console

  1. Create or deploy the Actor.
  2. Keep Run mode set to Demo.
  3. Click Start.
  4. Open the Ranked business leads dataset view or the HTML report.

Local default run

npm ci
npm start

When the Apify SDK is unavailable outside Apify, the project uses a local storage-compatible adapter. Results are written under:

storage/datasets/default/
storage/key_value_stores/default/

Run tests and validation

# Requires npm ci first; the command intentionally rejects a global tsc
npm run typecheck
npm run lint
npm test
npm run test:coverage
npm run validate
npm run smoke
npm run benchmark
npm run security

Input modes

Demo mode

Credential-free and network-free. It uses realistic fixture businesses and website HTML while exercising the production pipeline. Demo records use reserved .test domains and are clearly marked as fixture data.

{
"runMode": "demo",
"includeWebsiteEnrichment": true,
"scoringProfile": "general"
}

Live mode

Search by business type and location, process direct Google Maps place URLs, or combine both.

{
"runMode": "live",
"searchQueries": ["dentists", "roofing contractors"],
"locations": ["Austin, Texas", "Round Rock, Texas"],
"maxResultsPerSearch": 50,
"maxTotalResults": 500,
"includeWebsiteEnrichment": true,
"maxWebsitePages": 3,
"scoringProfile": "localSeo",
"proxyConfiguration": {
"useApifyProxy": true
}
}

A proxy is strongly recommended for live discovery. The implementation uses bounded concurrency, bounded scrolling, request-per-minute limits, same-domain delays, timeouts, retries, and transparent partial-failure records. It does not include CAPTCHA solving, authentication bypass, retryOnBlocked, or obfuscated anti-bot bypass code.

Import mode

Use this mode when you already have business data from a licensed source, CRM export, prior dataset, or another Actor.

{
"runMode": "import",
"importedBusinesses": [
{
"name": "Acme Dental",
"category": "Dentist",
"address": "100 Main Street, Austin, TX 78701",
"phone": "+1 512 555 0123",
"website": "https://acmedental.example",
"rating": 4.2,
"reviewCount": 37,
"placeId": "your-source-place-id",
"googleMapsUrl": "https://www.google.com/maps/place/..."
}
],
"includeWebsiteEnrichment": true,
"scoringProfile": "webDesign"
}

Common aliases such as title, businessName, type, categories, reviews, reviewsCount, lat, lng, url, and mapsUrl are normalized by the importer.

Important inputs

InputPurposeDefault
runModedemo, live, or importdemo
searchQueriesBusiness types or complete search phrasesdentists
locationsCities, ZIP codes, regions, or countriesAustin, Texas
startUrlsDirect Google Maps place URLsempty
maxResultsPerSearchPer-query discovery cap25
maxTotalResultsHard unique-lead cap500
includeWebsiteEnrichmentCrawl public business websitestrue
maxWebsitePagesHomepage plus selected contact/about/booking pages3
scoringProfilegeneral, localSeo, webDesign, or reputationgeneral
onlyNewResultsEmit only leads not present in the named history storefalse
maxConcurrencyBrowser concurrency cap5
maxRequestsPerMinuteRequest-rate cap per crawl stage120
sameDomainDelaySecsMinimum same-domain delay0.5
maxRequestRetriesRetry cap3
emitErrorItemsPut structured partial failures in the datasettrue

The full form includes descriptions, sensible limits, section captions, editor types, and defaults in .actor/input_schema.json.

Lead scoring

The final score is deterministic and evidence-based:

  • Opportunity score: business gaps such as no website, inaccessible site, missing mobile viewport, missing meta description/H1/schema, weak CTA, no form, no booking or ordering, thin content, low review volume, or rating opportunity.
  • Contactability score: phone, website, public email, and social-profile availability.
  • Data-confidence score: identity, address, coordinates, reputation, and contact completeness.

The final score combines these dimensions as 55% opportunity, 30% contactability, and 15% data confidence. Profile multipliers change signal weighting but never hide the underlying evidence.

TierScoreMeaning
A80–100High-priority, reachable opportunity
B65–79Strong opportunity
C45–64Moderate opportunity
D0–44Low-priority or low-confidence record

Scores are prospecting heuristics, not factual claims about business performance or guaranteed sales outcomes.

Deduplication strategy

The Actor uses transitive identity grouping with multiple keys:

  • Google place ID or CID.
  • Canonical business name plus normalized address.
  • Canonical business name plus normalized phone.
  • Canonical business name plus website domain.
  • Canonical business name plus rounded coordinates.

A domain alone is intentionally not enough to merge records. This prevents separate franchise or multi-location businesses sharing a corporate website from collapsing into one lead. The richest record becomes the base, while categories, identifiers, and provenance are merged deterministically.

Website enrichment behavior

For each unique domain, the Actor:

  1. Loads the homepage.
  2. Extracts public contact and website-quality signals.
  3. Ranks internal links for contact, booking, about, and locations pages.
  4. Enqueues up to maxWebsitePages - 1 supplemental pages through the same Crawlee request queue.
  5. Applies the same proxy policy, robots rules, request limits, retries, timeouts, and resource blocking to every queued page.
  6. Shares the merged domain audit across matching business records.

Website enrichment honors robots.txt. Automatic blocked-site bypass is disabled. Public emails are filtered to remove obvious example, no-reply, image-file, and placeholder addresses.

Output example

{
"recordType": "business-lead",
"schemaVersion": "1.0",
"leadId": "lead_...",
"name": "North Loop Roofing & Exteriors",
"category": "Roofing contractor",
"address": "4812 North Loop Boulevard, Austin, TX 78751",
"phone": "512-555-0188",
"website": "https://northlooproofing.test",
"email": "estimates@northlooproofing.test",
"rating": 4.1,
"reviewCount": 18,
"leadScore": 88,
"leadTier": "A",
"recommendedService": "Reputation management",
"leadIntelligence": {
"opportunityScore": 78,
"contactabilityScore": 100,
"dataConfidenceScore": 100,
"opportunityReasons": [
"No mobile viewport detected",
"Rating improvement opportunity",
"Low review volume"
]
},
"provenance": {
"sourceType": "demo-fixture",
"sourceUrl": "https://www.google.com/maps/place/...",
"sourceQuery": "roofing contractors",
"sourceLocation": "Austin, Texas",
"runId": "local_...",
"scrapedAt": "2026-07-25T12:00:00.000Z"
}
}

See sample-output/dataset.json for the complete contract. The dataset schema defines nested business, contact, location, reputation, website-audit, scoring, error, and provenance fields.

Stored artifacts

ArtifactStoragePurpose
Business leads and error itemsDefault datasetMachine-readable result stream
OUTPUTDefault key-value storeCounts, quality metrics, billing info, and run metadata
REPORT.htmlDefault key-value storeHuman-readable lead report
LEADS.csvDefault key-value storeCRM/spreadsheet import
ERRORSDefault key-value storeError-only JSON array
SEEN_* recordsNamed history storeOptional recurring-run deduplication

Error handling

One failed source does not silently invalidate successful results. Failures produce records such as:

{
"recordType": "error",
"schemaVersion": "1.0",
"error": {
"code": "WEBSITE_ENRICHMENT_FAILED",
"message": "Navigation timeout exceeded",
"retriable": true,
"attempts": 4
},
"provenance": {
"sourceUrl": "https://business.example",
"sourceQuery": null,
"sourceLocation": null,
"runId": "...",
"occurredAt": "2026-07-25T12:00:00.000Z"
}
}

Input-contract violations fail early with a clear error. Network and parser failures are retried within configured bounds and then reported without secrets.

Pricing recommendation

The roadmap defines the primary value unit as one business result and proposes pay-per-result pricing:

  • Launch: $2.50 per 1,000 raw business results.
  • Target after validation: $3.75 per 1,000 raw business results.

Recommended Store configuration:

  • Use the synthetic apify-default-dataset-item event for simple one-result/one-charge billing, or configure the roadmap event google-maps-business-leads-extractor-result and pass it to Actor.pushData after cloud PPE validation.
  • Keep pricing to one primary result event plus the optional synthetic Actor start event.
  • Benchmark actual browser, proxy, and memory costs in Apify cloud before enabling the final price.
  • Error items are visible work products; decide during Store publication whether they are billable or should be stored only in ERRORS.

Pricing is intentionally not hardcoded in source code because Store pricing is publication configuration and must be tested against real cloud costs.

Responsible use and limitations

  • Website contact enrichment processes public pages only and respects robots.txt.
  • The Actor does not log credentials or include API keys, cookies, CAPTCHA solving, login automation, or anti-bot bypass payloads.
  • Google Maps pages and selectors change. Live discovery requires maintenance and cloud/browser regression testing.
  • Google's current terms include restrictions on scraping and storing Google Maps content. Users must review the applicable Google terms, website terms, privacy laws, marketing laws, and contractual rights before using live mode.
  • Import mode is available for data the user is authorized to process.
  • No email validity, ownership, deliverability, or consent is guaranteed.
  • Technology detection and lead scoring are heuristic.
  • Website checks are lightweight lead qualification, not a full accessibility, security, Core Web Vitals, or technical SEO audit.
  • No Actor ID is included. Add a real Actor ID only when linking this package to an existing Apify Actor.

Development structure

.actor/ Actor manifest and schemas
src/core/ validation, normalization, identity, scoring, output
src/maps/ search URL, result-feed, and place-page extraction
src/website/ pure HTML audit and merge logic
src/pipeline/ normalize/filter/deduplicate/finalize stages
src/runtime/ Apify/local adapters, crawling, demo, reporting
scripts/ lint, validation, smoke, benchmark, security
fixtures/ realistic offline business and website fixtures
tests/ unit, integration, schema, and edge-case tests
sample-output/ generated example dataset and reports

Architecture and product decisions are documented in ARCHITECTURE.md and PRODUCT_SPEC.md.

Verification status

The source package includes reproducible evidence in BUILD_REPORT.md, VALIDATION.md, and evidence/. A check is marked passed only when its command was run successfully. Docker and Apify cloud results are never inferred from local tests.