Google Maps No-Website Leads | 💵$5/1K avatar

Google Maps No-Website Leads | 💵$5/1K

Under maintenance

Pricing

from $3.50 / 1,000 leads

Go to Apify Store
Google Maps No-Website Leads | 💵$5/1K

Google Maps No-Website Leads | 💵$5/1K

Under maintenance

[💵 $5.00 / 1K] Find businesses on Google Maps that have NO website or only a Facebook/Instagram page - the ones that actually need web design, SEO, or marketing services. Scored, deduped leads with phone numbers. Not another raw Maps dump.

Pricing

from $3.50 / 1,000 leads

Rating

1.5

(2)

Developer

WebData Labs

WebData Labs

Maintained by Community

Actor stats

1

Bookmarked

77

Total users

28

Monthly active users

22 minutes ago

Last modified

Share

Google Maps No-Website Leads Scraper - Businesses That Need You, Not Raw Dumps

Find businesses on Google Maps that have NO website - the exact prospects who need web design, SEO, and marketing services.

A raw Google Maps scrape gives you 200 rows where 170 already have a website and will never buy one from you. This Actor scans Google Maps local results and, by default, returns only businesses with no website at all - every row comes back with an empty website column, because that is the whole point. Each lead comes with phone, rating, review count, years in business, and a lead score - so your best prospect is row one, and you pay only for matching leads, not for every business scanned.

Need a wider net? One switch (Lead filter → No website or social/booking-only) also returns businesses whose entire web presence is a Facebook/Instagram page or a Booksy/Square booking link. Those rows still never fill a "website" column - the page shows up in a separate Social / booking page column, so you always know what you are looking at.

✅ What you get / ❌ what this isn't

✅ This Actor gives you❌ This Actor is not
By default, only businesses with no website at allNot a raw dump padded with websited businesses
A lead score + plain-English reasons per rowNot unscored rows you triage by hand
Phone, rating, reviews, years in businessNot name-only rows you must re-enrich
Charged per matching lead onlyNot billed for every listing scanned
Optional social/booking-only leads, in their own columnNot a Facebook or Booksy link dressed up as a website

🔎 Why use this Actor

  • The filter is the product. "No website" businesses are the highest-intent prospects for web design, SEO, Google Business Profile, and marketing services - and they are invisible in a raw Maps export until you filter it yourself.
  • Social and booking pages are not websites. A business whose "website" is facebook.com/..., a Booksy booking page, or Google's own Business Profile placeholder still needs a real site. The Actor classifies those social_only / booking_only (optional leads) instead of writing them into a website field.
  • Broken sites too (optional). Turn on checkWebsiteStatus and businesses whose site is genuinely gone come back as broken_website leads. A site that merely blocks our check with a bot wall is treated as live and never sent to you as a lead.
  • Scored, with reasons. leadScore 0-100 built from presence, phone availability, review count, and rating - leadReasons explains each score in plain English.
  • Pay for leads, not scans. If 60 businesses are scanned and 12 match, you are charged for 12 results.
  • Fresh leads on repeat runs. Turn on Only return new leads on repeat runs in a saved Task. The first run returns leads normally; later runs automatically skip leads that Task already returned.
  • Established businesses, not ghosts. Review counts and years in business tell you which no-website businesses are real, busy operations that can afford your service.

👥 Who it's for

Web designers, SEO freelancers, and digital agencies prospecting local clients. Common jobs:

  • Build a call list of businesses in a niche + city that need their first website.
  • Find social-only businesses to pitch a proper site + Google Business Profile setup.
  • Territory research: which categories in your city are underserved online.
  • Feed the phone/name list into your CRM or cold-call workflow.

Example tasks

⚙️ How to find businesses without websites

  1. Open the Actor on Apify.
  2. Enter searchQueries like plumbers in Austin, TX or restaurants in Lisbon (one category + city per line).
  3. Keep the default No website at all filter (or widen it to No website or social/booking-only).
  4. Optionally enable checkWebsiteStatus to also catch dead websites.
  5. For a recurring saved Task, optionally turn on Only return new leads on repeat runs. Nothing else is required.
  6. Click Start.
  7. Open the No-website leads view, or download CSV/JSON/Excel or pull from the API.

Get a fresh list every week

Use the Weekly New No-Website Leads task, edit the searches to your niches and cities, and schedule it weekly. Its onlyNew switch is already on, so each later run skips leads returned by that same Task. If you want the results in Google Sheets, connect the resulting dataset through Make, Zapier, or another Sheets integration.

You do not need to manage IDs for a new recurring Task. If you already have an older lead list, paste its Apify dataset ID or URL into Existing leads dataset (baseline) once. The Actor imports the IDs and skips those rows too.

📥 Input

