{
  "openapi": "3.0.1",
  "info": {
    "title": "Houzz Scraper — Contractor Leads & Emails",
    "description": "Collect Houzz professionals and businesses by category and city: contractors, designers, architects and more. Get names, phones, emails, websites, addresses, ratings, reviews, services and social profiles as structured JSON streamed to your dataset in real time. Free accounts get a small sample.",
    "version": "0.0",
    "x-build-id": "NDbOg8UoQZkwYNKSb"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/b2b_leads~Houzz-Real-Time-Scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-b2b_leads-Houzz-Real-Time-Scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/b2b_leads~Houzz-Real-Time-Scraper/runs": {
      "post": {
        "operationId": "runs-sync-b2b_leads-Houzz-Real-Time-Scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/b2b_leads~Houzz-Real-Time-Scraper/run-sync": {
      "post": {
        "operationId": "run-sync-b2b_leads-Houzz-Real-Time-Scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "enableSearch": {
            "title": "Search",
            "type": "boolean",
            "description": "Search the Houzz professional directory by category and location. Enabled by default. Free Apify accounts are limited to a small sample per run — upgrade to a paid plan for full, unlimited data.",
            "default": true
          },
          "searchTasks": {
            "title": "Search tasks",
            "type": "array",
            "description": "Add one row per search. Pair a category with a city or area.",
            "items": {
              "type": "object",
              "properties": {
                "query": {
                  "title": "Category",
                  "type": "string",
                  "description": "Professional category to search (e.g. \"general-contractor\", \"interior-designer\", \"architect\", \"kitchen-and-bath-remodeler\", \"landscape-contractor\", \"roofing-contractor\").",
                  "editor": "textfield"
                },
                "location": {
                  "title": "Location",
                  "type": "string",
                  "description": "City or area for this category (e.g. \"Austin, TX\", \"New York, NY\"). Keep the \"City, ST\" format for best precision. Leave empty for a nationwide search.",
                  "editor": "textfield"
                },
                "maxResults": {
                  "title": "Max professionals",
                  "type": "integer",
                  "description": "Maximum professionals for this task. Uses the default below when omitted.",
                  "minimum": 1,
                  "editor": "number"
                }
              },
              "required": [
                "query"
              ]
            }
          },
          "maxResultsPerTask": {
            "title": "Default max professionals per task",
            "minimum": 1,
            "type": "integer",
            "description": "Default maximum professionals per search task. A row's own Max professionals value overrides it. Raise this to collect more per task.",
            "default": 10
          },
          "maxResultSetsPerTask": {
            "title": "Max result batches per task",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Depth limit for each search task. Each batch holds up to 15 professionals, so 8 batches is roughly 120 per task. Raise it only for very large jobs — a run stops as soon as Max total items is reached.",
            "default": 8
          },
          "enableLeadDetails": {
            "title": "Enable lead details",
            "type": "boolean",
            "description": "Collect extra lead details for every professional: the contact information on their full profile record plus public contact addresses listed on their own website. Adds a little extra time per professional. Professionals with no findable details are still exported — you always get the complete list, never a filtered one.",
            "default": true
          },
          "leadDetailsSiteLookups": {
            "title": "Extra website lookups per professional",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "How many extra contact sections to check on each professional's own website while looking for an email address (contact, about, team, quote). More lookups mean more chances to find an address and a slightly longer run. Set to 1 for the fastest runs.",
            "default": 3
          },
          "enableProfileDetails": {
            "title": "Professional Details",
            "type": "boolean",
            "description": "Collect full structured records for specific Houzz links you already have — a professional profile link, or a directory listing link (which expands into every professional it holds).",
            "default": false
          },
          "profileUrls": {
            "title": "Houzz links",
            "type": "array",
            "description": "Professional profile links or directory listing links. One per entry.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "enableReviews": {
            "title": "Reviews",
            "type": "boolean",
            "description": "Export the reviews that are published on the professional's own record (featured review and most recent review) as separate rows tagged featureType = reviews.",
            "default": false
          },
          "reviewProfileUrls": {
            "title": "Review links",
            "type": "array",
            "description": "Professional profile links to read published reviews from. Falls back to the Houzz links above when left empty.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max total items",
            "minimum": 1,
            "type": "integer",
            "description": "Global cap on total rows for the whole run, across all tasks and features. Raise it for large jobs (e.g. 1000 or 10000). Free Apify accounts are capped to a small sample per run regardless of this value.",
            "default": 10
          },
          "webhookUrl": {
            "title": "Webhook URL",
            "type": "string",
            "description": "Optional. Every record is always saved to the run's dataset — this webhook is an ADDITIONAL real-time push. When set, each new record is also POSTed to this URL (CRM, Slack incoming webhook, Zapier, Make, Google Sheets).",
            "default": ""
          },
          "webhookFormat": {
            "title": "Webhook format",
            "enum": [
              "json",
              "slack"
            ],
            "type": "string",
            "description": "json = the full record object; slack = a Slack-friendly message payload.",
            "default": "json"
          },
          "proxyConfiguration": {
            "title": "Proxy settings",
            "type": "object",
            "description": "A US residential connection is enabled by default for reliable collection.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "US"
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}