Google Maps Leads Website Audit & Pitch Generator avatar

Google Maps Leads Website Audit & Pitch Generator

Pricing

from $4.00 / 1,000 business auditeds

Go to Apify Store
Google Maps Leads Website Audit & Pitch Generator

Google Maps Leads Website Audit & Pitch Generator

Audit local business websites from a Google Maps dataset or URL list. Get a 0-100 problemScore and A-F grade, the owner's name, emails, phones and socials, plus a personalised cold email opener. For web design, SEO and marketing agencies. No AI cost.

Pricing

from $4.00 / 1,000 business auditeds

Rating

0.0

(0)

Developer

LatentLark

LatentLark

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

an hour ago

Last modified

Share

Turn a list of local businesses into qualified, ready-to-pitch leads. Give it a Google Maps scraper dataset or a list of websites. For every business it audits the website, scores how much help it needs (0–100), finds the owner's name, emails, phones and social profiles, and writes a personalised pitch angle and cold-email opener from what it found.

Built for web designers, SEO and marketing agencies, freelancers, lead-gen sellers and anyone selling services to local businesses (plumbers, dentists, salons, restaurants, contractors, clinics…).

  • 🔎 Website audit: HTTPS/SSL, title & meta description, mobile viewport, H1, outdated © year, load time & page size, Google Analytics/GTM, Meta/TikTok/Google Ads pixels, online booking, live chat, contact forms, LocalBusiness schema, site builder (WordPress, Wix, Squarespace, GoDaddy, Shopify, Duda, Webflow…).
  • 🎯 problemScore + grade (A–F): sort by score, and the businesses that need you most come first. A lead with no website or a broken site scores 100.
  • 👤 Owner & contacts: owner/founder name from the about, team and contact pages; emails (generic vs personal, with an MX check), phones, Facebook/Instagram/LinkedIn/Yelp/… links.
  • ✉️ Pitch angle + email opener: template-based (no AI cost, no hallucinations), built from the lead's biggest real issue, e.g. "Hi Dr. Smith, I couldn't find a way to book or send a request on …".
  • ⭐ Keeps Google Maps rating and review count and flags low ratings or few reviews.
  • 🔐 Limited permissions: it can read only the one dataset you pick, nothing else in your account.
  • 💸 Pay only for results: blocked sites, errors and duplicates are free.

Results: one row per business with problemScore, grade, top issue, owner name, email and a personalised cold email opener

Quick start (first run in about 1 minute)

Try it now: the form is prefilled with 2 websites. Click Start and you get 2 audited leads in under a minute for about $0.02.

With your own leads:

  1. Run any Google Maps scraper (for example compass/crawler-google-places) for e.g. "plumber in Austin, TX".
  2. In Google Maps dataset here, pick that run's dataset (or paste its dataset ID) and click Start.
  3. Open the Overview tab: leads with the highest problemScore first, with owner name, email and a ready-made opener.

