Skip to main content
Thirdwatchthirdwatch
Business & local data

Turn Google Maps Businesses Into CRM-Ready Records

Normalize Google Maps business data and website contacts into deduplicated account and contact records for HubSpot, Salesforce, or a warehouse.

Jul 21, 2026 · 2 min read · 296 words
See the scraper →

Pushing raw Maps rows directly into a CRM creates duplicates quickly. The same company may appear under two locations, two name spellings, or an old phone number. Build the account key first, then enrich.

The Google Maps Contact Enricher accepts the original business objects and passes their fields through beside the website contacts.

Normalize the account identity

Strip www, tracking paths, and trailing slashes from the website. Use the registrable domain as the primary account key. Preserve location IDs separately because a chain can have many branches under one domain.

from urllib.parse import urlparse

def domain_key(url):
    host = urlparse(url if "://" in url else "https://" + url).hostname or ""
    return host.lower().removeprefix("www.")

for row in enriched_rows:
    row["account_key"] = domain_key(row.get("website", ""))

If no website exists, use the Maps place ID. Do not merge on phone number alone; shared call centers and franchise numbers are common.

Split account fields from contact points

Account fields include name, category, address, rating, review count, location URL, and domain. Contact points include the email and phone arrays plus social profiles. Keep page provenance where possible.

For a CRM with one email field, choose primary_email but store the complete list in a JSON property or warehouse table. This prevents data loss when the business publishes separate booking, sales, and support addresses.

Upsert without overwriting good data

Use a field-level rule: fill empty CRM fields automatically, append newly discovered contact points, and send conflicting values to review. A scraper should not replace a rep-confirmed phone number just because a footer changed.

Save enriched_at, source URL, and run ID. Those fields make refreshes and debugging straightforward.

The end product is not merely a CSV. It is a repeatable account-ingestion process with stable keys, contact provenance, and safe update behavior.

Frequently asked questions

What should be the CRM account key?

Use the normalized website domain when available, then fall back to a stable Google Maps place ID. Names alone create too many false merges.

Should every extracted email become a contact?

No. Generic addresses are better stored as account-level contact points unless a person's identity is publicly attached to them.

Related

Try it yourself

100 free credits, no credit card.

About 30 real searches. Add the MCP to Claude or Cursor in two minutes.