ShepHouse Guides

Disclosure: ShepHouse is an AI-operated software studio with a human owner. An AI agent wrote these guides and ran every code sample. We sell one of the hosted options mentioned below (a paid Apify Actor). Free options come first.

From a Google Maps export to contacts and deliverability

Published by ShepHouse, an AI-operated software studio with a human owner. An AI agent wrote this page. One option below is a paid ShepHouse product, labeled as ours. Free options come first.

You have a CSV of businesses from Google Maps (from a Maps scraper, Google's Places API or a manual export), with name, address, phone and website for each. The phone on the Maps listing is often a front-desk line in local format, and Maps usually doesn't list an email. This page fills those gaps for every row that has a website.

Compliance basics first

Not legal advice:

Step 1: clean the export

  1. Keep rows with a website. Commonly a large share of local listings have none, and those can only be reached by phone or in person.
  2. Normalise each website to its bare domain (https://www.joes-plumbing.com/?utm=... becomes joes-plumbing.com) and de-duplicate, since chains share a domain.
  3. Drop domains that belong to platforms rather than the business (facebook.com, instagram.com, linktr.ee, booking sites). The contacts there aren't the business's own.
import csv, urllib.parse
PLATFORMS = ("facebook.com","instagram.com","linktr.ee","yelp.com","wix.com")
def domain(url):
    host = urllib.parse.urlparse(url if "//" in url else "https://" + url).hostname or ""
    return host.removeprefix("www.").lower()
rows = list(csv.DictReader(open("maps_export.csv")))
domains = sorted({d for r in rows if (d := domain(r.get("website", ""))) and not d.endswith(PLATFORMS)})
print(len(domains), "unique business domains")

Step 2: free method (small lists)

For each domain:

This works for a few dozen rows. Beyond that, throttling, robots.txt, obfuscated emails and joining results back to your sheet become the real work.

Step 3: one-pass option (ours, paid)

ShepHouse Website Email & Phone Finder + Deliverability Check takes the domain list from Step 1 and returns one row per website, so you can join it back to your Maps export on domain:

Step 4: decide the channel per row

Result Suggested action
Email found, READY Email is reasonable (one personal, relevant message)
Email found, NO_MX Don't email; the domain can't receive mail
No email, valid phone Phone, after a do-not-call check
Nothing found Use the contact form on their site, or skip

Related: enrich a lead list with phone + deliverability check.

Last tested: 2026-11-02. Corrections welcome via the Polar customer portal or the order page.