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

\[💰 $3.00 / 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:** 25 total users, 6 monthly users, 97.4% runs succeeded, 1 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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

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

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

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

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

# README

## Houzz 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, star ratings, public phone numbers, street addresses, 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 you get directory results pinned to that city's metro area, about a 50-mile radius, instead of the national mix. Metros follow Houzz's own map, so a Brooklyn search covers the New York metro and reaches into northern New Jersey and Connecticut.
- **Four photo filter families, stackable** — 19 design styles (Contemporary, Modern, Farmhouse, Mediterranean, Mid-century, Scandinavian, French Country, etc.), 4 budget tiers ($ Budget through $$$$ Luxury), 4 room sizes (Compact through Expansive), and 14 color palettes including Turquoise, Wood tones, and Beige. A room search takes two at once — Blue plus Green, or Modern plus Mid-range — and a descriptive phrase like "kitchen backsplash" takes four.
- **Every photo carries its own style, room and metro** — not the label of the page it came from. One unfiltered "kitchen" run turned up all 19 Houzz styles and 65 metro areas across 5,209 photos, with the style filled on 98% of rows and the metro on 92%, so you can pivot a dataset by style, room type or city without a second pass. Descriptive keywords also narrow themselves for free: "small bedroom" arrives already scoped to Compact rooms and "modern kitchen" returns 100% Modern kitchens with no filter box ticked.
- **Search in any language** — Japanese, Chinese, Korean and other non-Latin keywords run as real Houzz photo and forum searches rather than being quietly swapped for an English word. Anything Houzz genuinely cannot search is named in the run log instead of billed as a substitute.
- **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 (100% of pros in testing), social links across Facebook, Instagram, Pinterest, LinkedIn, YouTube and Twitter (80%), Houzz badges such as "Best of Houzz Service" (100%), license verification, project and photo counts, audience size as a follower count (100%), plus the most recent published review with rating, body, project date and reviewer name.
- **Forum threads with real dates and real names** — every discussion row carries the asker's display name, an ISO 8601 posted date and an ISO 8601 last-reply date, so you can sort a 44,000-thread topic by recency in a spreadsheet instead of decoding raw timestamps.
- **One Houzz entity = one row, with honest depth limits per surface** — a professional listed on six directory pages is a single billed record and a photo Houzz re-ranks between pages is never charged twice. A room-word photo browse runs 50,000 deep while any other photo keyword stops at about 4,800 — the run tells you which one you are on before it starts; Houzz itself caps the rest at about 1,200 distinct professionals per category-and-city, roughly 5,000 discussions per search, and a magazine topic's complete article list. The run ends cleanly at each ceiling instead of spinning, and keeps the full final page so a tight cap never loses you results.

### 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 carrying Best of Houzz badges and verified licenses
- Enrich existing CRM records with websites, social profiles, 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, project count, 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, author, and comment volume

**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 license and a published portfolio
- 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 — name, phone, street address, rating and review count 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 website, social links, badges, project and photo counts, and license verification — none of which Houzz puts on a directory listing:

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

#### Filtered Photo Search

Modern kitchen photos in white — a room search takes two photo filters at a time, from any of the four families:

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

Or take two from one family — every kitchen photo that is blue **or** green:

```json
{
    "queryType": "photos",
    "searchQueries": ["kitchen"],
    "colors": ["blue", "green"],
    "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. Photo and discussion searches accept keywords in any language, including Japanese, Chinese and Korean. On professional searches the keyword ranks the chosen category and city by relevance (Latin characters only — the run says so if a keyword can't be used), and a professional matched by several keywords is returned once. 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"). Resolves to that city's surrounding metro area, about a 50-mile radius, which can cross state lines. |
| `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, and they work on every photo search. On a room keyword — kitchen, bathroom, bedroom, living room, dining room, outdoor, kids, home office, garage, basement, entryway, laundry room, home gym, staircase and more — Houzz takes two selections at once. On a descriptive phrase such as "kitchen backsplash" or "farmhouse sink" your words and your filters are kept together and up to four selections apply, one of which can be a style; those results can cover more than one room. Anything that cannot be applied is named in the run log rather than dropped in silence.

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

#### Output Detail

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `includeContacts` | boolean | `false` | Houzz directory listings carry the name, address, phone, rating and review count — but not the website, social links, badges, project count, photo count or license verification. Enable this to fetch each professional's own profile page and add all of them, plus the follower count and the most recent published review. Adds two extra requests per professional. |

#### Limits

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `maxResults` | integer | `100` | Maximum results per URL or keyword. Set to `0` to collect everything Houzz will serve. The actor stops requesting new pages once the cap is reached but keeps the full final page. Each surface has its own real ceiling — see below. |

**How deep each surface actually goes.** Setting `maxResults` above a surface's ceiling is harmless: the run ends cleanly at the ceiling rather than stalling.

| Search Section | Ceiling per keyword or URL |
|-----------|---------|
| Photos — a room word ("kitchen", "bathroom", "home office") | 50,000. Houzz holds millions per room, so the run is the only thing that stops |
| Photos — a room word plus filters | However many photos match the combination — "Kitchen" + Blue is roughly 7,600 |
| Photos — any other keyword or phrase ("kitchen backsplash", "farmhouse sink"), with or without filters | About 4,800. Houzz's search results stop at 250 pages of 20 no matter how many photos match — "kitchen backsplash" has over a million and still stops there — and repeats across those pages resolve to ~4,800 distinct photos. The run names this ceiling in the log before it starts |
| Professionals | About 1,200 per category-and-city — Houzz publishes 100 directory pages of 15 and re-ranks between them, so ~1,500 listings resolve to ~1,200 distinct firms |
| Discussions | About 5,000 per search, out of result sets that can run to 44,000 |
| Stories | The complete article list of a magazine topic — all 3,694 Houzz Tours pieces — or a magazine keyword search, up to a ceiling of about 4,900 |

### 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 | The photo's own design style, one of 19 Houzz styles (Modern, Farmhouse, Coastal, Mid-Century Modern, French Country and more). Empty for the small share of photos Houzz hasn't classified |
| `roomType` | string | The photo's own room type (Kitchen, Bathroom, Living Room, Family Room, Home Office, etc.) |
| `location` | string | Metro area the project was built in, e.g. `Minneapolis`. Populates on roughly 9 in 10 photos; empty when Houzz publishes no location |
| `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,
    "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."
    },
    "isProVerified": true,
    "hasVerifiedLicense": true,
    "hasVerifiedKyc": true,
    "scrapedAt": "2026-05-16T14:30:00Z"
}
```

The example above is a run with **Include Contact Details** switched on. Without it, Houzz's directory listing supplies everything in the first two tables below; the third table stays empty.

##### 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 & Ratings (every run)

| Field | Type | Description |
|-------|------|-------------|
| `phone` | string | Public phone number. Where Houzz substitutes a call-tracking placeholder, you get `null` instead of a fake number |
| `email` | string | Always `null` — Houzz does not expose pro emails publicly |
| `reviewRating` | number | Average rating on a 0–5 scale (one decimal) |
| `reviewsCount` | integer | Total review count |
| `hasVerifiedKyc` | boolean | Houzz identity-verification flag |
| `scrapedAt` | string | ISO 8601 capture timestamp |

##### With Include Contact Details (`includeContacts: true`)

Houzz publishes these on a professional's own profile page, never on a directory listing, so they arrive **only** when Include Contact Details is enabled. Fill rates measured on a 105-professional run.

| Field | Type | Description |
|-------|------|-------------|
| `website` | string | External business website — 100% |
| `socialLinks` | object | `{facebook, instagram, twitter, linkedin, pinterest, youtube}` URLs where exposed — 80% |
| `projectsCount` | integer | Total published project count — 99% |
| `photosCount` | integer | How many photos the professional has published across all their projects — often in the thousands |
| `followerCount` | integer | How many Houzz members follow the professional — 100%. Directory listings never carry it, so it stays `0` without this option |
| `badges` | string\[] | Earned Houzz badges ("Best of Houzz Service", etc.) — 100% |
| `hasVerifiedLicense` | boolean | Houzz license-verification flag — set on every enriched row; `true` only for pros Houzz has actually verified |
| `isProVerified` | boolean | Houzz pro-verification flag. Directory listings report `false` for everyone, so the real value only arrives with this option on |
| `featuredReview` | object | Most-recent published review — `{rating, body, projectDate, authorName}`. `null` for pros with zero reviews. |

#### 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/user/mitchell_parker",
    "commentCount": 38,
    "coverImageUrl": "https://st.hzcdn.com/simgs/a821a6a5093197d2_8-7815/home-design.jpg",
    "topics": ["Kitchen Design", "New This Week", "Trends"],
    "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 image URL |
| `topics` | string\[] | Topic tags |
| `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,
    "createdAt": "2026-04-02T09:15:00Z",
    "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 |
| `createdAt` | string | ISO 8601 timestamp of when the question was posted |
| `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, and think in metros, not cities.** A national interior-designer dump pulls thousands of generic results; "Brooklyn, NY" + "interior-designers" returns a focused, sales-ready set for the whole New York metro — about 50 miles around Brooklyn, which means northern New Jersey and Connecticut firms come with it. Pick the metro's name if you want the wider net, or filter the `city` and `state` fields afterwards if you need one borough.
- **Use `includeContacts` selectively, but know what it unlocks.** Websites, social links, badges, project counts, photo counts, follower counts and license verification are *only* on a professional's own profile page — a directory-only run returns those columns empty. It costs two extra requests per professional, so narrow your category and city first, then turn it on.
- **Two photo filters is the ceiling on a room search, four on a phrase search.** "Kitchen" + Blue + Green takes two selections; "kitchen backsplash" + Modern + Mid-range + Compact + Blue takes four. Anything beyond that is skipped and the run tells you which ones it used. To cover more, run them as separate searches and merge the datasets.
- **Descriptive phrases keep their words and their filters.** "kitchen backsplash" + Blue returns blue kitchens Houzz ranks as backsplash matches, not every blue kitchen it has — the pool is roughly half the size, so twice as much of what you pay for is on target. Room keywords do even better when the phrase carries a hint: "small bedroom" and "modern kitchen" arrive already narrowed to Compact and Modern without spending one of your own picks on it.
- **A magazine topic name gets you the curated feed; anything else gets a real search.** "Houzz Tours", "Kitchens", "Bathrooms" and the other Houzz Magazine topics return that topic's complete, editor-curated article list. Type a phrase that isn't a topic — "small space living", "japandi bedroom" — and the run searches the magazine for it instead and says so in the log, so you get articles about your phrase rather than the magazine's front page.
- **Compare markets by running one category across cities.** `location` narrows the professional directory only (photo searches ignore it), so three runs of "general-contractors" in Austin, Brooklyn and Seattle give you a clean market-density comparison in one dataset.
- **Start at 50–100 results, then split deep pulls across seeds rather than one giant cap.** Houzz publishes roughly 1,200 distinct professionals per category-and-city and about 5,000 discussions per search, so "every general contractor in the US" is really "every general contractor in each metro you list" — three cities as three runs beat one national run with `maxResults: 50000`. Photo depth depends on the word you type: a room word ("kitchen") browses that whole room and genuinely goes 50,000 deep, so raise your run's timeout in the Console first, while a phrase ("kitchen backsplash") is a search and stops at about 4,800 however many photos match — over a million do, for that one. To go deeper on a niche, browse the room and filter it rather than describing it.
- **Search in the language your audience designs in.** "キッチン", "厨房", and other non-Latin keywords run as genuine Houzz photo and forum searches. The professional directory is Latin-only; when a keyword can't be applied there, the run says so by name instead of silently widening the search.

### Pricing

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

Apify loyalty discounts apply automatically — the more you have spent on the platform, the less each result costs.

| Results | No discount | Bronze | Silver | Gold |
|---------|-------------|--------|--------|------|
| 100 | $0.35 | $0.34 | $0.32 | $0.30 |
| 1,000 | $3.55 | $3.40 | $3.20 | $3.00 |
| 10,000 | $35.50 | $34.00 | $32.00 | $30.00 |
| 100,000 | $355.00 | $340.00 | $320.00 | $300.00 |

Tiered pricing takes effect on **13 September 2026**. Until that date every run is billed at a flat $3.00 per 1,000 results, whatever your discount tier.

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. Photo and discussion searches accept keywords in any language, including Japanese, Chinese and Korean. For 'Professionals' the keyword narrows the chosen category and location by relevance — that directory is Latin-alphabet only, and the run says so by name if a keyword can't be applied — and a professional matched by more than one keyword is returned (and charged) only once. 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'). Houzz scopes a city to its surrounding metro area — about 50 miles — so results can include nearby towns and cross state lines. 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. Picking two widens the search to photos matching either of them. Houzz applies at most two photo filters at once on a room search, and up to four on a descriptive-phrase search — anything beyond that is skipped, and the run says so. Only applied when Search Section is 'Photos'.

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

