# ContractorLead AI - Thumbtack & Contractor Scraper (`automation_studio/thumbtack-contractor-scraper`) Actor

Extract active, lead-buying home service contractors across 15+ high-ticket trades and 50+ US metros. Verified hires, Top Pro badges, ratings & reviews.

- **URL**: https://apify.com/automation\_studio/thumbtack-contractor-scraper.md
- **Developed by:** [Asad Naeem](https://apify.com/automation_studio) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 verified contractor leads

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## ContractorLead AI - Thumbtack & Contractor Scraper

> **Extract active, lead-buying home service contractors across 15+ high-ticket trades and 50+ US metropolitan markets.** Stop wasting hours calling dead Google Maps listings. Target contractors who are **actively paying cash for customer leads right now**.

***

### 💡 Why This Beats Google Maps Lead Generation

| Feature | Google Maps Scrapers | 🔨 ContractorLead AI (Thumbtack) |
| :--- | :--- | :--- |
| **Lead Intent** | 🔴 Low (40-60% dead/inactive listings) | 🟢 **Maximum (Actively paying $30–$150/lead)** |
| **Marketing Budget Proof** | ❌ Unknown (Most spend $0) | ✅ **Verified (Paying platform fees & lead charges)** |
| **Hiring Velocity Proof** | ❌ Zero transaction visibility | ✅ **Exact verified completed hires (e.g. 1,136 hires)** |
| **Trust Badges** | ❌ None | ✅ **"Top Pro", "Licensed Pro", "In High Demand"** |
| **Response Metrics** | ❌ Unavailable | ✅ **"Responds in about 15 min" / "Responds in 2 hr"** |
| **Target Audience** | Generic directories | **AI Voice Agencies, SEO/PPC Agencies, GHL Resellers** |

***

### 🎯 High-Converting Agency Outreach Angles

#### Angle 1: The "AI Receptionist / 24/7 Call Answering" Pitch

> **The Problem:** 78% of homeowners hire the first contractor who calls them back. When a contractor is on a roof or under a sink, they take 1–3 hours to respond.
>
> **The Cold Pitch Template:**
> *"Hey \[Business Name], I noticed on Thumbtack that you take ~2 hours to respond to quote requests. Every time you miss a call while on a job, that's a $5,000 roofing/plumbing job lost to another contractor. We built an AI voice receptionist that calls your incoming leads in 15 seconds so you never miss another high-ticket job. Open to seeing a 2-minute demo?"*

#### Angle 2: The "Stop Renting Shared Leads" Agency Pitch

> **The Problem:** Contractors hate paying $80 for a Thumbtack lead that is simultaneously sold to 4 other hungry competitors.
>
> **The Cold Pitch Template:**
> *"Hey \[Business Name], saw you have \[HiresCount] verified hires on Thumbtack—huge respect for the volume. But I know how painful it is paying $100+ for shared leads where 4 guys race to the phone. We help top \[Trade] contractors in \[City] generate exclusive, non-shared inbound calls with Google Local Services Ads so you own your pipeline instead of renting it. Worth a quick chat?"*

***

### 📊 Extracted Data Fields

Every record delivers comprehensive, enriched contractor intelligence:

| Field | Type | Description |
| :--- | :--- | :--- |
| `businessName` | String | Official trading name of the contractor or agency |
| `tradeCategory` | String | Selected trade vertical (e.g., `Plumbing & Drain Cleaning`) |
| `metroCity` | String | Target metropolitan market (e.g., `Los Angeles, CA`) |
| `starRating` | Number | Customer satisfaction rating (e.g., `4.8`) |
| `reviewCount` | Integer | Total verified customer reviews |
| `hiresCount` | Integer | Total verified completed hires on Thumbtack |
| `isTopPro` | Boolean | `true` if contractor holds Thumbtack's elite **Top Pro** badge |
| `isLicensedPro` | Boolean | `true` if trade licensing credentials are verified |
| `isGreatValue` | Boolean | Flagged with competitive pricing badge |
| `inHighDemand` | Boolean | High customer booking momentum flag |
| `isOnlineNow` | Boolean | Real-time lead responsiveness indicator |
| `badges` | Array | Full array of earned trust badges |
| `servicesOffered` | Array | Full list of granular repair & installation services |
| `locationServed` | String | Exact operational service radius or metro area |
| `featuredReview` | String | Clean, authentic customer testimonial quote (stripped of author prefixes & boilerplate) |
| `responseTime` | String | Formatted response speed (e.g. 'About 23 mins', 'About 1 min', 'About 12 hours') |
| `responseTimeHours` | Number | Numeric response time in hours for precision filtering and sorting |
| `leadIntentScore` | String | Categorized buying signal (`🔥 Elite Lead Buyer`, `⭐ Active Contractor`) |
| `profileUrl` | String | Direct URL to contractor profile page |
| `scrapedAt` | String | UTC ISO 8601 timestamp |

***

### 📋 Sample Dataset Output

```json
{
  "businessName": "High Speed Rooter & Plumbing",
  "tradeCategory": "Plumbing & Drain Cleaning",
  "metroCity": "Los Angeles, CA",
  "starRating": 4.5,
  "reviewCount": 129,
  "hiresCount": 1136,
  "isTopPro": false,
  "isLicensedPro": true,
  "isGreatValue": false,
  "inHighDemand": true,
  "isOnlineNow": true,
  "badges": [
    "Licensed Pro",
    "In High Demand",
    "Online Now"
  ],
  "servicesOffered": [
    "Plumbing Drain Repair",
    "Plumbing Pipe Repair",
    "Sink or Faucet Repair",
    "Toilet Repair",
    "Plumbing Inspection",
    "Water Heater Installation or Replacement"
  ],
  "servicesCount": 6,
  "locationServed": "Serves Los Angeles, CA",
  "featuredReview": "\"I would absolutely recommend Next Level Contractors to anyone looking for reliable, high-quality work.\"",
  "responseTime": "About 23 mins",
  "responseTimeHours": 0.38,
  "foundingYear": 2018,
  "leadIntentScore": "🔥 Elite Lead Buyer (Highest Intent)",
  "platform": "Thumbtack",
  "profileUrl": "https://www.thumbtack.com/ca/rowland-heights/drain-cleaning/high-speed-rooter-plumbing/service/485189669509087258",
  "scrapedAt": "2026-09-09T20:28:47.382104+00:00"
}
```

***

### 🛠️ Supported Trade Verticals

1. **Plumbing & Drain Cleaning** (Water heaters, pipe leak repairs, emergency sewer clearing)
2. **Roofing, Gutters & Shingles** (High-ticket roof replacements, insurance restoration)
3. **HVAC, AC Repair & Heating** (Central air replacements, ductless mini-splits, heat pumps)
4. **Electricians & Electrical Wiring** (Panel upgrades, EV charger installation, rewiring)
5. **General Contractors & Remodeling** (Kitchen remodels, bathroom additions, framing)
6. **Landscaping & Hardscaping** (Lawn maintenance, irrigation systems, paver patios)
7. **House & Commercial Cleaning** (Deep cleaning, move-out cleaning, janitorial contracts)
8. **Painting & Drywall** (Interior/exterior residential, cabinet refinishing)
9. **Handyman & Home Repairs** (Drywall patches, fixtures, general punch-list repairs)
10. **Pest Control Services** (Termite treatments, rodent control, bed bug remediation)
11. **Appliance Repair** (Refrigerators, washers, dryers, commercial ranges)
12. **Flooring Installation & Tile** (Hardwood, luxury vinyl plank, ceramic tile)
13. **Tree Trimming & Removal** (Hazardous limb removal, stump grinding, arborists)
14. **Pool Cleaning & Maintenance** (Weekly servicing, pump equipment repair)
15. **Garage Door Repair** (Spring replacements, new garage door openers)

***

### 🚀 How to Run via API

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")

run_input = {
    "tradeCategory": "plumbers",
    "metroCity": "ca/los-angeles",
    "minRating": 4.5,
    "minHires": 10,
    "maxResults": 50
}

run = client.actor("automation_studio/contractorlead-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"{item['businessName']} | {item['starRating']}⭐ | {item['hiresCount']} Hires | {item['leadIntentScore']}")
```

#### Node.js

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

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });

const run = await client.actor('automation_studio/contractorlead-scraper').call({
    tradeCategory: 'roofing',
    metroCity: 'tx/austin',
    minRating: 4.0,
    maxResults: 50,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Extracted ${items.length} verified contractor leads`);
```

***

### 💰 Pricing & Monetization

- **Pricing Model**: Pay-Per-Event (`PAY_PER_EVENT`)
- **Platform Usage Paid by User**: Yes (`isPPEPlatformUsagePaidByUser: true`)
- **Events**:
  - **Actor Start (`apify-actor-start`)**: **`$0.002`**
  - **Verified Contractor Lead (`apify-default-dataset-item`)**: **`$0.003`** ($3.00 / 1,000 high-intent leads)
- Compared to ZoomInfo or Apollo where contractor records cost $0.25 to $0.50 each (and 50% are disconnected), ContractorLead AI gives you verified, active lead-buyers at a 98% discount.

# Actor input Schema

## `tradeCategory` (type: `string`):

Select the exact contractor trade vertical to target. All options use curated endpoints.

## `metroCity` (type: `string`):

Select the target US metropolitan market. Curated to eliminate typos or invalid cities.

## `onlyTopPros` (type: `boolean`):

Filter strictly for elite contractor businesses who hold Thumbtack's coveted 'Top Pro' badge.

## `minRating` (type: `number`):

Minimum average customer star rating (e.g. 4.0 or 4.5).

## `minHires` (type: `integer`):

Filter for contractors with verified platform transaction proof (e.g. 5+ or 25+ hires). Set 0 to include all.

## `maxResults` (type: `integer`):

Maximum number of contractor leads to extract in this run.

## Actor input object example

```json
{
  "tradeCategory": "plumbers",
  "metroCity": "ca/los-angeles",
  "onlyTopPros": false,
  "minRating": 4,
  "minHires": 0,
  "maxResults": 50
}
```

# Actor output Schema

## `dataset` (type: `string`):

Dataset containing verified local contractors, trade categories, review counts, hires, badges, and services offered

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("automation_studio/thumbtack-contractor-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("automation_studio/thumbtack-contractor-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 '{}' |
apify call automation_studio/thumbtack-contractor-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,automation_studio/thumbtack-contractor-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/RXXJU7qKmQeT0JihO/builds/GWQuBHBGMTrkYh4KH/openapi.json
