Find local businesses that just told the internet they need you
A job ad for a part-time marketer, a Google listing pointing at a dead website, a 5-star review that says "hard to find your number". Learn to spot the public signs that a business needs help this month, and build a list of 20 worth pitching with one spreadsheet and no paid tools.
- For each one: whether you're allowed to email, or should call or visit
- A browser and a free Google Sheets or Excel file
- Optional: OpenSEO set up to check search numbers
- For the speed test (step 4): Python 3 and a free Google Cloud API key
Pick a niche where clicks are worth money
A business that pays a lot per click has more to gain from you, and can afford you.
Start with businesses where one new customer is worth hundreds of pounds or more. Good starting ideas: trades (roofers, plumbers, electricians), storage and removals, dentists and clinics, solicitors and accountants, driving schools, wedding venues.
If you have OpenSEO, check the numbers: run Keyword Research on "[service] near me" for your country. Note the monthly searches and the CPC (what advertisers pay per click). You want real demand (hundreds of searches a month or more) and a CPC of a few pounds or more. Emergency trades, storage, legal and dental searches usually clear that easily.
TipPick one niche and one area to start. Pitching "plumbers in Leeds" all week makes you an expert fast, and your audits get quicker each time.
Search like a customer would
The businesses you want are the ones a customer wouldn't find.
Search Google for what a customer would type, like
emergency plumber Leedsorstorage units Bristol, and look at three places:- The ads at the top: these businesses already spend on Google. They know its value, but may be overpaying.
- The map pack: the 3 businesses on the map. Open the full list under the map to see everyone else in the area.
- Page 2 and beyond: real businesses with good reviews that are invisible online. These are your best targets.
Open each business's website and note anything obvious: no website at all, a site that's broken on your phone, no prices or contact form, or a Google profile with few reviews and no photos.
Build your target list
A simple sheet turns random browsing into a pipeline.
Make a sheet with these columns and fill one row per business:
Sheet columnsBusiness | Website | Phone | Google reviews | On page 1? | Running ads? | Biggest problem you spotted | Company type (Ltd / sole trader) | Contact by | StatusScore them quickly: a business with good reviews but invisible on Google is the best prospect. It's clearly good at the work and just needs to be found. Put those at the top.
TipUse public business information only: the business name, website, business phone and business email shown on their site or Google listing. Don't dig up owners' personal details.
Unfair advantages: buying signals most people never look for
Everyone else pitches whoever is on the map. You pitch the businesses that have just shown you, in public, that they need help now.
A list of 20 is a start. A list of 20 where each one has a reason to say yes this month is a different game. These tactics take longer per lead, which is the point: most people won't bother, so the businesses you find this way rarely hear from anyone else.
1. Read the job ads, not the directorySearch Indeed and LinkedIn Jobs for
marketing assistant,social mediaormarketing executiveplus your niche and town, posted in the last 14 days. A dental practice advertising for a part-time marketer has admitted the problem and set aside a budget. You're cheaper than a salary and can start next week. The line: pitch the business through its allowed route (Ltd by email, otherwise phone or visit). Never apply to the job as a fake candidate to get a meeting.2. Catch them in their first 90 daysNew businesses need everything at once. Two free, public sources: Companies House advanced search ↗ lets you filter by incorporation date, location and SIC code (for example
86230dental practices or43220plumbing and heating). For anything selling food, the food hygiene ratings site ↗ lists places marked Awaiting inspection, which usually means newly opened. New company leads goes deeper. The line: Companies House shows directors' names and sometimes home addresses. Contact the business, never the person at home.3. Let their own customers write your openerOn Google Maps, open a prospect's reviews and use the search reviews box for
website,find,phoneandprices. A 5-star review that says "great job, but hard to find your number" is the best first line you'll ever get, because the owner has already heard it from a customer. The line: quote it accurately and leave the reviewer's name out of anything you send.4. Spot the dead website linkGoogle shut down its free Business Profile websites (the
business.siteaddresses) in 2024. Some businesses never updated their profile, so the Website button on Maps still points to a dead page. Tap every Website button in your list. A dead link, a link to a Facebook page, or a freewixsite.comaddress all mean the same thing: nobody is looking after this.5. Find the orphaned clientsSmall web agencies close and leave their clients with nobody to call. Note the "website by" credit in each prospect's footer, then look the agency up on Companies House. Dissolved or in liquidation means every site carrying that credit has lost its support. Google
"website by [agency name]"to find the rest of them.6. Check ads without costing them moneyThe Google Ads Transparency Center ↗ shows which businesses run ads and what the ads say, with no clicking. A business paying for ads that land on a slow or broken page is spending money right now, and you can show them where it leaks. The line: never click a prospect's or competitor's ads to check them. Repeated clicks drain their budget and count as click fraud.
7. Run 20 speed tests while you make a teaThis short Python script runs Google's own PageSpeed test on every site in your sheet, one at a time, and writes the mobile scores to
speed.csv. Download speed_check.py and the sample targets.csv (same columns as step 3), or export your own sheet astargets.csv. It needs the Business and Website columns.Get a free key firstWithout one, Google refuses almost straight away. Here's what a keyless run of the sample file returns:
OutputExample Domain (test row) | error | HTTP Error 429: Too Many Requests GOV.UK (test row) | error | HTTP Error 429: Too Many RequestsOpen the PageSpeed Insights API get-started page ↗, click Get a Key, and pick or create a Google Cloud project. Copy the key, then set it in the same terminal you'll run the script from:
Windows (PowerShell)$env:PSI_KEY="paste-your-key"Mac or Linuxexport PSI_KEY=paste-your-keyThen run
python speed_check.py targets.csvin the folder with both files. Here's the script, if you'd rather paste it:speed_check.py (run: python speed_check.py targets.csv)import csv, json, os, sys, time, urllib.parse, urllib.request API = "https://www.googleapis.com/pagespeedonline/v5/runPagespeed" with open(sys.argv[1], newline="", encoding="utf-8") as f, \ open("speed.csv", "w", newline="", encoding="utf-8") as out: w = csv.writer(out) w.writerow(["Business", "Website", "Mobile score", "Largest paint"]) for row in csv.DictReader(f): url = row["Website"].strip() if not url: continue q = {"url": url, "strategy": "mobile"} if os.environ.get("PSI_KEY"): q["key"] = os.environ["PSI_KEY"] try: data = json.load(urllib.request.urlopen(API + "?" + urllib.parse.urlencode(q), timeout=120)) lh = data["lighthouseResult"] score = round(lh["categories"]["performance"]["score"] * 100) lcp = lh["audits"]["largest-contentful-paint"]["displayValue"] except Exception as e: score, lcp = "error", str(e)[:60] w.writerow([row["Business"], url, score, lcp]) print(row["Business"], score, lcp, sep=" | ") time.sleep(5)Then paste
speed.csvand your "biggest problem" column into Claude or ChatGPT and ask for one plain-English opening line per business, using only the numbers given. Twenty tailored openers in five minutes instead of an evening.8. Time it to their busy seasonPitch the month before demand jumps, when owners are already thinking about it: heating engineers in late summer before the boiler rush, roofers and gutter cleaners before the autumn storms, wedding venues before the January booking season. Avoid accountants in January.
What a perfect lead looks likeHere's an example row, with every column drawn from one of the signals above:
Example lead rowBusiness: Example Dental Care (Ltd) Website: Maps button points to a dead business.site page Google reviews: 4.9 from 212 On page 1?: No (page 3 for "dentist [town]") Running ads?: No Biggest problem: Advertising for a part-time marketing assistant (Indeed, 6 days ago). Review: "Brilliant dentist, shame the website never loads". Mobile speed score 23 on the old site Contact by: Email Status: Pitch this weekThree signals, one row. That's a business that has already admitted the problem, set aside money for it, and heard about it from a customer.
CarefulTrap to skip: buying a "local business email list". It's stuffed with sole traders you can't legally email, the ICO says the soft opt-in never covers bought-in lists, and strangers on a list reply worse than the 20 you picked by hand.
If it breaksThe speed script says 'HTTP Error 429' + 2 more
The speed script says 'HTTP Error 429'
PSI_KEY again (it only lasts for the window you set it in) and rerun. Keep the key out of the CSV and out of any chat.A row says 'error' with a timeout or 'HTTP Error 400'
https:// and opens in your browser. A site that's down is itself a signal: note it in Biggest problem.Companies House advanced search shows thousands of results
Mark how you're allowed to contact each one
UK rules decide whether you can email or need to call or visit.
Search each business on Companies House ↗ (free, no account needed). Under UK marketing rules (ICO guidance ↗):
- Shows as an active Ltd or LLP: you can send a marketing email without asking first. Put
Emailin your sheet. - Not found: treat it as a sole trader or partnership. They count as individuals for email, so put
Call or visit.
Do not contact and stick to it.Email or Call or visit.Your first wins
It works. Now do something with it.
Let AI sort your list
Paste your sheet (business names and the problems you noted, no personal details) into Claude or ChatGPT:
Here's my list of local [niche] businesses in [town], with what I noticed about each one's Google presence. Rank them from best to worst prospect for a local SEO and Google Ads service, and give a one-line reason for each. Best prospects: good reputation but poor visibility.
[paste your rows]Next: audit your top 3
Take the top three from your list into the next lesson and run a full OpenSEO audit on each.
Undo it cleanly
How to remove everything this mission installed.
Nothing to uninstall. Keep the sheet: it becomes your record of who you've contacted and what they said.

