Most cold email templates are written for software buyers who have a sales team and a calendar full of demos. A plumber reading email between jobs needs something shorter and more obviously about their business. This cold email for local businesses template set is built around signals you can actually see in a lead's data, such as no website, a low rating, active ads, a recent opening or a weak Maps position. Each one includes the merge fields it needs, an email under 100 words, a matching follow-up and a note on when not to use it.
What makes a local business cold email different
The person reading is usually the owner, and they're often reading on a phone in a van, a treatment room or behind a salon chair. They will give your email a few seconds.
They also think in different units than a corporate buyer. Nobody running a roofing company talks about pipeline or conversion rates. They talk about calls, booked jobs, empty chairs and slow Tuesdays.
Three other differences shape every template below:
- The pitches they do get are repetitive. Many owners have heard 'I can get you to #1 on Google' more times than they can count. Anything that sounds like that gets deleted.
- Your proof is public. You can see their reviews, website, ads and Maps listing before you write a word. Generic flattery is lazy when the real details are right there.
- The inbox is often shared. At a small, owner-run shop, info@ may reach the owner directly, or the front desk may forward it. Write so it still makes sense if someone else opens it first.
The anatomy of a cold email for local businesses template
Every template in this article follows the same six-part shape. Once you see it, you can write your own for any signal.
- Subject line. Two to five words, lowercase, specific to them. 'website for Ace Plumbing' beats 'Grow your business today'.
- Observation. One sentence stating the signal as a plain fact you checked.
- Consequence. What that signal probably costs them, in their words: missed calls, lost bookings, people choosing the shop down the street.
- Offer. One specific thing you would do. Not a list of services.
- Ask. A question they can answer with yes or no. Offering to send something is easier to accept than a meeting request.
- Sign-off. Your name, business and phone number, plus a postal address and a one-line opt-out such as 'Reply no and I won't email again.'
Keep the first email plain text, with no links, images or attachments. Offer to send the mockup, screenshot or audit once they reply.
For each template below you'll get the signal that triggers it, the merge fields it needs, the email, a follow-up for day 3 or 4, and when to skip it.
Templates triggered by website signals
1. No website
Signal: a Google Maps or Yelp listing with a blank website field but a real review history.
Merge fields: {{first_name}}, {{business_name}}, {{category}}, {{city}}, {{review_count}}, {{rating}}
Subject: website for {{business_name}}
Hi {{first_name}},
I was searching for a {{category}} in {{city}} and found {{business_name}} on Google Maps: {{review_count}} reviews at {{rating}} stars, but no website linked.
People who find you there often want photos, prices or a service area before they call. Right now there's nothing to click.
I build simple one-page sites for local {{category}} businesses. Would it help if I mocked up a homepage for you to look at? No cost either way.
{{sender_name}}
Follow-up:
Hi {{first_name}}, one more on this. I sketched the top of a {{business_name}} homepage: your name, a tap-to-call button, your service area and three of your best reviews. Want me to send it over? If a website isn't on the list this year, just tell me and I'll stop emailing.
Skip it when: the listing has no email at all, which is common for businesses without a site. Turn the same pitch into a phone script instead (here's how to approach cold calling local businesses). Also skip listings with only a handful of old reviews, since the business may be dormant. For building the list itself, see how to find businesses without websites. In Prospect Cheap you can pull one category and city from Google Maps or Yelp and filter the results down to leads with no website before you export.
2. Slow or outdated website
Signal: the site breaks on mobile, the phone number isn't tappable, the booking form doesn't work, or the footer says a copyright year from long ago.
Merge fields: {{first_name}}, {{business_name}}, {{category}}, {{city}}, {{website_issue}}, {{fix_one}}
Subject: {{business_name}} site on mobile
Hi {{first_name}},
I opened {{business_name}}'s website on my phone and {{website_issue}}.
That matters because whoever is searching for a {{category}} in {{city}} at 9pm is usually on a phone, and they'll call whoever is easiest to reach.
I fix this kind of thing for local businesses without a full rebuild. Want me to send the three changes I'd make first?
{{sender_name}}
Example {{website_issue}}: 'the phone number wasn't tappable and the menu covered half the screen'.
Follow-up:
Hi {{first_name}}, here's the first fix for free: {{fix_one}}. That one is quick. The other two take a bit more explaining, so I'm happy to send them if useful.
Skip it when: the site was rebuilt recently, it's a franchise location whose site is controlled by head office, or the 'problem' is just taste (colors, fonts). Owners don't pay to fix your opinion.
Templates triggered by review signals
3. Low rating
Signal: a rating below roughly 4.0 with enough reviews to mean something, and a repeated complaint theme.
Merge fields: {{first_name}}, {{business_name}}, {{category}}, {{review_theme}}, {{offer_outcome}}, {{one_change}}
Subject: pattern in your reviews
Hi {{first_name}},
I read through {{business_name}}'s recent Google reviews. People praise the work itself, but several of the lower ones mention {{review_theme}}.
That's an operations problem more than a quality problem, which is good news: it's fixable, and new reviews start to reflect it once it is.
I help {{category}} owners {{offer_outcome}}. Would it be useful if I sent a one-page outline of what I'd change first?
{{sender_name}}
Follow-up:
Hi {{first_name}}, one thing I left out: you don't need to touch the old reviews. A short, calm reply to the last few critical ones, plus {{one_change}}, is where I'd start. Want the outline?
Skip it when: the low rating comes from very few reviews, the complaints are about price, or the business is medical or legal. Never quote patient or client reviews back to them. And keep the star number out of the subject line; nobody wants that preview on their lock screen. More on building this segment in how to find businesses with bad reviews.
4. Unanswered reviews
Signal: the most recent reviews, good and bad, have no reply from the owner.
Merge fields: {{first_name}}, {{business_name}}, {{category}}, {{review_detail}}, {{unanswered_count}}, {{negative_theme}}, {{draft_reply}}
Subject: replies on your Google reviews
Hi {{first_name}},
{{business_name}} has some great reviews, like the recent one praising {{review_detail}}. None of the last {{unanswered_count}} have a reply from the business, though, including a couple of critical ones.
People comparing {{category}} options read the replies too.
I write review replies in the owner's voice. Want me to draft responses to your last five so you can see the tone?
{{sender_name}}
Follow-up:
Hi {{first_name}}, I drafted one already. Here's what I'd post under the review about {{negative_theme}}: '{{draft_reply}}'. If that sounds like you, I can handle the rest.
Skip it when: they actively reply on Yelp or Facebook but not Google (check before you claim they ignore reviews), or they answer in batches every few weeks and the gap is just timing.
Templates triggered by ad and growth signals
5. Running Facebook ads
Signal: active ads in the Facebook Ad Library, with a start date you can see.
Merge fields: {{first_name}}, {{business_name}}, {{category}}, {{ad_hook}}, {{ad_start_date}}, {{landing_page}}, {{landing_issue}}
Subject: your {{ad_hook}} ad
Hi {{first_name}},
I came across {{business_name}}'s Facebook ad for {{ad_hook}}. It's been running since {{ad_start_date}}, so I'm guessing it brings in enough to keep paying for.
One thing stood out: the ad sends people to {{landing_page}}, where {{landing_issue}}.
I build landing pages for {{category}} businesses that run ads. Want a short teardown of what I'd change on that page?
{{sender_name}}
Follow-up:
Hi {{first_name}}, if you're running the same offer on Google too, the page fix would help both campaigns. Want the teardown, or is now not the right time?
Skip it when: the ad started this week (they're still testing), it's a brand-level ad run by a franchisor, or it's a recruiting ad, in which case use template 7. Prospect Cheap collects advertisers straight from the Facebook Ad Library and finds the owner's name and email from their website; the full workflow is in Facebook Ad Library lead generation.
6. Newly opened
Signal: a listing with very few reviews, all recent, or an opening announcement on their site or social pages.
Merge fields: {{first_name}}, {{business_name}}, {{category}}, {{neighborhood}}, {{opened_when}}, {{offer_outcome}}, {{quick_tip}}
Subject: congrats on opening in {{neighborhood}}
Hi {{first_name}},
Saw that {{business_name}} opened in {{neighborhood}} {{opened_when}}. Congrats.
The first few months are when locals decide who their {{category}} is, so getting found matters more now than it will a year from now.
I help new {{category}} businesses {{offer_outcome}}. Would a short plan for your first 90 days be useful, or are you still heads-down on setup?
{{sender_name}}
Follow-up:
Hi {{first_name}}, no pressure while you're settling in. One idea you can use with or without me: {{quick_tip}}. Happy to send the full plan whenever it suits.
Skip it when: the 'new' listing is really a relocation or rebrand of an established business, or the opening was more than a year ago.
7. Hiring
Signal: a job post on their website, a 'we're hiring' social post or a recruiting ad.
Merge fields: {{first_name}}, {{business_name}}, {{category}}, {{role}}, {{pain}}, {{offer_outcome}}
Subject: {{role}} opening at {{business_name}}
Hi {{first_name}},
Noticed {{business_name}} is hiring a {{role}}. Usually that means there's more work coming in than the current team can handle, which is a good problem.
The catch is that while you're short-staffed, {{pain}} tends to slip.
I {{offer_outcome}} for {{category}} businesses. Worth a reply to see if it fits while you're hiring?
{{sender_name}}
Example {{pain}}: 'returning missed calls and sending quotes the same day'.
Follow-up:
Hi {{first_name}}, I won't keep chasing. If filling the {{role}} spot takes longer than planned, I'm happy to help cover the gap. Just reply here.
Skip it when: the posting is months old, or your offer directly replaces the role they're hiring for. Telling someone mid-hire that software makes the job pointless rarely lands well.
Templates for Google Maps visibility and local SEO gaps

8. Weak Maps position
Signal: they didn't show near the top when you searched their main service in their area, while a competitor with fewer reviews did.
Merge fields: {{first_name}}, {{business_name}}, {{search_term}}, {{neighborhood}}, {{competitor_name}}, {{city}}
Subject: {{search_term}}
Hi {{first_name}},
I searched '{{search_term}}' from {{neighborhood}} this week. {{competitor_name}} showed in the top three map results; {{business_name}} didn't, even though you have more reviews.
Map results shift with where the searcher is, so this isn't the full picture. But it usually points to a few fixable gaps in the Google listing.
Want the screenshot and the two or three things I'd check first?
{{sender_name}}
Follow-up:
Hi {{first_name}}, I can run the same search from a few other spots around {{city}} so you can see where you show up and where you don't. Want that?
Skip it when: you searched from outside their service area, they rank well for their main money term and you picked an obscure one, or you're tempted to promise a #1 spot. Don't.
9. Incomplete Google Business Profile
Signal: missing hours, no photos of real work, a vague category or no description.
Merge fields: {{first_name}}, {{business_name}}, {{category}}, {{profile_gap}}
Subject: your Google listing
Hi {{first_name}},
{{business_name}}'s Google listing is missing {{profile_gap}}.
That's often what people check right before deciding whether to call a {{category}}.
It's a quick fix. I can walk you through it on a 15-minute call or just send written steps. Which would you prefer?
{{sender_name}}
Follow-up:
Hi {{first_name}}, written steps are ready if you want them. Five minutes of your time, no strings.
Skip it when: the listing is unclaimed (a different conversation entirely) or missing hours reflect a seasonal closure.
Follow-up templates for local business owners
Each template above has a first follow-up for day 3 or 4. After that, a short sequence is enough:
- Keep everything in the same thread.
- Add one new thing each time: a fix, a screenshot offer, a different channel.
- Stop the moment they reply, even if the reply is 'not now'.
These three work after any of the nine templates. For timing and tone in more depth, see cold email follow-ups that don't annoy.
The phone pivot (day 7 or 8):
Hi {{first_name}}, email might not be the easiest way to reach you. I'll try the shop on {{call_day}} morning. If you'd rather I didn't call, just reply 'no call' and I won't.
The wrong-person check:
Hi {{first_name}}, if someone else handles {{topic}} at {{business_name}}, could you point me to them? Happy to stop here if not.
The close-out (day 14):
Hi {{first_name}}, I'll leave this here so I'm not cluttering your inbox. If {{topic}} comes up later in the year, this thread is still open.
Merge fields and first lines: filling templates from your lead list
A template is only as good as the data that fills it. Here's where each field comes from and what to do when it's missing:
- {{first_name}}: the owner's name from their website, Yelp or social profiles. Fallback: 'Hi there' or 'Hi {{business_name}} team'. Never 'Hi ,'.
- {{business_name}}: clean it first. Strip 'LLC' and keyword stuffing like ' - Best Emergency Plumber 24/7 Austin TX'.
- {{category}}: rewrite listing categories into plain words. 'Plumber', not 'Plumbing supply store'.
- {{city}} and {{neighborhood}}: use what locals say. 'East Austin' reads better than a ZIP code.
- {{rating}} and {{review_count}}: straight from the listing; round nothing.
- {{website_issue}}, {{review_theme}}, {{landing_issue}}: these need a human look or an AI summary you've checked. They carry the whole email, so don't guess.
Prospect Cheap handles most of the legwork here: it collects the leads, then uses AI to read each website for the owner's name and title, emails, phone numbers and social profiles, along with a short summary and first-line ideas you can drop into {{first_line}} or adapt into the observation sentence. You can then send the list to Instantly, Smartlead, lemlist or GoHighLevel and map each column to a custom variable.
Worked example. Say a row reads: Rosa Delgado, owner, Delgado Plumbing, Phoenix, 4.8 stars, 112 reviews, no website. Template 1 becomes: 'I was searching for a plumber in Phoenix and found Delgado Plumbing on Google Maps: 112 reviews at 4.8 stars, but no website linked.' That's specific, true and checkable, which is exactly why it gets read.
Two habits prevent most embarrassing sends:
- Run one campaign per signal per category. 'No website, plumbers, Phoenix' is a campaign. 'Local businesses' is not.
- Before launching, preview five random rows in your sending tool. Broken merges show up immediately.
Mistakes that make local templates sound like spam
- Fake familiarity. 'I've been a fan of your work for years' is obviously untrue and kills trust in line one.
- Quoting a reviewer by name. Paraphrase the theme. Naming the customer feels like surveillance.
- Guarantees. Promising page-one rankings or a set number of new customers marks you as the same pitch they've deleted before.
- Links, images and attachments in email one. They hurt deliverability and look like marketing. More in why cold emails land in spam.
- A calendar link as the ask. Asking a stranger to book 30 minutes is a big request. Offer to send something instead.
- One template for every category. A dentist and a roofer have different problems, different vocabulary and different busy seasons.
- Sending volume from a fresh domain. Small, targeted batches from a warmed-up domain beat blasts.
- Skipping the basics. No postal address and no way to opt out is a legal problem, not just a style one.
Next steps
- Pick one category and one city you understand.
- Choose a single signal from the nine above that matches what you sell.
- Build a list of leads that show that signal, and fill in the merge fields carefully.
- Preview five rows, then send a small batch.
- Read every reply, adjust the observation and offer lines, and only then add a second signal or a second city.
