Houzz Scraper avatar

Houzz Scraper

Pricing

from $3.00 / 1,000 results

Go to Apify Store
Houzz Scraper

Houzz Scraper

Scrape public Houzz professional directory and profile pages. Extract business details, ratings, reviews, hires, services, location data, and profile URLs from Houzz contractors and design professionals.

Pricing

from $3.00 / 1,000 results

Rating

5.0

(10)

Developer

Crawler Bros

Crawler Bros

Maintained by Community

Actor stats

11

Bookmarked

2

Total users

1

Monthly active users

5 hours ago

Last modified

Share

Scrape public Houzz professional directory and profile pages with an HTTP-first actor. Extract contractor and design professional details such as ratings, review counts, hires on Houzz, business contact fields, service lists, and location metadata.

Modes

This actor supports four input modes — pick whichever is most convenient:

  1. Profile URLs — paste direct Houzz pro profile URLs into profileUrls.
  2. Directory URLs — paste a directory or category page URL (such as a category filtered by a city) into directoryUrls.
  3. By city + category — set the city (e.g. Los-Angeles--CA, London, Sydney) and the category dropdown (e.g. general-contractors). The actor builds the directory URL automatically for the selected country.
  4. Hybrid — combine any of the above; profile URLs always extract first, then directory URLs are crawled until maxItems is reached.

Markets supported

Houzz operates in 16 markets and the actor supports all of them via the country dropdown:

US, UK, Canada, Australia, Germany, France, Ireland, Italy, Spain, New Zealand, India, Singapore, Japan, Russia, Denmark, Sweden.

When country + city + category are set, the actor constructs the matching country-domain directory URL (www.houzz.com, www.houzz.co.uk, www.houzz.de, etc.).

Categories supported

The category dropdown exposes 25+ professional categories — general contractors, architects, interior designers, kitchen/bath designers, painters, landscapers, home builders, and many more.

Anti-bot

By default, the actor runs without proxy from datacenter IPs (Houzz is normally reachable). If a fetch is blocked:

  • useProxy (default false) — when enabled, all requests go through the configured proxyConfiguration.
  • autoEscalateOnBlock (default true) — when a profile or directory fetch returns nothing, the actor automatically retries that single URL through Apify residential proxy. The directory-card data is still emitted as a fallback if the profile page itself is blocked.

Input fields

FieldTypeDescription
directoryUrlsarrayHouzz directory or category page URLs.
profileUrlsarrayDirect Houzz professional profile URLs.
citystringCity + state slug, e.g. Los-Angeles--CA, London.
categoryenumHouzz professional category slug.
countryenumHouzz market/domain (us, uk, ca, au, de, fr, ie, it, es, nz, in, sg, jp, ru, dk, se).
maxItemsinteger (1-250)Hard cap on emitted records.
useProxybooleanRoute requests through Apify proxy.
autoEscalateOnBlockbooleanAuto-retry blocked fetches via residential proxy.
proxyConfigurationobjectApify proxy configuration (advanced).

Output

Each record can include:

  • title / businessName / description
  • phoneNumber / websiteUrl / licenseNumber
  • ratingValue / reviewCount / hiresOnHouzz / followersCount / projectCount
  • verifiedLicense / awards
  • typicalJobCost / servicesProvided / areaServed
  • streetAddress / city / state / postalCode / countryCode / country / fullAddress
  • latitude / longitude
  • imageUrl / directorySnippet
  • sourceUrl / profileUrl / canonicalUrl / slug
  • siteName / recordType / recordSource / scrapedAt

recordSource is "full_profile" when the profile page was successfully fetched (full set of fields including description, licenseNumber, websiteUrl, servicesProvided, etc.), or "directory_card" when only the directory-card subset was available (anti-bot fallback). Directory-card records typically lack description, licenseNumber, websiteUrl, typicalJobCost, servicesProvided, and followersCount.

Empty values are omitted from output (no null, blank strings, or empty arrays).

Field notes

  • phoneNumber is returned as a human-readable formatted string exactly as Houzz publishes it (e.g. "(424) 280-3130"), not a digits-only normalized form. If you need a digits-only value, strip non-digits in your downstream pipeline (e.g. re.sub(r"\D", "", phoneNumber)).
  • ratingValue is a numeric (JSON number) on a 1.05.0 scale (e.g. 4.9 or 5). Whole numbers may serialize without a decimal in JSON; cast to float in your downstream pipeline if you need a uniform numeric type.

Limitations

  • Houzz page structure varies by professional category and locale, so some fields appear only when publicly shown on the target page.
  • When a profile page is blocked even after escalation, the actor falls back to the directory-card data (a smaller but still useful subset).