Houzz Professionals Scraper icon

Lead generation

Houzz Professionals Scraper

Turn any Houzz professional category into a clean home-services lead list — name, rating, license number, project/photo count, and years-in-business pulled from Houzz's own embedded data, fields the incumbent Houzz scrapers leave on the table.

Free Apify credit covers a first run. No credit card to try.

What this Actor scrapes

Houzz's professional directory (houzz.com/professionals/) is the go-to shortlist for architects, general contractors, interior designers, landscapers, and 70+ other home-services trades. This Actor turns each category-browse listing page (and, optionally, each pro's profile page) into structured leads — name, category, city/state, phone, rating, and review count from the listing, plus license number, project/photo count, clean website URL, and a self-reported years-in-business badge from the profile — fields the incumbent Houzz scrapers skip because they scrape the visible DOM instead of Houzz's own embedded JSON record.

What we handle for you

  • 🛡️ Browser fingerprint rotationcurl-cffi impersonates real Chrome / Firefox / Safari TLS handshakes so the target sees a browser, not Python.
  • 🌐 Residential proxy rotation via Apify Proxy — fresh session and exit IP on every block.
  • 🔁 Retries with exponential backoff on 408 / 429 / 5xx — up to 5 attempts per page, Retry-After honoured.
  • 🧱 Rate-limit-aware pacing — when the target pushes back, we slow down instead of getting banned.
  • 🧊 Clean, typed dataset rows — Pydantic-validated, ISO-8601 timestamps, stable IDs, JSON / CSV / Excel export straight from the Apify Console.
  • 💰 Pay-Per-Event pricing — you only pay for results that hit your dataset. No data, no charge.

Use cases

  • Franchise and vendor prospecting — build a call list of licensed contractors/designers by category and city.
  • Sales prospecting — target pros with verified license numbers and strong review counts.
  • Market research — track years-in-business and portfolio size distribution across a trade category.
  • Lead scoring — filter by rating, review count, and license presence before outreach.

Input

Paste this into the Apify Console, or send it as the run input over the API. Proxy settings are on by default; you rarely need to touch them.

FieldTypeRequiredWhat it does
category string yes Houzz professional category slug to scrape, e.g. "general-contractor". This is a confirmed-live subset of the ~78 categories Houzz supports; the full slug->topicId table lives in src/categories.py.
location string no Optional "City, ST" free text. Applied as a post-scrape city/state match against nationwide category results (Houzz's native geo query needs an internal region ID we can't resolve — see README Limitations). Leave empty…
maxResults integer no Stop once this many unique (deduped by Houzz professional ID) leads are collected.
maxPages integer no Hard cap on listing pages fetched (15 rows/page), independent of Max results — the safety valve against Houzz's totalCount display-cap quirk.
fetchProfileDetails boolean no When true, fetch each pro's profile page for license number, project/photo count, and a clean website URL. Set false for a faster/cheaper listing-only run (those three fields stay null).
{
  "category": "general-contractor",
  "maxResults": 5,
  "maxPages": 1,
  "fetchProfileDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}

Output

One row per result, schema-validated before it is written. Export JSON, CSV, Excel or XML from the run, or read it over the API.

houzz_professional_idnamecategorycityregionphonewebsitereview_countaverage_ratingproject_or_photo_countyears_in_businesslicense_numberhouzz_profile_urlscraped_at

{
  "houzz_professional_id": 752464,
  "name": "Full Service USA",
  "category": "General Contractors",
  "city": "Hallandale",
  "region": "FL",
  "phone": "(305) 487-8485",
  "website": "http://www.fullserviceusa.com",
  "review_count": 94,
  "average_rating": 4.8,
  "project_or_photo_count": 710,
  "years_in_business": null,
  "license_number": "CG 1516022",
  "houzz_profile_url": "https://www.houzz.com/professionals/general-contractors/full-service-usa-pfvwus-pf~1830092161",
  "scraped_at": "2026-08-06T12:00:00Z"
}

Pricing

EventPriceWhen
Actor startOnce per run, covers warm-up and proxy session setup.
Actor Start$0.0200Per result written to the dataset.
result$0.0020Per result written to the dataset.

You pay only for results that land. Cap any run with maxTotalChargeUsd. See pricing & billing for worked examples.

FAQ

Is this legal?
We only fetch content Houzz makes publicly available on its professional directory pages. Respect Houzz's terms of service before using output commercially.
Do I need a proxy?
No — Houzz's listing and profile pages clear with curl-cffi browser impersonation alone (no proxy required). Enable a proxy group only if you start seeing blocks.
Why is license_number often null?
Houzz only exposes the license number string on profile pages, and only around half of pros have one on file. We never fabricate it to raise the fill rate.
Why is years_in_business usually null?
It's a self-reported, opt-in Houzz badge — most pros haven't enabled it. We parse it only when Houzz explicitly shows it, never estimate it from reviews or project count.
Does location filter to an exact radius?
Not natively — Houzz's radius search needs an internal region ID we can't resolve from a plain city/state string, so location is applied as a post-scrape city/state match against nationwide results.

Ready to run it?

Open the listing on Apify, paste the input above, and watch rows land. If it ever breaks, it is our problem before it is yours.

Related Actors

Teams that run this also run