# Google Maps Businesses Without Website (`aiden_boudreau/google-maps-businesses-without-website`) Actor

Find local businesses on Google Maps that have no website, or only a dead, parked or Facebook-only one. Phone, address and rating included. Pay per business found.

- **URL**: https://apify.com/aiden\_boudreau/google-maps-businesses-without-website.md
- **Developed by:** [Aiden Boudreau](https://apify.com/aiden_boudreau) (community)
- **Categories:** Lead generation, SEO tools
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 business without a websites

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## Google Maps Businesses Without Website

Find local businesses on Google Maps that **have no website**, or only a dead, parked, expired or Facebook-only one. Every row has the business name, phone, address, rating, review count and a Google Maps link, so you can call or visit them with an offer for a website.

Typical buyers: web designers, freelancers, local SEO and marketing agencies, website-builder and hosting sales teams, and anyone selling to small local businesses.

### How to find businesses without a website

1. Enter one or more business types ("plumber", "dentist", "hair salon") and a location ("Boise, ID", "Leeds, UK").
2. Click Start. A 20-business test finishes in under a minute.
3. Open the **Businesses without a website** table, or export CSV, Excel or JSON.

You can also pass the dataset of an earlier Google Maps Scraper run (`mapsDatasetId`) so you don't pay to scrape Google Maps twice.

### What you get

| Field | Meaning |
|---|---|
| `businessName`, `category`, `address`, `city`, `state`, `postalCode` | Who and where |
| `phone` | Phone number from Google Maps |
| `rating`, `reviewsCount` | Google rating and review count (more reviews = a more established business) |
| `websiteStatus` | `NO_WEBSITE`, `DEAD`, `PARKED`, `EXPIRED`, `PLACEHOLDER` or `SOCIAL_ONLY` |
| `reason` | Plain-English explanation |
| `listedWebsite` | The website Google Maps lists, if any |
| `googleMapsUrl` | Link to the listing |

### Which businesses are returned

- **No website listed** on Google Maps.
- With "Also include dead, parked or social-only websites" on (default): the listed website is down, a parked domain, an expired hosting page, a placeholder, or only a Facebook/Instagram/Linktree-style page. These businesses effectively have no website either.
- Businesses with a working website are not returned and not charged.
- Permanently or temporarily closed places are skipped.

### Pricing and cost per 100 leads

Pay per event: **$0.003 per business returned**, so 100 leads cost $0.30 from this Actor. Google Maps data comes from Apify's Google Maps Scraper, which runs in your account at its own price (about $4 per 1,000 places scanned). How many leads you get per 100 places scanned depends on the niche and city: trades and small service businesses have more gaps than dentists. Use "Min reviews" to keep only established businesses, and "Max Google Maps cost" to cap the scan.

### FAQ

**Does it scrape emails?** No. It returns the phone number and address Google Maps shows publicly. Sites that exist are not crawled for contacts, only checked.

**How is this different from the Google Maps Scraper's "without website" filter?** The filter only drops businesses that list a website. This Actor also catches listed websites that are dead, parked or just a social page, which are often the best leads.

**Is it legal?** It reads public business listings. Business phone numbers and addresses are public listing data; follow your local rules for cold calling and email.

**Something broke?** Open the Issues tab with your run link and we'll look at it.

Looking to pitch redesigns to businesses whose existing site is outdated? See [Businesses Without Website & Bad Website Leads](https://apify.com/aiden_boudreau/website-redesign-leads), which scores sites on mobile-friendliness, HTTPS, age and speed.

# Actor input Schema

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

Business types to look up on Google Maps, one per entry, e.g. "plumber", "dentist", "hair salon". Each is searched in the location below. Leave empty if you give a Google Maps dataset instead.

## `location` (type: `string`):

City and state or country where to search, e.g. "Boise, ID" or "Leeds, UK". Required when searchTerms is used.

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

How many Google Maps businesses to scan for each search term (1-2000). Google Maps charges about $4 per 1,000 places in your account; this Actor then charges per business it returns. Use 20 for a quick test.

## `includeDeadWebsites` (type: `boolean`):

If true (default), businesses whose listed website is down, parked, expired, a placeholder or only a Facebook/Instagram page are returned too. Set false for strictly "no website listed" businesses (cheaper and faster).

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

Only return businesses with at least this many Google reviews (a sign they are established). 0 returns all.

## `minRating` (type: `integer`):

Only return businesses rated at least this (1-5 stars). 0 returns all.

## `maxMapsCostUsd` (type: `integer`):

Optional cap on what the Google Maps Scraper step may charge. Google Maps discovery runs Apify's Google Maps Scraper (compass/crawler-google-places) in your account at its own price, roughly $4 per 1,000 places.

## `mapsDatasetId` (type: `string`):

A dataset from an earlier Google Maps Scraper run (pick it, or paste its ID). Every place in it is audited, so you don't pay to scrape Google Maps twice.

## `maxConcurrency` (type: `integer`):

How many websites to audit at once.

## Actor input object example

```json
{
  "searchTerms": [
    "plumber"
  ],
  "location": "Boise, ID",
  "maxPlacesPerSearch": 20,
  "includeDeadWebsites": true,
  "minReviews": 0,
  "minRating": 0,
  "maxConcurrency": 20
}
```

# Actor output Schema

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

Businesses without a website: name, phone, address, rating, reason.

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

Counts per website status.

# 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": [
        "plumber"
    ],
    "location": "Boise, ID",
    "maxPlacesPerSearch": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("aiden_boudreau/google-maps-businesses-without-website").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": ["plumber"],
    "location": "Boise, ID",
    "maxPlacesPerSearch": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("aiden_boudreau/google-maps-businesses-without-website").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": [
    "plumber"
  ],
  "location": "Boise, ID",
  "maxPlacesPerSearch": 20
}' |
apify call aiden_boudreau/google-maps-businesses-without-website --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,aiden_boudreau/google-maps-businesses-without-website"
        }
    }
}
```

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/zs0WdBxaprjFKGYk4/builds/uflY0yJctokKLyEKd/openapi.json
