# Houzz Scraper & API - Professionals & Contractor Leads, Phones (`rel8ble/houzz-professionals-scraper`) Actor

Houzz scraper and API: contractor, designer and home-service leads from houzz.com/professionals by category and city or ZIP. One result = one business: name, rating, reviews, phone, address, lat/lng, price level, verified license; website with details. $0.60 per 1,000, the cheapest.

- **URL**: https://apify.com/rel8ble/houzz-professionals-scraper.md
- **Developed by:** [Giovanni Rich](https://apify.com/rel8ble) (community)
- **Categories:** Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.60 / 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.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Houzz Scraper & API - Professionals & Contractor Leads, Phones

This **Houzz scraper** turns the houzz.com/professionals directory into clean JSON, CSV or Excel lead lists. Give it categories (`general contractors`, `interior designers`, `plumbers`, `landscape contractors`, `roofing and gutters`, 100+ more) and cities or ZIP codes, and get every matching business with its **star rating, review count, phone number**, street address, latitude / longitude, price level, Houzz highlights (**verified license**, hired on Houzz…) and profile URL. Turn on `includeDetails` for the **website**, licence number, services and areas served.

Use it as a **Houzz professionals scraper** for contractor and designer lead generation, or as an unofficial **Houzz API** ($0.60 per 1,000 businesses, no start fee) you call from your own code, Make, Zapier, n8n or an AI agent. It reads the JSON Houzz embeds in its own directory pages over plain HTTP: **no browser, no login, no API key**. **Deep search** goes past Houzz's 1,499-per-search cap (in testing, `general contractors` near Charlotte returned 1,245 unique businesses in 70 seconds).

### What you get

One dataset item per business:

- **Business**: `name`, `category` (Houzz's main category), `categories`, `description`, `imageUrl`.
- **Reputation**: `rating` (1.0-5.0, `null` = no reviews), `reviewCount`, `highlights`, `verifiedLicense`, `verifiedBusiness`, `projectCount`, `photoCount`.
- **Price**: `priceLevels` (any of `$`-`$$$$`), `costEstimate` (e.g. `"$50,000 - 2 million"`).
- **Contact**: `phone`; with `includeDetails` also `website`, `websiteDomain`, `licenseNumber`, `servicesProvided`, `areasServed`, `awards`, `estimateDetails`, `additionalAddresses`, `profileSuspended`.
- **Where**: `address`, `addressFull`, `city`, `state`, `postalCode`, `country` (US / CA), `latitude`, `longitude`, `locationServed`, `distanceMiles`.
- **Listing type**: `sponsored` (paid slot in the results), `paidListing` (pays for Houzz Pro), `videoConsultation`.
- **Links and ids**: `profileUrl`, `id` (Houzz user id, stable between runs), `professionalId`.
- **Where it came from**: `sourceCategory`, `sourceLocation`, `sourceKeyword`, `position`, `searchUrl`, `scrapedAt`.

### Sample output

Real rows from a cloud run for `general contractors` near `Charlotte, NC`:

| name | category | rating | reviewCount | phone | city | state |
|---|---|---|---|---|---|---|
| Weiss Construction, LLC | General Contractors | 5 | 21 | (704) 622-4061 | Charlotte | NC |
| Conservation Renovations Inc. | General Contractors | 4.7 | 13 | (704) 412-1964 | Charlotte | NC |
| JM Customs & Restorations | General Contractors | 5 | 14 | (980) 391-6540 | Charlotte | NC |
| Dream Home Builders and Remodelers | Kitchen & Bath Remodelers | 5 | 11 | (704) 659-1905 | Charlotte | NC |

### Use cases

- **Contractor lead lists**: every 4+ star general contractor, remodeler or roofer around a city, with phone and (with `includeDetails`) website, ready for a CRM or cold-calling sheet.
- **Building-products and supplier prospecting**: find the kitchen and bath remodelers, cabinet makers or pool builders in your sales territory and rank them by review count.
- **Agency and SaaS outreach**: marketing agencies and contractor-software vendors build target lists by category, city, price level and `paidListing` (who already pays Houzz for leads).
- **Local market research**: who dominates kitchen remodels in Austin, how many licensed electricians serve a ZIP code, how ratings spread across a metro.
- **Reputation and competitor checks**: schedule a weekly run and track `rating` and `reviewCount` by the stable `id`.
- **AI agents**: "find licensed 4+ star kitchen remodelers near 78704 with their websites" maps straight onto the input fields.

### Pricing

**$0.60 per 1,000 businesses** (pay per result; one result = one business saved). **No start fee**, no charge per search, and `includeDetails` (website, licence number) costs nothing extra. Duplicates, unrecognised categories or places, skipped sponsored listings and failed requests are never charged. It is the cheapest Houzz professionals scraper on the Store with real users:

| Houzz scraper (30-day users) | Price per 1,000 businesses |
|---|---|
| **This one** | **$0.60, details and website included, no start fee** |
| fortuitous_pirate (2) | $0.93 + $0.001 per run |
| shahidirfan (10) | $1.00 + $0.0005 per run |
| ahmed_jasarevic (1) | $1.90 |
| memo23 (21) | $2.00 + $0.0005 per run, + $1.00 for extra profile data |
| abotapi (14) | $2.00 + $0.08 per run, + $1.00 for details |
| easyapi (6) | $2.99 + $0.09 per run |
| solidcode (6) | $3.55 + $0.00005 per run |
| fatihtahta (5) | $3.99 |
| malikgen (8) | $4.00, + $8.00 for e-mails |

| You scrape | You pay |
|---|---|
| 100 businesses | $0.06 |
| 1,000 businesses | $0.60 |
| 10,000 businesses | $6.00 |
| 100,000 businesses | $60.00 |

The Apify free plan's $5 monthly credit covers about 8,300 businesses. Every general contractor Houzz shows around a big city (about 1,500 businesses) is about $0.90. The prefilled input (`general contractors` near Charlotte, 20 businesses) costs about $0.012 and took 8 seconds in a cloud test. If you set a maximum cost per run, the scraper stops cleanly when it reaches it.

#### Why this one

- **Cheapest Houzz scraper with real users**: $0.60 per 1,000 with details and websites included. The most-used ones charge $2.00 per 1,000 plus a start fee per run and $1.00 more for profile details.
- **Deep search past the 1,499 cap**: the same search is re-run per rating band, price level and highlight and merged without duplicates.
- **Real filters**: minimum rating, price level, verified license and other highlights, Spanish-speaking, keyword inside a category.
- **Phone in 99% of rows** (1,245-business test run), coordinates in 92%.
- **Fast and light**: plain HTTP, no browser or login, about 10-20 seconds per 100 businesses.

### FAQ

**Is there an official Houzz API?**
Houzz has a partner API for Houzz Pro customers, not a public directory API. This actor reads the public professionals directory on houzz.com and needs no key.

**Does it get Houzz reviews?**
No. You get the star rating and review count; `profileUrl` links to the full profile. Review text and reviewer names are not collected.

**How do I get only licensed contractors?**
Set `standouts: ["verifiedLicense"]`. Every row also carries `verifiedLicense` either way, and with `includeDetails` the `licenseNumber` as stated on the profile.

**How do I get websites?**
Set `includeDetails: true`. The website is on the profile page, not in the directory, so it costs one extra request per business (no extra charge).

**Why does a row have no coordinates or address?**
Sponsored listings and service-area businesses hide them. `locationServed` and `city` are usually still there.

**Does it cover Canada and other countries?**
US cities, ZIP codes and Canadian cities ("Toronto, ON", "Vancouver, BC") work on houzz.com. Houzz's other country sites (houzz.co.uk, houzz.com.au…) are separate sites and not covered.

**Is scraping Houzz legal?**
The actor collects publicly visible business listings, not personal data, and does not bypass any access control. You are responsible for how you use the data and for following Houzz's terms and the laws that apply to you (for example on cold calling).

**How much does a typical run cost?**
200 licensed remodelers in one metro with websites: $0.12. Every general contractor around a big city (about 1,500): about $0.90. The free plan's $5 credit covers about 8,300 businesses a month.

**Something is wrong or a field is missing.**
Open an issue on the Issues tab of the actor page with the run ID. It reaches the developer directly.

### Example inputs for common jobs

Copy one into the JSON tab of the input and adjust.

Remodeling leads with websites for cold outreach (4+ stars, licence checked by Houzz):

```json
{ "categories": ["general contractors", "kitchen and bath remodelers"], "locations": ["Austin, TX"], "minRating": "4", "standouts": ["verifiedLicense"], "includeDetails": true, "maxResults": 200 }
```

Cover a whole metro by ZIP code (duplicates across searches are saved once):

```json
{ "categories": ["roofing and gutters"], "locations": ["28202", "28277", "28105", "28031"], "maxResults": 300 }
```

Niche service inside a trade (keyword search on name, description and services):

```json
{ "categories": ["landscape contractors"], "keywords": ["pool deck", "outdoor kitchen"], "locations": ["Phoenix, AZ"] }
```

Spanish-speaking pros, organic results only, for a local marketing agency list:

```json
{ "categories": ["painters", "general contractors"], "locations": ["Miami, FL"], "spanishSpeaking": true, "includeSponsored": false }
```

### How to use

1. Type one or more **Professional categories** (`general contractors`, `architects`, `interior designers`, `kitchen and bath remodelers`, `plumbers`, `electricians`, `painters`, `pool builders`…) and **Locations** (`Charlotte, NC`, `28277`, `Toronto, ON`). Every category is searched in every location. Houzz searches a 50-mile radius around the place.
2. Optionally add **Keywords** (`water heater`, `ADU`, `pool deck`) searched inside each category, and filters: **Minimum star rating** (3+, 4+, 5), **Price levels**, **Highlights** (verified license, hired on Houzz, locally owned, family owned, free / online consultation, custom work), **Spanish-speaking**, **Include sponsored listings**.
3. Turn on **Include profile details** when you need the website and licence number (one extra request per business).
4. Set **Max businesses per search** (0 = everything the search can reach) and click **Start**. Download the results as JSON, CSV, Excel or HTML from the **Output** tab, or pull them through the Apify API, Make, Zapier, n8n or an MCP client.

Already have links? Paste houzz.com **category / city pages**, **browse URLs** with filters in them, or a professional's **profile URL** into *Houzz URLs*.

### Input

| Field | Default | Description |
|---|---|---|
| `categories` | - | Houzz professional categories, one search each |
| `locations` | nationwide | "City, ST", ZIP code or "City, Province" |
| `keywords` | - | Free-text search inside each category + location |
| `minRating` | "0" | "0" (any), "3", "4" or "5" stars and up |
| `priceLevels` | all | Any of `$`, `$$`, `$$$`, `$$$$` |
| `standouts` | all | `verifiedLicense`, `hiredOnHouzz`, `locallyOwned`, `familyOwned`, `freeConsultation`, `onlineConsultation`, `customWork` |
| `spanishSpeaking` | false | Only "Speaks Spanish" businesses |
| `includeSponsored` | true | Keep sponsored listings (flagged `sponsored: true`) |
| `includeDetails` | false | Open each profile for website, licence number, services |
| `maxResults` | 100 | Max businesses per search; 0 = all |
| `deepSearch` | true | Go past Houzz's 1,499-per-search limit |
| `startUrls` | - | houzz.com professionals URLs |

4+ star general contractors around Charlotte with a website, organic listings only:

```json
{
    "categories": ["general contractors"],
    "locations": ["Charlotte, NC"],
    "minRating": "4",
    "includeSponsored": false,
    "includeDetails": true,
    "maxResults": 100
}
```

Plumbers in Toronto who mention water heaters:

```json
{
    "categories": ["plumbers"],
    "locations": ["Toronto, ON"],
    "keywords": ["water heater"],
    "maxResults": 50
}
```

Licensed, mid-to-high-priced remodelers in three Texas cities:

```json
{
    "categories": ["kitchen and bath remodelers", "general contractors"],
    "locations": ["Austin, TX", "Dallas, TX", "Houston, TX"],
    "standouts": ["verifiedLicense"],
    "priceLevels": ["$$$", "$$$$"],
    "maxResults": 0
}
```

From links you copied off the site:

```json
{
    "startUrls": [
        "https://www.houzz.com/professionals/landscape-contractors/c/Denver--CO",
        "https://www.houzz.com/professionals/hznb/general-contractor/charlotte-nc-us-rating-4-probr1-bo~t_11786~r_4460243~rg_40",
        "https://www.houzz.com/professionals/general-contractors/building-impact-llc-pfvwus-pf~96917289"
    ],
    "maxResults": 20
}
```

### Output example

From a real run (`general contractors` near `Charlotte, NC`, description shortened):

```json
{
    "id": "2673447",
    "professionalId": "100343",
    "name": "Weiss Construction, LLC",
    "category": "General Contractors",
    "categories": ["General Contractors", "Home Remodeling"],
    "rating": 5,
    "reviewCount": 21,
    "priceLevels": [],
    "costEstimate": "$50,000 - 2 million",
    "phone": "(704) 622-4061",
    "address": "10612 Providence Road, Suite D203",
    "addressFull": "10612 Providence Road, Suite D203, Charlotte, NC 28277",
    "city": "Charlotte",
    "state": "NC",
    "postalCode": "28277",
    "country": "US",
    "latitude": 35.0552,
    "longitude": -80.8195,
    "locationServed": "Serves Charlotte",
    "distanceMiles": 8.2,
    "description": "Weiss Construction was founded by General Contractor, Evan Weiss, and built on a foundation of service and quality. ...",
    "highlights": ["Hired on Houzz"],
    "verifiedLicense": false,
    "verifiedBusiness": false,
    "sponsored": false,
    "paidListing": true,
    "projectCount": 0,
    "photoCount": 630,
    "videoConsultation": false,
    "profileUrl": "https://www.houzz.com/professionals/general-contractors/weiss-construction-llc-pfvwus-pf~1887698191",
    "imageUrl": null,
    "sourceCategory": "general contractors",
    "sourceLocation": "Charlotte, NC",
    "sourceKeyword": null,
    "position": 1,
    "searchUrl": "https://www.houzz.com/professionals/probr0-bo~t_11786~r_4460243",
    "scrapedAt": "2026-10-20T17:47:48.231Z"
}
```

With `includeDetails: true` (an `interior designers` near `Austin, TX` row, shortened): `"name": "Calming Spaces Interiors, Design & Remodeling"`, `"rating": 4.8`, `"reviewCount": 50`, `"phone": "(512) 842-4664"`, `"website": "http://www.calmingspaces.com"`, `"websiteDomain": "calmingspaces.com"`, `"servicesProvided": ["Art Selection", "Attic Conversion", "Basement Design", "Bath Remodeling", …]`, `"areasServed": ["Austin", "Round Rock", "Cedar Park", …]`.

Fill rates on a 1,245-business test run (`general contractors` near Charlotte, deep search): name, category, profile URL, review count 100%; phone 99%; coordinates 92%; street address 75%; star rating 23% (most businesses deep in the list have no reviews yet; the first pages are 85% rated); price levels 7%. With `includeDetails` on a 12-business run: website 100%, services and areas served 100%, licence number 33%. A field Houzz does not publish for a business is `null` or empty, never guessed.

### API example

Python (`pip install apify-client`):

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("rel8ble/houzz-professionals-scraper").call(run_input={
    "categories": ["general contractors"],
    "locations": ["Charlotte, NC"],
    "minRating": "4",
    "includeDetails": True,
    "maxResults": 100,
})
for b in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(b["name"], "|", b["rating"], "|", b["reviewCount"], "|", b["phone"], "|", b.get("website"), "|", b["profileUrl"])
```

One HTTP call that runs the actor and returns the rows (curl):

```bash
curl -X POST "https://api.apify.com/v2/acts/rel8ble~houzz-professionals-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"categories": ["plumbers"], "locations": ["Toronto, ON"], "maxResults": 50}'
```

### Integrations

- **Apify API**: run the actor and fetch results over REST, or with the official [Python](https://docs.apify.com/api/client/python) and [JavaScript / Node.js](https://docs.apify.com/api/client/js) clients.
- **MCP for AI agents**: through the Apify MCP server (https://mcp.apify.com), Claude, ChatGPT, Cursor and other agents can call this Houzz API directly. Every input field is described for agents ("find licensed 4+ star kitchen remodelers near 78704 with their websites" maps straight onto the input).
- **Make, Zapier and n8n**: send new leads to HubSpot, Pipedrive, Salesforce, Google Sheets, Airtable or Slack.
- **Webhooks and schedules**: run weekly and deduplicate on `id` to get only new businesses.

### Limits (read before large runs)

- **1,499 businesses per single Houzz search** is Houzz's own display limit (100 pages of 15); the count it shows is also capped there, so `siteTotal: 1499` in `RUN_SUMMARY` means "1,499 or more". Deep search runs the same search per rating band, price level, highlight and language and merges the results; it reaches more, not everything, and the summary says how many narrower searches ran.
- **50-mile radius.** Houzz searches about 50 miles around the place and the radius is a saved site preference, not a URL option, so it cannot be changed here. Use ZIP codes or several towns for finer control; `distanceMiles` is on every organic row.
- **Sort order** is Houzz's "Best match"; the site's other orders are not reachable over plain HTTP, so there is no sort input. Deep search covers what sorting would.
- **Sponsored listings** repeat on every page; they are saved once and flagged `sponsored: true`. Set `includeSponsored: false` for organic results only. Filters (rating, price, highlights) are Houzz's own and apply to organic results; the rating filter is also checked on every saved row.
- **Category names**: Houzz maps common synonyms (`plumber` -> Plumbers, `interior designer` -> Interior Designers & Decorators). A name it has no page for is searched as a keyword among all professionals in that location instead, and the log says so.
- **Unknown places** (a typo, a town Houzz does not know) are skipped and reported, never charged.
- **Keyword searches** sometimes get a redirect from Houzz that drops the keyword; the actor detects that and retries on a new session (usually 1-2 extra requests, visible as `keywordDroppingRedirectsRetried` in the summary).
- **Speed**: requests are spaced politely (at most 4 a second; each page is about 1.3 MB). A 100-business search takes 10-20 seconds; `includeDetails` adds about 0.3 s per business.
- **No personal data, no reviews.** Only public business listing data is collected: no reviews, no reviewer names, no Houzz user accounts. E-mail addresses that look personal in free-text fields are replaced with `[email removed]`. Some sole traders trade under their own name; that is the business name Houzz lists.

# Actor input Schema

## `categories` (type: `array`):

Optional. Houzz professional categories, one search per line: "general contractors", "architects", "interior designers", "kitchen and bath designers", "landscape contractors", "plumbers", "electricians", "roofing and gutters", "painters", "cabinet makers", "pool builders", "home builders", "tile and countertops", "tree services"… Houzz maps close synonyms itself ("plumber" -> Plumbers); a name it does not know is skipped and reported, not charged. Empty = all professionals (then give a location or keyword). Every category is searched in every location. Typical: 1-10 lines.

## `locations` (type: `array`):

Optional. Where to search, one per line: "City, ST" ("Charlotte, NC", "Austin, TX"), a US ZIP code ("28277") or a Canadian city ("Toronto, ON", "Vancouver, BC"). Houzz searches a 50-mile radius around the place (its default; not adjustable by URL). Every category is searched in every location (2 categories x 3 cities = 6 searches). Empty = Houzz's nationwide list. A place Houzz does not recognise is skipped and reported, never charged.

## `keywords` (type: `array`):

Optional. Free-text search inside each category + location, one search per line: "kitchen remodel", "water heater", "ADU", "pool deck", a business name. Houzz matches it against the business name, description and services. Empty = everyone in the category. Several keywords multiply the number of searches (2 categories x 2 cities x 3 keywords = 12 searches); duplicates across searches are saved once.

## `minRating` (type: `string`):

Optional. Keep only businesses rated at least this many stars on Houzz: "0" = any (default, includes businesses with no reviews), "3", "4" or "5" (a number works too). Houzz's own filter, so fewer pages are fetched; unrated businesses are left out whenever this is set.

## `priceLevels` (type: `array`):

Optional. Keep only businesses that list one of these price levels ($ = minimise costs … $$$$ = best results). Houzz allows one level per search, so several values run one search each and are merged (any of them). Empty = all, including businesses that list no price level. Every row carries priceLevels either way.

## `standouts` (type: `array`):

Optional. Keep only businesses with one of these Houzz highlights: "verifiedLicense" (Houzz checked the trade licence), "hiredOnHouzz", "locallyOwned", "familyOwned", "freeConsultation", "onlineConsultation", "customWork". One highlight per search on Houzz, so several values run one search each and are merged (any of them). Empty = all. Each row carries highlights and verifiedLicense either way.

## `spanishSpeaking` (type: `boolean`):

Optional. true = only businesses Houzz marks as "Speaks Spanish". Default false.

## `includeSponsored` (type: `boolean`):

Optional. Houzz mixes paid "sponsored" listings into every results page (the same handful on each page). true (default) = keep them once, with sponsored: true on the row. false = organic results only; sponsored rows are not saved and not charged.

## `includeDetails` (type: `boolean`):

Optional. true = also open each business's Houzz profile page and add: website (website, websiteDomain), licenceNumber, servicesProvided, areasServed, awards, estimateDetails, additionalAddresses and profileSuspended. One extra request per business (about 3 a second, pages are large), no extra charge. Default false = directory data only (fast: 15 businesses per request). Turn it on when you need the website for outreach.

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

Optional. Maximum businesses saved per search (one category in one location, with one keyword), integer >= 0. Default 100; 0 = every business the search can reach. You pay per business saved ($0.0006 each), so 100 businesses = $0.06. Use 10-20 for a quick answer.

## `deepSearch` (type: `boolean`):

Optional. Houzz shows at most 1,499 results (100 pages of 15) for any one search, even when it has more. With deepSearch on (default) and maxResults above 1,499, the actor also runs the same search per rating band, price level, highlight and Spanish-speaking and merges the results without duplicates. Off = at most 1,499 per search.

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

Optional. URLs copied from houzz.com, one per line. A category / city page ("https://www.houzz.com/professionals/general-contractors/c/Charlotte--NC") is scraped with the filters above. A browse URL with its options ("…/charlotte-nc-us-rating-4-probr1-bo~t_11786~r_4460243~rg_40") keeps the category, place, rating, price level and highlight in the URL. A professional's profile URL ("…/building-impact-llc-pfvwus-pf~96917289") gives one row with full details.

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

Optional, advanced. Number of parallel requests, integer 1-10. Default 4. Requests are also spaced at most 4 a second whatever this is set to. Leave unset.

## `maxRequestRetries` (type: `integer`):

Optional, advanced. How many times a failed request is retried on a new session, integer 0-20. Default 8. Leave unset.

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

Optional, advanced. Apify Proxy settings object. Default {"useApifyProxy": false}: Houzz answers direct requests, so no proxy is needed. Switch on datacenter proxy only if the run log shows repeated blocks. Leave unset.

## Actor input object example

```json
{
  "categories": [
    "general contractors"
  ],
  "locations": [
    "Charlotte, NC"
  ],
  "minRating": "0",
  "spanishSpeaking": false,
  "includeSponsored": true,
  "includeDetails": false,
  "maxResults": 20,
  "deepSearch": true,
  "maxConcurrency": 4,
  "maxRequestRetries": 8,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `businesses` (type: `string`):

All businesses found: name, category and categories, star rating, review count, price levels, cost estimate, phone, street address, city, state / province, ZIP / postal code, country, latitude / longitude, area served, highlights, verified-license and verified-business flags, sponsored flag, project and photo counts, Houzz profile URL and image, and with includeDetails the website, licence number, services provided and areas served.

## `summary` (type: `string`):

Per-search counts, the total Houzz reported (and whether it is Houzz's 1,499 cap), the place and category Houzz resolved, how many narrower searches deep search ran, stop reasons and anything that failed.

# 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 = {
    "categories": [
        "general contractors"
    ],
    "locations": [
        "Charlotte, NC"
    ],
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("rel8ble/houzz-professionals-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 = {
    "categories": ["general contractors"],
    "locations": ["Charlotte, NC"],
    "maxResults": 20,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("rel8ble/houzz-professionals-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 '{
  "categories": [
    "general contractors"
  ],
  "locations": [
    "Charlotte, NC"
  ],
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call rel8ble/houzz-professionals-scraper --silent --output-dataset

```

## MCP server setup

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