# Houzz Email Scraper (`leads-scraper/houzz-email-scraper`) Actor

Houzz Email Scraper SD - Houzz Email Scraper is a lead generation tool that extracts leads with public contact emails, account names and profile URLs from Houzz results by keyword, location and email domain - Houzz email extractor.

- **URL**: https://apify.com/leads-scraper/houzz-email-scraper.md
- **Developed by:** [Leads Scraper](https://apify.com/leads-scraper) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.49 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### Houzz Email Scraper

The Houzz Email Scraper extracts publicly indexed contact emails from Houzz using Google search across `houzz.com` and `houzz.co.uk`.
Houzz is the home design and remodelling platform where interior designers, architects, builders and contractors keep a professional presence.
This Actor turns keywords, an optional location and a list of email domains into a clean dataset of leads.

One thing to know before you run it: Houzz indexes photo and product pages far more than professional profiles, so most rows carry an email without a resolvable pro handle.
In practice that means a healthy email yield with `username: null` and an empty `profileUrl` on the majority of rows.
That is a property of Houzz's index, not a defect in the Houzz Email Scraper.

The Actor does not log in, does not use a Houzz API and never opens houzz.com.
Every record comes from publicly available Google search results: titles, snippets and site labels.
There is no browser, no JavaScript rendering, no authentication and no cookies.

In a measured live run, the Houzz Email Scraper returned 10 result blocks, 3 identity matches, 3 profile URLs and 9 unique emails.
Nine of ten blocks produced a usable address while only three resolved to a named professional.
Plan your workflow around the `email` and `description` fields rather than around `profileUrl`.

#### Who the Houzz Email Scraper is for

Houzz professionals are contractors, remodellers, kitchen fitters, landscape designers and interior architects.
The people who sell to them are the natural audience: tool and materials suppliers, trade distributors, insurance brokers and lead-generation software vendors.
Franchise recruiters and trade-credit providers use the same list from the other direction.

The default modifiers are `email`, `contact`, `enquiries`, `owner` and `get a quote`.
Those mirror the language a home-services pro uses when inviting a homeowner to make contact.
Change them and you change which part of the platform you reach.

### Key features of the Houzz Email Scraper

Everything below is behaviour the Houzz Email Scraper actually implements, shared with every Actor in this family.

| Feature | What it does |
|---|---|
| Multi-domain `site:` targeting | Queries both `houzz.com` and `houzz.co.uk`, so US and UK listings are both in scope |
| Query expansion | Base, quoted and `intitle:` variants plus one variant per query modifier |
| Trade-intent modifiers | Defaults of `email`, `contact`, `enquiries`, `owner` and `get a quote` |
| Domain filtering | Keeps only emails ending in the domains you list |
| Global deduplication | One row per unique email across every query and every page |
| Email normalisation | Understands `name [at] domain [dot] com`, `name (at) domain`, `name @ domain.com`, `domain .com`, zero-width characters and the full-width `＠` sign |
| Junk filter | Rejects `email@`, `yourname@`, `test@`, `xxx@` and single-character locals |
| Boundary-correct matching | `@gmail.com` does not match inside `@gmail.company` or `@gmail.com.br` |
| Soft-wrap repair | Drops a hit that is only the tail of another email in the same block |
| Structural block parsing | Locates the `<h3>` title and the smallest surrounding block instead of relying on CSS class names |
| Whole-page fallback parser | A Google markup change degrades to emails without account details, not to zero results |
| Concurrency | `asyncio` worker pool with a shared stop signal once `maxEmails` is reached |
| Retries and block detection | Three attempts per page with exponential backoff; CAPTCHA and consent pages are retried, not counted as empty |
| Re-queue pass | Blocked or failed queries are retried once at the end of the run |
| Resumable state | Key-value store state keyed by an input hash, saved on `PERSIST_STATE`, `MIGRATING` and `ABORTING` |
| Immediate dataset writes | Each lead is pushed as soon as it is found |
| Run summary | Logs pages fetched, blocked pages, retries and emails per page |

### How the Houzz Email Scraper works

The Houzz Email Scraper reads your input, builds Google queries, fetches result pages and parses each block structurally.
Emails are extracted from block text with a domain-filtered regex, normalised, junk-filtered and deduplicated globally.
Each surviving lead is pushed to the Apify dataset immediately, so a partial run is still usable.

A query looks like `site:houzz.com kitchen remodeler "@gmail.com" "Austin"`.
Pages are fetched through the Apify GOOGLE_SERP proxy over async HTTP with a fresh proxy session per request.
Structural parsing means a Google layout change degrades the run rather than breaking it.

#### Query expansion in the Houzz Email Scraper

Google caps a single query at roughly 300 results, and Houzz has an enormous indexed footprint.
Query expansion multiplies each keyword by each email domain and by several phrasings, with base queries running first.
Because so much of that footprint is photos and products, expansion is what gets you to the professional-facing pages.

#### Steering the Houzz Email Scraper away from photo and product pages

Trade nouns beat design nouns.
`kitchen remodeler`, `roofing contractor` and `landscape designer` reach professional text; `farmhouse sink` reaches a product page.
Adding an owner-style modifier such as `owner` or `get a quote` also pushes results toward pro pages rather than galleries.

#### Location is the strongest lever in the Houzz Email Scraper

`location` matters more on Houzz than on almost any other Actor in this category.
Home-services professionals serve a metro area and write that metro into their profile text, so a city phrase focuses the run sharply.
Run the same keyword set once per metro rather than one national sweep, and merge the datasets afterwards.

### Input reference for the Houzz Email Scraper

The Houzz Email Scraper takes nine inputs and only `keywords` is required.

| Field | Type | Default | Meaning |
|---|---|---|---|
| `keywords` | array (required) | `["interior designer", "contractor"]` | Search terms describing the professionals you want |
| `location` | string | `""` | Optional location phrase added to every query |
| `customDomains` | array | `["@gmail.com", "@yahoo.com"]` | Only emails on these domains are kept; `@` optional |
| `maxEmails` | integer 1-10000 | `20` | Stop after this many unique emails |
| `countryCode` | string | `""` | Two-letter country code for the search proxy (US, GB, DE) |
| `expandQueries` | boolean | `true` | Search each keyword x domain pair in several phrasings |
| `queryModifiers` | array | `["email", "contact", "enquiries", "owner", "get a quote"]` | Extra words combined with each keyword when expansion is on |
| `maxPagesPerQuery` | integer 1-50 | `30` | Page cap per query |
| `maxConcurrency` | integer 1-20 | `5` | Parallel queries |

#### Example input

```json
{
  "keywords": ["kitchen remodeler", "landscape designer", "custom cabinetry"],
  "location": "Austin",
  "customDomains": ["@gmail.com", "@yahoo.com", "@outlook.com"],
  "maxEmails": 300,
  "countryCode": "US",
  "expandQueries": true,
  "queryModifiers": ["email", "contact", "enquiries", "owner", "get a quote"],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

#### Tuning the Houzz Email Scraper

Trade plus metro is the winning combination.
`bathroom remodeler` with `location` set to `Denver` will beat `interior designer` with no location every time.
Three to eight trade keywords per metro is a sensible working range.

Independent trades run on free-mail addresses far more often than corporate ones.
Keep `@gmail.com`, `@yahoo.com`, `@outlook.com` and `@aol.com` in `customDomains` for US runs.
Add `@yahoo.co.uk` and `@hotmail.co.uk` when you target `houzz.co.uk`.

### Output reference for the Houzz Email Scraper

Every dataset item produced by the Houzz Email Scraper carries all fourteen fields below, handle or no handle.

| Field | Meaning |
|---|---|
| `network` | Platform name |
| `keyword` | The keyword that produced the lead |
| `query` | The exact Google query used |
| `title` | Raw result title |
| `accountName` | Account label Google prints |
| `fullName` | Display name parsed from a profile-style title; empty for photo and product pages |
| `username` | URL-safe handle when the platform exposes one; otherwise `null` |
| `profileUrl` | Canonical account URL when a handle is known; otherwise empty |
| `url` | Direct platform link when exposed, else the profile URL |
| `description` | Profile or listing snippet, cleaned of labels and counters |
| `email` | Lower-cased email address |
| `emailDomain` | The matched domain |
| `possiblyTruncated` | `true` when Google's snippet ellipsis touched the email |
| `foundAt` | ISO 8601 UTC timestamp |

#### Example output

The second row shows the common Houzz case: a real email from a photo or product page with no pro handle attached.

```json
[
  {
    "network": "Houzz",
    "keyword": "kitchen remodeler",
    "query": "site:houzz.com kitchen remodeler \"@gmail.com\" \"Austin\"",
    "title": "Hill Country Kitchen Co - Austin, TX - Houzz",
    "accountName": "Hill Country Kitchen Co",
    "fullName": "Hill Country Kitchen Co",
    "username": "hill-country-kitchen-co",
    "profileUrl": "https://www.houzz.com/professionals/hill-country-kitchen-co",
    "url": "https://www.houzz.com/professionals/hill-country-kitchen-co",
    "description": "Full kitchen remodels and custom cabinetry in Central Texas. Get a quote: hillcountrykitchen@gmail.com",
    "email": "hillcountrykitchen@gmail.com",
    "emailDomain": "@gmail.com",
    "possiblyTruncated": false,
    "foundAt": "2025-11-04T16:14:05Z"
  },
  {
    "network": "Houzz",
    "keyword": "landscape designer",
    "query": "site:houzz.com landscape designer enquiries \"@yahoo.com\" \"Austin\"",
    "title": "75 Beautiful Xeriscape Landscaping Pictures & Ideas - Houzz",
    "accountName": "Xeriscape Landscaping Ideas",
    "fullName": "",
    "username": null,
    "profileUrl": "",
    "url": "",
    "description": "Drought-tolerant front yard designs from Texas landscape pros. Enquiries: stonewaterlandscapes@yahoo.com",
    "email": "stonewaterlandscapes@yahoo.com",
    "emailDomain": "@yahoo.com",
    "possiblyTruncated": true,
    "foundAt": "2025-11-04T16:15:31Z"
  }
]
```

The Apify dataset view shows email, account, name, username, profile, keyword, snippet and the truncation flag.
Export as CSV, JSON or XLSX, or read the dataset through the Apify API.
Filter on rows where `profileUrl` is non-empty when you specifically need a linkable professional page.

### Use cases for the Houzz Email Scraper

The Houzz Email Scraper is built for suppliers and service providers selling into the home improvement trades.
Location is the lever that makes each of these work, so pick one metro per run.

| Use case | Suggested keywords | Suggested location |
|---|---|---|
| Selling tools and materials to remodellers | `kitchen remodeler`, `bathroom remodeler` | one metro per run |
| Trade distribution and dealer recruitment | `custom cabinetry`, `tile installer` | regional hub city |
| Contractor insurance and bonding | `general contractor`, `roofing contractor` | state capital or metro |
| Lead-generation software sales | `landscape designer`, `interior designer` | metro area |
| Franchise and territory recruitment | `home remodeling`, `closet designer` | target territory |
| Trade credit and equipment finance | `custom home builder`, `deck builder` | metro area |
| Market research on design trends | `interior designer`, `architect` | leave empty |

#### Selling into the trades with the Houzz Email Scraper

Suppliers get the most out of this Actor because Houzz professionals are exactly their customers.
Use trade nouns, one metro at a time, and keep the free-mail domains wide.
The `description` field usually states the trade and the service area, which is enough to segment a list quickly.

#### Pairing the Houzz Email Scraper with other home-services Actors

Houzz skews toward design-led remodelling work.
For general trades run the [Thumbtack Email Scraper](https://apify.com/leads-scraper/thumbtack-email-scraper) and the [Angi Email Scraper](https://apify.com/leads-scraper/angi-email-scraper) alongside it.
For UK trades the [Bark Email Scraper](https://apify.com/leads-scraper/bark-email-scraper) measured the strongest yield of any Actor in this category.

### Practical recipes for the Houzz Email Scraper

A US metro sweep might use `kitchen remodeler`, `bathroom remodeler` and `custom cabinetry` with `location` set to `Phoenix` and `countryCode` to `US`.
A UK sweep might use `interior designer`, `kitchen fitter` and `garden designer` with `countryCode` set to `GB`, which favours `houzz.co.uk` results.
Keep `expandQueries` on in both cases, because one query cannot reach past Google's result cap.

For breadth, drop `location`, keep `maxPagesPerQuery` at 30 and raise `maxEmails`.
For precision, name a single metro and use two or three trade keywords.
Both modes run identical code; only query volume differs.

### How many results the Houzz Email Scraper returns

A measured live run of the Houzz Email Scraper produced 10 blocks, 3 identity matches, 3 profile URLs and 9 unique emails.
The email harvest was strong; the identity resolution was not.
That is the direct consequence of the coverage note: Houzz indexes photo and product pages far more than professional profiles, so most rows carry an email without a resolvable pro handle.

Your own numbers will vary with trade, metro, domain list and how much of Houzz Google currently indexes.
Free Apify plans stop at 100 emails per run and paid plans are uncapped.
No specific volume is guaranteed by the Houzz Email Scraper or by any Actor in this family.

### Limitations of the Houzz Email Scraper

- Houzz indexes photo and product pages far more than professional profiles, so most rows carry an email without a resolvable pro handle. Expect `username: null` and an empty `profileUrl` on the majority of rows.
- The Houzz Email Scraper only finds professionals whose email is publicly visible in Google's index. A pro who relies on the Houzz messaging system will not appear.
- Google caps a single query at roughly 300 results. Query expansion exists to work around that cap, and disabling it reduces yield sharply.
- `possiblyTruncated: true` means Google's snippet ellipsis touched the email, so the address may be incomplete. Verify those rows before sending.
- `username` and `profileUrl` are populated only when Google exposes a handle. Photo and product pages do not, so the row keeps `accountName` and leaves the handle blank; that is a Google limitation, not a bug.
- The Houzz Email Scraper requires the Apify GOOGLE_SERP proxy and cannot run without Apify proxy credentials.
- Free Apify plans are capped at 100 emails per run; paid plans have no cap.
- Results vary with keywords, domains and location, and no volume is guaranteed.

The Houzz Email Scraper is not affiliated with, endorsed by or officially supported by Houzz.
It reads public search results only and does not access private or gated data.

### Responsible use, GDPR and CAN-SPAM

A publicly indexed address is not automatically a lawful one to email.
For UK recipients reached through `houzz.co.uk`, GDPR and the UK rules expect a lawful basis, a clear sender identity, a genuine business reason and an easy way to object.
For US recipients, CAN-SPAM expects accurate headers, a valid postal address and a working unsubscribe path.

Sole traders often deserve extra care, because a personal free-mail address can be personal data in practice as well as in law.
Keep the `query` and `foundAt` provenance, honour opt-outs immediately and suppress them in later runs of the Houzz Email Scraper.
This is general information about common obligations rather than legal advice, so check the rules that apply to you.

### FAQ about the Houzz Email Scraper

#### How many results should I expect?

A measured live run returned 10 blocks, 3 identity matches, 3 profile URLs and 9 unique emails. Houzz indexes photo and product pages far more than professional profiles, so most rows carry an email without a resolvable pro handle, and no volume is guaranteed.

#### Why does the Houzz Email Scraper leave `username` null on most rows?

Because the indexed page was a photo gallery or product listing rather than a professional profile. The Houzz Email Scraper then stores `null` and leaves `profileUrl` empty while keeping the email and snippet.

#### Are those rows still useful?

Yes. The address and the `description` are real. You simply cannot link the row back to one Houzz professional page.

#### How do I make the Houzz Email Scraper find more professional profiles?

Use trade nouns such as `roofing contractor` rather than design nouns such as `farmhouse sink`, and keep the `owner` and `get a quote` modifiers on.

#### Does the Houzz Email Scraper cover the UK?

Yes. It queries both `houzz.com` and `houzz.co.uk`, and setting `countryCode` to `GB` biases the search proxy toward UK results.

#### Does the Houzz Email Scraper log into Houzz?

No. It never logs in, never uses a Houzz API and never opens houzz.com. All data comes from publicly indexed Google results.

#### What does `possiblyTruncated` mean?

Google's snippet ellipsis touched the email, so the address may be cut short. Verify those rows before sending.

#### How important is the location field in the Houzz Email Scraper?

Very. Home-services professionals write their service area into their listings, so one run per metro will beat a single national run.

#### Does it need the Apify proxy?

Yes. The Houzz Email Scraper runs on the Apify GOOGLE_SERP proxy and cannot operate without Apify proxy credentials.

#### Can I run it on the free plan?

Yes, capped at 100 emails per run. Paid plans remove the cap.

#### Are the emails verified?

No. The Houzz Email Scraper extracts and normalises what Google shows. Run your own verification before any campaign.

#### Which home-services Actor yields the most?

In the same measured test, the [Bark Email Scraper](https://apify.com/leads-scraper/bark-email-scraper) returned a full-strength result, with the [Angi Email Scraper](https://apify.com/leads-scraper/angi-email-scraper) and [Porch Email Scraper](https://apify.com/neuro-scraper/porch-email-scraper) close behind.

### Related Actors

Thirty-six sibling Actors cover the rest of the Business and Professional Directories category that the Houzz Email Scraper belongs to.
They share the same input schema, output schema and behaviour, so anything you learn here transfers directly.
For general local trades try the [Yellow Pages Email Scraper](https://apify.com/leads-scraper/yellow-pages-email-scraper), and for B2B software buyers the [Capterra Email Scraper](https://apify.com/leads-scraper/capterra-email-scraper).

| Actor | What it collects |
|---|---|
| [Houzz Email and Phone Number Scraper](https://apify.com/neuro-scraper/houzz-email-and-phone-number-scraper) | Emails and phone numbers from Houzz |
| [Houzz Phone Number Scraper](https://apify.com/neuro-scraper/houzz-phone-number-scraper) | Public phone numbers from Houzz |
| [Angi Email Scraper](https://apify.com/leads-scraper/angi-email-scraper) | Public contact emails from Angi |
| [Bark Email Scraper](https://apify.com/leads-scraper/bark-email-scraper) | Public contact emails from Bark |
| [Better Business Bureau Email Scraper](https://apify.com/leads-scraper/better-business-bureau-email-scraper) | Public contact emails from Better Business Bureau |
| [Bizapedia Email Scraper](https://apify.com/neuro-scraper/bizapedia-email-scraper) | Public contact emails from Bizapedia |
| [Brownbook Email Scraper](https://apify.com/neuro-scraper/brownbook-email-scraper) | Public contact emails from Brownbook |
| [Callupcontact Email Scraper](https://apify.com/neuro-scraper/callupcontact-email-scraper) | Public contact emails from CallUpContact |
| [Capterra Email Scraper](https://apify.com/leads-scraper/capterra-email-scraper) | Public contact emails from Capterra |
| [Clutch Email Scraper](https://apify.com/leads-scraper/clutch-email-scraper) | Public contact emails from Clutch |
| [Crunchbase Email Scraper](https://apify.com/leads-scraper/crunchbase-email-scraper) | Public contact emails from Crunchbase |
| [Cybo Email Scraper](https://apify.com/neuro-scraper/cybo-email-scraper) | Public contact emails from Cybo |
| [Cylex Email Scraper](https://apify.com/neuro-scraper/cylex-email-scraper) | Public contact emails from Cylex |
| [EC21 Email Scraper](https://apify.com/neuro-scraper/ec21-email-scraper) | Public contact emails from EC21 |
| [Europages Email Scraper](https://apify.com/leads-scraper/europages-email-scraper) | Public contact emails from Europages |
| [ExportHub Email Scraper](https://apify.com/neuro-scraper/exporthub-email-scraper) | Public contact emails from ExportHub |
| [FindUsLocal Email Scraper](https://apify.com/neuro-scraper/finduslocal-email-scraper) | Public contact emails from FindUsLocal |
| [Foursquare Email Scraper](https://apify.com/neuro-scraper/foursquare-email-scraper) | Public contact emails from Foursquare |
| [Fyple Email Scraper](https://apify.com/neuro-scraper/fyple-email-scraper) | Public contact emails from Fyple |
| [G2 Email Scraper](https://apify.com/neuro-scraper/g2-email-scraper) | Public contact emails from G2 |
| [Hotfrog Email Scraper](https://apify.com/leads-scraper/hotfrog-email-scraper) | Public contact emails from Hotfrog |
| [Infobel Email Scraper](https://apify.com/neuro-scraper/infobel-email-scraper) | Public contact emails from Infobel |
| [Kompass Email Scraper](https://apify.com/leads-scraper/kompass-email-scraper) | Public contact emails from Kompass |
| [Lacartes Email Scraper](https://apify.com/neuro-scraper/lacartes-email-scraper) | Public contact emails from Lacartes |
| [Manta Email Scraper](https://apify.com/leads-scraper/manta-email-scraper) | Public contact emails from Manta |
| [MapQuest Email Scraper](https://apify.com/neuro-scraper/mapquest-email-scraper) | Public contact emails from MapQuest |
| [N49 Email Scraper](https://apify.com/neuro-scraper/n49-email-scraper) | Public contact emails from N49 |
| [Porch Email Scraper](https://apify.com/neuro-scraper/porch-email-scraper) | Public contact emails from Porch |
| [Scoot Email Scraper](https://apify.com/neuro-scraper/scoot-email-scraper) | Public contact emails from Scoot |
| [Thomasnet Email Scraper](https://apify.com/leads-scraper/thomasnet-email-scraper) | Public contact emails from Thomasnet |
| [Thumbtack Email Scraper](https://apify.com/leads-scraper/thumbtack-email-scraper) | Public contact emails from Thumbtack |
| [Touch Local Email Scraper](https://apify.com/leads-scraper/touch-local-email-scraper) | Public contact emails from Touch Local |
| [TradeIndia Email Scraper](https://apify.com/leads-scraper/tradeindia-email-scraper) | Public contact emails from TradeIndia |
| [Trustpilot Email Scraper](https://apify.com/leads-scraper/trustpilot-email-scraper) | Public contact emails from Trustpilot |
| [Tupalo Email Scraper](https://apify.com/leads-scraper/tupalo-email-scraper) | Public contact emails from Tupalo |
| [Yalwa Email Scraper](https://apify.com/leads-scraper/yalwa-email-scraper) | Public contact emails from Yalwa |
| [Yellow Pages Email Scraper](https://apify.com/leads-scraper/yellow-pages-email-scraper) | Public contact emails from Yellow Pages |
| [Angi Email and Phone Number Scraper](https://apify.com/neuro-scraper/angi-email-and-phone-number-scraper) | Emails and phone numbers from Angi |
| [Bark Email and Phone Number Scraper](https://apify.com/neuro-scraper/bark-email-and-phone-number-scraper) | Emails and phone numbers from Bark |
| [Better Business Bureau Email and Phone Number Scraper](https://apify.com/leads-scraper/better-business-bureau-email-and-phone-number-scraper) | Emails and phone numbers from Better Business Bureau |
| [Bizapedia Email and Phone Number Scraper](https://apify.com/neuro-scraper/bizapedia-email-and-phone-number-scraper) | Emails and phone numbers from Bizapedia |
| [Brownbook Email and Phone Number Scraper](https://apify.com/neuro-scraper/brownbook-email-and-phone-number-scraper) | Emails and phone numbers from Brownbook |

### Leave a review

If the Houzz Email Scraper saved you time, please leave a star rating and a short review on the
Actor page.

Reviews are how other buyers judge whether a tool works, and they tell us which features to
build next.

If something did not work, email <neurodata.apify@gmail.com>
instead - bugs get fixed faster than they get complained about.

### Support

Questions, bug reports or a custom build request for the Houzz Email Scraper: contact neurodata.apify@gmail.com.

# Actor input Schema

## `keywords` (type: `array`):

Search terms describing the Houzz accounts you want (niche, job title, industry).

## `location` (type: `string`):

Optional location phrase added to every query (e.g. "New York").

## `customDomains` (type: `array`):

Only emails ending with one of these domains are collected. With or without the leading @. Each domain is searched separately, so more domains means more results but a longer run - remove some for a faster, narrower search, or add your own (e.g. @company.com).

## `maxEmails` (type: `integer`):

Stop once this many unique emails have been collected.

## `countryCode` (type: `string`):

Two-letter country code for the search proxy (e.g. US, GB, DE). Empty for any.

## `expandQueries` (type: `boolean`):

Search each keyword x domain pair with several phrasings. Recommended - Google caps a single query at ~300 results.

## `queryModifiers` (type: `array`):

Extra words combined with each keyword when Expand queries is on. Tuned for Houzz.

## `maxPagesPerQuery` (type: `integer`):

Google rarely returns more than ~30 pages for one query.

## `maxConcurrency` (type: `integer`):

How many queries run in parallel.

## Actor input object example

```json
{
  "keywords": [
    "interior designer",
    "contractor"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "maxEmails": 20,
  "countryCode": "",
  "expandQueries": true,
  "queryModifiers": [
    "email",
    "contact",
    "enquiries",
    "owner",
    "get a quote"
  ],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

# Actor output Schema

## `results` (type: `string`):

Records produced by Houzz Email Scraper, stored in the run's default dataset.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "keywords": [
        "interior designer",
        "contractor"
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com"
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contact",
        "enquiries",
        "owner",
        "get a quote"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("leads-scraper/houzz-email-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "keywords": [
        "interior designer",
        "contractor",
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com",
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contact",
        "enquiries",
        "owner",
        "get a quote",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("leads-scraper/houzz-email-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "keywords": [
    "interior designer",
    "contractor"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "countryCode": "",
  "queryModifiers": [
    "email",
    "contact",
    "enquiries",
    "owner",
    "get a quote"
  ]
}' |
apify call leads-scraper/houzz-email-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,leads-scraper/houzz-email-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/ETFTAmCkmbwXFMHRr/builds/lWcgqueJ21HNYzYAx/openapi.json
