Find Local Businesses With No Website - Web Designer Leads
Pricing
from $25.00 / 1,000 prospect records
Find Local Businesses With No Website - Web Designer Leads
Find US local businesses on Google Maps with no website or weak web presence (social-only, free Wix, GMB-only, parked). Per-record quality score, 50-vertical inference, per-vertical intent signals. URL-pattern classification, no live fetches. For web designers and SEO agencies.
Pricing
from $25.00 / 1,000 prospect records
Rating
0.0
(0)
Developer
Seibs.co
Maintained by CommunityActor stats
0
Bookmarked
12
Total users
8
Monthly active users
2 days ago
Last modified
Categories
Share
Local Leads Without Websites
TL;DR for web designers, freelance devs, local SEO agencies, and digital marketing consultants: Pulls local Google Maps businesses that have NO website or only a weak Facebook-page or Linktree as their web presence, sorted by lead-quality score (reviews x recency x category). Compared to compass/crawler-google-places, this pre-filters to businesses that are demonstrably underserved on web (no domain, no SSL, broken site, or only social-link) so every record is a real pitch opportunity rather than a high-quality enterprise lead. Free Apify plan returns about 1,000 leads per month on your $5 platform credit, then demo samples plus an upgrade message. Upgrade to Apify Starter ($49/mo) for unlimited volume.
Run it in 30 seconds
# Via the Apify Python SDKfrom apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("seibs.co/local-leads-without-websites").call(run_input={"locations": ["Panama City, FL"],"mode": "no_website","min_quality_score": 50,"max_results_per_query": 100})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
Or via curl:
curl -X POST "https://api.apify.com/v2/acts/seibs.co~local-leads-without-websites/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \-H "Content-Type: application/json" \-d '{"locations": ["Panama City, FL"], "mode": "no_website", "min_quality_score": 50, "max_results_per_query": 100}'
Or click "Try for free" on this page if you prefer the no-code UI.
What you get
Each run produces:
- A clean dataset, filterable in the Apify console and downloadable as CSV or JSON
- An OUTPUT.html dashboard preview of your top records
- A sample-output preview at ./.actor/sample-output.json
Per-archetype custom artifacts shipped with this actor:
- top-leads.csv (sorted by quality_score, with phone and current-web-presence columns)
- pitch-templates.html (per-vertical web-design proposal with copy-to-clipboard buttons)
- weak-web-presence.csv (subset with Facebook-only or Linktree-only sites)
1. Who this is for
- Independent web designers and small agencies selling one-off websites.
- Local SEO firms that bundle GMB optimization with a Wix-to-WordPress rebuild.
- Marketing freelancers building a cold-call list of local prospects.
2. What it does
For every (search term x location) pair, the actor:
- Calls
compass/crawler-google-placesto enumerate businesses on Maps. - Drops national chains and franchises (Great Clips, McDonald's, Home Depot, Marriott, etc.) by name match against a curated ~400-brand blocklist. Runs BEFORE the website check so franchises whose Maps listing is missing a website field do not leak through as "no website" prospects. Toggle off via
exclude_chains: false. - Classifies the
websitefield on each record into one of 12 buckets (real site, social-only, free Wix / Squarespace / GoDaddy, GMB-only, linktree, parked domain, or none). - Computes a
quality_score(0.0 to 1.0) from reviews, rating, claimed-flag, phone, and review recency. - Filters out businesses that already have a real website (the whole point of the actor).
- Pushes records to the dataset and charges per-record PPE events.
3. Key inputs
| Field | Required | Default | Notes |
|---|---|---|---|
locations | yes | - | US city + state, neighborhood, or ZIP. Up to 25. |
mode | no | all_businesses | Or vertical_filter to restrict to selected verticals. |
verticals | no | [] | Up to 50 of the supported verticals. Used when mode=vertical_filter. |
radius_miles | no | 25 | Soft hint passed through to Maps (5 to 50). |
weak_website_filter | no | include_weak_websites | include_weak_websites |
min_quality_score | no | 0 | Drop records below this score (0.0 to 1.0). |
max_results_per_query | no | 50 | Cap per (term x location) tuple. Max 100. |
sort_by | no | quality_score_desc | Also: reviews_count_desc, rating_desc, name_asc. |
search_terms | no | derived | Free-text override. If empty, derived from mode + verticals. |
exclude_chains | no | true | Drops national chains and franchises (Great Clips, McDonald's, Home Depot, Marriott, etc.) regardless of whether their Maps listing has a website field. ~400 brands blocked. |
4. Output record (excerpt)
{"place_id": "ChIJN1t_tDeuEmsRUsoyG83frY4","name": "Cortez Family Diner","vertical": "restaurants","address": { "city": "Austin", "state": "TX", "zip": "78702" },"phone_e164": "+15125550181","web_presence_type": "facebook_only","web_presence_url": "https://www.facebook.com/cortezfamilydiner","quality_score": 0.83,"is_high_quality": true,"vertical_signals": { "has_online_ordering": false, "has_reservations": false }}
Five named views: overview (8 fields), detailed (every field), signals (unwound by vertical signal), MCP-compatible JSON, and a CSV export.
5. Pricing (tiered by Apify subscription plan)
| Event | DIAMOND | FREE |
|---|---|---|
prospect_record (primary) | $0.020 | $0.050 |
high_quality_prospect (when quality_score >= 0.75) | $0.030 | $0.075 |
web_presence_classification (when web_presence_type != has_real_website) | $0.003 | $0.0075 |
Apify margin: 20%.
6. Cost control (wired in)
- Proactive free-plan check before the paid upstream call.
- Soft-fail demo on credit-exhausted - exits SUCCEEDED with labeled samples.
- 24h KVStore query cache (identical inputs in a 24h window skip the upstream call entirely).
- Run-budget guard: 20-min wall clock, 50-attempt + low-revenue abort, 200 hard record cap.
- Pre-flight input limits: max 25 locations, max 100 results per query, max 50 verticals.
7. FAQ
Why don't you visit the prospect's website to check if it's parked?
Live-fetching every URL would multiply compute cost by 10x and slow runs by orders of magnitude. The URL-pattern classifier catches the vast majority of weak-web cases. v2 may add an optional verify_live flag for buyers who want to confirm parked-domain hits.
Why was my local Great Clips / Home Depot / McDonald's showing up before?
Franchise locations on Google Maps sometimes have NO website field on the individual Maps listing (the corporate brand owns the website, the franchisee doesn't have their own URL there). The classifier saw "no website" and emitted them. Fixed in the current version: the actor drops ~400 chain brands by name match BEFORE the website check, so franchises never leak through as prospects. Toggle off with exclude_chains: false if you want them back.
Why is has_real_website filtered out by default?
The entire premise of this actor is finding prospects to sell a website to. A business that already has a real website is not the target.
Can I run this for non-US locations? Compass supports global coverage but the verticals and quality scoring are tuned for US small business. International runs work but may misclassify edge cases.
Why a quality score and not just review count? A 5-star business with 3 reviews is not the same prospect as a 4.6-star business with 200 reviews. The score combines reviews_count (log scaled), rating, claimed-flag, phone, and recency into one number.
8. Related Actors
This actor lives in a 35+ actor portfolio. After exporting your list of prospects, layer additional intent and verified contact data with:
- B2B Sales Triggers - hiring surge, funding, press, exec changes (intent signals).
- Email Verifier (Batch) - validate any emails you append from your CRM.
- Home Services Lead Finder - if you want POS / booking / tech-stack signals for home-services prospects.
See the full portfolio: https://apify.com/seibs.co
Integrations
- Apify API - GET
/v2/datasets/{id}/items?view=overviewfor SDR-friendly columns. - Zapier / Make / n8n - subscribe to the run-finished webhook; pipe the
overviewview into a Google Sheet or CRM. - MCP - point a Claude Desktop / Cursor / OpenAI Assistants tool call at the
datasetItemsMcpURL. - CSV - direct CSV download URL is published in
output_schema.json.
Save your input as an Apify Task
Apify Tasks let you save a configured input once and re-run it with a single click - no need to re-type search terms, locations, filters, or tier settings every time. Tasks are the foundation for everything that comes next: schedules, monitor mode, and webhook routing all attach to a saved Task, not to the raw actor.
Steps to save your current input as a Task:
- On this actor's Apify Store page, click
Runwith your input fully configured. - Click the
Save as taskbutton at the top of the run page. - Name the task something memorable (e.g.
Plumbers with no website in Houston, TX - weekly). - Reload the task page and click
Startanytime to re-run with the same inputs.
Tasks unlock the next two features below: scheduling and monitor mode.
Run this weekly with Apify Schedules
Apify Schedules cron-run any saved Task automatically. Pair this with the saved Task above and you get hands-off recurring runs with no manual clicks, no missed weeks, and a steady stream of fresh data into your CRM or warehouse.
Steps to schedule a Task:
- Save your input as a Task (see above).
- Go to https://console.apify.com/schedules and click
Create new schedule. - Pick your Task and set the cron expression. Common patterns:
- Daily at 9am UTC:
0 9 * * * - Weekly on Mondays at 9am:
0 9 * * 1 - Monthly on the 1st:
0 9 1 * *
- Daily at 9am UTC:
- Save. Apify will run your Task on that schedule automatically, push the dataset to whatever integrations you have wired up, and fire run-completion webhooks for downstream automation.
Run weekly to keep your no-website prospect list fresh and catch newly-claimed Google Maps listings that still lack a site.
Monitor mode (v2, beta)
Monitor mode is the v2 evolution of this actor and is currently in BETA. It turns a recurring schedule into a true change-feed instead of a firehose of duplicate records.
How it works:
- When this actor runs under an Apify Schedule, monitor mode is enabled automatically.
- Instead of emitting ALL records every run, it emits ONLY records that are NEW or CHANGED since the last scheduled run.
- A digest record summarizes the delta (X new, Y changed, Z removed) at the top of every run.
- Optional: provide a Slack or email webhook URL in the
monitor_webhook_urlinput field and the digest fires there too, so your team gets the delta in their inbox or channel without polling the dataset. - Cost: a single
scheduled_delta_runevent ($0.05) per scheduled run, plus standard PPE on emitted delta records only. Predictable monthly cost, no surprise bills from re-charging for unchanged records.
Monitor mode is rolling out to the top 3 actors first (this one included if it's hotel-motel-lead-finder, google-maps-reviews-pro, or mcp-accounting-firm-leads). Full portfolio coverage by end of June.