Find Local Businesses With No Website - Web Designer Leads avatar

Find Local Businesses With No Website - Web Designer Leads

Pricing

from $25.00 / 1,000 prospect records

Go to Apify Store
Find Local Businesses With No Website - Web Designer Leads

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

Seibs.co

Maintained by Community

Actor stats

0

Bookmarked

12

Total users

8

Monthly active users

2 days ago

Last modified

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 SDK
from apify_client import ApifyClient
client = 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:

  1. Calls compass/crawler-google-places to enumerate businesses on Maps.
  2. 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.
  3. Classifies the website field on each record into one of 12 buckets (real site, social-only, free Wix / Squarespace / GoDaddy, GMB-only, linktree, parked domain, or none).
  4. Computes a quality_score (0.0 to 1.0) from reviews, rating, claimed-flag, phone, and review recency.
  5. Filters out businesses that already have a real website (the whole point of the actor).
  6. Pushes records to the dataset and charges per-record PPE events.

3. Key inputs

FieldRequiredDefaultNotes
locationsyes-US city + state, neighborhood, or ZIP. Up to 25.
modenoall_businessesOr vertical_filter to restrict to selected verticals.
verticalsno[]Up to 50 of the supported verticals. Used when mode=vertical_filter.
radius_milesno25Soft hint passed through to Maps (5 to 50).
weak_website_filternoinclude_weak_websitesinclude_weak_websites
min_quality_scoreno0Drop records below this score (0.0 to 1.0).
max_results_per_queryno50Cap per (term x location) tuple. Max 100.
sort_bynoquality_score_descAlso: reviews_count_desc, rating_desc, name_asc.
search_termsnoderivedFree-text override. If empty, derived from mode + verticals.
exclude_chainsnotrueDrops 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)

EventDIAMONDFREE
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.

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=overview for SDR-friendly columns.
  • Zapier / Make / n8n - subscribe to the run-finished webhook; pipe the overview view into a Google Sheet or CRM.
  • MCP - point a Claude Desktop / Cursor / OpenAI Assistants tool call at the datasetItemsMcp URL.
  • 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:

  1. On this actor's Apify Store page, click Run with your input fully configured.
  2. Click the Save as task button at the top of the run page.
  3. Name the task something memorable (e.g. Plumbers with no website in Houston, TX - weekly).
  4. Reload the task page and click Start anytime 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:

  1. Save your input as a Task (see above).
  2. Go to https://console.apify.com/schedules and click Create new schedule.
  3. 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 * *
  4. 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_url input 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_run event ($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.