How to find businesses without a website (and the ones whose website is dead)
“Find me local businesses that don't have a website” is the oldest prospecting task in web design, and it is still a good one. But the obvious version of the list, businesses with no website at all, is only half of it. The other half is businesses whose website exists on paper and is dead, parked or hijacked. Those owners already paid for a site once, which makes them easier to sell to. This guide covers both halves, with the exact checks we use.
Why “no website” is a lead signal, and why it is not enough
A business with no website has usually decided it does not need one. Some of them are wrong, and a good pitch can change their mind, but the conversion rate is low and the budgets are small. A business that had a website and let it die is different: someone there once agreed that a website was worth paying for. That is why we treat four situations as separate signals rather than one bucket:
- No website listed anywhere (Maps, directories, social).
- A social page or directory listing instead of a website: the “website” is a Facebook page, a Yelp profile or a Nextdoor link.
- A dead website: the domain no longer resolves, the certificate is broken, the hosting returns an error, or the domain is parked and for sale.
- A website that is alive but no longer theirs: the business name is gone and the page now sells calls through a toll-free number. The owner has typically let the domain lapse and a lead seller picked it up.
How common is the dead-website group? When we read the websites of 180 home-service businesses listed on Google Maps in Dallas, Denver and Atlanta in October 2026 (roofers, plumbers and HVAC contractors, all of them with a website in their listing), 11 of the 180 domains did not resolve at all, and 4 more were lead-seller takeover pages. That is about 1 in 12 listings that look fine in Maps and are a problem for the owner. Your area will differ, but it will not be zero.
Method 1: Google Maps by hand (free, fine for 20 to 50 leads)
Search a category plus an area in Google Maps, for example roofing contractor Plano TX, and open the results list. Each listing with a website shows a Website button next to Directions and Call. Listings without the button have no website in their Google Business Profile. Scroll through the list and copy the ones without the button into a sheet with the business name, phone and the Maps link.
Two things to check while you are there:
- Click the Website button on the ones that have it. If it opens a Facebook page or a directory profile, add the business to your list as group 2 above.
- Note the review count and the last review date. A business with 40 reviews in the last year and no website is a much better lead than one with 2 reviews from 2019.
This is slow: expect 15 to 25 listings per 10 minutes. It is the right method when you want 20 well-chosen leads in one town, not a thousand.
Method 2: Export the listings and filter the blanks (hundreds to thousands)
For anything bigger, export the listings instead of reading them. Google Maps scrapers return one row per listing with name, category, address, phone, rating, review count and a website field. The two we have used are Apify's Google Maps Scraper and Outscraper; both have free tiers that cover a few hundred listings. (We are not affiliated with either; we also publish our own tool on Apify, which is not a Maps scraper.)
Once you have the export in a spreadsheet:
- Sort or filter by the
websitecolumn. Blank cells are your “no website” list. - Filter the non-blank cells for
facebook.com,yelp.com,nextdoor.com,angi.com,homeadvisor.com,thumbtack.com,linktr.eeandsites.google.com. Those are group 2: a page that is not their own site. - Keep the rest for the dead-site check below. They are the ones everyone else assumes are fine.
One warning on Maps data: some listings are not real businesses. A listing with a toll-free number, a generic name like “Plumbers Near Me” and no reviews is often a lead-generation page, not a contractor. Drop those before you spend time on them.
Method 3: Trade directories and licence registers
Maps only shows businesses that have claimed a profile, which skews toward the ones that already care about marketing. Two other sources list businesses that often have no web presence at all:
- State and city licence registers. Most US states publish contractor licence lookups (roofing, plumbing, HVAC and electrical are licensed trades almost everywhere). The records have the legal name, address and licence status, rarely a website. Cross-check the names against Maps to find the ones with no profile and no site.
- Supplier and association directories. Roofing manufacturers' “certified installer” lists, HVAC brand dealer locators and local trade association member lists are full of small firms. They were added by a human, so the data is cleaner than scraped listings.
These lists are more work to collect, but almost nobody else is working them, which is exactly why they are worth it.
Method 4: Find the dead websites in a list (the half everyone misses)
You now have a column of websites that look fine. Some of them are not. Checking them one by one in a browser works for 20; for 500 you want a script. The one below runs on any computer with Node.js 18 or newer, reads a text file with one website per line, and prints a status for each. It makes one request per site, the same as opening the home page in a browser.
// check-sites.mjs — run with: node check-sites.mjs sites.txt
import { readFileSync } from 'node:fs';
import { lookup } from 'node:dns/promises';
const sites = readFileSync(process.argv[2], 'utf8').split(/\r?\n/).filter(Boolean);
for (const raw of sites) {
const host = raw.trim().replace(/^https?:\/\//, '').split('/')[0];
let status = 'ok';
try { await lookup(host); } catch { status = 'dead: domain does not resolve'; }
if (status === 'ok') {
try {
const res = await fetch(`https://${host}/`, { redirect: 'follow', signal: AbortSignal.timeout(15000) });
const landed = new URL(res.url).hostname.replace(/^www\./, '');
if (res.status >= 400) status = `error: HTTP ${res.status}`;
else if (landed !== host.replace(/^www\./, '')) status = `redirects to ${landed}`;
} catch (err) {
status = `unreachable: ${err.cause?.code ?? err.name}`;
}
}
console.log(`${host}\t${status}`);
}
How to read the output:
- dead: domain does not resolve. The domain has expired or the DNS is gone. This is the strongest signal on the list: the business is still listed, still taking calls, and has no working site.
- unreachable: CERT_HAS_EXPIRED (or another certificate error). The site exists but shows a browser warning to every visitor. Owners usually do not know.
- unreachable: ECONNREFUSED / ETIMEDOUT. Hosting is down or was cancelled.
- error: HTTP 404 / 500. The server answers, but the home page is gone or broken.
- redirects to somedomain. Open it. Sometimes it is a rebrand (fine), sometimes a parking page, and sometimes a lead seller's page that still ranks under the old business name.
- ok is not proof of a good site. It only means the home page loaded. “Ok” sites can still be parked, be a one-page placeholder from the hosting company, or belong to a lead seller. Method 5 covers those.
Keep the output as a tab-separated file and paste it next to your list. If you run it again a month later, the sites that went from “ok” to “dead” are your freshest leads of all.
Method 5: Alive, but clearly not working for them
The last group is the largest and the hardest to spot from a list: websites that load, but are visibly out of date or missing the basics. These are the signals that worked best for us when we talked to agencies, roughly in order of how easy they are to sell against:
- Lead-seller takeover. The page loads, but the business name is gone, there is a single toll-free number in the title, and no email on the business's own domain. The owner has lost the domain. A phone call opens with “did you know your old address now sends your customers to someone else?”.
- Parked or placeholder pages. “This domain is for sale”, “Coming soon”, or the hosting provider's default page.
- DIY builder with the defaults still on. A Wix, GoDaddy, Weebly or Squarespace site with template text, a free subdomain, or stock photos is a fair sign that nobody has touched it since launch. (Builder fingerprints are in our guide What is this website built with?)
- No way to measure anything. No Google Analytics, no Tag Manager, no ad tag. In our 180-site test, fewer than one in five reachable sites loaded a Google Ads tag and fewer than one in six loaded a Meta Pixel. If you sell ads or SEO, “you have no idea where your leads come from” is a strong opener.
- No online booking on a trade where customers expect it (HVAC, plumbing, cleaning). A “Book now” button that only opens a contact form does not count.
- Mobile-hostile pages: tiny text, a phone number that is not tappable, a photo slider from 2014.
None of these can be seen in a Maps export. You either open each site, or you have something read them for you. That is what we built Lead Notebook for: you send the list, we read each site and send back a spreadsheet with status (dead, parked, blocked, taken over), contact routes, builder, tracking and booking tools, each with the page it came from. The first 20 websites are free, and dead or parked sites are never charged, whatever the list size.
Before you pitch: verify, and keep your list legal
- Open the site yourself before you mention it. Scripts and tools, ours included, can be fooled by a temporary outage or a site that blocks automated visits. “Your website is down” is embarrassing when it isn't.
- Re-check the day you send. Dead sites get fixed; parked domains get renewed. A list from three weeks ago is already stale.
- Phone beats email for this group. A business with no website often has no business email either. The Maps listing gives you a phone number that is answered by the owner more often than not.
- If you do email, the rules that apply to you still apply (CAN-SPAM in the US, PECR and GDPR in the UK and EU, CASL in Canada). Finding an address on a public site is not consent; it is a starting point for a relevant, honest, one-to-one message with an easy way to say no.
Frequently asked questions
How can I find a local business that doesn't have a website?
Search the category and area in Google Maps and look for listings without a Website button. For more than a handful, export the listings with a Google Maps scraper and filter the rows where the website column is empty or points to Facebook, Yelp or another directory instead of the business's own domain.
How do I find businesses on Google Maps that don't have a website?
Google Maps has no filter for it, so you either scan listings by hand or export them. Scrapers such as Apify's Google Maps Scraper or Outscraper return one row per listing with a website field; sort by that field and the blanks are your list. Expect roughly 1 in 10 to 1 in 4 listings in a trade category to have no website, depending on the trade and the area.
Is there a free way to find businesses without websites?
Yes. Scanning Google Maps by hand is free, most Maps scrapers have a free tier that covers a few hundred listings, and checking whether listed websites are dead costs nothing with the script in this guide. The cost is your time, not money.
Is a business with a dead website a better lead than one with no website?
Often, yes. A business that once paid for a website has already decided it needs one, and a dead domain, broken certificate or lead-seller takeover is a concrete problem you can point to in the first sentence of your email or call.
Numbers in this guide come from our own test of 180 Google Maps listings in October 2026 (roofers in Dallas, plumbers in Denver, HVAC contractors in Atlanta). They describe that sample, not the whole market.