# Google Maps No-Website & Unclaimed Leads (`reverenced_garnet/apify-gmaps-nosite-unclaimed`) Actor

Filters Google Maps places (from any Google Maps scraper's output) down to businesses with no independent website and/or an unclaimed Google Business Profile. Zero-fetch, cheap, fast.

- **URL**: https://apify.com/reverenced\_garnet/apify-gmaps-nosite-unclaimed.md
- **Developed by:** [オレンジ Tb](https://apify.com/reverenced_garnet) (community)
- **Categories:**
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 matched leads

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### What does Google Maps No-Website & Unclaimed Leads do?

This Actor takes the output of **any Google Maps scraper** (such as [Google Maps Scraper](https://apify.com/compass/crawler-google-places)) and filters it down to businesses that have **no independent website** and/or an **unclaimed Google Business Profile** — the two most requested prospecting signals for local SEO and marketing agencies. It does no scraping of its own and makes no external calls, so it runs in seconds for less than the underlying scrape — and only matching places are billed.

### Key features

- **Two signals, one run** — "no website" and "unclaimed profile" leads from a single pass instead of two separate exports.
- **📈 Change tracking between runs** — every matched lead is tagged `NEW`, `UPDATED`, or `UNCHANGED` vs. your last run on this Actor, so re-running the same area only surfaces what's actually new.
- **🚫 Closed businesses excluded automatically** — permanently-closed places are dropped before matching.

### Why use this Actor?

Two separate single-purpose tools already exist for "no website" leads and "unclaimed profile" leads. This Actor gives you both signals from one run, with a filter mode so you choose the broadest list (either signal) or the tightest, highest-priority list (both signals at once).

### How to use Google Maps No-Website & Unclaimed Leads

1. Run a Google Maps scraper for the area and category you want, and grab its dataset output.
2. Paste that array of place objects into the **Google Maps places** input field.
3. Choose a **Filter mode**: `either`, `both`, `no_website`, or `unclaimed`.
4. Run it — matching businesses come out with the reason flags attached.

### Input

| Field | Type | Description |
|---|---|---|
| `places` | array | The place objects from a Google Maps scraper's dataset output |
| `mode` | string | `either` (default), `both`, `no_website`, or `unclaimed` |

Example input:

```json
{
  "places": [{ "title": "Lemari Coffee", "placeId": "ChIJv79rmEfzGGARhXlSEd8ceiQ" }],
  "mode": "either"
}
```

### Output

```json
{
  "title": "Lemari Coffee",
  "placeId": "ChIJv79rmEfzGGARhXlSEd8ceiQ",
  "noWebsite": true,
  "unclaimed": false,
  "changeStatus": "NEW",
  "reviewsCount": 40,
  "categoryName": "Coffee shop",
  "city": "Shibuya",
  "address": "J's vendor, 2F, 2 Chome-19-2 Jingumae, Shibuya, Tokyo 150-0001, Japan",
  "phone": null
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

### Data table

| Field | Type | Description |
|---|---|---|
| `title` | string | Business name |
| `placeId` | string | Google Maps place ID |
| `noWebsite` | boolean | True if the business has no independent website |
| `unclaimed` | boolean | True if the Google Business Profile is unclaimed |
| `changeStatus` | string | `NEW`, `UPDATED`, or `UNCHANGED` vs. the previous run on this Actor |
| `reviewsCount` | number | Review count from the source Google Maps data |
| `categoryName` | string | Primary Google Maps category |
| `city` | string | City |
| `address` | string | Full address |
| `phone` | string | null | Phone number, if listed on the profile |

### Pricing / cost estimation

Pay-per-event: a small flat fee when a run starts, plus a per-matched-lead fee ($0.005 run start + $0.001 per matched lead). No scraping or external calls happen inside this Actor, and you only pay for places that match — so the cost is well below the cheapest scraping tier for the same places.

**How much does filtering 1,000 places cost, on top of scraping them?**

| Step | Cost |
|---|---|
| Scrape 1,000 places with [Google Maps Scraper](https://apify.com/compass/crawler-google-places) | Listed "from $1.50 / 1,000 places" on its Store page; ≈ $4 / 1,000 measured in practice (Aug 2026) |
| Filter those same 1,000 places with this Actor (worst case: all 1,000 match) | $0.005 run start + 1,000 × $0.001 ≈ **$1.01** |

The scraping is already paid for; this Actor adds only about $1.01 per 1,000 matched leads — less if fewer places match your filter.

### Tips

- Use `mode: both` when you want a short, highest-confidence call list.
- Use `mode: either` when you want the broadest possible prospecting list to sort through manually.
- Need a single combined *priority score* instead of a filter? See the companion Actor [Google Maps Lead Priority Scorer](https://apify.com/reverenced_garnet/apify-gmaps-lead-priority), which also factors in profile completeness and relative review count.
- Want new leads pushed to Slack, Telegram, or your own webhook automatically? Set that up under this Actor's **Integrations** tab in Apify Console — no extra code needed.

### FAQ, disclaimers and support

- A business with a social-media page (Instagram, Facebook, etc.) instead of its own website counts as "no website" here, since that's the actual pitch agencies make.
- This Actor never fetches any website or calls Google directly — accuracy depends on the freshness of the place data you feed it.
- Found an edge case? Use the Issues tab on this Actor's page.

### Legal & responsible use

This Actor is an independent, unofficial tool. It is not affiliated with, endorsed by, or sponsored by Google. "Google Maps" and "Google Business Profile" are trademarks of Google LLC, used here only to describe compatibility.

The presence of a phone number or address on a public Google Business Profile does not by itself constitute consent to receive marketing calls or messages. Before using this data for outreach you are responsible for complying with the laws that apply to you and your recipients — for example GDPR/UK GDPR, CAN-SPAM and TCPA in the US, and Japan's Act on Regulation of Transmission of Specified Electronic Mail and Act on Specified Commercial Transactions. This Actor does not verify consent or opt-in status.

# Actor input Schema

## `places` (type: `array`):

Paste the dataset output (array of place objects) from a Google Maps scraper Actor here — e.g. Compass's "Google Maps Scraper".

## `mode` (type: `string`):

either = has no website OR is unclaimed (broadest list). both = has no website AND is unclaimed (smallest, highest-priority list). no\_website / unclaimed = single-signal only.

## Actor input object example

```json
{
  "places": [],
  "mode": "either"
}
```

# Actor output Schema

## `results` (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 = {
    "places": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("reverenced_garnet/apify-gmaps-nosite-unclaimed").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 = { "places": [] }

# Run the Actor and wait for it to finish
run = client.actor("reverenced_garnet/apify-gmaps-nosite-unclaimed").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 '{
  "places": []
}' |
apify call reverenced_garnet/apify-gmaps-nosite-unclaimed --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,reverenced_garnet/apify-gmaps-nosite-unclaimed"
        }
    }
}

```

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/UuJVHfdSGRGQnSxHe/builds/Fk0Eb6lvvDMJnx2Ew/openapi.json
