Houzz Pro Scraper – Contractor & Designer Leads with Emails avatar

Houzz Pro Scraper – Contractor & Designer Leads with Emails

Pricing

Pay per usage

Go to Apify Store
Houzz Pro Scraper – Contractor & Designer Leads with Emails

Houzz Pro Scraper – Contractor & Designer Leads with Emails

Turn Houzz into a ready-to-use B2B lead list. Pick a category, type a city, and export contractors, architects, interior designers and remodelers with phone, address, rating, reviews, Best-of-Houzz badges and services — plus the verified email addresses no other Houzz scraper provides.

Pricing

Pay per usage

Rating

5.0

(1)

Developer

Malik Mazhar Ali

Malik Mazhar Ali

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

a day ago

Last modified

Share

Houzz Pro Scraper — Contractor, Designer & Architect Leads (with Emails) 🏠

Turn the Houzz professional directory into a clean, structured B2B lead list: general contractors, architects, interior designers, kitchen & bath remodelers, home builders, landscape architects and more — with names, phones, addresses, ratings, reviews, “Best of Houzz” badges, services, social links, and email addresses.

What makes this scraper different: Houzz hides email addresses behind its internal messenger, so other Houzz scrapers can’t give you emails. This Actor visits each pro’s own website and extracts verified contact emails — the single most valuable field for outreach. No other Houzz scraper on the market does this.

Highlights

  • 📧 Verified emails — the only Houzz scraper that has them. We crawl each pro’s own website (Houzz hides emails behind its messenger).
  • 🏙️ Search by plain city — just type “Austin, TX”. No cryptic Houzz URLs.
  • 🧰 10 categories — general contractors, architects, interior designers, kitchen & bath, home builders, remodelers, landscape architects, closet designers and more.
  • Rich profiles — rating, review count, Best-of-Houzz badges, services, hire count, address, GPS, social links, description.
  • 🔌 Pipeline-ready — stable null-safe schema, ISO dates, one-call API, n8n/Make webhook, CSV/JSON/Excel export.
  • 💸 Fair pricing — $3/1k for directory data (same as others), pay the email premium only when an email is actually found.

Table of contents


Quick start

  1. Open the Actor and leave What do you want to scrape? on “Search a city”.
  2. Pick a Category (e.g. General Contractors).
  3. Type a City — e.g. Austin, TX.
  4. Set How many results (e.g. 50) and click Start.

You’ll get a table of pros with name, phone, address, coordinates, website, and social links. Want full detail (reviews, badges, hire count, emails)? Copy the url values from your search and run Full profiles mode on them.


Two modes

Search a city (mode: search)Full profiles (mode: pro)
InputCategory + CityList of pro profile URLs (proUrls)
ProxyNone neededResidential, US (default — datacenter IPs are blocked)
SpeedVery fastFast
ReturnsIdentity, phone, address, coords, website, socialsEverything: rating, review count, reviews, badges, services, hire count, description, emails, socials
Best forBuilding a lead list for a cityEnriching/qualifying specific pros

* In search mode some fields (rating, reviews, badges) are only on the full profile; run Full profiles mode on the URLs you collect to fill them in.

Recommended workflow: Search a city → take the url column → run Full profiles on those URLs with Find email addresses on. You now have a complete, email-enriched lead list.


Input reference

FieldKeyApplies toDescription
What do you want to scrape?modebothsearch (default) or pro.
CategoryproCategorysearchDropdown — General Contractors, Architects, Interior Designers, Kitchen & Bath Remodelers, Kitchen Remodelers, Home Remodelers, Home Builders, Design-Build Firms, Landscape Architects, Closet Designers.
CitylocationsearchPlain text: Austin, TX, Los Angeles, CA, Brooklyn, NY. Leave blank for nationwide (US).
How many resultsmaxResultsboth1–1000. Default 50.
Profile URLsproUrlsproHouzz profile URLs (contain pfvwus), e.g. https://www.houzz.com/professionals/general-contractors/chapter-pfvwus-pf~666806768.
Include reviewsincludeReviewsproDefault true.
Only reviews afterreviewsSinceproISO date, e.g. 2026-01-01, for incremental runs.
Find email addressesenrichEmailbothDefault true. Crawls each pro’s website for emails.
Webhook URLwebhookUrlbothPOST results to n8n/Make/any endpoint when the run finishes.
Advanced: direct URLssearchUrlssearchPaste any Houzz listing URL to scrape as-is (overrides Category + City).
ProxyproxyConfigurationbothResidential US by default (required for pro).

