# Houzz Scraper (`solidcode/houzz-scraper`) Actor

\[💰 $3.0 / 1K] Extract Houzz photos, professionals (designers, contractors, architects), magazine stories, and Q\&A discussions. Search by keyword, filter by style/budget/size/color, scope by city, or paste Houzz URLs directly.

- **URL**: https://apify.com/solidcode/houzz-scraper.md
- **Developed by:** [SolidCode](https://apify.com/solidcode) (community)
- **Categories:** Developer tools, Real estate, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

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

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

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

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

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

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

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

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Houzz Scraper

Pull design photos, professional profiles, magazine stories, and Q&A discussions from Houzz at scale — complete with style and budget filters, city-scoped pro searches, ratings, project counts, public phone numbers, and direct CDN photo URLs. Built for interior designers, contractors, market researchers, and lead-gen teams who need a clean Houzz dataset without clicking through infinite-scroll galleries one card at a time.

### Why This Scraper?

- **Four Houzz surfaces in one actor** — search inspiration photos, the professional directory, Houzz Magazine stories, and the Q&A discussion forum from a single run, with a `recordType` discriminator on every row so you can split the dataset cleanly downstream.
- **13 verified professional categories** — Interior Designers & Decorators, Architects & Building Designers, Design-Build Firms, General Contractors, Kitchen & Bathroom Designers, Kitchen Remodelers, Bathroom Remodelers, Landscape Architects & Designers, Landscape Contractors, Home Builders, ADU Contractors, Home Remodeling, and Home Additions.
- **City-scoped professional search** — type "Austin, TX" or "Brooklyn, NY" and the actor auto-resolves it to Houzz's internal region ID, so you get directory results pinned to one metro instead of the national mix.
- **Four photo filter families, stackable** — 18 design styles (Contemporary, Modern, Farmhouse, Mediterranean, Mid-century, Scandinavian, etc.), 4 budget tiers ($ Budget through $$$$ Luxury), 4 room sizes (Compact through Expansive), and 14 color palettes including "Black & white" and "Metallics".
- **Verified pro signals on every record** — `isProVerified`, `hasVerifiedKyc`, license number, license type, follower count, and the Houzz badge list ("Best of Houzz Service", etc.) so you can rank designers by trust signals, not just star rating.
- **Public contact enrichment with `includeContacts`** — opt in to fetch each professional's profile page and capture publicly visible phone (call-tracking obfuscation auto-detected and dropped), website, and social links across Facebook, Instagram, Pinterest, LinkedIn, YouTube, and Twitter, plus the most recent published review (rating, body, project date, reviewer name).
- **Ratings on a familiar 0–5 scale** — Houzz stores ratings internally on a 0–50 scale; the actor normalizes to one decimal so a 5.0-star pro shows as `5.0`, not `50`.
- **One Houzz entity = one row** — a professional with 800 photos and 200 reviews is still a single record with `photosCount: 800` and `reviewsCount: 200`. No surprise fan-outs, predictable cost on every run.
- **Up to 50,000 results per seed** — overshoot-not-trim pagination keeps the full final page so you never lose results to a tight cap.

### Use Cases

**Lead Generation & Outreach**
- Build city-scoped lists of interior designers or general contractors with phone numbers and websites
- Source verified kitchen-and-bath remodelers in a target metro for partnership outreach
- Pull landscape architects with high follower counts and Best of Houzz badges
- Enrich existing CRM records with social profiles, license numbers, and project counts

**Market & Trend Research**
- Compare which design styles dominate "modern kitchen" results across regions
- Track inspiration-photo save counts as a leading indicator of color and material trends
- Map professional density by city and category for market-entry analysis
- Monitor which Houzz Magazine topics generate the most reader comments

**Competitive Intelligence**
- Track a competing design firm's public photo count, follower growth, and review velocity
- Benchmark a portfolio against the top-rated pros in the same category and metro
- Watch which styles, colors, and budgets a competitor's projects show up under
- Pull the full review rating + featured-review snippet for any pro on the platform

**Content & Editorial Research**
- Surface trending Houzz Magazine stories with author and topic tags for content inspiration
- Mine the Q&A forum for high-engagement renovation questions to answer in your own content
- Find the most-saved photos in a category to inform mood boards and pitch decks
- Build a citation-ready bibliography of Houzz articles by topic and date

**Real Estate & Property Tech**
- Link properties in your inventory to local renovation pros who serve that ZIP
- Enrich listing pages with curated Houzz inspiration photos for a given style
- Source vetted contractors for renovation-finance referral programs
- Surface local design trends to home sellers prepping for listing

**Recruiting Design Talent**
- Find architects and interior designers in a metro with a verified portfolio and license number
- Identify rising designers with strong project counts but not yet at scale
- Build a national bench of vetted general contractors for a multi-market expansion

### Getting Started

#### Quick Photo Search

The simplest possible run — one keyword, 20 inspiration photos:

```json
{
    "queryType": "photos",
    "searchQueries": ["modern kitchen"],
    "maxResults": 20
}
````

#### Local Pro Lead List

City-scoped designer directory — phone, address, ratings, and project counts for every interior designer in Austin:

```json
{
    "queryType": "professionals",
    "professionalCategory": "interior-designers",
    "location": "Austin, TX",
    "maxResults": 50
}
```

#### Pro Lead List with Full Contact Enrichment

Same as above but also fetches each pro's profile page for social links, badges, and license verification:

```json
{
    "queryType": "professionals",
    "professionalCategory": "general-contractors",
    "location": "Brooklyn, NY",
    "includeContacts": true,
    "maxResults": 30
}
```

#### Filtered Photo Search (All Four Filter Families)

Mid-range modern kitchen photos in white, sized for a medium room:

```json
{
    "queryType": "photos",
    "searchQueries": ["kitchen"],
    "styles": ["modern"],
    "budgets": ["midrange"],
    "sizes": ["medium"],
    "colors": ["white"],
    "maxResults": 100
}
```

#### Direct URL Paste

Paste any Houzz URL — search, category, professional, photo, story, or discussion — and the actor classifies and routes it automatically:

```json
{
    "startUrls": [
        "https://www.houzz.com/photos/farmhouse-bathroom",
        "https://www.houzz.com/professionals/interior-designers/c/Brooklyn--NY"
    ],
    "maxResults": 50
}
```

### Input Reference

#### What to Scrape

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `startUrls` | string\[] | `[]` | Paste one or more Houzz URLs. Accepts photo, professional, story, and discussion pages, plus search and category listings. When provided, these override the keyword/filter fields below. |
| `searchQueries` | string\[] | `["modern kitchen"]` | One keyword per line. Each line runs as its own search and produces its own results. Ignored when Houzz URLs are provided. |
| `queryType` | select | `photos` | Which Houzz section to search: Photos, Professionals, Stories (Houzz Magazine), or Discussions (Q\&A forum). |

#### Professional Filters

Apply only when Search Section is `Professionals`.

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `location` | string | null | City, region, or "City, State" to scope a professional directory search (e.g. "Austin, TX", "Brooklyn, NY"). Auto-resolved to Houzz's internal region ID. |
| `professionalCategory` | select | Default (Interior Designers) | Restrict to one of 13 verified categories: Interior Designers, Architects, Design-Build Firms, General Contractors, Kitchen & Bathroom Designers, Kitchen Remodelers, Bathroom Remodelers, Landscape Architects, Landscape Contractors, Home Builders, ADU Contractors, Home Remodeling, or Home Additions. Leave blank to use the default (Interior Designers) — Houzz cannot browse every category at once. |

#### Photo Filters

Apply only when Search Section is `Photos`. All four are optional and stack.

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `styles` | multi-select | `[]` | 18 design styles: Contemporary, Modern, Traditional, Transitional, Farmhouse, Industrial, Mediterranean, Scandinavian, Rustic, Craftsman, Midcentury, Coastal, Tropical, Asian, Eclectic, Shabby Chic, Victorian, Southwestern. |
| `budgets` | multi-select | `[]` | 4 budget tiers: Budget ($), Mid-range ($$), High-end ($$$), Luxury ($$$$). |
| `sizes` | multi-select | `[]` | 4 room sizes: Compact, Medium, Large, Expansive. |
| `colors` | multi-select | `[]` | 14 dominant colors: Red, Orange, Yellow, Green, Blue, Purple, Pink, Brown, Beige, Gray, White, Black, Black & white, Metallics. |

#### Output Detail

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `includeContacts` | boolean | `false` | When enabled, fetch each professional's profile page to capture publicly visible phone, website, social links, badges, license verification, and the most recent published review. Adds two extra requests per pro. |

#### Limits

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `maxResults` | integer | `100` | Maximum results per URL or keyword. Set to `0` to collect everything (internal cap of 50,000 per seed). The actor stops requesting new pages once the cap is reached but keeps the full final page. |

### Output

Every row carries a `recordType` field — `photo`, `professional`, `story`, or `discussion` — so you can split the dataset by surface downstream.

#### Photo (`recordType: "photo"`)

```json
{
    "recordType": "photo",
    "id": "172984321",
    "url": "https://www.houzz.com/photos/modern-kitchen-with-marble-island-phvw-vp~172984321",
    "title": "Modern Kitchen with Marble Island",
    "description": "Open-plan kitchen featuring a waterfall marble island, brass fixtures, and walnut cabinetry.",
    "style": "Modern",
    "roomType": "Kitchen",
    "location": "Minneapolis",
    "saveCount": 345,
    "questionCount": 4,
    "ownerId": "98712345",
    "ownerName": "McDonald Remodeling",
    "ownerProfileUrl": "https://www.houzz.com/professionals/general-contractors/mcdonald-remodeling-pfvwus-pf~98712345",
    "imageUrl": "https://st.hzcdn.com/simgs/pictures/kitchens/modern-kitchen-marble-island_8-img.jpg",
    "imageIds": ["172984321"],
    "altText": "Modern Kitchen Photos",
    "tags": ["marble", "open plan", "brass fixtures"],
    "scrapedAt": "2026-05-16T14:30:00Z"
}
```

| Field | Type | Description |
|-------|------|-------------|
| `recordType` | string | Always `"photo"` |
| `id` | string | Houzz photo ID |
| `url` | string | Canonical photo URL |
| `title` | string | Photo title |
| `description` | string | Caption or auto-generated description |
| `style` | string | Design style label (when the search was scoped to a known style or room topic) |
| `roomType` | string | Room or space type (Kitchen, Bath, Living Room, etc.) |
| `location` | string | City or region of the project |
| `saveCount` | integer | Number of users who saved the photo to an Ideabook |
| `questionCount` | integer | Number of questions on the photo |
| `ownerId` | string | ID of the pro or user who posted the photo |
| `ownerName` | string | Display name of the owner |
| `ownerProfileUrl` | string | Owner's professional profile URL |
| `imageUrl` | string | Direct CDN URL of the photo |
| `imageIds` | string\[] | All image IDs associated with the post |
| `altText` | string | Alt text |
| `tags` | string\[] | Keyword tags |
| `scrapedAt` | string | ISO 8601 capture timestamp |

#### Professional (`recordType: "professional"`)

```json
{
    "recordType": "professional",
    "id": "31285009",
    "url": "https://www.houzz.com/professionals/interior-designers/etch-design-group-pfvwus-pf~31285009",
    "title": "Etch Design Group",
    "proType": "Interior Designers & Decorators",
    "aboutMe": "Etch is a full-service interior design firm based in Austin, Texas...",
    "formattedAddress": "2900 W Anderson Ln, Austin, TX 78757",
    "city": "Austin",
    "state": "TX",
    "zip": "78757",
    "country": "US",
    "latitude": 30.3567,
    "longitude": -97.7421,
    "phone": "(512) 555-0142",
    "website": "https://etchdesigngroup.com",
    "socialLinks": {
        "instagram": "https://instagram.com/etchdesigngroup",
        "pinterest": "https://pinterest.com/etchdesigngroup"
    },
    "reviewRating": 5.0,
    "reviewsCount": 40,
    "projectsCount": 18,
    "photosCount": 246,
    "followerCount": 1840,
    "badges": ["Best of Houzz Service"],
    "featuredReview": {
        "rating": 5,
        "body": "Etch designed our living room and dining room. They listened carefully, kept us on budget, and the result is a space we love coming home to.",
        "projectDate": "2025-11-15",
        "authorName": "Sarah K."
    },
    "licenseNumber": "TX-12345",
    "licenseType": "Registered Interior Designer",
    "isProVerified": true,
    "hasVerifiedLicense": true,
    "hasVerifiedKyc": true,
    "scrapedAt": "2026-05-16T14:30:00Z"
}
```

##### Identity & Location

| Field | Type | Description |
|-------|------|-------------|
| `recordType` | string | Always `"professional"` |
| `id` | string | Houzz user ID |
| `url` | string | Canonical professional profile URL |
| `title` | string | Business display name |
| `proType` | string | Category label (Interior Designers & Decorators, General Contractors, etc.) |
| `aboutMe` | string | Bio / about text (HTML stripped) |
| `formattedAddress` | string | Full address string |
| `city` | string | City |
| `state` | string | State or region |
| `zip` | string | Postal code |
| `country` | string | Country code |
| `latitude` | number | Geo latitude |
| `longitude` | number | Geo longitude |

##### Contacts & Social

| Field | Type | Description |
|-------|------|-------------|
| `phone` | string | Public phone (call-tracking proxies auto-dropped) |
| `website` | string | External business website |
| `socialLinks` | object | `{facebook, instagram, twitter, linkedin, pinterest, youtube}` URLs where exposed |
| `email` | string | Always `null` — Houzz does not expose pro emails publicly |

##### Ratings & Trust Signals

| Field | Type | Description |
|-------|------|-------------|
| `reviewRating` | number | Average rating on a 0–5 scale (one decimal) |
| `reviewsCount` | integer | Total review count |
| `projectsCount` | integer | Total project count |
| `photosCount` | integer | Total photo count |
| `followerCount` | integer | Houzz follower count |
| `featuredReview` | object | Most-recent published review when `includeContacts: true` — `{rating, body, projectDate, authorName}`. `null` for pros with zero reviews. |
| `badges` | string\[] | Earned Houzz badges ("Best of Houzz Service", etc.) |
| `licenseNumber` | string | Business license number when posted |
| `licenseType` | string | License type or issuing authority |
| `isProVerified` | boolean | Houzz pro-verification flag |
| `hasVerifiedLicense` | boolean | Houzz license-verification flag |
| `hasVerifiedKyc` | boolean | Houzz KYC-verification flag |

#### Story (`recordType: "story"`)

Houzz Magazine articles.

```json
{
    "recordType": "story",
    "id": "168247831",
    "url": "https://www.houzz.com/magazine/10-trending-kitchen-ideas-stsetivw-vs~168247831",
    "title": "10 Trending Kitchen Ideas From Houzz Pros",
    "subtitle": "From quiet luxury palettes to walnut cabinetry, here's what's resonating in 2026.",
    "authorName": "Mitchell Parker",
    "authorProfileUrl": "https://www.houzz.com/pro/mitchellparker",
    "commentCount": 38,
    "coverImageUrl": "https://st.hzcdn.com/simgs/pictures/magazine/cover_8-img.jpg",
    "topics": ["Kitchen Design", "New This Week", "Trends"],
    "publishedAt": "2026-05-08T14:00:00Z",
    "scrapedAt": "2026-05-16T14:30:00Z"
}
```

| Field | Type | Description |
|-------|------|-------------|
| `recordType` | string | Always `"story"` |
| `id` | string | Houzz article ID |
| `url` | string | Article URL |
| `title` | string | Article title |
| `subtitle` | string | Article subtitle / dek |
| `authorName` | string | Author display name |
| `authorProfileUrl` | string | Author profile URL |
| `commentCount` | integer | Reader comment count |
| `coverImageUrl` | string | Cover photo CDN URL |
| `topics` | string\[] | Topic tags |
| `publishedAt` | string | ISO 8601 publish timestamp |
| `scrapedAt` | string | ISO 8601 capture timestamp |

#### Discussion (`recordType: "discussion"`)

Q\&A forum threads.

```json
{
    "recordType": "discussion",
    "id": "12348721",
    "url": "https://www.houzz.com/discussions/granite-vs-quartz-for-kitchen-counters-dsvw-vd~12348721",
    "title": "Granite vs quartz for kitchen counters?",
    "body": "We're remodeling our kitchen and torn between granite and quartz. Looking for input on durability and resale value.",
    "topicTitle": "Kitchen Design",
    "numberOfAnswers": 21,
    "numberOfLikes": 4,
    "lastAnsweredAt": "2026-05-12T18:42:00Z",
    "bestAnswerId": "98714523",
    "authorName": "Sarah M.",
    "scrapedAt": "2026-05-16T14:30:00Z"
}
```

| Field | Type | Description |
|-------|------|-------------|
| `recordType` | string | Always `"discussion"` |
| `id` | string | Houzz question ID |
| `url` | string | Discussion URL |
| `title` | string | Question title |
| `body` | string | Question body (HTML stripped) |
| `topicTitle` | string | Forum topic / category |
| `numberOfAnswers` | integer | Reply count |
| `numberOfLikes` | integer | Like count |
| `lastAnsweredAt` | string | ISO 8601 last-reply timestamp |
| `bestAnswerId` | string | ID of the marked best answer, when one exists |
| `authorName` | string | Asker display name |
| `scrapedAt` | string | ISO 8601 capture timestamp |

### Tips for Best Results

- **Always pair `location` with `professionalCategory` for lead lists.** A national interior-designer dump pulls thousands of generic results; "Brooklyn, NY" + "interior-designers" returns a focused, sales-ready set.
- **Use `includeContacts` selectively.** It doubles request count per pro (one extra detail-page fetch) — narrow your category and city first, then turn it on.
- **Stack photo filters one at a time when prospecting.** Adding all four filter families to a broad query (e.g. "kitchen") can return 0 results; start with one filter, see the count, then layer.
- **Use Stories topics, not free-text, for Houzz Magazine.** Houzz Magazine has a fixed taxonomy — try "Kitchens", "Bathrooms", "Houzz-Tours", or "Outdoors" rather than long-tail keywords.
- **Compare regional design trends with one keyword across cities.** Run the same `searchQueries` three times with different `location` values (Austin, Brooklyn, Seattle) for an instant style-comparison dataset.
- **`recordType` is your friend** — when mixing surfaces in one run (e.g. start URLs spanning photos + pros), filter the dataset by `recordType` downstream rather than hand-splitting.
- **Set a sensible `maxResults` first.** Try 50–100 to confirm the data shape matches your needs, then scale up — runs of 1,000+ work fine but cost more to validate.

### Pricing

**$3.00 per 1,000 results** — undercuts the leading Houzz competitor by roughly 25% while covering all four surfaces in one actor.

| Results | Estimated Cost |
|---------|----------------|
| 100 | $0.30 |
| 1,000 | $3.00 |
| 10,000 | $30.00 |
| 100,000 | $300.00 |

A "result" is any row in the output dataset — one photo, one professional, one story, or one discussion. **No compute charges — you only pay per result returned.** Platform fees (storage, data transfer) are additional and depend on your Apify plan.

### Integrations

Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:

- **Zapier** / **Make** / **n8n** — Workflow automation
- **Google Sheets** — Direct spreadsheet export
- **Slack** / **Email** — Notifications on new results
- **Webhooks** — Trigger custom APIs on run completion
- **Apify API** — Full programmatic access

### Legal & Ethical Use

This actor is designed for legitimate market research, lead generation, content research, and competitive analysis. Users are responsible for complying with applicable laws and Houzz's Terms of Service, including respecting professional privacy and not contacting pros for unsolicited spam. Do not use extracted data for harassment, fair-housing violations, or any illegal purpose.

# Actor input Schema

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

Paste one or more Houzz URLs. Accepts photo, professional, story, and discussion pages, plus search and category listings (e.g. https://www.houzz.com/photos/modern-kitchen, https://www.houzz.com/professionals/interior-designers/c/Austin--TX). When provided, these override the keyword/filter fields below.

## `searchQueries` (type: `array`):

One keyword per line (e.g. 'modern kitchen', 'landscape architect', 'craftsman bathroom'). Each line runs as its own search and produces its own results. Ignored when Houzz URLs are provided above.

## `queryType` (type: `string`):

Which Houzz section to search. 'Photos' searches the inspiration gallery, 'Professionals' searches the designer/contractor directory, 'Stories' searches Houzz Magazine articles, and 'Discussions' searches the Q\&A forum.

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

City, region, or 'City, State' to scope a professional search (e.g. 'Austin, TX', 'Brooklyn, NY'). Only used when Search Section is 'Professionals'.

## `professionalCategory` (type: `string`):

Restrict a professional search to a specific category. Leave blank to use the default category (Interior Designers) — Houzz does not support browsing every category at once.

## `styles` (type: `array`):

Filter photos by design style. Pick any combination. Only applied when Search Section is 'Photos'.

## `budgets` (type: `array`):

Filter photos by project budget tier as Houzz classifies them.

## `sizes` (type: `array`):

Filter photos by room size.

## `colors` (type: `array`):

Filter photos by dominant color.

## `includeContacts` (type: `boolean`):

When enabled, fetch each professional's profile page to capture publicly visible phone, website, social links, badges, license verification, and the most recent published review (rating, body, project date, reviewer name). Adds two extra requests per professional (slower, slightly more expensive). Only applied when Search Section is 'Professionals' or you paste a professional URL.

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

Maximum number of results to collect per URL or keyword. Set to 0 to collect everything (an internal upper limit of 50,000 still applies to prevent runaway pagination). The actor stops requesting new pages once this number is reached but keeps the full final page even if it slightly overshoots.

## Actor input object example

```json
{
  "startUrls": [],
  "searchQueries": [
    "modern kitchen"
  ],
  "queryType": "photos",
  "professionalCategory": "",
  "styles": [],
  "budgets": [],
  "sizes": [],
  "colors": [],
  "includeContacts": false,
  "maxResults": 100
}
```

# Actor output Schema

## `overview` (type: `string`):

Mixed table of all scraped Houzz records with their type, title, location, and counts.

## `photos` (type: `string`):

Filtered table of photo records.

## `professionals` (type: `string`):

Filtered table of professional records (designers, contractors, architects).

# 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": [],
    "searchQueries": [
        "modern kitchen"
    ],
    "queryType": "photos",
    "location": "",
    "professionalCategory": "",
    "styles": [],
    "budgets": [],
    "sizes": [],
    "colors": [],
    "includeContacts": false,
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("solidcode/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": [],
    "searchQueries": ["modern kitchen"],
    "queryType": "photos",
    "location": "",
    "professionalCategory": "",
    "styles": [],
    "budgets": [],
    "sizes": [],
    "colors": [],
    "includeContacts": False,
    "maxResults": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("solidcode/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": [],
  "searchQueries": [
    "modern kitchen"
  ],
  "queryType": "photos",
  "location": "",
  "professionalCategory": "",
  "styles": [],
  "budgets": [],
  "sizes": [],
  "colors": [],
  "includeContacts": false,
  "maxResults": 100
}' |
apify call solidcode/houzz-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Houzz Scraper",
        "description": "[💰 $3.0 / 1K] Extract Houzz photos, professionals (designers, contractors, architects), magazine stories, and Q&A discussions. Search by keyword, filter by style/budget/size/color, scope by city, or paste Houzz URLs directly.",
        "version": "1.0",
        "x-build-id": "wnMBIzB5V65aLHa2m"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/solidcode~houzz-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-solidcode-houzz-scraper",
                "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/solidcode~houzz-scraper/runs": {
            "post": {
                "operationId": "runs-sync-solidcode-houzz-scraper",
                "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/solidcode~houzz-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-solidcode-houzz-scraper",
                "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",
                "properties": {
                    "startUrls": {
                        "title": "Houzz URLs",
                        "type": "array",
                        "description": "Paste one or more Houzz URLs. Accepts photo, professional, story, and discussion pages, plus search and category listings (e.g. https://www.houzz.com/photos/modern-kitchen, https://www.houzz.com/professionals/interior-designers/c/Austin--TX). When provided, these override the keyword/filter fields below.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "searchQueries": {
                        "title": "Search Keywords",
                        "type": "array",
                        "description": "One keyword per line (e.g. 'modern kitchen', 'landscape architect', 'craftsman bathroom'). Each line runs as its own search and produces its own results. Ignored when Houzz URLs are provided above.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "queryType": {
                        "title": "Search Section",
                        "enum": [
                            "photos",
                            "professionals",
                            "stories",
                            "discussions"
                        ],
                        "type": "string",
                        "description": "Which Houzz section to search. 'Photos' searches the inspiration gallery, 'Professionals' searches the designer/contractor directory, 'Stories' searches Houzz Magazine articles, and 'Discussions' searches the Q&A forum.",
                        "default": "photos"
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "City, region, or 'City, State' to scope a professional search (e.g. 'Austin, TX', 'Brooklyn, NY'). Only used when Search Section is 'Professionals'."
                    },
                    "professionalCategory": {
                        "title": "Professional Category",
                        "enum": [
                            "",
                            "interior-designers",
                            "architects-and-building-designers",
                            "design-build-firms",
                            "general-contractors",
                            "kitchen-and-bath-designers",
                            "kitchen-remodelers",
                            "kitchen-and-bath-remodelers",
                            "landscape-architects-and-designers",
                            "landscape-contractors",
                            "home-builders",
                            "adu-contractors",
                            "home-remodeling",
                            "home-additions-and-extensions"
                        ],
                        "type": "string",
                        "description": "Restrict a professional search to a specific category. Leave blank to use the default category (Interior Designers) — Houzz does not support browsing every category at once.",
                        "default": ""
                    },
                    "styles": {
                        "title": "Photo Style",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Filter photos by design style. Pick any combination. Only applied when Search Section is 'Photos'.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "contemporary",
                                "modern",
                                "traditional",
                                "transitional",
                                "farmhouse",
                                "industrial",
                                "mediterranean",
                                "scandinavian",
                                "rustic",
                                "craftsman",
                                "midcentury",
                                "coastal",
                                "tropical",
                                "asian",
                                "eclectic",
                                "shabby-chic",
                                "victorian",
                                "southwestern"
                            ],
                            "enumTitles": [
                                "Contemporary",
                                "Modern",
                                "Traditional",
                                "Transitional",
                                "Farmhouse",
                                "Industrial",
                                "Mediterranean",
                                "Scandinavian",
                                "Rustic",
                                "Craftsman",
                                "Midcentury",
                                "Coastal",
                                "Tropical",
                                "Asian",
                                "Eclectic",
                                "Shabby Chic",
                                "Victorian",
                                "Southwestern"
                            ]
                        },
                        "default": []
                    },
                    "budgets": {
                        "title": "Budget",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Filter photos by project budget tier as Houzz classifies them.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "budget",
                                "midrange",
                                "highend",
                                "luxury"
                            ],
                            "enumTitles": [
                                "Budget ($)",
                                "Mid-range ($$)",
                                "High-end ($$$)",
                                "Luxury ($$$$)"
                            ]
                        },
                        "default": []
                    },
                    "sizes": {
                        "title": "Room Size",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Filter photos by room size.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "compact",
                                "medium",
                                "large",
                                "expansive"
                            ],
                            "enumTitles": [
                                "Compact",
                                "Medium",
                                "Large",
                                "Expansive"
                            ]
                        },
                        "default": []
                    },
                    "colors": {
                        "title": "Color Palette",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Filter photos by dominant color.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "red",
                                "orange",
                                "yellow",
                                "green",
                                "blue",
                                "purple",
                                "pink",
                                "brown",
                                "beige",
                                "gray",
                                "white",
                                "black",
                                "blackandwhite",
                                "metallics"
                            ],
                            "enumTitles": [
                                "Red",
                                "Orange",
                                "Yellow",
                                "Green",
                                "Blue",
                                "Purple",
                                "Pink",
                                "Brown",
                                "Beige",
                                "Gray",
                                "White",
                                "Black",
                                "Black & white",
                                "Metallics"
                            ]
                        },
                        "default": []
                    },
                    "includeContacts": {
                        "title": "Include Contact Details",
                        "type": "boolean",
                        "description": "When enabled, fetch each professional's profile page to capture publicly visible phone, website, social links, badges, license verification, and the most recent published review (rating, body, project date, reviewer name). Adds two extra requests per professional (slower, slightly more expensive). Only applied when Search Section is 'Professionals' or you paste a professional URL.",
                        "default": false
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of results to collect per URL or keyword. Set to 0 to collect everything (an internal upper limit of 50,000 still applies to prevent runaway pagination). The actor stops requesting new pages once this number is reached but keeps the full final page even if it slightly overshoots.",
                        "default": 100
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
