# Home Services Growth Leads | 💵$5/1K (`webdata_labs/home-services-growth-leads`) Actor

\[💵 $5.00 / 1K] Find plumbers, HVAC companies, roofers, electricians, and other home-service businesses with no website or low Google ratings. Export outreach-ready leads with phones, scores, and Maps URLs.

- **URL**: https://apify.com/webdata\_labs/home-services-growth-leads.md
- **Developed by:** [WebData Labs](https://apify.com/webdata_labs) (community)
- **Categories:** Lead generation, Business, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.50 / 1,000 home-service growth 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/platform/actors/running/actors-in-store#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

## Home Services Growth Leads

Find plumbers, HVAC companies, roofers, electricians, landscapers, and other local home-service businesses with a clear marketing gap: no website, a low Google rating, or either condition.

### ✅ What you get

- Filtered growth leads - not a raw Google Maps dump
- Business name, category, address, phone, rating, and website
- Opportunity type, reason codes, and a 0-100 lead score
- Direct Google Maps provenance URL
- Lead-only dataset rows suitable for CRM export

### ❌ What this isn't

This Actor does not scrape emails, private data, reviews, or every Maps business. It returns only businesses matching the selected growth-gap filter.

### 🔎 Inputs

Enter one trade and city per line, such as `plumbers in Dallas, TX`, choose the growth gap, rating threshold, and maximum leads.

### 👥 Who it is for

Website agencies, local SEO consultants, reputation-management agencies, and home-services marketing teams.

### ⚙️ How it works

The Actor queries structured local results, normalizes businesses, deduplicates them, applies the selected filter, scores actionability, and stores only matching leads.

### 📥 Example input

```json
{"searchQueries":["plumbers in Dallas, TX"],"leadFilter":"either","maxRating":4,"maxLeadsPerQuery":25}
```

### 📤 Output

Each dataset row is one qualified lead. Run diagnostics and scanned/matched counts are stored separately in `OUTPUT`.

### 💵 Pricing

Pay per qualified lead row. Scanned businesses that do not match are not dataset items.

### 🔁 Automation

Run saved tasks by city/trade, schedule recurring searches, or connect the dataset to Sheets, Zapier, Make, or a CRM.

### ⚠️ Limitations

Coverage varies by query and location. Ratings and website availability can change. Comply with applicable outreach and privacy rules.

### 🧩 Data fields

`name`, `category`, `address`, `phone`, `rating`, `websiteUrl`, `opportunityType`, `leadScore`, `leadReasons`, `googleMapsUrl`, `searchQuery`.

### ❓ FAQ

**Are non-matches charged?** No - only matching dataset rows are emitted.

**Does it find emails?** No. Pair website-bearing results with a contact extractor if email enrichment is needed.

### 🛠️ Support

If a query returns no usable businesses, share the exact input and run ID through the Actor issue tracker.

# Actor input Schema

## `searchQueries` (type: `array`):

Use one trade and city per line.

## `leadFilter` (type: `string`):

Choose which visible marketing gap qualifies a business as a lead.

## `maxRating` (type: `number`):

Businesses at or below this Google rating qualify as low-rating leads.

## `maxLeadsPerQuery` (type: `integer`):

Stop after this many matching leads for each search. Use 0 for no limit.

## `countryCode` (type: `string`):

Two-letter Google localization country code.

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

Google result interface language.

## `minHitRate` (type: `number`):

Stop low-yield searches early after warm-up.

## `proxyConfiguration` (type: `object`):

Proxy used for structured local-result requests.

## `debugDumpHtml` (type: `boolean`):

Store raw responses for troubleshooting.

## Actor input object example

```json
{
  "searchQueries": [
    "plumbers in Dallas, TX"
  ],
  "leadFilter": "either",
  "maxRating": 4,
  "maxLeadsPerQuery": 10,
  "countryCode": "us",
  "language": "en",
  "minHitRate": 0.08,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  },
  "debugDumpHtml": false
}
```

# Actor output Schema

## `OUTPUT` (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 = {
    "searchQueries": [
        "plumbers in Dallas, TX"
    ],
    "leadFilter": "either",
    "maxRating": 4,
    "maxLeadsPerQuery": 10,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("webdata_labs/home-services-growth-leads").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 = {
    "searchQueries": ["plumbers in Dallas, TX"],
    "leadFilter": "either",
    "maxRating": 4,
    "maxLeadsPerQuery": 10,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("webdata_labs/home-services-growth-leads").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "searchQueries": [
    "plumbers in Dallas, TX"
  ],
  "leadFilter": "either",
  "maxRating": 4,
  "maxLeadsPerQuery": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call webdata_labs/home-services-growth-leads --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=webdata_labs/home-services-growth-leads",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/R9OJcM6Z88t2K1ogH/builds/SiFRTKDLyMRiTX7Qa/openapi.json
