Houzz Professionals Scraper avatar

Houzz Professionals Scraper

Pricing

from $2.00 / 1,000 results

Go to Apify Store
Houzz Professionals Scraper

Houzz Professionals Scraper

Scrape Houzz's public professional directory into home-services leads — contractors, architects, and designers — with license number, project/photo count, and years-in-business pulled from Houzz's own embedded data that other Houzz scrapers leave out.

Pricing

from $2.00 / 1,000 results

Rating

0.0

(0)

Developer

DevilScrapes

DevilScrapes

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share


🎯 What this 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.

⚙️ How to use it

  1. Click Try for free at the top of the page.
  2. Fill in the input form — most fields have sensible defaults.
  3. Click Start. Output streams into the run's dataset.
  4. Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.

📥 Input

FieldTypeRequiredDefaultNotes
categorystringyes'general-contractor'Houzz professional category slug to scrape, e.g. "general-contractor".
locationstringno'—'Optional "City, ST" free text. Applied as a post-scrape city/state match against nationwide category results. Leave…
maxResultsintegerno200Stop once this many unique (deduped by Houzz professional ID) leads are collected.
maxPagesintegerno20Hard cap on listing pages fetched (15 rows/page), independent of Max results.
fetchProfileDetailsbooleannoTrueWhen true, fetch each pro's profile page for license number, project/photo count, and a clean website URL.
proxyConfigurationobjectno{'useApifyProxy': False}Apify Proxy settings. Optional — Houzz clears via curl-cffi browser impersonation alone (live-confirmed, no proxy).…

Example input

{
"category": "general-contractor",
"maxResults": 5,
"maxPages": 1,
"fetchProfileDetails": true,
"proxyConfiguration": {
"useApifyProxy": true
}
}

📤 Output

Every row is one dataset item.

FieldTypeNotes
houzz_professional_idintegerStable Houzz professional ID — dedup/identity key.
namestringBusiness/pro display name.
categorystringHouzz category display name, e.g. "General Contractors".
city['string', 'null']City.
region['string', 'null']State.
phone['string', 'null']Formatted phone number, verbatim.
website['string', 'null']Clean, un-tracked website URL. Null unless Fetch profile details is on.
review_countintegerReview count. Never null.
average_rating['number', 'null']Rating on a 0-5 scale. Null when review_count is 0.
project_or_photo_count['integer', 'null']Aggregate portfolio photo count. Null unless Fetch profile details is on.
years_in_business['integer', 'null']Self-reported years-in-business badge, when present. Never estimated.
license_number['string', 'null']License number string. Null unless Fetch profile details is on, and even then present on roughly half of profiles.
houzz_profile_urlstringCanonical Houzz profile URL.
scraped_atstringISO-8601 UTC timestamp when this row was recorded.

Example output

{
"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

Pay-Per-Event — you pay only when these events fire:

EventUSDWhat it is
actor-start$0.02One-off warm-up charge per run
result-emitted$0.002Per unique dataset item
profile-page-scraped$0.0005Per upstream page or API call

Example: 1 000 results at the rates above ≈ $2.52. No subscription, no minimum, no card to start — Apify gives every new account $5 of free credit.

🚧 Limitations

Location filtering is a post-scrape city/state match against nationwide category results, not a native Houzz geo-radius query — small/rural cities may need a higher Max pages to find enough matches. license_number and years_in_business are opt-in Houzz fields with partial coverage by design, never fabricated. No email addresses (Houzz doesn't expose them) and no non-US Houzz sites in v1.

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

💬 Your feedback

Spotted a bug, hit a weird edge case, or need a new field? Open an issue on the Actor's Issues tab on Apify Console — we ship fixes weekly and we read every report.