Skip to content

How to Find Business Emails from Google Maps

Find business emails by category and city, review source pages, export contacts, and understand saved-lead targets and missing matches.

Dievio Team · Growth Systems · November 6, 2026 · 7 min read

A location pin points to a storefront facade; an orange arrow runs from the facade's small website contact-page rectangle to a prominent opened email envelope.

To find business emails from Google Maps, use the Google Maps Email Extractor. Enter a business category and a city, choose how many email leads you want to save, and run the Actor in Apify. It finds relevant places, visits their associated business websites and collects published email addresses with source details.

You can do this with one Actor and an input form. The emails come from websites linked to the businesses: a Maps listing supplies the business and website context, then the website crawl supplies the contact evidence.

Choose direct email search or existing-list enrichment

Use this Actor when you are starting with a market, such as bike repair shops in Portland. If you already have a CSV and must keep every original place in the final report, use the separate Maps dataset-to-website enrichment workflow.

Start from the input you already have
Your starting pointHow to proceed
A business type and cityUse the search fields below.
Known Google Place IDsEnter them in placeIds.
Known Maps listingsEnter supported URLs in startUrls.
An existing places CSV with websitesKeep the CSV and join website contact results back to it.
A list of websites without Maps dataUse the website email scraper guide.

Step 1. Set up a small email search

Open the Google Maps Email Extractor on Apify and click Try for free. Sign in and open its editable Input form in Apify Console.

  1. Enter bike repair shop in Search term(s).
  2. Enter Portland, Oregon, USA in Location. Use one concrete area for the run.
  3. Set Number of email leads to save to 10. This corresponds to maxCrawledPlacesPerSearch.
  4. Choose emailsOnly for the contact result mode.
  5. Set the contact page limit to 2 for the first pass.
  6. Set includePersonalData to false if you mainly want generic company inboxes.
  7. Review the Actor’s Pricing tab, set your spending limit and click Start.

The input reference shows the current labels and options. The screenshot below is a read-only field reference; enter your search in the Console form.

Google Maps Email Extractor fields for search terms, location, saved email lead target, result mode and website page limit
The read-only field reference distinguishes the saved-lead target from the website pages checked per place.

JSON for the same first run

{
  "searchStringsArray": ["bike repair shop"],
  "locationQuery": "Portland, Oregon, USA",
  "maxCrawledPlacesPerSearch": 10,
  "contactResultMode": "emailsOnly",
  "contactPagesLimit": 2,
  "includePersonalData": false,
  "website": "withWebsite",
  "language": "en"
}

The website availability filter is a paid option. Keep the current pricing and your budget in view when using it. Turning off personal data keeps mostly generic addresses such as info, sales or contact inboxes; review the returned addresses for your own use case.

Understand what “ten email leads” means

In emailsOnly mode, the result limit targets saved business rows with email contacts. It does not mean the Actor will inspect only ten places. It can search and scan additional businesses while trying to find ten eligible rows.

One saved business can contain several addresses in its emails array. Count businesses and unique email addresses separately. Ten business rows do not necessarily mean exactly ten distinct inboxes, especially when several branches share a company contact.

How the contact result modes affect your export
ModeWhat is saved
emailsOnlyBusiness rows with an email match.
contactsOnlyRows that meet the Actor’s broader contact criteria.
allPlacesEligible place rows including those without email. Other active filters still apply.

If you need a denominator such as “how many of these 100 shops had email?”, keep a fixed original place list. A search that saves only email matches cannot, by itself, show every business that was considered or excluded.

Step 2. Check the emails and their source pages

When the run finishes, open the Dataset. Begin with a few businesses you can recognize. Compare their Maps listing, website and returned addresses. Open the source page to confirm that the email belongs to the intended business.

  • Keep placeId, the business title, Maps URL and website.
  • Read the returned emails array.
  • In emailDetails, keep each address together with its sourceUrl, domainMatch and available type.
  • Use contactStatus and the crawl details to understand how the row was enriched.

For a fictional shop, an address such as service@northstar.example found on its contact page is a sourced contact. The source URL tells you where it was published. Deliverability and whether it reaches the right team are separate checks before outreach.

