# Houzz Contractor & Pro Scraper (`mrdoe/houzz-contractor-scraper`) Actor

Extract contractor and home-professional profiles from Houzz — business name, rating, reviews, phone, website, address, price range, license and years in business. Covers every trade: contractors, architects, designers, remodelers and more. Paste a directory URL and run.

- **URL**: https://apify.com/mrdoe/houzz-contractor-scraper.md
- **Developed by:** [MrDoe](https://apify.com/mrdoe) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 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/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

![Houzz Contractor Scraper hero](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/houzz-contractor-scraper--hero.png)

### What does Houzz Contractor & Pro Scraper do?

Houzz Contractor & Pro Scraper collects home-professional and contractor profiles from Houzz, the largest platform for finding remodeling and building professionals in the US, UK, and Australia. Open a professional directory on the site — for a category, or a category plus a city — copy the URL, paste it into **Start URLs**, and run the Actor. You get back a clean, structured dataset of every listed professional — business name, category, rating and review count, phone, website, full address, price range, license and years in business — ready for lead lists, market research, or competitor analysis.

### Why use Houzz Contractor & Pro Scraper?

- **Every trade** — general contractors, architects, kitchen and bath designers, home builders, remodelers, landscapers, electricians and more.
- **Contact-ready data** — business name, phone, website and mailing address in one row.
- **Reputation signals** — Houzz star rating and review count for each professional.
- **Business detail** — price range, license number and years in business where the profile shows them.
- **Simple input** — paste a directory URL, set how many results you want, run.
- **Automation-ready** — schedule recurring runs to track new professionals in a market.

### What makes this different

This Actor reads the structured business data behind each Houzz profile, so name, rating, phone, website and address come through cleanly in one row rather than as scraped fragments. It routes through US residential connections so results match what a local visitor sees.

### What data can you extract?

![Houzz Contractor Scraper dataset output](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/houzz-contractor-scraper--output.png)

![Houzz Contractor Scraper data fields](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/houzz-contractor-scraper--fields.png)

| Field | Description |
| --- | --- |
| `id` | Houzz professional identifier |
| `name` | Business name |
| `url` | Houzz profile URL |
| `category` | Primary professional category |
| `description` | Profile "About" description |
| `rating` / `reviewCount` | Houzz star rating and number of reviews |
| `phone` | Business phone number |
| `website` | Business website, where linked |
| `street` / `city` / `state` / `postalCode` / `country` | Mailing address |
| `latitude` / `longitude` | Map coordinates, where published |
| `priceRange` | Houzz price-range indicator ($ – $$$$) |
| `areasServed` | Service areas listed on the profile |
| `services` | Services offered |
| `yearEstablished` | Year the business started |
| `employees` | Team size, where listed |
| `license` | License number, where shown |
| `badges` | Houzz badges (e.g. "Best of Houzz") |
| `imageUrl` | Profile or cover image |
| `scrapedAt` | ISO timestamp of collection |

### How to use Houzz Contractor & Pro Scraper

![How Houzz Contractor Scraper works](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/houzz-contractor-scraper--how-it-works.png)

1. Open [houzz.com](https://www.houzz.com) and browse to a professional directory (choose a category, then a location).
2. Copy the URL from your browser's address bar.
3. Open this Actor, paste the URL into **Start URLs** (you can add several).
4. Set **Max professionals per start URL** — start small (3–5) to test, then raise it.
5. Click **Start** and wait for the run to finish.
6. Download the dataset as JSON, CSV or Excel from the **Dataset** tab, or connect it via API.

### Input Parameters

| Parameter | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `startUrls` | Array | Yes | General contractor directory | Houzz professional directory pages or direct profile URLs. |
| `maxItems` | Integer | No | 5 | Maximum professional profiles to collect per start URL. |
| `useCache` | Boolean | No | false | Reuse data collected for a professional in an earlier run. |
| `proxyConfiguration` | Object | No | US residential | Proxy settings. Houzz blocks datacenter traffic, so US residential proxy is used by default. |

### Output Data

Each dataset item is one professional. Example:

```json
{
  "id": "acmebuild",
  "name": "Acme Building Co",
  "url": "https://www.houzz.com/pro/acmebuild/acme-building-co",
  "category": "General Contractor",
  "description": "Full-service general contractor serving the Austin metro since 2004.",
  "rating": 4.9,
  "reviewCount": 87,
  "phone": "+1 512-555-0100",
  "website": "https://www.acmebuild.com",
  "street": "100 Congress Ave",
  "city": "Austin",
  "state": "TX",
  "postalCode": "78701",
  "country": "US",
  "priceRange": "$$$",
  "yearEstablished": "2004",
  "license": "TX-12345",
  "badges": ["Best of Houzz 2025"],
  "imageUrl": "https://st.hzcdn.com/x/acme.jpg",
  "scrapedAt": "2026-09-01T00:00:00.000Z"
}
```

### Usage Examples

- **All general contractors:** `https://www.houzz.com/professionals/general-contractor`
- **Contractors in a city:** `https://www.houzz.com/professionals/general-contractor/austin-tx-us`
- **Architects:** `https://www.houzz.com/professionals/architects-and-building-designers`
- **A single professional:** paste any `.../pro/...` profile URL.

### Tips for Best Results

- Use a category + city directory URL for the most relevant, local results.
- Add multiple directory URLs in one run (for example one per city) — `maxItems` applies to each URL separately.
- For ongoing lead generation, schedule the Actor and compare datasets over time to spot new professionals.

### Known Limitations

- `license`, `yearEstablished`, `employees` and `priceRange` are only returned where the professional fills them in on their profile.
- `website` is returned only when the profile links out to one.
- Very large directories are limited by the site's own pagination depth.
- Individual customer reviews are not collected; the aggregate rating and review count are.

### Integrations

Connect results to Google Sheets, Make, Zapier, Slack or your CRM via the Apify API and webhooks. Schedule recurring runs from the Actor's **Schedule** tab.

### Export Formats

JSON, CSV, Excel, XML and RSS via the **Dataset** tab or the Apify API.

### Frequently Asked Questions

**How many results can I get per run?** As many as you set in `maxItems`, up to the directory's pagination limit. `maxItems` is per start URL.

**Can I scrape a specific trade or city?** Yes — pick the category and location on houzz.com and use the resulting directory URL.

**Are duplicates removed?** Yes. Each profile URL is only collected once per run.

**Why are some fields null?** The professional didn't publish that field on their Houzz profile. Missing values are always `null`, never guessed.

**Does caching affect freshness?** With `useCache` on, a professional already collected in a previous run is reused instead of re-fetched. Leave it off (the default) for current data.

**Can I schedule it?** Yes, from the Actor's **Schedule** tab, or via the API.

### Support

Found a bug or a missing field? Open an issue from the **Issues** tab on the Actor's page and include the run ID and the input you used.

### Legal / Responsible Use

You are responsible for ensuring your use of this Actor complies with Houzz's terms of service and all applicable laws. Profiles contain personal and business contact data; if you collect personal data you are responsible for complying with applicable privacy and data-protection laws (for example GDPR and CCPA) and for using that data lawfully, including for any marketing outreach.

### Preview

![Houzz Contractor Scraper input options](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/houzz-contractor-scraper--input.png)

# Actor input Schema

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

One or more Houzz professional directory pages (for example https://www.houzz.com/professionals/general-contractor or a category + city page such as https://www.houzz.com/professionals/general-contractor/austin-tx-us), or a direct Houzz pro profile URL. Build the directory search you want on houzz.com, then paste the address bar URL here.

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

Maximum number of professional profiles to collect for each start URL. Keep this low for quick test runs and raise it for full exports.

## `useCache` (type: `boolean`):

Reuse data collected for a professional in an earlier run to speed up recurring runs. Disabled by default so every run returns fresh data.

## `debug` (type: `boolean`):

Save the raw pages of the first directory and profile to the run's key-value store for troubleshooting.

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

Proxy settings. Houzz blocks datacenter traffic, so US residential proxy is used by default and strongly recommended.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.houzz.com/professionals/general-contractor"
    }
  ],
  "maxItems": 5,
  "useCache": false,
  "debug": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

## `listings` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

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

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        {
            "url": "https://www.houzz.com/professionals/general-contractor"
        }
    ],
    "maxItems": 5,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("mrdoe/houzz-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 = {
    "startUrls": [{ "url": "https://www.houzz.com/professionals/general-contractor" }],
    "maxItems": 5,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("mrdoe/houzz-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 '{
  "startUrls": [
    {
      "url": "https://www.houzz.com/professionals/general-contractor"
    }
  ],
  "maxItems": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call mrdoe/houzz-contractor-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,mrdoe/houzz-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/MGdCkbrWcq2j4npQj/builds/EYXZaBqLHsLysAB5S/openapi.json