Example input — Search a city

{
"mode": "search",
"proCategory": "general-contractor",
"location": "Austin, TX",
"maxResults": 50,
"enrichEmail": true
}

Example input — Full profiles

{
"mode": "pro",
"proUrls": [
"https://www.houzz.com/professionals/general-contractors/chapter-pfvwus-pf~666806768",
"https://www.houzz.com/professionals/design-build-firms/knockout-renovation-pfvwus-pf~1636076815"
],
"includeReviews": true,
"enrichEmail": true,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "countryCode": "US" }
}

Output: what you get

One JSON object per professional. Every field is always present — when Houzz doesn’t provide a value you get null (or []), so your n8n/Zapier/spreadsheet mappings never break. Dates are emitted in ISO‑8601 UTC.

A trimmed example record:

{
"name": "Chapter",
"phone": "(212) 680-4628",
"email": "itstime@hellochapter.com",
"website": "https://www.hellochapter.com",
"address": "345 7th Ave 9th floor, New York, NY, 10001, United States",
"coordinates": { "lat": 40.7484, "lng": -73.9967 },
"rating": 4.8,
"reviewsCount": 26,
"badges": ["Best of Houzz 2023", "Best of Houzz 2022", "Recommended on Houzz"],
"services": ["Bathroom Remodeling", "General Contracting", "Home Additions"],
"hireCount": 61,
"socialLinks": { "facebook": "https://www.facebook.com/hellochapter", "instagram": "https://www.instagram.com/chapter.renovations/" },
"url": "https://www.houzz.com/professionals/general-contractors/chapter-pfvwus-pf~666806768"
}

A complete record (all fields) is in docs/example-output-pro.json; a search-mode record is in docs/example-output-search.json.


Full output example

See docs/example-output-pro.json for a real, complete pro-mode record including the full addressComponents, areaServed, reviews, badges, coverImage and description.


Field reference

FieldTypeNotes
proIdstringHouzz professional ID (the pf~ number).
slugstringURL slug.
name / businessNamestringBusiness name.
urlstringCanonical Houzz profile URL.
sourceUrlstringThe page actually scraped.
category / categoriesstring / arrayCategory (pro mode may be null; search sets it).
phonestringPrimary phone.
emailstringBest email (prefers role addresses: info@, contact@…). null if none found.
emailsarrayAll verified emails found on the pro’s website.
websitestringThe pro’s own website.
socialLinksobjectfacebook, instagram, twitter, linkedin, youtube, pinterest, tiktok (each null if absent).
addressstringFormatted single-line address.
addressComponentsobjectstreetLine1, city, state, postalCode, country, countryCode.
coordinatesobject{ lat, lng }.
areaServedarrayCities/areas the pro serves.
ratingnumberAverage rating (e.g. 4.8).
reviewsCountnumberTotal reviews on Houzz.
ratingDistributionobject{1..5} star counts (often null — lazy-loaded by Houzz).
badgesarrayAwards, e.g. Best of Houzz 2024, Recommended on Houzz.
yearsInBusinessnumbernull when not published.
hireCountnumberCompleted projects on Houzz.
verifiedLicensebooleannull when not published.
servicesarrayService/specialty list.
projectsarrayPortfolio items (when available).
reviewsarray{ rating, comment, author, date, dateFormatted, reply }. See review-coverage note below.
coverImage / galleryImagesobject / arrayImage URLs.
descriptionstringBusiness “about” text.
extractionPathstringld+json+hz-ctx (full), ld+json, hz-ctx, or dom.
partialbooleantrue if only partial data was available.
scraperVersionstringScraper version.
scrapedAtstringISO‑8601 UTC timestamp.
city / statestringFlattened from addressComponents for easy CSV/leads view.

