# Houzz Home Services Hub (`kawsar/houzz-home-services-hub`) Actor

Houzz professional directory scraper that pulls contractor names, ratings, phone numbers, addresses, and social links from any category or location, so you can build lead lists and research local home service markets without doing it by hand.

- **URL**: https://apify.com/kawsar/houzz-home-services-hub.md
- **Developed by:** [Kawsar](https://apify.com/kawsar) (community)
- **Categories:** Lead generation, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.99 / 1,000 results

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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Houzz Home Services Hub

Houzz Home Services Hub scrapes Houzz professional directory pages and returns each listing as a structured JSON record. Give it one or more directory URLs, set how many professionals you want per URL, and it handles pagination automatically. No manual browsing, no copy-paste. You get clean, structured data ready to drop into a spreadsheet, CRM, or data pipeline.

Each record includes business name, phone number, full address, GPS coordinates, star rating, review count, Houzz profile URL, social media links, verified license status, and badge details. The actor covers every professional category on Houzz, across any city or region in the US and internationally.

---

### What you can do with it

**Lead generation for home services**
Pull verified contractor, designer, and specialist contact details for any city. Filter by category — general contractors, interior designers, landscapers, electricians, plumbers — and get a ready-to-use list with phone numbers and addresses.

**Market research and competitive intelligence**
Count how many professionals operate in a given market. Compare review volumes, star ratings, and verified license rates across cities. Spot underserved categories or locations with low competition.

**CRM and database enrichment**
Populate your CRM with accurate business names, phone numbers, mailing addresses, and social profiles. The structured JSON output maps directly to common CRM fields.

**SEO and local search analysis**
Identify which professionals are earning "Best of Houzz" awards and how many hires they report. Track badge distribution to understand what drives visibility in local home service search.

**Sales prospecting**
Find businesses that have low review counts or no social media presence — common indicators of companies that have not yet invested in digital marketing and may be receptive to outreach.

**Academic and industry research**
Study the structure of the home services market: geographic density of professionals, category distribution, licensing rates, and average ratings by region.

---

### Supported professional categories

The actor works with any Houzz professionals directory URL. Common categories include:

| Category | URL slug |
|----------|----------|
| General Contractors | `general-contractor` |
| Interior Designers | `interior-designer` |
| Architects | `architect` |
| Landscape Architects | `landscape-architect` |
| Kitchen and Bath Designers | `kitchen-and-bath-designer` |
| Home Builders | `home-builder` |
| Electricians | `electrician` |
| Plumbers | `plumber` |
| HVAC Contractors | `heating-and-air-conditioning` |
| Painters | `painter` |
| Flooring Contractors | `flooring-contractor` |
| Roofers | `roofing-contractor` |
| Windows and Doors | `windows-and-doors` |
| Home Stagers | `home-stager` |
| Moving Companies | `moving-company` |

Any other category available on houzz.com/professionals works the same way.

---

### Input

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `startUrls` | array | required | One or more Houzz professionals directory page URLs |
| `maxItems` | integer | 30 | Max professionals to collect per URL. Pagination runs automatically until this limit is reached or pages run out (max 1000) |
| `requestTimeoutSecs` | integer | 30 | Per-request timeout in seconds (5–120). Increase if you see frequent timeout errors |

#### Example input

```json
{
    "startUrls": [
        "https://www.houzz.com/professionals/general-contractor/los-angeles-ca-us-probr0-bo~t_11786~r_5368361",
        "https://www.houzz.com/professionals/interior-designer/new-york-ny-us-probr0-bo~t_11814~r_5368287"
    ],
    "maxItems": 50
}
````

This input scrapes up to 50 general contractors in Los Angeles and up to 50 interior designers in New York — 100 records total.

***

### How to find the right start URL

1. Go to [houzz.com/professionals](https://www.houzz.com/professionals)
2. Select your professional category and enter a location
3. Apply any filters you need (rating, project type, budget, etc.)
4. Copy the full URL from your browser

The URL encodes your filters and location. Examples:

```
## General contractors in Los Angeles
https://www.houzz.com/professionals/general-contractor/los-angeles-ca-us-probr0-bo~t_11786~r_5368361

## Interior designers in New York
https://www.houzz.com/professionals/interior-designer/new-york-ny-us-probr0-bo~t_11814~r_5368287

## Architects in Chicago
https://www.houzz.com/professionals/architect/chicago-il-us-probr0-bo~t_11785~r_5411075

## Landscapers in Miami
https://www.houzz.com/professionals/landscape-architect/miami-fl-us-probr0-bo~t_11792~r_5368372
```

You can add as many URLs as you need. The actor processes them in sequence, collecting up to `maxItems` professionals per URL.

***

### Output

Each record represents one professional listing. Results are stored in an Apify dataset and available as JSON, CSV, or Excel.

#### Example record

```json
{
    "businessName": "Goldenline Remodeling",
    "phoneNumber": "(424) 280-3130",
    "profileUrl": "https://www.houzz.com/professionals/general-contractors/goldenline-remodeling-pfvwus-pf~28977151",
    "profileImageUrl": "https://st.hzcdn.com/simgs/b663c8de0ec59db7_0-6284/_.jpg",
    "streetAddress": "2000 Wattles Drive",
    "city": "Los Angeles",
    "state": "CA",
    "postalCode": "90046",
    "country": "US",
    "latitude": 34.1074,
    "longitude": -118.3652,
    "rating": 5.0,
    "reviewCount": 72,
    "businessSummary": "High-End Design & Luxury Craftsmanship in Greater LA. Goldenline Remodeling offers a variety of construction services...",
    "badges": ["8 Hires on Houzz", "Best of Houzz winner", "Verified License"],
    "socialLinks": [
        "https://www.facebook.com/Goldenline-Remodeling-102333461490745"
    ],
    "proUserId": 62219295,
    "hasVerifiedLicense": true,
    "hasVideoMeeting": false,
    "hasActiveOffer": false,
    "scrapedAt": "2026-05-23T10:30:00+00:00"
}
```

#### Output fields

| Field | Type | Description |
|-------|------|-------------|
| `businessName` | string | Business or professional name as listed on Houzz |
| `phoneNumber` | string | Contact phone number |
| `profileUrl` | string | Full URL to the professional's Houzz profile |
| `profileImageUrl` | string | Business logo or profile photo URL |
| `streetAddress` | string | Street address |
| `city` | string | City |
| `state` | string | State or province code (e.g. CA, NY) |
| `postalCode` | string | ZIP or postal code |
| `country` | string | Country code (e.g. US) |
| `latitude` | number | Geographic latitude — useful for mapping and radius filtering |
| `longitude` | number | Geographic longitude |
| `rating` | number | Average star rating from 0.0 to 5.0 |
| `reviewCount` | integer | Total number of Houzz reviews |
| `businessSummary` | string | Short business description shown in the directory listing |
| `badges` | array | Earned badges — examples: "Verified License", "Best of Houzz winner", "12 Hires on Houzz", "Locally owned", "Responds Quickly" |
| `socialLinks` | array | Social media profile URLs (Facebook, Instagram, LinkedIn, etc.) |
| `proUserId` | integer | Houzz internal user ID for the professional |
| `hasVerifiedLicense` | boolean | Whether the business holds a verified license on Houzz |
| `hasVideoMeeting` | boolean | Whether the professional offers video consultation |
| `hasActiveOffer` | boolean | Whether the professional currently has a promotional offer active |
| `scrapedAt` | string | UTC ISO 8601 timestamp of when this record was collected |

Missing fields (no phone listed, no social media, no GPS coordinates) return `null` rather than being omitted, so your downstream schema stays consistent.

***

### How it works

1. Accepts one or more Houzz professionals directory page URLs as input
2. Fetches the first page of each URL
3. Parses structured business data embedded in the page (name, phone, address, geo, social links)
4. Reads ratings, review counts, badge text, and business summaries from the HTML
5. Follows pagination automatically by appending page numbers to the URL until `maxItems` is reached for that URL or no more results are available
6. Pushes each record to the dataset as it is collected — results appear in real time

Each Houzz directory page lists up to 15 professionals. To collect 150 professionals from a single URL, the actor fetches 10 pages automatically.

***

### Tips

**Getting more results from one location**
If a category has thousands of listings in a city, you can increase `maxItems` up to 1000 per URL. The actor pages through results until your limit is hit.

**Scraping multiple categories at once**
Add one URL per category to `startUrls`. The actor processes them in sequence and collects `maxItems` professionals from each.

**Using filters**
Apply filters on houzz.com before copying the URL — rating, project type, budget, language, and business highlights are all encoded in the URL and carry through to the scraper.

**Coordinates for mapping**
The `latitude` and `longitude` fields are populated from Houzz's structured data and are present for most US listings. Use them to build radius filters or plot results on a map.

***

### Integrations

Connect Houzz Home Services Hub with other tools using [Apify integrations](https://apify.com/integrations):

- **Google Sheets** — pipe results directly into a spreadsheet
- **Make (Integromat) / Zapier** — trigger workflows when new records arrive
- **Slack** — post summaries of scrape results to a channel
- **Airbyte** — load data into a warehouse or database
- **Webhooks** — [configure webhooks](https://docs.apify.com/integrations/webhooks) to hit your own endpoint the moment the run completes

The dataset is also available for direct download as JSON, CSV, XML, or Excel from the Apify console.

# Actor input Schema

## `startUrls` (type: `array`):

One or more Houzz professionals directory page URLs to scrape. Example: https://www.houzz.com/professionals/general-contractor/los-angeles-ca-us-probr0-bo~t\_11786~r\_5368361

## `maxItems` (type: `integer`):

Maximum number of professionals to extract per start URL. Each page contains up to 15 listings. The actor paginates automatically until this limit is reached or results run out.

## `requestTimeoutSecs` (type: `integer`):

Per-request timeout in seconds. Increase if you get frequent timeout errors.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.houzz.com/professionals/general-contractor/los-angeles-ca-us-probr0-bo~t_11786~r_5368361",
    "https://www.houzz.com/professionals/interior-designer/new-york-ny-us-probr0-bo~t_11814~r_5368287"
  ],
  "maxItems": 30,
  "requestTimeoutSecs": 30
}
```

# 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 = {
    "startUrls": [
        "https://www.houzz.com/professionals/general-contractor/los-angeles-ca-us-probr0-bo~t_11786~r_5368361"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("kawsar/houzz-home-services-hub").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 = { "startUrls": ["https://www.houzz.com/professionals/general-contractor/los-angeles-ca-us-probr0-bo~t_11786~r_5368361"] }

# Run the Actor and wait for it to finish
run = client.actor("kawsar/houzz-home-services-hub").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 '{
  "startUrls": [
    "https://www.houzz.com/professionals/general-contractor/los-angeles-ca-us-probr0-bo~t_11786~r_5368361"
  ]
}' |
apify call kawsar/houzz-home-services-hub --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Houzz Home Services Hub",
        "description": "Houzz professional directory scraper that pulls contractor names, ratings, phone numbers, addresses, and social links from any category or location, so you can build lead lists and research local home service markets without doing it by hand.",
        "version": "0.0",
        "x-build-id": "EiwrqaDkgBIk7QDMh"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/kawsar~houzz-home-services-hub/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-kawsar-houzz-home-services-hub",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/kawsar~houzz-home-services-hub/runs": {
            "post": {
                "operationId": "runs-sync-kawsar-houzz-home-services-hub",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/kawsar~houzz-home-services-hub/run-sync": {
            "post": {
                "operationId": "run-sync-kawsar-houzz-home-services-hub",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "startUrls"
                ],
                "properties": {
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "One or more Houzz professionals directory page URLs to scrape. Example: https://www.houzz.com/professionals/general-contractor/los-angeles-ca-us-probr0-bo~t_11786~r_5368361",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxItems": {
                        "title": "Max items per URL",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum number of professionals to extract per start URL. Each page contains up to 15 listings. The actor paginates automatically until this limit is reached or results run out.",
                        "default": 30
                    },
                    "requestTimeoutSecs": {
                        "title": "Request timeout (seconds)",
                        "minimum": 5,
                        "maximum": 120,
                        "type": "integer",
                        "description": "Per-request timeout in seconds. Increase if you get frequent timeout errors.",
                        "default": 30
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
