No-Website Business Leads Scraper (Google Maps)
Pricing
from $1.00 / 1,000 results
No-Website Business Leads Scraper (Google Maps)
Find businesses with weak or missing websites on Google Maps โ a priority-ranked lead generation list for website developers and designers
Pricing
from $1.00 / 1,000 results
Rating
5.0
(1)
Developer
Actor stats
1
Bookmarked
10
Total users
7
Monthly active users
9 hours ago
Last modified
Categories
Share
Find local businesses with weak or missing websites โ and get a ready-to-pitch, priority-ranked outreach list, straight from any Google Maps search.
Point it at a business type and a city. Walk away with every matching business, each one tagged with how strong (or weak) its web presence is and the exact reason to reach out โ so you spend your time pitching, not scrolling Maps and opening 80 tabs to see which sites actually load.
Built for web design agencies, freelance developers, and local SEO consultants.
Why it beats a generic Maps scraper
A normal Google Maps scraper dumps every business and leaves you to figure out who's worth contacting. This one does the qualifying for you:
- โ Filters by web presence, not just contact info โ it actually fetches each website and checks whether it's missing, social-only, a directory link, broken, outdated, or healthy.
- โ Ranks every lead HIGH โ MEDIUM โ LOW so you work the hottest prospects first.
- โ Tells you why each business is a lead in plain English โ drop it straight into your cold-email merge fields.
What you get
One row per business. Export to CSV / JSON / Excel, or pipe straight into Instantly, Smartlead, Apollo, HubSpot, or Pipedrive.
{"businessName":"Bayshore Cuts & Color","address":"123 Bayshore Blvd, Tampa, FL 33606","phone":"(813) 555-0100","googleMapsUrl":"https://www.google.com/maps/place/Bayshore+Cuts+%26+Color/...","websiteUrl":"https://www.facebook.com/bayshorecuts","category":"Hair salon","rating":4.8,"reviewCount":312,"websiteType":"SOCIAL","ssl":null,"pageSpeedScore":null,"isMobileResponsive":null,"siteLoads":null,"webPresenceCategory":"SOCIAL_ONLY","outreachPriority":"HIGH","outreachReason":"Website field links to a social profile only (https://www.facebook.com/bayshorecuts)"}
The 6 categories
Every business gets exactly one webPresenceCategory, based on deterministic signals. Anything we genuinely can't verify defaults to HEALTHY, so we never mislabel a real customer's healthy site as a lead.
| Category | What it means | Priority |
|---|---|---|
NO_WEBSITE | No website on the listing, or the domain is parked / for sale | HIGH |
SOCIAL_ONLY | "Website" links to Facebook, Instagram, TikTok, LinkedIn, etc. | HIGH |
DIRECTORY_ONLY | "Website" links to Yelp, Yellow Pages, Houzz, BBB, etc. | HIGH |
WEBSITE_UNREACHABLE | A real domain is listed but it didn't load โ timed out, refused, or errored | MEDIUM |
OUTDATED_WEBSITE | Real site that loads, but missing SSL or mobile viewport | MEDIUM |
HEALTHY | Loads with SSL + mobile viewport | LOW |
Priority at a glance:
- HIGH โ no real website to speak of (
NO_WEBSITE,SOCIAL_ONLY,DIRECTORY_ONLY). Your strongest pitch. - MEDIUM โ a site exists but there's a clear problem to lead with (
WEBSITE_UNREACHABLE,OUTDATED_WEBSITE). - LOW โ modern, working site (
HEALTHY). Probably not your lead โ kept in the dataset so you can decide.
The raw pageSpeedScore is included for advanced filtering (e.g. "HEALTHY businesses scoring under 60"), but it never drives the category, because Lighthouse scores swing ยฑ5โ10 points run-to-run.
How it works
- Searches Google Maps for
{businessType} in {neighborhood, city, country}. - Harvests every business in the results panel, up to your
maxResults. - Opens each listing and pulls name, address, phone, category, rating, reviews, and the website link.
- Fetches each website and audits it โ reachability, SSL, mobile viewport, and (optionally) PageSpeed.
- Categorizes, prioritizes, and writes the row to the dataset.
Input
{"businessType":"coffee shops","country":"PH","city":"Manila","neighborhood":"Pureza, Santa Mesa","maxResults":50,"onlyNoOrWeakWebsite":false,"pageSpeedApiKey":"AIzaSy...","maxConcurrency":5,"mapsConcurrency":3,"useProxy":false}
| Field | Type | Required | Default | What it does |
|---|---|---|---|---|
businessType | string | yes | โ | What to search for. Examples: "coffee shops", "plumbers", "hair salons" |
country | string | yes | US | Pick from the country dropdown. Added to the search query, and used as the proxy country if proxy is on. Choose the country, not a state โ US for Florida, then put "Tampa FL" in city. |
city | string | yes | โ | City or town. Examples: "Tampa FL", "Manila", "London" |
neighborhood | string | no | โ | Narrow to a district or zip. Useful for big cities where Maps caps at ~120 results per area. |
maxResults | int | no | 50 | 1โ200 |
onlyNoOrWeakWebsite | bool | no | false | When on, returns only businesses worth pitching โ no website, social/directory-only, outdated, or unreachable (HIGH + MEDIUM). Skips healthy sites (LOW). Off returns everything. |
pageSpeedApiKey | string | no | โ | Free Google PageSpeed Insights v5 key. Adds pageSpeedScore to every record. |
maxConcurrency | int | no | 5 | Parallel website checks (1โ20) |
mapsConcurrency | int | no | 3 | Parallel Google Maps detail-page extractions (1โ8) |
useProxy | bool | no | false | Off uses Apify's IP โ fastest, and fine for most searches. Turn on only if you hit blocks/captchas or need strict same-country routing โ it's slower. |
Output fields
Every record contains every field below. Nullable fields are null when not applicable (e.g. ssl is null for NO_WEBSITE records).
| Field | Type | Description |
|---|---|---|
businessName | string | From the Google Maps listing |
address | string | null | Full street address |
phone | string | null | Phone number as listed |
googleMapsUrl | string | Direct link to the listing |
websiteUrl | string | null | Final URL after following redirects |
category | string | null | Google's category label (e.g. "Hair salon") |
rating | number | null | Star rating |
reviewCount | int | null | Number of reviews |
websiteType | enum | NONE | REAL | SOCIAL | DIRECTORY | DEAD | PARKED |
ssl | bool | null | True if final URL is HTTPS |
pageSpeedScore | int | null | Mobile Lighthouse score 0โ100 (only with an API key) |
isMobileResponsive | bool | null | True if the HTML contains a viewport meta tag |
siteLoads | bool | null | True if the URL responded 2xx/3xx within 10s |
webPresenceCategory | enum | One of the 6 categories above |
outreachPriority | enum | HIGH | MEDIUM | LOW |
outreachReason | string | One-line plain-English explanation |
Sample output
Five rows showing each priority band (illustrative data):
[{"businessName":"Westshore Cuts","address":"456 Kennedy Blvd, Tampa, FL 33609","phone":"(813) 555-0142","googleMapsUrl":"https://www.google.com/maps/place/Westshore+Cuts/...","websiteUrl":null,"category":"Hair salon","rating":4.5,"reviewCount":89,"websiteType":"NONE","ssl":null,"pageSpeedScore":null,"isMobileResponsive":null,"siteLoads":null,"webPresenceCategory":"NO_WEBSITE","outreachPriority":"HIGH","outreachReason":"No website listed on Google Maps"},{"businessName":"Bayshore Cuts & Color","address":"123 Bayshore Blvd, Tampa, FL 33606","phone":"(813) 555-0100","googleMapsUrl":"https://www.google.com/maps/place/Bayshore+Cuts+%26+Color/...","websiteUrl":"https://www.facebook.com/bayshorecuts","category":"Hair salon","rating":4.8,"reviewCount":312,"websiteType":"SOCIAL","ssl":null,"pageSpeedScore":null,"isMobileResponsive":null,"siteLoads":null,"webPresenceCategory":"SOCIAL_ONLY","outreachPriority":"HIGH","outreachReason":"Website field links to a social profile only (https://www.facebook.com/bayshorecuts)"},{"businessName":"Old Town Barber","address":"789 7th Ave, Tampa, FL 33605","phone":"(813) 555-0177","googleMapsUrl":"https://www.google.com/maps/place/Old+Town+Barber/...","websiteUrl":"http://oldtownbarbertampa.com/","category":"Barber shop","rating":4.6,"reviewCount":64,"websiteType":"REAL","ssl":false,"pageSpeedScore":42,"isMobileResponsive":false,"siteLoads":true,"webPresenceCategory":"OUTDATED_WEBSITE","outreachPriority":"MEDIUM","outreachReason":"Website loads but no SSL (still on HTTP) and no mobile viewport meta tag"},{"businessName":"Hair on Howard","address":"321 Howard Ave, Tampa, FL 33606","phone":"(813) 555-0123","googleMapsUrl":"https://www.google.com/maps/place/Hair+on+Howard/...","websiteUrl":"https://haironhoward.com/","category":"Hair salon","rating":4.7,"reviewCount":215,"websiteType":"DEAD","ssl":null,"pageSpeedScore":null,"isMobileResponsive":null,"siteLoads":false,"webPresenceCategory":"WEBSITE_UNREACHABLE","outreachPriority":"MEDIUM","outreachReason":"Website is listed but did not load (timed out, refused, or errored) โ a strong pitch, but verify by hand: it may just be slow or blocking automated checks"},{"businessName":"SoHo Salon Tampa","address":"654 Howard Ave, Tampa, FL 33606","phone":"(813) 555-0188","googleMapsUrl":"https://www.google.com/maps/place/SoHo+Salon+Tampa/...","websiteUrl":"https://www.sohosalontampa.com/","category":"Beauty salon","rating":4.9,"reviewCount":1204,"websiteType":"REAL","ssl":true,"pageSpeedScore":91,"isMobileResponsive":true,"siteLoads":true,"webPresenceCategory":"HEALTHY","outreachPriority":"LOW","outreachReason":"Website loads with SSL and mobile viewport (PageSpeed mobile score 91/100)"}]
How fast and how big
- Typical run: ~30โ50 qualified leads in a couple of minutes. Results stream in as they're found, so you don't wait for the whole run to see data.
- Per-search cap: Google Maps returns ~120 results per search area. For more, run the same query across several
neighborhoodvalues and merge the datasets. - Cost scales with
maxResults. Proxy off (the default) is the fastest and lightest option; only turn it on if you actually get blocked.
FAQ
How many businesses can I get per run?
Up to maxResults (max 200), but Google Maps itself caps a single search area at ~120. Use the neighborhood field to cover a big city district-by-district.
Can I get only the businesses that need a website?
Yes โ turn on onlyNoOrWeakWebsite. The output is then limited to HIGH + MEDIUM leads (no site, social/directory-only, outdated, or unreachable) and skips healthy sites. It's off by default so you get the full picture. Every business is still scraped and audited; the toggle only filters what's saved.
The filter is on and I got 0 results โ is it broken?
No. It means every business found in that search already has a healthy website, so none matched the filter. The run's status message says exactly that. Turn onlyNoOrWeakWebsite off to see the full list, or widen the search area.
Do I need a proxy?
No โ it's off by default and works for most searches, because the location comes from your query text, not your IP. Turn useProxy on only if you start seeing blocks/captchas or need strict same-country routing. It's slower.
Do I need the PageSpeed API key?
No. Without it you still get every category and priority โ you just don't get the numeric pageSpeedScore. The key is free (25,000 requests/day); setup is below.
The results aren't pre-sorted โ why?
Rows are written the instant each business is processed, so you see progress live. Every row carries outreachPriority, so sort or filter on that column in your spreadsheet/CRM in one click.
A business is marked HEALTHY but I think its site is bad โ why?
Categories use conservative, deterministic signals (SSL + mobile viewport + reachability). If a site is reachable and technically modern, it's HEALTHY even if it's ugly. Use pageSpeedScore to find slow-but-healthy sites worth a redesign pitch.
Is this allowed? It collects publicly visible business-listing information. You're responsible for using the data in line with applicable laws and platform terms โ including marketing/anti-spam rules (e.g. CAN-SPAM, GDPR) when you run outreach.
Get a free PageSpeed API key (optional, 1 minute)
Adds the raw mobile Lighthouse score to every record โ great for fine-grained sorting. Free, 25,000 requests/day.
- Go to console.cloud.google.com and create a project.
- APIs & Services โ Library โ "PageSpeed Insights API" โ Enable.
- Credentials โ Create credentials โ API key. Copy it.
- Paste it into the
pageSpeedApiKeyinput field.
Use cases
- Web design agencies building targeted cold-outreach lists
- Freelance developers who want HIGH-priority leads on tap
- Local SEO consultants filtering by technical signal (
OUTDATED_WEBSITE, low PageSpeed) - Cold-email tools โ pipe directly into Instantly, Smartlead, or Apollo
- CRM enrichment โ augment HubSpot / Pipedrive with a current web-presence signal
- Niche research โ find categories where most local businesses are still offline
Limitations
- Google Maps caps results at ~120 per search area. For bigger pulls, split by
neighborhoodand merge. - Lighthouse scores fluctuate ยฑ5โ10 points between runs โ that's why they don't drive categorization.
- Selectors can shift when Google A/B tests new layouts. The actor logs a one-time selector audit on the first place per run, so you see immediately if any field went null.
- A site that fails to load is labeled
WEBSITE_UNREACHABLE(MEDIUM), not HIGH โ a plain fetch can be fooled by slow servers or bot-blocking, so treat it as "worth a manual look," not a guaranteed dead site. Anything we genuinely can't verify still defaults toHEALTHY, so real customers' sites aren't mislabeled.
