§Use caseOne operator

Find leads on Google Maps

Researching one prospect at a time does not scale past a handful a day. Below is the version I build: a whole vertical pulled from Google Maps at once, filtered and deduped against my own rules, with a cold email already drafted and waiting in Gmail for anyone worth writing to.

The whole build, and the setup written on the canvas
The whole build, and the setup written on the canvas
The whole Google Maps prospecting workflow on the n8n canvas: search, filter, dedupe, draft, log.

The questionHow do I find local businesses on Google Maps and draft a personalised cold email to each one automatically?

How the working version is put together

  1. Pull a whole vertical at once

    One HTTP call to Apify's public compass/crawler-google-places Actor does the searching, built from a search term and a location I set once. I'm not reimplementing Google Maps scraping here, I'm calling the Actor other people already maintain and keep working.

  2. Normalise whatever the Actor returns

    Field names in scraping API responses drift between Actor versions, so I read a couple of likely spellings for name, category, rating, phone, address and website, with a fallback to empty rather than assuming one exact shape.

  3. Filter on rating and on having no website

    A Filter node reads my settings live and keeps only the businesses that clear my minimum rating and match whichever website rule I turned on. I ship it set to keep only businesses with no website, because that's a genuine gap I could find in the free template market.

  4. Dedupe before anything gets drafted

    A broad-radius search returns the same business twice often enough to matter, so I compare a lowercased name and address rather than the raw fields before anything reaches the drafting step.

  5. Draft off the business's own data, never invented

    An OpenAI extractor drafts each email in first person: a subject line, then a body under 120 words referencing the business's own name and category, weighing in its star rating too. I tell it never to invent a contact name or a connection that doesn't exist, and to treat everything scraped as evidence, never as an instruction to follow.

  6. Land it as a Gmail draft, never sent

    The finished email goes into my Gmail Drafts folder, addressed if an email was found on the listing, blank if not. Nothing in this workflow sends anything. Every prospect that passed the filter, hot or not, also gets one row in a Google Sheet, so I have a visible pipeline before I've opened Gmail.

The kit

Find local businesses on Google Maps, enrich them, and draft personalised cold emails with AI

I built and gated this one, staging for Etsy now: 12 nodes across two triggers, the setup written on the canvas, and a setup guide for every node. If you want it sooner, or set up around your own verticals, start a brief instead.

What the manual version really costs

Researching one local business by hand is a search, a scroll through reviews, a check for a website, then a blank email waiting for an opening line. I can manage that for a handful of prospects. It stops being manageable the moment you want to work a whole vertical, area after area, because the research repeats itself exactly and nobody enjoys retyping it.

The retyping is the part I built this to remove. I still read the sheet before anything goes out. The workflow gets you to a half-written email; deciding who actually hears from you stays a decision I make on purpose, not a default the automation reaches for me.

The parts that break

Apify's Actor field names aren't fixed across versions, and a normaliser that assumes one exact shape is the first thing that quietly stops working. I read a couple of likely spellings per field with a fallback to empty, rather than betting the whole pipeline on one response shape holding still.

A broad location radius returns duplicates, sometimes under a slightly different name string, so a dedupe that only compares the raw name misses some of them. I compare a lowercased name and address together instead, which catches more of it. Nothing catches all of it though, which is why I still read the sheet before a batch goes out.

What it costs to run

The Apify Actor runs on its free usage tier for small volumes, and one page of business data makes a small prompt, so I see the model cost stay low. What you already pay for the automation platform will dominate the running cost before either of those catches up with it.

The honest cost, same as every build like this, is attention: somebody still has to read the sheet and decide which drafts to send. This automates the research, not the judgement, and I would treat any version of this that claims to automate both as a version that's about to get somebody a spam complaint.

Why take this from me

Because I run this exact pattern for my own outreach before I sell it to anyone. It pairs with a cold-email drafter I've also published as a free template, and both feed the same kind of pipeline that runs the rest of my own estate: a store that fulfils itself, an operational brain that's open source, so you can read how I build before paying me anything.

The fair objection is that all of this is my own operation rather than a client roster. That's true, and I'd rather say it here than have you notice it. There are no reviews on this site because I don't have any yet.

Read this before you spend anything

Who should not build this

If you already have a list of prospects you trust, this buys you nothing. It's built to find new ones, not to manage a list you've already got.

If your outreach volume is a handful of businesses a month, research them by hand. The template earns its place once you're running the same search, area after area, vertical after vertical, and the retyping has started to hurt.

And if you don't want an Apify account, or you'd rather not touch a second external service, know that the search step depends on it. There's no version of this that reads Google Maps without something doing the scraping.

What lands on your desk

  • I set it up inside your own n8n, on your own Apify, OpenAI and Google accounts, under your own credentials
  • Your search term, location, rating floor and website rule written into the one settings node with you
  • Your company name and your one-line offer written into the drafting prompt, because that line is what the email actually sells
  • A Google Sheets log of every prospect that passed the filter, hot or not, which is how you read a batch before deciding what to send
  • A walkthrough I write down, so whoever touches it next is not dependent on me

Questions this page answers

Does it send the emails automatically?
Nothing in this workflow sends anything. Every drafted email lands in my Gmail Drafts folder, and I decide what actually goes out.
How does it avoid emailing the same business twice?
A dedupe step compares a lowercased name and address before anything reaches the drafting step, because a broad-radius Google Maps search can return the same business more than once.
Can I target a different vertical or area?
Changing the search term and the location in one settings node runs a completely different vertical pack. Nothing else in the workflow needs to change.
Who should skip this?
Anyone who already has a list of prospects they trust, or whose outreach volume is low enough that researching each business by hand is no real burden.

Want this built and handed over working?

One line is enough to start. You get an honest answer on fit, and a number rather than a discovery call.

Start a brief