How-to 15 min Beginner Lead

How to scrape Google Maps listings into Google Sheets

Turn a Maps search (“dentists in Austin”, “warehouses in Rotterdam”) into a sheet of names, ratings and profile URLs. Useful for local lead lists, competitor maps and store-location research — as long as you stay on publicly listed businesses and follow Google’s terms.

1 Pick a query a human would type into Maps

The Actor takes query (required), maxItems (required), and optional gl / hl for country and language. Write the query the way you would in the Maps search box, including the city. “coffee” is too broad; “coffee shops in Portland OR” is a job.

Example input
{
  "query": "independent bookstores in Portland OR",
  "maxItems": 40,
  "gl": "us",
  "hl": "en"
}

2 Run Google Maps Scraper on Apify

Listed From $5.00 / 1k plus $0.09 start (as of Oct 2026). Forty rows is a cheap sanity check. Open the Dataset when it finishes and make sure you have a name, a Maps URL and a rating before you raise maxItems.

Phone numbers and websites appear when Google shows them on the public listing. They will not appear for every row — that is the source, not a scraper bug.

3 Import into Sheets

CSV download for a one-off territory. For a weekly refresh, attach lukaskrivka/google-sheets in replace mode so the tab is a current snapshot of the market rather than a growing duplicate pile. Deduplicate later by the Maps URL column if you append instead.

4 Clean the sheet for outreach (optional)

Add a status column you maintain by hand — the Sheets Actor will not overwrite extra columns if you use a workflow that only writes known fields, but replace mode will wipe the tab. Prefer append + a UNIQUE() view, or upsert on the place URL, if people are logging notes in the same sheet.

Watch-outs

Things that usually go wrong

  • Public listings only

    This is not a way to bypass Google’s terms or scrape logged-in data. You are responsible for lawful use, including personal-data rules if you store phone numbers or emails.

  • Query quality beats maxItems

    Raising maxItems on a vague query just gives you more noise. Split cities or categories into separate runs and separate tabs.

FAQ

Before you run this in production

Can I feed a list of place URLs instead of a search query?

This Actor is search-oriented (query + country). If you already have place URLs, check the live input schema on Apify — if a URL list field is not there, you need a different Maps Actor.

Will I get emails?

Only if the public listing shows one. For publicly listed social emails, EasyAPI has separate lead Actors (Instagram, LinkedIn, etc.) — do not expect Maps to fill that column.

Related tools

In the same toolkit

More how-to guides

Run Google Maps Scraper

Start with a 50-row test on Apify’s free credits, then schedule it once the sheet looks right.