Yesterday I ran two API calls against Google Maps: every barber shop in El Paso, Texas, 40 listings total. 21 of them had no website. Established shops, some with over 100 reviews, a listed phone, a steady stream of walk-in customers, and nowhere to send anyone online.
If you build websites for a living, that’s not a statistic. That’s a client list: local businesses without websites are the warmest leads this trade has.
In a live FlyByAPIs test of 252 Google Maps listings across 7 US niches, 95 (38%) had no website. The best-performing niche, barber shops in El Paso, hit 52%. Two API requests surfaced 21 no-website leads from a single search, and the free tier covers 100 requests a month, so a full prospecting run costs $0.
Every guide ranking for this search tells you to click through Maps listings one by one, or to pay for some lead tool with a waitlist. Nobody gives you the actual mechanism.
So this post does: the manual way, a Python script, and a Google Sheets version for people who don’t code. All three tested this week with real numbers, and the full code lives in our blog code repo on GitHub .
252
Listings we checked live
95
Had no website (38%)
52%
Best niche (El Paso barbers)
$0
Cost on the free tier
We run scraping infrastructure at FlyByAPIs and process millions of Google Maps requests, so the data side of this is our day job. The lead gen side is yours. By the end of this guide you’ll have a sorted CSV or spreadsheet of businesses in your city that need exactly what you sell.
Why a business with no website is your best lead
Think about what a Google Maps listing with 100+ reviews and no website actually tells you. The business is real, and it survived long enough to collect those reviews. Customers already find it, call it, and pay it.
The owner isn’t against being found online. They’re already on Maps. They just never got around to the website part, or got burned by someone who charged $3,000 and delivered nothing.
Why these leads convert:
You're not selling a stranger on the idea of the internet. You're offering a proven, revenue-generating business the one piece it's visibly missing. The gap is the pitch.
Compare that to cold-emailing companies from a purchased list. Half the contacts are stale, and the other half already have an agency. In our comparison of B2B data providers , decent lead databases start around $49/month, and none of them can filter by “has no website” at the local level.
Google Maps can, and with a Google Maps local lead API that filter is one line of code.
Sergio’s Barber Shop in El Paso: 125 reviews, 4.7 stars, phone number listed, no site. Same story for Inn The Cutt (109 reviews) and Oscar’s (72). Three warm doors to knock on, from one search.
How to find businesses without websites on Google Maps by hand
The manual method works, and it’s genuinely free. Here’s the whole thing:
Search a niche + city on Google Maps
Something like "barber shop in El Paso" or "house cleaning in Fresno". Specific beats broad.
Open each listing and look for the website button
Listings with a site show a globe icon and a "Website" link. No globe means no site.
Copy name, phone, and reviews into a spreadsheet
Track rating and review count too. A no-site business with 80 reviews beats one with 2.
For your first 10 leads, honestly, just do this. You’ll learn what the listings look like and which niches in your city are underserved.
Then the math catches up with you. Checking one listing takes 20 to 30 seconds. A city has hundreds of businesses per category, and roughly 6 in 10 of the ones you click will have a website, which means most of those clicks produce nothing.
The scaling problem:
Building a 100-lead list by hand means clicking through roughly 260 listings. At 25 seconds each, that's about 2 hours of clicking, per niche, per city. Every week, because listings change.
There’s a second problem nobody mentions: Maps shows you the businesses it ranks highest, and top-ranked listings in big cities almost always have websites. When I pulled the top plumbers in Austin, all 5 had one.
The gold is in positions 20 to 60, exactly the part that’s exhausting to reach by scrolling.
This is the point where you stop clicking and start querying. Both methods below use the FlyByAPIs Google Maps scraper API
, which returns every listing as structured JSON, including the one field that matters here: website_url.
The Python method: a sorted lead list in 60 lines
Here’s the mechanism the lead-gen tools charge for. One endpoint, locate_and_search, takes the same query you’d type into Maps and returns up to 200 listings per request as JSON. Each listing includes name, phone, full_address, rating, reviews_count, and website_url.
When a business has no site, website_url is null. That’s the entire filter. The locate_and_search endpoint docs
list every field if you want to grab more, like coordinates or opening hours.
The script below pulls 3 pages (60 listings), keeps only the no-site businesses, dedupes them, sorts by review count so the most established leads come first, and writes a clean leads.csv:
| |
Set your key as an environment variable (export RAPIDAPI_KEY=your_key), swap in your own niche and city, and run it. When I ran this exact script against the El Paso barber query it finished in about 8 seconds and printed 34 no-website leads saved to leads.csv.
Why 34 when the intro said 21? The intro test stopped at 2 pages. The third page, positions 41 to 60, added 13 more leads, which tells you where the no-website listings pile up.
The 260-listing manual grind from earlier, the one that costs 2 hours by hand, is 13 requests for this script. And the free tier of the FlyByAPIs Google Maps lead generation API gives you 100 requests a month, so a full month of prospecting costs nothing.
Pro tip: catch the Facebook-only businesses too.
Some owners set a Facebook or Instagram page as their "website". Those are excellent leads, they already tried to be online. Swap the filter line for if biz.get("website_url") and biz.get("website_domain") not in ("facebook.com", "instagram.com"): continue and they count as leads too. In our El Paso test that added 7 extra leads on top of the 21, a 33% bump.
100 requests/month free · Hard limit, no surprise overage
The Google Sheets method (no code skills needed)
Not a developer? You don’t need to be. Google Sheets can call the same Google Maps data extraction API through a built-in feature called Apps Script , and I’ll walk you through every click.
First, get your free API key: sign up on the RapidAPI page linked above, and you’ll find your key under “Header Parameters” as x-rapidapi-key. Copy it somewhere safe and treat it like a password.
Then:
Open a new Google Sheet
Go to sheets.new in your browser. Any empty spreadsheet works.
Open the script editor
In the menu bar click Extensions, then Apps Script. A new tab opens with an empty file called Code.gs.
Paste the script below
Delete the empty function that's already there, paste the whole script, then replace YOUR_RAPIDAPI_KEY with your key and set your niche and city in QUERY.
Run it and authorize
Click the Save icon, make sure findLeads is selected in the dropdown, and click Run. Google asks for permission the first time: click Review permissions, pick your account, click Advanced, then "Go to project (unsafe)" and Allow. That warning appears for every personal script, it's your own code.
Switch back to your sheet
Your leads are there, sorted by review count, with phone numbers and Maps links. Total time: about 5 minutes.
Here’s the script:
| |
To prospect a different niche or city, change the QUERY line and click Run again. The sheet clears and refills. That’s the whole workflow, and it’s the same trick we covered for spreadsheet users in scraping website data straight to Excel
.
One caution about your key:
The key sits in the script, so don't share the spreadsheet publicly with edit access, and never paste the script online with your real key in it. If a key leaks, regenerate it on RapidAPI in one click.
Which industries have the most local businesses without websites
I didn’t want to hand you a generic “target home services!” list, so I tested it with the Google Maps business search API . Seven niches, seven mid-sized US cities, 40 listings each (except where Maps returned fewer). Live data from this week:
| Niche + city tested | Listings checked | No website | Lead rate |
|---|---|---|---|
| Barber shops · El Paso, TX | 40 | 21 | 52% |
| House cleaning · Fresno, CA | 40 | 20 | 50% |
| Auto repair · Albuquerque, NM | 40 | 18 | 45% |
| Handyman · Toledo, OH | 32 | 13 | 41% |
| Hair salons · Wichita, KS | 40 | 10 | 25% |
| Landscaping · Tulsa, OK | 40 | 9 | 22% |
| Tattoo shops · Memphis, TN | 20 | 4 | 20% |
The pattern: the more personal and appointment-driven the service, the fewer websites. Barbers, cleaners, and mechanics run on repeat customers and phone calls. Landscapers and tattoo artists surprised me by being better covered. For tattoo shops, Instagram already does the marketing job.
Two practical rules fall out of the data:
Go past page one
The first page of results is the most website-saturated slice of Maps. Keep paginating with the offset parameter; lead density climbs the deeper you go.
Mid-sized cities beat metros
El Paso, Fresno, and Toledo produced far higher lead rates than the big metros we spot-checked, with far less agency competition for those clients.
Every query costs 1 request and checks up to 200 businesses, so mapping your entire region across 10 niches is maybe 50 requests. The no-website business finder pattern with the Google Maps API is honestly one of the highest-ROI uses of the free tier we’ve seen.
Turning the list into clients
A lead list is worth nothing in a drawer. A few things that separate the freelancers who close from the ones who spam:
Sort by reviews, call the top. A business with 100+ reviews and no site has money and momentum. That’s why both scripts sort by reviews_count descending: your call list is literally ordered by lead quality.
Reference something real. Open with their numbers instead of your portfolio:
"I noticed you have 125 reviews but no website. You're losing the customers who Google you first."
The cold-call opener that gets past hello
You can even run their name through our Google Search API and open with “you don’t show up anywhere on Google outside of Maps”, which is usually true and usually alarming.
Bottom line:
Phone beats email for these businesses. They don't check email, that's partly why they have no website. Call during slow hours (2 to 4pm for barbers and salons), mention their review count, offer something concrete.
Once the pipeline grows, a few enrichment ideas from the rest of our stack:
Hiring signal
Spot leads that are growing
A business posting job openings has momentum and budget. A Jobs Search API surfaces them by city and niche.
B2B pivot
Sell to funded companies instead
If your clients are startups rather than shops, a Crunchbase scraper API is the equivalent goldmine for that world.
Other languages
Pitch in the owner's language
Prospecting in Miami or abroad? A translation API beats embarrassing word-for-word Spanish.
Product sellers
Check their Amazon presence
Shops that sell products often list on Amazon with no storefront of their own. An Amazon product data API shows you in one call.
One request, though: don’t blast these lists. 20 researched calls beat 500 spam emails, and local business owners talk to each other.
Run your first query today
The manual method costs time, the scripts cost nothing, and the leads are sitting there right now. Pick the niche with the worst website coverage in your city, run 3 requests, and you’ll have a phone list before your coffee gets cold.
Grab the full code for both versions on GitHub , and if you want to go deeper on the data side, our Python Google Maps scraping tutorial covers reviews, details, and everything else the Google Maps business data API returns.
100 requests/month free · Hard limit, no surprise overage
P.S. If you close a client from a list you built with this guide, tell me. Those emails are the best part of running this thing.
Oriol.
