# Houzz Scraper — Home Pros, Contacts & Reviews (`scrapesage/houzz-scraper`) Actor

Scrape Houzz home-improvement pros (contractors, designers, architects) — name, phone, full address, rating, reviews, license & services. Filter by category and location, optionally enrich emails from their website. Monitor mode for new pros. No login.

- **URL**: https://apify.com/scrapesage/houzz-scraper.md
- **Developed by:** [Scrape Sage](https://apify.com/scrapesage) (community)
- **Categories:** Lead generation, Real estate, Automation
- **Stats:** 6 total users, 3 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$4.00 / 1,000 professional scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#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 Scraper — Home-Improvement Pros, Contacts & Reviews

Extract **every professional from any Houzz category & location** — general contractors, interior designers, architects, kitchen & bath remodelers, home builders, landscapers and more — as a ready-to-use **B2B lead list**: business name, **phone**, **full address & geo**, rating, review count, **license number**, services, website, and social links. Optionally **enrich each lead with emails** crawled from the pro's own website.

No login, no cookies, no browser — it reads Houzz's public directory (structured data) and profile pages directly, with a built-in **monitor mode** that surfaces only newly listed pros.

### Why this Houzz scraper?

Most Houzz scrapers grab a name and a rating. This actor reads the JSON-LD on every listing page (one rich `LocalBusiness` block per pro) and merges it with the profile page, so each row is an actual, contactable lead — with the address, license, and review data that matter for the home-services industry.

| Data | Typical scrapers | This actor |
|---|---|---|
| Business name + category | ✅ | ✅ |
| **Phone number** | partial | ✅ |
| **Full street address + city/state/ZIP** | ❌ | ✅ |
| Geo coordinates (lat/lng) | ❌ | ✅ |
| Star rating + review count | partial | ✅ |
| **License number** | ❌ | ✅ when listed |
| Years in business, cost estimate, services | ❌ | ✅ opt-in |
| Website + social links (Facebook, Instagram…) | ❌ | ✅ when listed |
| **Emails** (from the pro's own website) | ❌ | ✅ opt-in |
| Lead score (0–100) | ❌ | ✅ |
| Monitor mode — only new pros | ❌ | ✅ |

### Use cases

- **Lead generation for home-services suppliers** — sell materials, SaaS, insurance, financing, or marketing to contractors and designers. Filter by trade and city, get phone + address + (optionally) email.
- **Recruiting & subcontracting** — build lists of licensed pros by category and location.
- **Market & competitive research** — map the contractor/designer landscape in any metro, with ratings and review volume.
- **Agencies & lead resellers** — generate targeted, scored home-pro lead lists on a schedule.
- **CRM enrichment** — match and enrich existing home-services contacts with ratings, license, and website.

### How to use

1. [Sign up for Apify](https://console.apify.com/sign-up) — the free plan is enough to try this actor.
2. Open the **Houzz Scraper**, set a **Category** + **Location** (or paste a Houzz directory URL), and click **Start**.
3. Watch professional leads stream into the dataset.
4. **Export** as JSON, CSV, Excel, XML, or RSS — or pull results via the [Apify API](https://docs.apify.com/api/v2).

### Input

```json
{
    "category": "general-contractors",
    "location": "Austin, TX",
    "maxItems": 200,
    "enrichProfiles": true,
    "enrichEmails": true,
    "onlyNewItems": false
}
```

- **category** — Houzz category slug, e.g. `general-contractors`, `interior-designers`, `kitchen-and-bathroom-remodelers`, `architects-and-building-designers`, `home-builders`, `roofing-and-gutters`.
- **location** — `City, ST` (e.g. `Austin, TX`); leave empty for the nationwide directory.
- **startUrls** — alternatively paste Houzz directory URLs or specific profile URLs.
- **enrichProfiles** *(default true)* — open each profile for rating, reviews, license, years in business, cost estimate, services and website.
- **enrichEmails** *(default false)* — crawl each pro's website for emails and socials.
- **maxItems** — cap per run (0 = all; Houzz lists up to ~1,500 per category/location).
- **onlyNewItems** *(monitor mode)* — emit only pros not seen in previous runs.

### Output

One record per professional (`type: "professional"`):

```json
{
    "type": "professional",
    "name": "CCS Group, Inc.",
    "category": "General Contractors",
    "phone": "(512) 555-0142",
    "streetAddress": "123 Main St",
    "city": "Austin",
    "region": "TX",
    "postalCode": "78701",
    "country": "US",
    "latitude": 30.2672,
    "longitude": -97.7431,
    "rating": 4.9,
    "reviewsCount": 11,
    "licenseNumber": "TX-123456",
    "yearsInBusiness": 14,
    "costEstimate": "$50,000+",
    "services": ["Custom Homes", "Kitchen Remodeling", "Home Additions"],
    "website": "https://ccsgroup.com",
    "emails": ["info@ccsgroup.com"],
    "facebook": "https://www.facebook.com/ccsgroup",
    "profileUrl": "https://www.houzz.com/professionals/general-contractors/ccs-group-inc-pfvwus-pf~689238451",
    "leadScore": 92,
    "scrapedAt": "2026-06-14T12:00:00.000Z"
}
```

#### What to expect (field coverage)

Houzz is pro-entered data, so some fields appear only when the professional filled them in. Across the directory you can typically expect: name, phone, full address and the Houzz profile URL on virtually every listing; rating, review count and license with `enrichProfiles`; website and emails only when the pro publishes a website (Houzz doesn't always expose one). A blank field means it wasn't published — never that scraping failed.

### Automate & schedule

- **[Apify API](https://docs.apify.com/api/v2)** — start runs, fetch datasets, manage schedules over REST.
- **[apify-client for JavaScript](https://docs.apify.com/api/client/js/)** & **[Python](https://docs.apify.com/api/client/python/)** — official SDKs.
- **[Schedules](https://docs.apify.com/platform/schedules)** — run daily/weekly with **monitor mode** to capture newly listed pros in your target markets — perfect for a fresh lead pipeline.
- **[Webhooks](https://docs.apify.com/platform/integrations/webhooks)** — push new leads to your CRM, Slack, or sheet the moment a run finishes.

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

const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });

const run = await client.actor('scrapesage/houzz-scraper').call({
    category: 'interior-designers',
    location: 'Los Angeles, CA',
    enrichProfiles: true,
    enrichEmails: true,
    maxItems: 300,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} Houzz pro leads`);
```

### Integrate with any app

Connect the dataset to 5,000+ apps — no code required:

- **[Make](https://docs.apify.com/platform/integrations/make)** — multi-step automation scenarios.
- **[Zapier](https://docs.apify.com/platform/integrations/zapier)** — push new pro leads straight into your CRM.
- **[Slack](https://docs.apify.com/platform/integrations/slack)** — get notified when new pros appear in a market.
- **[Google Drive / Sheets](https://docs.apify.com/platform/integrations/drive)** — auto-export every run to a spreadsheet.
- **[Airbyte](https://docs.apify.com/platform/integrations/airbyte)** — pipe results into your data warehouse.
- **[GitHub](https://docs.apify.com/platform/integrations/github)** — trigger runs from commits or releases.

### Use with AI assistants (MCP)

The output is clean, LLM-ready JSON. Call this actor from Claude, ChatGPT, or any agent framework through the **[Apify MCP server](https://docs.apify.com/platform/integrations/mcp)** — ask your assistant to "find top-rated general contractors in Austin with phone numbers and websites" and let it run the scraper.

### Agent-ready: autonomous payments (x402 & Skyfire)

This actor is **agent-ready** — AI agents can discover it, run it, and **pay for it autonomously**, with no Apify account and no human in the loop. It uses [pay-per-event](https://docs.apify.com/platform/actors/publishing/monetize/pay-per-event) pricing and [limited permissions](https://docs.apify.com/platform/actors/development/permissions), so it qualifies for Apify's agentic-payment standards:

- **[x402](https://docs.apify.com/platform/integrations/x402)** — an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp) — no account, no API key.
- **[Skyfire](https://docs.apify.com/platform/integrations/skyfire)** — agent-to-service payments for fully autonomous AI-agent workflows.

Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.

### More scrapers from scrapesage

Build a complete **local-business & lead-gen stack**:

- **[Yellow Pages Scraper](https://apify.com/scrapesage/yellow-pages-scraper)** — US business leads with emails.
- **[Bark Listing Scraper](https://apify.com/scrapesage/bark-listing-scraper)** — service-provider leads from Bark.
- **[Singapore Company Scraper](https://apify.com/scrapesage/singapore-company-scraper)** — UEN, registry & business leads.
- **[99.co Property Scraper](https://apify.com/scrapesage/99-co-property-scraper)** — property listings & agent leads.
- **[EdgeProp.sg Scraper](https://apify.com/scrapesage/edgeprop-singapore-scraper)** — property & agent leads.
- **[Google Ads Transparency Scraper](https://apify.com/scrapesage/google-ads-transparency-scraper)** — who's advertising what on Google.
- **[Facebook Ad Library Scraper](https://apify.com/scrapesage/facebook-ad-library-scraper)** — competitor ad intelligence on Meta & Instagram.
- **[Y Combinator Scraper](https://apify.com/scrapesage/ycombinator-scraper)** — startup directory, founders & jobs.

### Tips

- **Category slugs**: take them straight from a Houzz directory URL (`/professionals/{category}`), e.g. `kitchen-and-bathroom-remodelers`.
- **Phone-first leads**: even with `enrichProfiles` off, every listing gives name + phone + address — a usable lead list in seconds.
- **Emails**: turn on `enrichEmails` to crawl the pro's website; coverage depends on whether the pro lists a site on Houzz.
- **Fresh leads**: combine `onlyNewItems` with an Apify [Schedule](https://docs.apify.com/platform/schedules) to capture newly listed pros automatically.
- **Large markets**: Houzz paginates to ~1,500 pros per category/location — split by city or sub-category to go deeper.

### FAQ

**How do I scrape a specific trade and city?** Set `category` (e.g. `general-contractors`) and `location` (e.g. `Austin, TX`), or paste the Houzz directory URL into `startUrls`.

**Does it need a login or API key?** No. It reads Houzz's public directory and profile pages — no key or login.

**Where do phone numbers and addresses come from?** From the structured data Houzz publishes on each listing — the same info a visitor sees.

**Where do emails come from?** Never from Houzz (it doesn't publish them). With `enrichEmails` on, the actor visits the pro's own website and extracts publicly listed contact emails.

**How do I monitor a market for new pros?** Turn on `onlyNewItems` and create an Apify [Schedule](https://docs.apify.com/platform/schedules); each run emits only newly listed professionals.

**Can I export to Google Sheets, CSV, or Excel?** Yes — one click in the dataset view, or automatically via the [Google Drive integration](https://docs.apify.com/platform/integrations/drive).

**Is scraping Houzz legal?** This actor collects publicly available data only. You are responsible for using the data in compliance with applicable laws (e.g. GDPR/CCPA for personal data) and Houzz's terms.

### Need help?

Open an issue on the actor's **Issues** tab, or visit the [Apify help center](https://help.apify.com/). Feature requests are welcome — this actor is actively maintained.

# Actor input Schema

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

Paste Houzz professional directory URLs, e.g. <code>https://www.houzz.com/professionals/general-contractors/c/New-York--NY</code>, or specific pro profile URLs (<code>.../{name}-pfvwus-pf~{id}</code>). Or just use Category + Location below.

## `category` (type: `string`):

Professional category slug, e.g. <code>general-contractors</code>, <code>interior-designers</code>, <code>kitchen-and-bathroom-remodelers</code>, <code>architects-and-building-designers</code>, <code>home-builders</code>, <code>landscape-architects-and-landscape-designers</code>, <code>roofing-and-gutters</code>. Used with Location when no Start URLs are given.

## `location` (type: `string`):

City + state, e.g. <code>Austin, TX</code> or <code>Los Angeles, CA</code>. Leave empty for the nationwide directory.

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

Maximum professionals to scrape per run (0 = all available; Houzz lists up to ~1,500 per category/location).

## `enrichProfiles` (type: `boolean`):

Open each pro's Houzz profile to also capture rating, review count, license number, years in business, cost estimate, services and website. Adds one fast request per pro. Turn off for a quick contact-only pull from the listing.

## `enrichEmails` (type: `boolean`):

When a pro lists an external website, crawl its home and contact pages for email addresses and social links. Houzz doesn't publish emails — this is the only way to get them.

## `onlyNewItems` (type: `boolean`):

Remember professionals seen in previous runs (named key-value store) and emit only new ones. Pair with an Apify Schedule to track newly listed pros in a category/location — the Schedule decides WHEN to run, monitor mode decides WHICH pros are new. They do not conflict.

## `monitorStoreName` (type: `string`):

Optional name of the key-value store used by monitor mode. Defaults to <code>houzz-monitor-state</code>.

## `maxConcurrency` (type: `integer`):

Maximum pages fetched in parallel.

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

Proxy settings. Houzz is lightly protected, so the default Apify proxy works; switch to residential for very large runs.

## `debugDump` (type: `boolean`):

Developer aid — saves the first listing page's raw HTML to the key-value store. Leave off for normal runs.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.houzz.com/professionals/general-contractors/c/Austin--TX"
    }
  ],
  "maxItems": 100,
  "enrichProfiles": true,
  "enrichEmails": false,
  "onlyNewItems": false,
  "maxConcurrency": 8,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "debugDump": false
}
```

# Actor output Schema

## `results` (type: `string`):

All scraped professional lead records in the default dataset.

# 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-contractors/c/Austin--TX"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapesage/houzz-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-contractors/c/Austin--TX" }] }

# Run the Actor and wait for it to finish
run = client.actor("scrapesage/houzz-scraper").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": [
    {
      "url": "https://www.houzz.com/professionals/general-contractors/c/Austin--TX"
    }
  ]
}' |
apify call scrapesage/houzz-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/UF2t4c3TqTbnUgCbL/builds/xUaX0Tt4L1E3tWEUB/openapi.json