Filter photos by project budget tier as Houzz classifies them. Picking two widens the search to photos in either tier. Houzz applies at most two photo filters at once on a room search, and up to four on a descriptive-phrase search — anything beyond that is skipped, and the run says so.

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

Filter photos by room size. Picking two widens the search to photos of either size. Houzz applies at most two photo filters at once on a room search, and up to four on a descriptive-phrase search — anything beyond that is skipped, and the run says so.

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

Filter photos by dominant color. Picking two widens the search to photos featuring either color. Houzz applies at most two photo filters at once on a room search, and up to four on a descriptive-phrase search — anything beyond that is skipped, and the run says so.

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

Houzz directory listings carry a professional's name, address, phone, rating and review count — but NOT their website, social links, badges, project count, photo count, follower count or license verification. Turn this on to fetch each professional's own profile page and fill all of them in, plus the most recent published review (rating, body, project date, reviewer name). Leave it off and those columns come back empty. 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 Houzz will serve. Each section has its own real ceiling, and for photos it depends on the word you type: a room word such as "kitchen" browses that whole room and goes 50,000 deep, while any other keyword or phrase such as "kitchen backsplash" is a search and stops at about 4,800 no matter how many photos match (the run says so in the log before it starts). Houzz itself stops at about 1,200 distinct professionals per category-and-city (100 directory pages of 15, re-ranked between them), 4,980 discussions per search, and one magazine topic's full article list. Asking for more than a section can give is harmless — the run ends cleanly at the ceiling. 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 every scraped Houzz record with its type, title, owner or author, location, and engagement counts.

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

Filtered table of photo records with the photo's own style, room type, and metro area.

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

Filtered table of professional records (designers, contractors, architects) with address, phone, and ratings.

## `professionalContacts` (type: `string`):

Website, social links, badges, project and photo counts, and the latest review. Populates only when Include Contact Details is on.

## `stories` (type: `string`):

Filtered table of Houzz Magazine articles with author, topics, cover image, and comment count.

## `discussions` (type: `string`):

Filtered table of Q\&A forum threads with the asker, topic, answer count, and posted / last-reply dates.

# 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(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [],
  "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": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,solidcode/houzz-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/MYZKyJCFVXTj7NjOH/builds/CC5IRRTr983Kqo6h6/openapi.json