No Maps data? Paste website URLs into Websites instead (Joe's Plumbing | joesplumbing.com lets you add the business name too).

Walkthrough: the prefilled form, click Start, then the audited leads in the Overview tab

What you can do with it

  • Web design / SEO agencies: find local businesses with outdated, slow, insecure or non-mobile sites, or with no website at all, and pitch each one with a specific, verifiable reason.
  • Marketing / ads freelancers: find businesses without analytics or ad pixels ("you can't retarget your visitors").
  • Booking / chat / review software sellers: filter on checks.bookingTools, checks.chatWidgets and Maps rating.
  • Lead-gen sellers: enrich a Maps export with owner names, emails and a qualification score before you sell or import it.
  • Monitoring: schedule it with onlyNew to audit only businesses you haven't seen before.

Input

FieldTypeDescription
mapsDatasetIddatasetDataset (ID or name) from a Google Maps scraper run (compass/crawler-google-places format and similar). Uses title, website, phone, rating, review count, category, city, emails.
websitesarrayWebsite URLs or domains. Optional Business Name | domain.com format. Can be combined with the dataset.
businessNamesarrayOptional names matching websites by position.
maxBusinessesintegerMaximum businesses to audit (default 100).
includePitchbooleanGenerate pitchAngle and emailOpener (default true).
includeNoWebsitebooleanAlso output Maps businesses with no website (no-website leads are great web-design leads). Default true.
onlyNewbooleanSkip businesses audited in earlier runs (stored per monitorKey).
monitorKeystringName of the onlyNew memory, e.g. austin-plumbers.
maxSubpagesintegerAbout/team/contact pages to crawl per site to find owner and email (0–5, default 3).
checkMxbooleanCheck that the email domain accepts mail (default true).
maxConcurrencyintegerSites audited in parallel (default 10).
proxyFallbackbooleanRetry blocked sites once through Apify datacenter proxy (default true). Residential is never used unless you set it.

Example inputs

From a Google Maps scraper dataset:

{
"mapsDatasetId": "YOUR_MAPS_DATASET_ID",
"maxBusinesses": 200,
"onlyNew": true,
"monitorKey": "austin-plumbers"
}

From a list of websites:

{
"websites": ["Joe's Pizza | joespizzanyc.com", "https://www.example-dental.com"],
"includePitch": true
}

Output

One row per business. Example (shortened):

{
"businessName": "Example Family Dentistry",
"website": "https://www.examplefamilydentistry.com/",
"domain": "examplefamilydentistry.com",
"category": "Dentist",
"city": "Austin",
"rating": 4.9,
"reviewCount": 120,
"status": "ok",
"problemScore": 26,
"grade": "B",
"topIssues": ["No analytics installed", "No retargeting/ad pixel", "No booking, contact form or chat"],
"issueCodes": ["NO_ANALYTICS", "NO_AD_PIXEL", "NO_LEAD_CAPTURE", "NO_LOCAL_SCHEMA"],
"ownerName": "Dr. Jane Smith",
"ownerTitle": "Owner and Lead Dentist",
"primaryEmail": "info@…",
"emailType": "generic",
"emailMxValid": true,
"phones": ["(512) …"],
"socials": {"facebook": "https://facebook.com/…", "instagram": "https://instagram.com/…"},
"checks": {"https": true, "sslValid": true, "builder": null, "analytics": [], "adPixels": [], "bookingTools": [], "chatWidgets": [], "hasContactForm": false, "copyrightYear": 2026, "responseTimeMs": 467, "pageSizeKb": 95},
"pitchAngle": "Add online booking / a lead form",
"emailOpener": "Hi Dr. Smith, I couldn't find a way to book or send a request on examplefamilydentistry.com. Visitors who don't want to phone have no way to reach you."
}

status is one of ok, noWebsite, down, httpError, blocked (bot protection, not charged), error (not charged).

The run also saves a SUMMARY record in the key-value store: counts by status and grade, average problemScore and charged events.

problemScore

Points per issue, capped at 100: no website / site down 100, broken site 85, no HTTPS or invalid SSL 20, not mobile-friendly 18, very slow (>6 s) 14, no booking/form/chat 10, low Google rating (<4.0) 9, no analytics 8, slow (>3 s) 8, outdated © year 7, missing title 7, few reviews 6, no http→https redirect 6, no ad pixel 5, missing meta description 5, heavy page 4, and smaller items (no H1, no LocalBusiness schema, no social links, no online booking) 2–3. Grades: A ≤20, B ≤40, C ≤60, D ≤80, F >80.

Pricing

Pay per event, no subscription:

EventPrice
Actor start$0.005 per run
Business audited$0.004
Contact found (owner name or website email)$0.002 extra

Example: 500 businesses with contacts found for 300 = $0.005 + 500 × $0.004 + 300 × $0.002 = $2.61. Blocked sites, errors, duplicates, permanently closed listings and already-audited businesses (onlyNew) are free. Set a max charge per run in Apify and the Actor stops cleanly at the limit.

Limitations

  • Checks the homepage plus up to 5 about, team or contact pages. It isn't a full SEO crawl or Lighthouse test. Load time is measured server-side.
  • Sites behind strong bot protection (Cloudflare challenges, AWS WAF) are marked blocked and not charged.
  • Owner names are found from page text and structured data. Small sites often don't name the owner, so ownerName may be empty. contactName then holds the best other named person when there is one.
  • The Actor finds only emails that are published on the website. It doesn't guess or verify mailboxes; the MX check only confirms the domain accepts mail.
  • Pitch texts are templates. Review them before sending, and follow anti-spam and privacy rules (CAN-SPAM, GDPR) in your country.
  • This Actor doesn't scrape Google Maps itself. Chain it after a Maps scraper dataset.

FAQ

Which Google Maps scraper works? Any dataset with title, website, phone and optional totalScore/reviewsCount/categoryName/city, the format of compass/crawler-google-places. Common alternative field names (name, rating, reviews, site) are also recognised.

Does it use AI? No. Openers are deterministic templates filled with real findings, so there's no AI cost and nothing is invented.

Can I run it on a schedule? Yes. Use onlyNew with a monitorKey to pay only for new businesses.

Can I send results to Google Sheets? Yes, with our Google Sheets Export Actor below.

More from LatentLark