{
"searchQueries": ["nail salons in San Antonio, TX"],
"maxLeadsPerQuery": 50,
"leadFilter": "no_website_only",
"minRating": 4,
"requirePhone": true,
"checkWebsiteStatus": false,
"onlyNew": false
}
  • searchQueries - Google Maps searches to mine (category + city works best).
  • maxLeadsPerQuery - stop after this many matching leads per query (0 = no limit).
  • leadFilter - no_website_only (default: no web presence whatsoever), weak_presence (also social-only, booking-only and, with checkWebsiteStatus, dead sites), or all (no filter; every business including ones that do have a website).
  • checkWebsiteStatus - live-check websites to classify dead ones as broken_website leads.
  • onlyNew - optional and off by default. When on, each saved Task remembers its own returned leads and only emits unseen ones on later runs.
  • excludePlaceIds - advanced optional list of Google Maps place IDs, numeric CIDs, or Maps URLs to skip.
  • baselineDatasetId - advanced optional Apify dataset ID or URL whose existing Place IDs should be skipped.
  • countryCode / language - Google localization (default us / en).

Lead quality filters (optional)

Narrow the list to the businesses actually worth calling. All four are off unless you set them.

  • minRating - minimum Google star rating, 1-5.
  • minReviews - minimum number of Google reviews.
  • requirePhone - skip listings with no phone number. Turn this on when the list feeds a dialer.
  • categoryContains - keep only categories containing one of these words (salon, dentist, plumber...). Case-insensitive, any-of.

Two things worth knowing about how they behave:

A business with no rating, no reviews or no category is kept, not dropped. That is deliberate. A listing with no website and no reviews is usually the strongest lead this Actor can find - filtering it out because Google has no rating for it yet would remove exactly the prospects you want. Use minRating to drop businesses you know are rated badly, not to require a rating.

These filters never make a run stop early. They are applied after a business already counted as a match, so the cost guard still measures the real no-website hit rate. A tight filter shortens the output without cutting the search short. The run summary reports filteredByQuality so you can see how many leads the filters removed.

Proxy rotation and rate limiting are handled automatically and included in the per-lead price - there is nothing to configure.

📤 Output

One row per lead, with a ready-made No-website leads view.

namepresenceleadScorecategoryphoneratingreviewsCountaddress
The Nail Spanone95Nail salon(210) 824-85904.41,400San Antonio, TX
Queens Nails & Spasocial_only85Nail salon(210) 543-14004.6289San Antonio, TX

presence is the second column on purpose - it states in one word why the row is a lead:

presenceMeaningReturned by
noneNo web presence of any kind on the listingevery filter (the default returns only these)
social_onlyOnly a Facebook/Instagram/Linktree pageweak_presence
booking_onlyOnly a booking platform or a Google Business Profile placeholderweak_presence
broken_websiteHad a site; it is confirmed gone (needs checkWebsiteStatus)weak_presence
has_websiteReal, working website - not a leadall only

websiteUrl is empty on every lead. It is filled only for has_website rows, which no lead filter can produce - you reach them exclusively via leadFilter: "all". A social or booking page goes to weakPresenceUrl, a confirmed dead site to brokenWebsiteUrl. A lead row can never look like a business that already has a website.

Each row also carries placeId (the stable Google Maps identifier used for repeat-run deduplication), leadReasons (why it scored what it scored), socialProfile (the social page, for social_only leads), yearsInBusiness, openStatus, googleMapsUrl, and the searchQuery it came from. The run summary in the key-value store reports presenceScanned - how many of the scanned businesses fell into each class - so a short list is always explainable.

💵 How much does it cost?

You pay per matching lead (see the pricing on this page) - businesses that already have a working website are scanned but never charged. Platform usage is included in the per-result price. A typical category+city query yields 5-20 leads.

🔁 Run it on the Apify platform

Schedule weekly prospecting runs per city, call it from the API, export to CSV/JSON/Excel, or pipe leads into Make, Zapier, webhooks, or your CRM.

⚠️ Limits and caveats

  • Data comes from Google's public local results. Depth per query is limited by what Google serves (typically up to a few hundred listings per query); split large areas into neighborhoods or nearby towns for more coverage.
  • "No website" means no website link on the Google listing. A tiny share of businesses have a site they never linked - those still usually need your help finding customers.
  • Ads/sponsored listings are skipped, so you never pay for promoted rows.
  • Email addresses are not part of Google local listings; pair this Actor with a contact-extraction Actor for social-only leads' pages.
  • Website Contact Extractor - turn the websites of broken_website/has_website rows into verified emails.
  • Lead List Deduplicator & Normalizer - merge leads from multiple cities/queries into one clean list.
  • Bulk URL Status Checker - bulk-verify website liveness on very large lists.

❓ FAQ

Am I charged for every business scanned? No. Only rows that match your leadFilter are pushed and charged. Scanning is included.

Why does my result have no website column filled in? That is the product working. Under the default filter every lead has zero web presence, so websiteUrl is empty on every row.

I got a lead that has a website - how? It cannot happen under the default no_website_only filter. It can happen if you switched leadFilter to all, which turns the Actor into an unfiltered Maps scrape with a presence label on each row. If you ever see a none / social_only / booking_only row whose business does have a real site, that is a bug - please open an Issue on this Actor with the business name and the search query, and it gets fixed.

