# Houzz Services Scraper (Cheap) (`data_api/houzz-services-scraper-cheap`) 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/data\_api/houzz-services-scraper-cheap.md
- **Developed by:** [Data API](https://apify.com/data_api) (community)
- **Categories:** Lead generation, Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.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/docs.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/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 Services Scraper

![Houzz Services Scraper](cover.jpg)

Finding good contractors on Houzz means clicking through pages of pros and copying phone numbers, addresses, and ratings by hand. This scraper skips all that. Paste a Houzz professionals directory URL and every pro on it comes back as a clean row, with the company name, phone, address, star rating, and review count already split into fields and ready for a spreadsheet or a CRM. It is fast, cheap, and code-free, and you only pay for what you scrape.

### What you get

Each pro on the directory comes back as one row with three kinds of data:

- **Business and contact** — `companyName`, `contactPhone`, `listingUrl`, `logoImage`, `tagline`, `socialProfiles`
- **Location** — `addressLine`, `cityName`, `regionCode`, `zipCode`, `countryCode`, `geoLat`, `geoLng`
- **Reputation and status** — `starRating`, `reviewsTotal`, `awardBadges`, `licenseVerified`, `offersVideoMeeting`, `hasPromotion`, `houzzProId`, `collectedAt`

### Quick start

1. Open Houzz, pick a service category and city, and copy the directory URL from your browser's address bar.
2. Hit **Try for free** and paste that URL into **Houzz directory URLs**.
3. Set **Results per URL** to control how many pros you pull from each page.
4. Press **Start**, then export the results as JSON, CSV, Excel, or XML.

![How it works](how-it-works.jpg)

### Use cases

- **Lead generation** — build a list of contractors or designers in a city, complete with phone numbers and websites
- **Local market research** — see how many pros serve a category and how their ratings stack up
- **Competitor tracking** — watch review counts, badges, and promotions for firms in your trade
- **Agency prospecting** — find pros who lack a website or social presence and pitch them
- **Data enrichment** — match Houzz profiles to your existing records by name, phone, and address

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `directoryUrls` | array of strings | Yes | Houzz professionals directory URLs to scrape; each one paginates on its own. Prefilled with a Chicago kitchen-and-bath remodelers search. |
| `resultsLimit` | integer | No | How many pros to capture per URL. Default `25`. |
| `timeoutSeconds` | integer | No | Seconds to wait on each request before it times out. Default `45`. |

#### Example input

```json
{
    "directoryUrls": [
        "https://www.houzz.com/professionals/kitchen-and-bath-remodelers/chicago-il-us-probr0-bo~t_11824~r_4887398"
    ],
    "resultsLimit": 25,
    "timeoutSeconds": 45
}
````

### Output

Every pro on the directory becomes one row, paginated automatically up to your limit. Fields a given listing does not publish come back empty rather than guessed.

#### Example output

```json
{
    "companyName": "Lakeview Kitchen & Bath Co.",
    "contactPhone": "(312) 555-0184",
    "listingUrl": "https://www.houzz.com/professionals/kitchen-and-bath-remodelers/lakeview-kitchen-and-bath-co-pfvwus-pf~1234567890",
    "logoImage": "https://st.hzcdn.com/fimgs/example_logo.jpg",
    "addressLine": "2140 N Clark St",
    "cityName": "Chicago",
    "regionCode": "IL",
    "zipCode": "60614",
    "countryCode": "US",
    "geoLat": 41.9215,
    "geoLng": -87.6373,
    "starRating": 4.9,
    "reviewsTotal": 87,
    "tagline": "Award-winning kitchen and bath remodels across Chicago's North Side.",
    "awardBadges": [
        "Verified License",
        "Best of Houzz 2025",
        "120 Hires on Houzz"
    ],
    "socialProfiles": [
        "https://www.facebook.com/lakeviewkitchenbath",
        "https://www.instagram.com/lakeviewkitchenbath"
    ],
    "houzzProId": 1234567890,
    "licenseVerified": true,
    "offersVideoMeeting": true,
    "hasPromotion": false,
    "collectedAt": "2026-06-29T12:00:00.000000+00:00"
}
```

#### Output fields

| Field | Type | Description |
|-------|------|-------------|
| `companyName` | string | Name of the pro or firm as shown on Houzz |
| `contactPhone` | string | Phone number published for the business |
| `listingUrl` | string | Direct link to the pro's Houzz profile page |
| `logoImage` | string | Link to the company logo or profile photo |
| `addressLine` | string | Street and house number of the business |
| `cityName` | string | Town or city the business operates from |
| `regionCode` | string | State or province abbreviation, such as CA or NY |
| `zipCode` | string | Postal or ZIP code for the address |
| `countryCode` | string | Country code for the location, e.g. US |
| `geoLat` | number | Map latitude of the business location |
| `geoLng` | number | Map longitude of the business location |
| `starRating` | number | Average review score from 0.0 to 5.0 |
| `reviewsTotal` | integer | How many reviews the pro has collected |
| `tagline` | string | Brief blurb about the business shown in the listing |
| `awardBadges` | array | Badges earned by the pro, such as Verified License or Best of Houzz |
| `socialProfiles` | array | Links to the firm's other social accounts |
| `houzzProId` | integer | Internal Houzz identifier for the professional |
| `licenseVerified` | boolean | True when Houzz has verified the pro's license |
| `offersVideoMeeting` | boolean | True when the pro takes video consultations |
| `hasPromotion` | boolean | True when an active offer or promotion is running |
| `collectedAt` | string | ISO 8601 timestamp of when the row was captured |

### Tips for best results

- **Narrow your directory URL first.** A specific category plus city gives you a cleaner, more relevant list than a broad search.
- **Use `resultsLimit` for test runs.** Start with 25 to check the output fits your pipeline, then raise it for the full pull.
- **Run several cities at once.** Drop multiple directory URLs into `directoryUrls` and the scraper works through each in turn.
- **Some fields are sparse.** Smaller pros may not list a website, social links, or a license, so those fields can come back empty while the rest of the row stays intact.
- **Raise `timeoutSeconds`** if larger result sets start throwing timeout errors.

### How can I use Houzz contractor data?

**How can I use the Houzz Services Scraper to find local contractors?**
Pick a category and city on Houzz, copy the directory URL, and run it. Each row carries `companyName`, `contactPhone`, `addressLine`, and `listingUrl`, so you get a ready-to-call list of pros in the area without clicking through every profile.

**How can I build a contractor lead list from Houzz?**
Feed in one or more directory URLs, set `resultsLimit` to the volume you need, and export to CSV or Excel. You end up with a structured database of pros (name, phone, website, rating, reviews) you can drop straight into a CRM or outreach tool.

**How can I compare home service pros on Houzz by reputation?**
Pull a category for your area and sort the rows by `starRating` and `reviewsTotal`. With `awardBadges` and `licenseVerified` alongside, you get a quick read on which firms are established and which are just getting started.

### Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses or private contact information. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

### Support

Questions, feature requests, or a field you'd like added? Reach out at <data.apify@proton.me> and we'll get back to you.

# Actor input Schema

## `directoryUrls` (type: `array`):

One or more Houzz professionals directory pages to pull. Copy the URL straight from your browser after picking a category and city, e.g. https://www.houzz.com/professionals/general-contractor/los-angeles-ca-us-probr0-bo~t\_11786~r\_5368361

## `resultsLimit` (type: `integer`):

How many pros to capture from each directory URL. Houzz shows roughly 15 per page, and the scraper walks through the pages on its own until it hits this number or runs out of listings.

## `timeoutSeconds` (type: `integer`):

Seconds to wait on each request before giving up. Bump this up if slow pages cause timeout errors.

## Actor input object example

```json
{
  "directoryUrls": [
    "https://www.houzz.com/professionals/kitchen-and-bath-remodelers/chicago-il-us-probr0-bo~t_11824~r_4887398",
    "https://www.houzz.com/professionals/landscape-contractors/austin-tx-us-probr0-bo~t_11797~r_4671654"
  ],
  "resultsLimit": 25,
  "timeoutSeconds": 45
}
```

# 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 = {
    "directoryUrls": [
        "https://www.houzz.com/professionals/kitchen-and-bath-remodelers/chicago-il-us-probr0-bo~t_11824~r_4887398"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("data_api/houzz-services-scraper-cheap").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 = { "directoryUrls": ["https://www.houzz.com/professionals/kitchen-and-bath-remodelers/chicago-il-us-probr0-bo~t_11824~r_4887398"] }

# Run the Actor and wait for it to finish
run = client.actor("data_api/houzz-services-scraper-cheap").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 '{
  "directoryUrls": [
    "https://www.houzz.com/professionals/kitchen-and-bath-remodelers/chicago-il-us-probr0-bo~t_11824~r_4887398"
  ]
}' |
apify call data_api/houzz-services-scraper-cheap --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Houzz Services Scraper (Cheap)",
        "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": "VFMM47mb9eyulwSBy"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/data_api~houzz-services-scraper-cheap/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-data_api-houzz-services-scraper-cheap",
                "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/data_api~houzz-services-scraper-cheap/runs": {
            "post": {
                "operationId": "runs-sync-data_api-houzz-services-scraper-cheap",
                "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/data_api~houzz-services-scraper-cheap/run-sync": {
            "post": {
                "operationId": "run-sync-data_api-houzz-services-scraper-cheap",
                "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": [
                    "directoryUrls"
                ],
                "properties": {
                    "directoryUrls": {
                        "title": "Houzz directory URLs",
                        "type": "array",
                        "description": "One or more Houzz professionals directory pages to pull. Copy the URL straight from your browser after picking a category and city, e.g. https://www.houzz.com/professionals/general-contractor/los-angeles-ca-us-probr0-bo~t_11786~r_5368361",
                        "items": {
                            "type": "string"
                        }
                    },
                    "resultsLimit": {
                        "title": "Results per URL",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "How many pros to capture from each directory URL. Houzz shows roughly 15 per page, and the scraper walks through the pages on its own until it hits this number or runs out of listings.",
                        "default": 25
                    },
                    "timeoutSeconds": {
                        "title": "Request timeout (seconds)",
                        "minimum": 5,
                        "maximum": 120,
                        "type": "integer",
                        "description": "Seconds to wait on each request before giving up. Bump this up if slow pages cause timeout errors.",
                        "default": 45
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
