Houzz APIhouzz.com ↗
Access Houzz professional listings, contact info, ratings, reviews, and design inspiration photos via a structured REST API. 4 endpoints, no scraping needed.
What is the Houzz API?
The Houzz API exposes 4 endpoints covering home professional search, full profile data, paginated reviews, and design inspiration photo search. The search_professionals endpoint returns contractor and designer listings with phone numbers, addresses, ratings, and review counts filtered by category slug and location. Each endpoint returns structured JSON so you can build local-services directories, review aggregators, or design tools without manually navigating Houzz pages.
curl -X GET 'https://api.parse.bot/scraper/9ec72a41-fd5b-4fed-b495-a7f1bae93836/search_professionals?offset=0&category=plumbing-contractors&location=toronto-on-ca-probr0-bo%7Et_11817%7Er_6167865' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace houzz-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""
Houzz API - Usage Example
Get your API key from: https://parse.bot/settings
"""
from parse_apis.houzz_api import Houzz, Category, Location, ProfessionalNotFound
houzz = Houzz(api_key="YOUR_API_KEY")
# Search for plumbing professionals in Toronto
for pro in houzz.professionals.search(category=Category.PLUMBING_CONTRACTORS, location=Location.TORONTO_ON_CA, limit=5):
print(pro.name, pro.phone, pro.rating, pro.review_count)
# Drill down: get reviews for the first professional
pro = houzz.professionals.search(category=Category.GENERAL_CONTRACTORS, limit=1).first()
if pro:
for review in pro.reviews(limit=3):
print(review.reviewer_name, review.rating, review.body[:80])
# Get full profile details
profile = pro.profile()
print(profile.display_name, profile.pro_type, profile.num_reviews)
# Search for design inspiration photos
for photo in houzz.photos.search(query="modern kitchen", limit=5):
print(photo.image_id, photo.width, photo.height)
# Typed error handling
try:
pro = houzz.professionals.search(location=Location.NEW_YORK_METRO_AREA, limit=1).first()
if pro:
print(pro.name, pro.city, pro.state)
except ProfessionalNotFound as exc:
print(f"Professional not found: {exc.url}")
print("exercised: professionals.search / pro.reviews / pro.profile / photos.search")
Search for home professionals (contractors, designers, plumbers, etc.) by category and location slug. Returns a paginated list of professionals with contact info, ratings, and profile URLs. Data is extracted from SSR page content. Pagination uses offset parameter.
| Param | Type | Description |
|---|---|---|
| offset | integer | Pagination offset (number of results to skip) |
| category | string | Professional category slug (e.g. 'plumbing-contractors', 'architects-and-building-designers', 'interior-designers', 'general-contractors', 'landscape-architects-and-landscape-designers') |
| location | string | Location slug from Houzz URL structure (e.g. 'toronto-on-ca-probr0-bo~t_11817~r_6167865', 'new-york-metro-area-probr0-bo~r_4702389') |
{
"type": "object",
"fields": {
"offset": "integer current offset",
"total_count": "integer total number of professionals or null",
"professionals": "array of professional objects with name, user_id, pro_id, rating, review_count, phone, address, city, state, url, is_sponsored"
},
"sample": {
"data": {
"offset": 0,
"total_count": null,
"professionals": [
{
"url": "https://www.houzz.com/professionals/plumbers/public-plumbing-pfvwus-pf~1040192656",
"city": "Toronto",
"name": "Public Plumbing",
"phone": "+1 (555) 012-3456",
"state": "ON",
"pro_id": 70800,
"rating": 50,
"address": "123 Main St #14A<br/>Toronto, ON M8V2E8",
"user_id": 1462976,
"is_sponsored": false,
"review_count": 171
}
]
},
"status": "success"
}
}About the Houzz API
Professional Directory Search
search_professionals accepts a category slug (e.g. plumbing-contractors, interior-design) and a location slug that mirrors Houzz's own URL structure. The response includes name, user_id, pro_id, rating, review_count, phone, address, city, state, url, and an is_sponsored flag per professional. Pagination is handled via the offset integer parameter, and the response includes total_count so you can calculate page depth.
Profile and Review Detail
get_professional_profile takes a full profile URL (typically sourced from search_professionals results) and returns extended fields: about_me, website, awards, pro_type, country, and service location data. To retrieve user-submitted feedback, get_professional_reviews requires both user_id and pro_id (returned by the search endpoint) and supports limit/offset pagination. Each review object includes body, rating, relationship, project_date, project_price, created, reviewer_name, and nested comments.
Design Inspiration Photos
search_ideas_photos queries Houzz's photo gallery by query string, room type (e.g. kitchen, bathroom), and/or style (e.g. farmhouse, contemporary). Results are photo metadata objects containing image_id, external_id, width, height, hires URL, and source_type. At least one of the three filter parameters should be supplied to return meaningful results. The endpoint also echoes back the constructed url used for the request.
The Houzz API is a managed, monitored endpoint for houzz.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when houzz.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official houzz.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a local contractor directory filtered by trade category and metro area using
search_professionals - Aggregate and display Houzz ratings and review text alongside listings from other platforms
- Pull
project_priceandproject_datefields from reviews to benchmark contractor cost ranges by city - Populate a design mood-board tool with curated photos filtered by room type and style
- Monitor
review_countandratingchanges over time for a set of tracked professionals - Extract
websiteandphonefields from professional profiles for lead-generation pipelines - Build a comparison page that shows
awardsandabout_medescriptions across competing designers in a market
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Houzz have an official public developer API?+
What does `get_professional_reviews` return beyond a star rating?+
body (full review text), rating, relationship (how the reviewer knows the pro), project_date, project_price, created timestamp, reviewer_name, and a comments array for any replies. Both user_id and pro_id are required inputs; these come from the search_professionals or get_professional_profile responses.Does `search_ideas_photos` return the actual image files or download URLs?+
image_id, external_id, width, height, hires (the high-resolution image URL), and source_type. The hires field gives you a direct URL to the image so you can fetch or display it.Does the API cover Houzz product listings or the Houzz Shop catalog?+
Are there any limitations on location filtering in `search_professionals`?+
location parameter follows Houzz's own URL slug format (e.g. toronto-on-ca-probr0-bo~t_11817~r_6167865), which encodes both a place name and internal region identifiers. Generic city names alone may not return results; you should use slugs extracted from Houzz URLs for a target area to ensure accurate filtering.