Google Maps Tech Stack & Lead Enrichment avatar

Google Maps Tech Stack & Lead Enrichment

Pricing

from $3.50 / 1,000 enriched business leads

Go to Apify Store
Google Maps Tech Stack & Lead Enrichment

Google Maps Tech Stack & Lead Enrichment

Finds public Google Maps business listings and optionally visits each public website for emails, social links, and deterministic technology signals.

Pricing

from $3.50 / 1,000 enriched business leads

Rating

0.0

(0)

Developer

Shwetanshu Mehta

Shwetanshu Mehta

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Share

This Actor reads public Google Maps search result HTML and returns the phone number when the listing publishes one. When a listing exposes a public website, it also makes a bounded same-site crawl for contact emails, social links, and deterministic technology markers. It does not use private credentials, CAPTCHA bypasses, undocumented authenticated APIs, or invented enrichment.

Input

In the form view, add each search as a separate item in Search keywords. Do not paste the complete JSON object into that individual field.

If you use the full JSON input editor, paste the complete object below:

{
"searchKeywords": ["plumbers in Austin TX", "dental clinics in Miami"],
"maxResults": 200,
"maxPagesPerKeyword": 5,
"maxRetries": 2,
"proxyConfiguration": { "useApifyProxy": false },
"languageCode": "en",
"countryCode": "us",
"deepCrawlWebsites": true,
"detectTechStack": true
}

maxResults is the run-level cap. The Actor requests up to maxPagesPerKeyword pages of roughly 20 places per keyword and stops when a page has no new places. Failed or challenged Google result pages get at most maxRetries retries. Proxying is opt-in; when enabled, each attempt uses a fresh proxy session. Business website enrichment stays direct to avoid multiplying proxy bandwidth. Public-site markup and anti-bot behavior can change; challenge pages are detected, retries are bounded, and CAPTCHAs are never solved or bypassed. Unexpected empty result pages are reported as bounded, query-stripped warnings in RUN_SUMMARY instead of being silently treated as healthy.

Output

Each dataset item contains placeId, title, rating, address, phone, website, emails, socialLinks, techStack, techEvidence, hasMetaPixel, and bounded crawl diagnostics. phone is the public Google Maps phone number when available; otherwise it is null. techEvidence explains why a technology was reported, and Universal Analytics is kept distinct from GA4. enrichmentStatus, qualityScore, and isChargeable make completeness explicit.

Example record:

{
"title": "Austin Premier Plumbing",
"address": "123 Main St, Austin, TX",
"phone": "+1 512-555-0100",
"website": "https://austinpremierplumbing.com/",
"emails": ["contact@austinpremierplumbing.com"],
"techStack": ["WordPress", "Google Tag Manager"],
"techEvidence": { "WordPress": ["HTML contains a WordPress asset or marker"] },
"enrichmentStatus": "enriched",
"qualityScore": 100,
"isChargeable": true,
"searchKeyword": "plumbers in Austin TX"
}

Resource controls

  • One search and one website page are processed at a time; no unbounded Promise.all fan-out.
  • Response bodies are streamed with a hard byte limit before parsing.
  • Website queues, visited URLs, emails, links, and technology markers are capped.
  • Optional proxy dispatchers are short-lived and closed after each Google result-page attempt.
  • Dataset records are pushed immediately instead of retaining the result set.

Monetization

The manifest declares the enriched-lead pay-per-event at $0.0035 per useful record ($3.50 per 1,000). Listing-only rows without a phone, email, social link, or technology signal are still returned for transparency but are not charged.

Local development

npm install
npm test
npm run check
apify validate-schema .actor/input_schema.json
apify run --purge