What does social_only mean? The business's only web presence is a social page (Facebook, Instagram, Linktree, etc.) - a prime prospect for a real website. booking_only is the same story with a Booksy/Square/Google-placeholder booking link.

Does it return emails? Google local listings don't include emails. You get name, phone, address, rating, reviews, and the social page where present.

Which countries work? Any country Google Maps covers - set countryCode and language, and write queries in the local language for best results.

How does onlyNew work? It is off by default, so existing one-time workflows do not change. Turn it on in a saved or scheduled Task. The first run returns and remembers leads; later runs from that same Task return only unseen Place IDs. Each Task keeps separate history.

Do I need a baseline dataset? No. It is only for excluding leads you collected before enabling onlyNew. For a new recurring Task, turn on onlyNew and run it.

🤖 Use with AI agents via MCP

Every Apify Actor is callable over the Model Context Protocol, so an agent can prospect on its own - "find me nail salons in San Antonio without a website, only ones rated 4+ with a phone number" maps directly onto this input.

Setup for Claude Code

claude mcp add apify --transport http https://mcp.apify.com/ \
--header "Authorization: Bearer YOUR_APIFY_TOKEN"

Setup for Claude Desktop, Cursor, or VS Code

Add to your MCP config:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com/",
"headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }
}
}
}

Example prompts

  • "Find dentists in Phoenix with no website, at least 20 reviews, and a phone number."
  • "Run the no-website leads scraper for barber shops across Austin, Dallas and Houston, then give me the top 20 by lead score."
  • "Weekly: only new no-website restaurants in Lisbon since last time."

🔗 Use this Actor in n8n

  1. Add the Apify node and pick Run an Actor.
  2. Select Google Maps No-Website Leads Scraper and paste your input JSON.
  3. Chain Get dataset items to pull the leads.
  4. Send them onward - Google Sheets, HubSpot, Airtable, Slack, or an HTTP node into your CRM.

For a recurring pipeline, set onlyNew: true and schedule the workflow. Each run then delivers only businesses you have not already seen, which is what makes this safe to wire straight into a dialer list.

The same flow works in Make and Zapier through their Apify integrations.

This Actor reads the same public local results any visitor sees in Google Maps search, and returns business information - name, category, address, phone, rating, review count, and whether a website is linked. That is company data, not personal data: no individual's private details are collected, and no login or account is used.

Two things are still on you as the operator. First, phone numbers of sole traders can count as personal data under the GDPR and similar laws, so have a lawful basis before cold-outreach in those jurisdictions and honour opt-outs. Second, respect the receiving end - local marketing rules on unsolicited calls and messages apply to how you use the list, not to how it was collected.

We do not extract emails here precisely because Google local listings do not publish them. If you are unsure whether your use case is covered, ask your lawyers rather than this README.

📝 Changelog

2026-08-12

  • The default filter is now "No website at all". A default run returns only businesses with zero web presence. Social-only and booking-only businesses are still available, but you now opt into them via Lead filter → No website or social/booking-only.
  • A lead row can never carry a website URL. websiteUrl is populated only for has_website rows, which only leadFilter: "all" can produce. Social/booking pages now go to weakPresenceUrl and confirmed dead sites to brokenWebsiteUrl, each in its own clearly labelled column.
  • Booking pages and Google Business Profile placeholders no longer count as websites. Booksy, Square, Vagaro, business.google.com/v/_/... and similar links are classified booking_only instead of has_website, so those businesses stop being silently dropped from your lead list.
  • Dead-website detection no longer condemns live sites. A 403/429 bot wall (which is what a healthy WAF-protected site returns to a datacenter IP) counts as alive; only DNS/connection failures, 404/410 and server errors on two consecutive attempts mark a site broken_website.
  • Run summary now reports presenceScanned, and a strict run that finds nothing says how many social/booking-only businesses were available under the wider filter. Early-stop floor lowered from 8% to 4% to suit the stricter default.

2026-08-02

  • Added optional lead-quality filters: minRating, minReviews, requirePhone, categoryContains. Businesses with missing rating, reviews or category are kept by design.
  • Filters run after match accounting, so they never trip the early-stop cost guard. New filteredByQuality counter in the run summary.
  • Input form simplified: proxy configuration is now handled automatically and the developer-only HTML dump switch was removed.
  • Input fields grouped into sections; added MCP, n8n, legality and changelog documentation.

Initial release

  • No-website and social-only lead detection, live website checks, lead scoring, repeat-run deduplication via onlyNew, and baseline dataset import.

🛠️ Support

If a run fails or a field is missing, open an Actor issue with the run URL, the input you used, and the field or behavior you expected.

⭐ Rate this Actor

If this Actor saved you time, please take 30 seconds to leave a review on the Reviews tab of Google Maps No-Website Leads Scraper - reviews are the main trust signal other users see, and they directly decide which features get built next. If something is broken or a field is missing, please open an issue first - we typically respond within a day and would love the chance to fix it before you rate.