# Roofing, HVAC, Solar & Contractor Leads Scraper (B2B) (`amitabh_312/local-contractor-home-services-leads-scraper`) Actor

Extract verified Roofing, HVAC, Solar, Plumbing & Remodeling Contractor leads across 64+ US/CA metros. Pulls Owner/President names, phones, verified emails & ServiceTitan/Jobber/Meta Ad pixels.

- **URL**: https://apify.com/amitabh_312/local-contractor-home-services-leads-scraper.md
- **Developed by:** [Amitabh Mohan](https://apify.com/amitabh_312) (community)
- **Categories:** Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 base lead extracteds

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

## Roofing, HVAC, Solar & Contractor Leads Scraper (B2B)

Extract **active US & Canadian Roofing, HVAC, Solar, Plumbing, Electrical, and Remodeling Contractors** complete with **Owner / President Names**, **Live Office & Cell Phone Numbers**, **DNS MX-Verified Emails**, **LinkedIn Profiles**, and **Installed Software & Ad Pixels (`ServiceTitan`, `Jobber`, `Housecall Pro`, `GoHighLevel`, `Meta Pixel`, `Google Ads / GTM`)**.

***

### Why Home-Services Agencies & SaaS Sales Teams Use This Actor

1. **Detects Field-Service CRM & Ad Spend (`Ad_Pixels_And_Tech`):** Automatically flags contractors running **ServiceTitan, Housecall Pro, Jobber, GoHighLevel, Meta Pixel, and Google Ads** at zero extra cost.
2. **Owner & President Discovery (`Decision_Maker`):** Crawls `/about-us` and `/our-team` pages plus LinkedIn X-Ray and 3-Stage B2B Corporate Email Permutation (`first@`, `first.last@`, `flast@`) to find the actual Owner or President.
3. **Zero Aggregator Junk:** Automatically blocks HomeAdvisor, Angi, Thumbtack, Houzz, Porch, and Yelp directories so 100% of leads are real local contractor businesses.
4. **Cross-Run Vault Deduplication (`sift-lead-vault`):** Saves delivered leads to your persistent Apify Key-Value Store so weekly runs never deliver duplicates.

***

### ⚡ Free 25-Lead Trial & 1-Click Automation (Clay.com, n8n, Make & Google Maps)

1. **Zero-Config 25-Lead Free Trial:** Every input field comes pre-filled with high-yield defaults. Click the green **Start** button right now to get a live 25-lead sample in under 25 seconds.
2. **Clay.com / n8n / Make Webhook Integration:** Call `https://api.apify.com/v2/acts/amitabh_312~local-contractor-home-services-leads-scraper/run-sync-get-dataset-items?token=<APIFY_TOKEN>` to stream `Decision_Maker`, `Verified_Email`, `Phone`, and `Ad_Pixels_And_Tech` straight into Smartlead, Instantly, HubSpot, or Google Sheets.
3. **Google Maps 2-Step Chaining:** Run `compass/crawler-google-places` to collect local domains, then pass its `datasetId` into **`b2b-website-decision-maker-email-enricher`** to unlock Owner/CEO names, LinkedIn URLs, and DNS MX-verified corporate emails.

***

### 🔗 Explore Our Complete 10-Actor B2B Lead Generation Fleet

| Actor Slug (`name`) | Primary B2B Vertical & Deliverable |
| :--- | :--- |
| **[`dental-medical-practice-leads-scraper`](https://apify.com/amitabh_312/dental-medical-practice-leads-scraper)** | **Dental Clinic, Dentist & Medical Practice Leads Scraper** — Extract private Dental Practices (DDS/DMD), Orthodontists, Med Spas & Medical Clinics across 64+ US/CA metros.... |
| **[`fitness-gym-pilates-studio-leads-scraper`](https://apify.com/amitabh_312/fitness-gym-pilates-studio-leads-scraper)** | **Fitness, Gym, Pilates & Yoga Studio Leads Scraper** — Extract verified Pilates, Yoga, CrossFit, Martial Arts & Boutique Gym leads across 64+ US/CA metros. Pulls Stu... |
| **[`aesthetics-beauty-salon-leads-scraper`](https://apify.com/amitabh_312/aesthetics-beauty-salon-leads-scraper)** | **Aesthetics, Med Spa & Beauty Salon Leads Scraper (B2B)** — Extract verified Aesthetics, Med Spa, Skincare, Lash & Beauty Salon leads. Pulls studio owner names, direct ce... |
| **[`local-contractor-home-services-leads-scraper`](https://apify.com/amitabh_312/local-contractor-home-services-leads-scraper)** | **Roofing, HVAC, Solar & Contractor Leads Scraper (B2B)** — Extract verified Roofing, HVAC, Solar, Plumbing & Remodeling Contractor leads across 64+ US/CA metros. Pulls O... |
| **[`us-manufacturer-procurement-leads-scraper`](https://apify.com/amitabh_312/us-manufacturer-procurement-leads-scraper)** | **US Manufacturer, CNC & Industrial Supplier Leads Scraper** — Extract verified US & Canadian Manufacturers, CNC Machine Shops, Custom Packaging & OEM Suppliers. Pulls VP Op... |
| **[`medspa-wellness-clinic-leads-scraper`](https://apify.com/amitabh_312/medspa-wellness-clinic-leads-scraper)** | **Med Spa, Physio & Wellness Clinic Leads Scraper (B2B)** — Generate B2B leads for Med Spas, Physiotherapy, Chiropractic & Wellness Clinics. Extracts clinical directors, ... |
| **[`podcast-host-email-leads-scraper`](https://apify.com/amitabh_312/podcast-host-email-leads-scraper)** | **Podcast Host Email Finder & B2B Sponsorship Scraper** — Find verified podcast host & producer booking emails, personal emails, episode counts, publishing frequency & ... |
| **[`shopify-ecommerce-brand-founder-leads-scraper`](https://apify.com/amitabh_312/shopify-ecommerce-brand-founder-leads-scraper)** | **Shopify Store Leads Scraper: D2C Founder Emails & Tech** — Discover active Shopify & D2C ecommerce brands by niche. Extracts Founder/CEO names, verified corporate emails... |
| **[`skool-community-founder-mrr-leads-scraper`](https://apify.com/amitabh_312/skool-community-founder-mrr-leads-scraper)** | **Skool Community Scraper: Founder Emails & MRR Leads** — Extract active Skool communities sorted by Estimated Monthly Recurring Revenue (MRR). Pulls Founder names, ver... |
| **[`b2b-website-decision-maker-email-enricher`](https://apify.com/amitabh_312/b2b-website-decision-maker-email-enricher)** | **Google Maps & Website Decision Maker Email Enricher** — Turn raw Google Maps, Yelp or Clay URLs/domains into verified Owner/CEO names, LinkedIn profiles, DNS MX-verif... |

# Actor input Schema

## `niches` (type: `array`):

Contractor trades to extract (e.g., Roofing Contractor, HVAC Contractor, Solar Installer, Plumber, Kitchen Remodeler, Landscaping).

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

Target specific cities/states, or leave empty to scan 60+ major US/CA metros automatically.

## `customKeywords` (type: `string`):

Comma-separated custom terms (e.g., 'Implant Center, Pediatric Dental, Concierge Medicine, Lasik, Veterinary Clinic').

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

Filter practices by United States (US) or Canada (CA).

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

Total number of verified practice leads to return (Free Apify accounts are capped at 25 sample leads).

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

Only output practices with an active phone number.

## `requireEmail` (type: `boolean`):

Only output practices with a DNS MX-verified email address.

## `deduplicateAcrossRuns` (type: `boolean`):

When enabled, saves delivered leads to a persistent Named Key-Value Store (sift-lead-vault) in your Apify account so repeat runs automatically skip previously delivered leads.

## `clientLedger` (type: `string`):

Identifier for your suppression list (e.g., "default", "client-alpha", or "q4-outbound"). Use different names to keep separate suppression vaults per client.

## Actor input object example

```json
{
  "niches": [
    "Roofing Contractor",
    "HVAC Contractor"
  ],
  "locations": [
    "Austin, TX",
    "Dallas, TX"
  ],
  "country": "US",
  "maxLeads": 25,
  "requirePhone": true,
  "requireEmail": false,
  "deduplicateAcrossRuns": true,
  "clientLedger": "default"
}
```

# Actor output Schema

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

Default dataset containing all verified B2B leads and contact fields.

## `runSummary` (type: `string`):

JSON summary of leads delivered and Pay-Per-Event (PPE) charges.

# 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 = {
    "niches": [
        "Roofing Contractor",
        "HVAC Contractor"
    ],
    "locations": [
        "Austin, TX",
        "Dallas, TX"
    ],
    "maxLeads": 25
};

// Run the Actor and wait for it to finish
const run = await client.actor("amitabh_312/local-contractor-home-services-leads-scraper").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 = {
    "niches": [
        "Roofing Contractor",
        "HVAC Contractor",
    ],
    "locations": [
        "Austin, TX",
        "Dallas, TX",
    ],
    "maxLeads": 25,
}

# Run the Actor and wait for it to finish
run = client.actor("amitabh_312/local-contractor-home-services-leads-scraper").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 '{
  "niches": [
    "Roofing Contractor",
    "HVAC Contractor"
  ],
  "locations": [
    "Austin, TX",
    "Dallas, TX"
  ],
  "maxLeads": 25
}' |
apify call amitabh_312/local-contractor-home-services-leads-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,amitabh_312/local-contractor-home-services-leads-scraper"
        }
    }
}
```

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/p9FqAVe4lte2OJMav/builds/yzgvmWxYExirXzIil/openapi.json
