# Businesses Without Websites - Google Maps Leads (`wrenfield-data/businesses-without-websites`) Actor

Find local businesses on Google Maps that have no website, only a Facebook/Instagram page, or a broken, outdated or non-mobile site. Phone, address, rating, reviews and a 0-100 lead score per business. For web designers and agencies. $7 per 1,000 leads, no login, no proxies.

- **URL**: https://apify.com/wrenfield-data/businesses-without-websites.md
- **Developed by:** [Wrenfield Data](https://apify.com/wrenfield-data) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.50 / 1,000 leads

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Businesses Without Websites: Google Maps leads for web designers and agencies

**Businesses Without Websites** finds local businesses on Google Maps that **have no website**, link only to a **Facebook or Instagram page**, or (optionally) have a **broken, insecure, outdated or non-mobile website**. Every lead comes with **phone, address, category, rating, review count, Google Maps link and a 0-100 lead score**, sorted best first.

It's built for web designers, agencies, local SEO consultants and freelancers who sell websites to small businesses: search "roofer in Boise, ID" and get the 10-30 businesses that actually need you, not the 100 that already have a site.

- 🎯 **Only real prospects**: no website at all, or only a social / directory page (Facebook, Instagram, Yelp, Linktree, business.site...).
- 🩺 **Optional website audit**: unreachable, SSL error, no HTTPS, not mobile-friendly, outdated copyright year, very slow, parked or "coming soon" pages, and which site builder they use.
- 📞 **Contactable**: phone, address, Google Maps link, claimed / unclaimed profile, rating and reviews.
- 🔢 **Lead score 0-100**: no website + phone + many good reviews scores highest.
- ⚡ **Fast and reliable**: licensed Google Maps data, no browser, no proxies; a 100-place search finishes in about 10 seconds.
- 🌍 Any country, any city or ZIP code, up to 50 business types x 100 locations per run.

💸 **$7 per 1,000 leads** plus $0.005 per Google Maps search and $0.003 per optional website audit, with no subscription.

### What data do you get?

| Field | What it is |
| --- | --- |
| `business_name`, `category`, `phone`, `address`, `city`, `postal_code`, `region` | Who they are and how to reach them |
| `rating`, `reviews_count`, `is_claimed`, `business_status` | How active the business is |
| `website`, `website_type` | `none`, `social`, `directory` or `own` |
| `lead_score`, `lead_reason` | 0-100 score and a plain-English reason ("No website on the Google Maps listing") |
| `website_issues`, `website_mobile_friendly`, `website_https`, `website_copyright_year`, `website_platform` | Audit results (when **Audit websites** is on) |
| `google_maps_url`, `place_id`, `cid`, `latitude`, `longitude` | Listing identifiers |

### How to find businesses without websites

1. Enter one or more **Business types** (e.g. `roofer`, `hair salon`).
2. Enter **Locations** (cities, areas or ZIP codes).
3. Keep **Which businesses to keep** on *No real website*, or choose *weak website* to also get businesses whose site has problems.
4. Click **Start**. Export to CSV / Excel, or send leads to your CRM with Make, Zapier or n8n.

### Input example

```json
{
    "searchTerms": ["roofer", "plumber"],
    "locations": ["Boise, ID", "Meridian, ID"],
    "leadType": "no_real_website",
    "minReviews": 3,
    "requirePhone": true
}
```

### Output example

```json
{
    "business_name": "Summit Ridge Roofing",
    "category": "Roofing contractor",
    "phone": "+1208-555-0142",
    "address": "100 Example Ave, Boise, ID 83705",
    "city": "Boise",
    "rating": 4.9,
    "reviews_count": 41,
    "is_claimed": true,
    "website": null,
    "website_type": "none",
    "has_real_website": false,
    "lead_score": 98,
    "lead_reason": "No website on the Google Maps listing",
    "google_maps_url": "https://www.google.com/maps?cid=1234567890123456789",
    "search_term": "roofer",
    "search_location": "Boise, ID"
}
```

### Pricing

Pay-per-event pricing. Paid Apify plans get automatic volume discounts (Bronze, Silver, Gold).

| Event | Price |
| --- | --- |
| Lead (`lead`) | **$0.007** per lead returned ($7 per 1,000) |
| Google Maps search (`maps-search`) | **$0.005** per 100 places scanned |
| Website audit (`website-audit`) | **$0.003** per website checked (only with **Audit websites**) |

| Example run | Cost |
| --- | --- |
| 1 business type x 1 city, ~15 leads | about $0.12 |
| 5 business types x 10 cities, ~700 leads | about $5.15 |
| Same, with website audits (~3,000 sites) | about $14.15 |

You only pay for leads that pass your filters. Set **Maximum cost per run** to cap spend; the Actor stops cleanly at the cap.

**Free Apify plan:** 1 business type, 1 location and 100 places per run (25 website audits), so you can try it before you upgrade.

### Use it through the API, on a schedule or with AI agents

**One-link MCP setup:** `https://mcp.apify.com?tools=wrenfield-data/businesses-without-websites` (Claude, Cursor, VS Code or any MCP client). Set `maxTotalChargeUsd` on the run to cap what it can charge.

Run it from the [Apify API](https://docs.apify.com/api/v2), schedule it weekly per city, or connect it to Make, Zapier, n8n and Google Sheets. AI agents can call it through the Apify MCP server; every output field is described in the dataset schema.

```bash
curl -X POST "https://api.apify.com/v2/acts/wrenfield-data~businesses-without-websites/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchTerms": ["plumber"], "locations": ["Austin, TX"]}'
```

### FAQ

**Where does the data come from?**
Business listings come from a licensed Google Maps data provider (DataForSEO). The Actor doesn't log in anywhere and doesn't use proxies. Website audits load each business homepage once, like a visitor would.

**Why do some listings say "blocked"?**
Some websites use bot protection (Cloudflare, SiteGround). They work for people, so the Actor reports `website_audit_status: blocked` and doesn't flag them as broken.

**Why fewer leads than places?**
Most businesses have a website. The Actor scans all places and only charges for the leads it returns.

### Related tools

From the same developer:

- [Website Contact Scraper](https://apify.com/wrenfield-data/website-contact-scraper): emails, phones and social profiles from business websites
- [Website Tech Stack Detector](https://apify.com/wrenfield-data/website-tech-stack-detector): CMS, site builder, analytics and ads tags of any site
- [Google Maps Geo-Grid Rank Tracker](https://apify.com/wrenfield-data/google-maps-grid-rank-tracker): show a prospect where they rank on Google Maps across their city
- [Bulk PageSpeed & Core Web Vitals Checker](https://apify.com/wrenfield-data/bulk-pagespeed-checker): full Google PageSpeed report for prospects that do have a site
- [Company Name to Domain](https://apify.com/wrenfield-data/company-name-to-domain): find the website of any company name

### Feedback and support

Missing a field, hit an error, or need another country or option? Open an issue on the **Issues** tab and include the run ID. We read every issue and reply there.

### Acceptable use

- This Actor is an independent tool. It is not affiliated with, endorsed by or sponsored by Google or DataForSEO.
- Results are public business listing information. Some businesses are sole traders, so phone numbers and addresses can be personal data: follow GDPR, CAN-SPAM, TCPA and your local rules for cold outreach (lawful basis, opt-out, do-not-call lists).
- Don't use the data for spam, harassment, fake reviews or to build a competing maps database.
- The Actor may not be used from, or for people or organizations in, Russia, Belarus, Cuba, Iran, Syria, Myanmar, North Korea, Crimea or the Russian-occupied territories of Ukraine.
- You are responsible for using the results lawfully.

# Actor input Schema

## `searchTerms` (type: `array`):

What to search on Google Maps, e.g. <code>plumber</code>, <code>hair salon</code>, <code>dentist</code>. Up to 50.

## `locations` (type: `array`):

Cities, areas or ZIP codes, e.g. <code>Austin, TX</code>, <code>Leeds</code>, <code>90210</code>. Each business type is searched in each location (up to 100). Leave empty to search the whole country.

## `country` (type: `string`):

Country: name (<code>United States</code>), 2-letter code (<code>DE</code>) or location code (<code>2840</code>).

## `leadType` (type: `string`):

Which businesses become leads.

## `auditWebsites` (type: `boolean`):

Check each business website (one page load): unreachable, no HTTPS / SSL error, not mobile-friendly, outdated copyright year, very slow, parked page, site builder. Adds the <code>website-audit</code> event. Always on for "weak_website".

## `maxPlacesPerSearch` (type: `integer`):

How many Google Maps results to scan per business type and location (in steps of 100, up to 700). Google shows about 100-120 for most searches.

## `maxLeads` (type: `integer`):

Stop after this many leads in total.

## `minReviews` (type: `integer`):

Only businesses with at least this many Google reviews (real, active businesses).

## `minRating` (type: `string`):

Only businesses rated at least this (e.g. <code>4</code>).

## `requirePhone` (type: `boolean`):

Skip businesses without a phone number.

## `language` (type: `string`):

Language of the results (name or code). Default: English.

## Actor input object example

```json
{
  "searchTerms": [
    "roofer"
  ],
  "locations": [
    "Boise, ID"
  ],
  "country": "United States",
  "leadType": "no_real_website",
  "auditWebsites": false,
  "maxPlacesPerSearch": 100,
  "maxLeads": 1000,
  "minReviews": 0,
  "requirePhone": false
}
```

# Actor output Schema

## `leads` (type: `string`):

No description

## `allFields` (type: `string`):

No description

## `summary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchTerms": [
        "roofer"
    ],
    "locations": [
        "Boise, ID"
    ],
    "country": "United States"
};

// Run the Actor and wait for it to finish
const run = await client.actor("wrenfield-data/businesses-without-websites").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchTerms": ["roofer"],
    "locations": ["Boise, ID"],
    "country": "United States",
}

# Run the Actor and wait for it to finish
run = client.actor("wrenfield-data/businesses-without-websites").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchTerms": [
    "roofer"
  ],
  "locations": [
    "Boise, ID"
  ],
  "country": "United States"
}' |
apify call wrenfield-data/businesses-without-websites --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,wrenfield-data/businesses-without-websites"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/NingMDvw9ajoQPhSC/builds/WOC3xOAtXpJT9y1Me/openapi.json