A shared franchise website can return a head-office inbox. Keep that as a company-level contact until the page establishes that it serves the specific branch. A domain match is helpful evidence, but it does not identify the person or local team behind the inbox.

Dievio

Your next customer starts here.

Find decision-makers by role, company and location. Build your next prospect list in Dievio.

Find my leads

Free audience preview · No credit card

Find leadsExample
FounderSoftwareUnited States
AM
Alex MorganFounder & CEO · Northstaralex@northstar.example
JC
Jamie ChenCo-founder · Formlyjamie@formly.example
Work emailsCompany detailsCSV export

Step 3. Download a useful email CSV

  1. Open the completed run’s Dataset and choose CSV export.
  2. Include the place identifiers, business name, website and email fields.
  3. Keep source details in the export where available. Download JSON as well if nested emailDetails are difficult to read in CSV.
  4. Save the original file with its run ID and Dataset ID.
  5. Prepare a contacts sheet with one row per place and email when you need individual addresses.

For a clean contacts sheet, preserve placeId, email, sourceUrl and the original business context. Deduplicate repeated place-and-email pairs. If you create a separate unique-inbox list, retain a mapping back to all businesses associated with each inbox.

Scale the search and understand missing contacts

The saved-lead target accepts values up to 100,000 per search term or URL. Increase gradually after reviewing the small test. The number of available matches depends on the category, area, websites, scan depth and spending limit.

Use one city per run and save a task for each market. A multi-term search may contain overlapping businesses; deduplicate by Place ID when combining exports. Keep the source search and run ID if you need to trace how each lead was found.

When a business has no saved email

A business may have no listed website, publish only a contact form, or place its address beyond the current page limit. A website can also be blocked or incomplete. In emailsOnly mode, a place without a match may never appear in the saved Dataset.

To investigate a fixed sample, submit known Place IDs, select allPlaces and use website: "allPlaces" if you want to include places without listed sites. Remove the example category search. Keep the original ID list, and set the result target high enough for the sample.

Review contactSignals.pagesFetched and available website crawl details. If the evidence suggests the relevant contact page was missed, try a page limit of 3–5 for those places. Increasing depth can help reach more pages, but it also increases work and cannot create an address that the site does not publish.

Check why the run stopped

Read RUN_SUMMARY in the run’s key-value store. Compare target, saved and targetReached, then read exhaustionReason. The reasons target_reached, frontier_exhausted and charge_limit_reached tell different stories about the same saved count.

If a charge limit stopped collection, keep the saved contacts and label the search partial. If the search frontier was exhausted, check enrichment.contactPagesFetched and filteredBeforePush before changing the city or scan depth. A missing row without successful crawl evidence remains unconfirmed.

Run Google Maps email search with your agent and Apify MCP

You can ask an MCP-compatible agent to handle the run and contact export. Connect your client to https://mcp.apify.com and authorize your Apify account using the official MCP setup guide. Give the agent the exact Actor name, area, target and budget.

Use x_guru/google-maps-email-extractor.
Find business emails for bike repair shops in
Portland, Oregon, USA.

Inspect the current input schema first.
Target 10 saved business rows using emailsOnly.
Use contactPagesLimit=2, includePersonalData=false,
website="withWebsite" and language="en".
Approved run budget in USD: [AMOUNT]
Apply it through callOptions.maxTotalChargeUsd.

Wait for the run. Read the complete Dataset and RUN_SUMMARY.
Preserve placeId, title, website, Maps URL, emails and each
email's sourceUrl and domainMatch where available.
Save the raw output and a contacts CSV with one row per
placeId and email. Keep company-level contacts identifiable.
Report saved businesses, distinct emails, stop reason,
run ID and Dataset ID. Ask before expanding the search.

The agent starts the run with call-actor, waits using get-actor-run and reads results with get-dataset-items. Large Datasets need successive pages. Ask it to preserve the source evidence when flattening the results into a CSV.

Keep your next step tied to the contact source

For a complete place inventory, use the business CSV guide. For contact coverage across an existing file, enrich that file and join the results back. To repeat these runs from your own application, follow the Apify API and export guide.

Keep reading

Build your first list.

100 free credits. No credit card required.

Start free