Run it with the API

Replace <YOUR_TOKEN> with your Apify API token. The Actor ID is malikgen~houzz-pro-scraper.

Run and get results in one call (synchronous — best for small/medium runs):

curl -X POST "https://api.apify.com/v2/acts/malikgen~houzz-pro-scraper/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"mode": "search",
"proCategory": "general-contractor",
"location": "Austin, TX",
"maxResults": 50,
"enrichEmail": true
}'

The response body is the JSON array of records — ready to use.

Start a run asynchronously, then fetch the dataset later:

# 1) start
curl -X POST "https://api.apify.com/v2/acts/malikgen~houzz-pro-scraper/runs?token=<YOUR_TOKEN>" \
-H "Content-Type: application/json" \
-d '{ "mode": "search", "proCategory": "architect", "location": "Miami, FL", "maxResults": 100 }'
# -> note the "defaultDatasetId" in the response
# 2) fetch results (JSON; add &format=csv for CSV, &format=xlsx for Excel)
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<YOUR_TOKEN>"

Use it with n8n / Make

Option A — Apify node (recommended). In n8n add the Apify node → Run Actor → Actor malikgen/houzz-pro-scraper → paste the JSON input → connect Get Dataset Items to receive each record as an item.

Option B — HTTP Request node. POST to the run-sync-get-dataset-items URL above; the node receives the records array directly. Works great in Make.com too (HTTP module).

Option C — Push to your own webhook. Set webhookUrl in the input to your n8n Webhook node URL. When the run finishes, the Actor POSTs { mode, recordCount, records, scraperVersion } to it — fully hands-off pipelines.

{
"mode": "search",
"proCategory": "kitchen-and-bath-remodelers",
"location": "Chicago, IL",
"maxResults": 200,
"enrichEmail": true,
"webhookUrl": "https://your-n8n.example.com/webhook/houzz-leads"
}

Pricing

Pay only for what you use — value-tiered:

ChargePrice (Bronze)When
Base record$3 / 1,000 ($0.003)every professional returned
Email enrichment+$7 / 1,000 ($0.007)only when a verified email is found
  • Directory data (name, phone, address, rating, reviews, badges, services, socials): ~$3/1k — same as other Houzz scrapers, with richer data and no per-run fee.
  • A full, outreach-ready lead with a verified email: ~$10/1k (≈$7/1k on Gold+ tiers).

You never pay the email premium unless we actually deliver an email — and emails are something no other Houzz scraper provides. A home-services lead bought elsewhere commonly costs $50–$500 each; here a complete, email-enriched lead is about one cent.

Turn email enrichment off (enrichEmail: false) to pay base price only.


Tips, limits & FAQ

  • Get emails: keep Find email addresses on and use Full profiles mode (search-mode listings often don’t expose a website). Emails come from the pro’s own site, so a pro with no website returns email: null.
  • Review coverage: Houzz loads its full review list lazily (via a background request), so each record currently includes the rating, total review count, and the featured review. Full review history is on the roadmap.
  • City not found? Use City, ST (e.g. Austin, TX). Bare city names usually work; a known suburb works as its own city (e.g. Santa Monica, CA). For anything unusual, paste a Houzz listing URL into Advanced: direct URLs.
  • Why residential proxy for Full profiles? Houzz returns HTTP 500 to datacenter IPs on profile pages. The Actor defaults the proxy to Residential US so it just works.
  • Stable schema: every field is always present (null/[] when empty) so downstream automations never break when a value is missing.
  • Compliance: scrapes only publicly available business listing information for legitimate B2B lead-generation and market research.

Changelog

  • 0.0.1 — Initial release. Search-by-city + full-profile modes, email enrichment, badges, services, reviews (rating + featured), residential proxy for profiles, n8n webhook, null-safe schema.