# Homes.com Email Scraper (`leads-scraper/homes-com-email-scraper`) Actor

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

- **URL**: https://apify.com/leads-scraper/homes-com-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

### Homes.com Email Scraper: high email volume across US metros

The Homes.com Email Scraper collects agent contact emails that are publicly visible in Google's index alongside Homes.com pages.
The Homes.com Email Scraper is a volume tool. In a measured run, roughly ten parsed result blocks produced about nine unique emails, which is among the highest email density in this category.
If your goal is a large US real estate agent email list quickly, the Homes.com Email Scraper is one of the best starting points available here.

The trade-off is identity. Homes.com indexes property listings more than agent profiles, so most rows carry an agent email without a resolvable profile URL.
In that same measured run only about three of ten parsed blocks carried identity data, and about three resolved to a canonical agent profile URL.
So the Homes.com Email Scraper gives you many addresses and comparatively few names, which is a fine trade for domain-level or role-based outreach.

Homes.com is a national US consumer portal where agents publish inventory across effectively every metro.
They put a contact address on those pages because buyers, sellers and cooperating agents need a way to reach them.
The Homes.com Email Scraper reads only what Google already indexed from those public pages, which is why a Homes.com email extractor works at all.

#### Who the Homes.com Email Scraper is for

Proptech and SaaS vendors run the Homes.com Email Scraper to sell CRM, IDX websites, virtual staging, floor plans and transaction management into US brokerages.
Mortgage loan officers, title and escrow partners, and closing services use it when they want reach across a whole metro.
Listing photographers, videographers, drone operators, recruiters and franchise development teams use the Homes.com Email Scraper to build a broad top-of-funnel list.

#### What the Homes.com Email Scraper never does

The Homes.com Email Scraper never logs into Homes.com, never uses a Homes.com API and never opens the website.
There is no browser, no JavaScript rendering, no authentication and no cookies in the pipeline.
Every field comes from publicly indexed Google search results: titles, snippets and site labels.

### Key features of the Homes.com Email Scraper

| Feature | What it does for a US realtor email list |
|---|---|
| Google `site:` targeting | Every query is scoped to `homes.com` so nothing off-platform leaks in |
| Query expansion | Base, quoted and `intitle:` phrasings plus one variant per query modifier |
| Structural parsing | Locates the `<h3>` title then the smallest surrounding block, never Google CSS class names |
| Domain-filtered extraction | Only addresses ending in your `customDomains` are kept |
| Global deduplication | One row per unique email across every query and every page, which matters at this volume |
| Email normalisation | Handles `name [at] domain [dot] com`, `name (at) domain`, `name @ domain.com`, `domain .com`, zero-width characters and the full-width at sign |
| Junk filter | Rejects placeholders such as `email@`, `yourname@`, `test@`, `xxx@` and single-character locals |
| Boundary-correct matching | `@gmail.com` never matches inside `@gmail.company` or `@gmail.com.br` |
| Soft-wrap repair | Drops a hit that is only the tail of another address in the same block |
| Concurrency pool | An `asyncio` worker pool with a shared stop signal on `maxEmails` |
| Retries and block detection | Up to 3 attempts per page, exponential backoff, a fresh proxy session per request, and CAPTCHA or consent pages retried rather than counted as empty |
| Requeue of failures | Blocked or failed queries are retried once at the end of the run |
| Resumable state | Stored in the key-value store keyed by a hash of your input, saved on `PERSIST_STATE`, `MIGRATING` and `ABORTING` |
| Fallback parser | A Google layout change degrades the run to emails without account details, not to nothing |
| Run summary | Logs pages fetched, blocked pages, retries and emails per page |

At nine emails per ten parsed blocks, global deduplication is the feature that keeps a Homes.com Email Scraper dataset usable.
A busy agent's address can appear on dozens of listing pages, and deduplication collapses that into one row before it reaches your CRM.

### How the Homes.com Email Scraper works

1. The Homes.com Email Scraper reads your input: keywords, location, email domains and limits.
2. It builds Google queries with the `site:` operator, for example `site:homes.com "real estate agent" "@gmail.com" "Charlotte"`.
3. It fetches result pages through the Apify GOOGLE_SERP proxy with async `aiohttp` requests.
4. It parses each result block structurally instead of by CSS class.
5. It extracts addresses from the block text with a domain-filtered regex.
6. It deduplicates globally and pushes each lead to the dataset immediately.

Base queries run before expanded variants, so the highest-signal Homes.com results land first.
Because the Homes.com Email Scraper writes rows as it finds them, a low `maxEmails` cap still returns the best of what it reached.

### Input reference for the Homes.com Email Scraper

| Field | Type | Default | Meaning |
|---|---|---|---|
| `keywords` | array (required) | `["real estate agent", "realtor"]` | Search terms describing the accounts you want |
| `location` | string | `""` | Optional location phrase added to every query |
| `customDomains` | array | `["@gmail.com","@yahoo.com"]` | Only emails on these domains are kept; the `@` is optional |
| `maxEmails` | integer 1-10000 | `20` | Stop after this many unique emails |
| `countryCode` | string | `""` | Two-letter country for the search proxy (US, GB, DE...) |
| `expandQueries` | boolean | `true` | Search each keyword x domain pair in several phrasings |
| `queryModifiers` | array | `["email","contact","listing agent","inquiries","broker"]` | 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 |

#### `location` is the highest-value input

US agents farm neighborhoods and ZIP codes, so `location` is the single most valuable control in the Homes.com Email Scraper.
Run one job per metro first: `Charlotte`, `Austin`, `Phoenix`, `Tampa`, `Denver`, `Nashville`, `Columbus`, `Las Vegas`, `Raleigh`.
Then farm the neighborhood, where listing density concentrates: `Buckhead Atlanta`, `Wicker Park Chicago`, `Rittenhouse Square`, `South Tampa`, `Highland Park Dallas`, `Ballard Seattle`.

Write the phrase the way a listing page prints it.
`South Tampa` beats `South Tampa, Florida, United States`, and a neighborhood name usually beats a ZIP code, though a ZIP is worth a second run in dense metros.
Because email density is high, a single broad metro can exhaust your `maxEmails` budget quickly, so split large markets into several Homes.com Email Scraper jobs.

#### `countryCode` guidance

Set `countryCode` to `US` for this Actor. Homes.com is a US platform, and US routing keeps ambiguous city names such as `Columbus`, `Springfield` or `Portland` on the right pages.
Leaving it empty is workable but wastes part of the page budget.

#### Example input

```json
{
  "keywords": ["real estate agent", "realtor", "listing agent"],
  "location": "Charlotte",
  "customDomains": ["@gmail.com", "@yahoo.com", "@outlook.com", "@aol.com"],
  "maxEmails": 500,
  "countryCode": "US",
  "expandQueries": true,
  "queryModifiers": ["email", "contact", "listing agent", "inquiries", "broker"],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

### Output reference for the Homes.com Email Scraper

Every dataset item written by the Homes.com Email Scraper carries all fourteen fields.

| 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 listing captions |
| `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` | Bio or caption 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

```json
[
  {
    "network": "Homes.com",
    "keyword": "real estate agent",
    "query": "site:homes.com \"real estate agent\" \"@gmail.com\" \"Charlotte\"",
    "title": "Homes for Sale in Dilworth, Charlotte, NC - Homes.com",
    "accountName": "Homes.com",
    "fullName": "",
    "username": null,
    "profileUrl": "",
    "url": "https://www.homes.com/charlotte-nc/dilworth-neighborhood/",
    "description": "Showing requests to the listing agent at t.callahan.realty@gmail.com.",
    "email": "t.callahan.realty@gmail.com",
    "emailDomain": "@gmail.com",
    "possiblyTruncated": false,
    "foundAt": "2026-08-31T14:02:11Z"
  },
  {
    "network": "Homes.com",
    "keyword": "realtor",
    "query": "site:homes.com realtor contact \"@yahoo.com\" \"Charlotte\"",
    "title": "Renata Alvarez, Real Estate Agent in Charlotte, NC - Homes.com",
    "accountName": "renata-alvarez",
    "fullName": "Renata Alvarez",
    "username": "renata-alvarez",
    "profileUrl": "https://www.homes.com/real-estate-agents/renata-alvarez/",
    "url": "https://www.homes.com/real-estate-agents/renata-alvarez/",
    "description": "Residential sales in Charlotte and Matthews. Buyer consultations at renata.alvarez.re@yahoo.com.",
    "email": "renata.alvarez.re@yahoo.com",
    "emailDomain": "@yahoo.com",
    "possiblyTruncated": true,
    "foundAt": "2026-08-31T14:03:47Z"
  }
]
```

The first row is the dominant shape here: a real address pulled from a listing page with `username: null` and an empty `profileUrl`.
The second is the agent-profile case, which the Homes.com Email Scraper resolves on roughly three of ten parsed blocks.
Note the `possiblyTruncated: true` flag on the second row, which tells you to verify that address before it enters a sequence.

### Use cases for the Homes.com Email Scraper

| Use case | How the Homes.com Email Scraper fits |
|---|---|
| Top-of-funnel US list building | The highest email density of the US portal Actors in this category |
| Proptech and SaaS launches | Cover a whole metro before a regional product rollout |
| Mortgage, title and escrow | Reach listing agents in the counties where you close |
| Listing media services | Target neighborhoods with heavy active inventory |
| Recruiting | Volume sourcing of licensed agents by metro |
| CRM enrichment | Match `email` against an existing agent contact database and fill gaps |
| Deliverability testing | Segment by `emailDomain` to compare consumer domain performance |

#### Example run recipes

Three Homes.com Email Scraper configurations that work well in practice.

Carolinas sweep: keywords `["real estate agent", "realtor"]`, location `Charlotte`, `countryCode` `US`, `maxEmails` 500.
Sunbelt neighborhood farm: keywords `["listing agent", "realtor"]`, location `South Tampa`, domains `["@gmail.com", "@yahoo.com", "@outlook.com"]`.
Multi-metro build: run the Homes.com Email Scraper separately across five metros, then merge and deduplicate on `email` before import.

### Results you should realistically expect

In a measured run the Homes.com Email Scraper returned about nine unique emails per ten parsed result blocks, with identity data and resolved profile URLs on about three.
Read that as high email volume, low handle coverage, and design your workflow so nothing depends on `profileUrl` being populated.
No volume is guaranteed, and totals shift with keywords, domains, location and what Google has indexed.

If you need names and profile links as reliably as addresses, the franchise Actors are stronger.
[Keller Williams Agent Email Scraper](https://apify.com/neuro-scraper/keller-williams-agent-email-scraper) and [Coldwell Banker Agent Email Scraper](https://apify.com/neuro-scraper/coldwell-banker-agent-email-scraper) publish real agent profile pages and resolve identity on nearly every parsed block.
[Century 21 Agent Email Scraper](https://apify.com/neuro-scraper/century-21-agent-email-scraper) has a similar high-email, low-handle shape to this one and pairs with it well.

### Responsible use

US agents publish these addresses so clients and cooperating agents can reach them, so make Homes.com Email Scraper outreach a relevant business offer rather than a blast.
CAN-SPAM governs commercial email to US recipients, including accurate headers, a physical address and a working opt-out that you honor promptly.
CASL applies to Canadian recipients, the Spam Act to Australian ones, and GDPR with PECR to EU and UK ones; phone and SMS follow-up bring TCPA-adjacent rules into scope.

Fair Housing law is central to US real estate outreach.
Do not use the `location` input in the Homes.com Email Scraper to include or exclude people on the basis of protected characteristics, and keep your messaging neutral.
This is not legal advice; confirm your own obligations before you send.

### Limitations of the Homes.com Email Scraper

- Homes.com indexes property listings more than agent profiles, so most rows carry an agent email without a resolvable profile URL. This is the governing limitation.
- The Homes.com Email Scraper only finds addresses that are publicly visible in Google's index.
- Google caps a single query at roughly 300 results, which is why query expansion exists; keep `expandQueries` on.
- `possiblyTruncated: true` means Google's snippet ellipsis touched the address, so verify those rows before sending.
- `username` and `profileUrl` populate only when Google exposes a handle; empty values are a Google limitation, not a bug.
- The Homes.com 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 are uncapped.
- Results vary with keywords, domains and location, and no volume is guaranteed.

### FAQ about the Homes.com Email Scraper

#### How many results should I expect?

In a measured run the Homes.com Email Scraper returned about nine unique emails per ten parsed result blocks, with identity data on about three.
Actual totals depend on your keyword breadth, domain list and location, so widen all three if a run finishes short.

#### Why is `profileUrl` empty on most rows?

Because Homes.com indexes property listings more than agent profiles, Google frequently prints no agent handle for the Actor to build a link from.
The address is still real and usable; only the profile link is missing.

#### Does the Homes.com Email Scraper log into Homes.com?

No. It reads publicly indexed Google results only, with no login, no API and no site visits.

#### What should I put in `location`?

A metro or neighborhood as a listing page prints it: `Charlotte`, `South Tampa`, `Buckhead Atlanta`, `Ballard Seattle`.
Split dense metros into several jobs so one market does not consume the whole `maxEmails` budget.

#### Should I set `countryCode`?

Yes, use `US`. It keeps ambiguous city names such as `Columbus` or `Portland` pointed at US pages.

#### Which email domains should I use?

Start with `@gmail.com` and `@yahoo.com`, then add `@outlook.com`, `@hotmail.com`, `@aol.com` and `@icloud.com`.
Brokerage domains work when you already know the office you are targeting.

#### How do I get more emails from one Homes.com Email Scraper run?

Raise `maxEmails`, keep `expandQueries` on, add keywords such as `listing agent`, `broker` and `buyer agent`, and widen the domain list.
Several neighborhood runs usually outperform one statewide run.

#### Is `maxConcurrency` safe to raise?

It controls how many queries the Homes.com Email Scraper runs in parallel, up to 20. Higher values finish sooner and use proxy capacity faster; 5 is a sensible default.

#### What does `possiblyTruncated` mean?

Google's snippet ellipsis touched the address, so it may be incomplete. Verify those rows before adding them to a sequence.

#### Can I resume an interrupted Homes.com Email Scraper run?

Yes. State lives in the key-value store keyed by a hash of your input and is saved on `PERSIST_STATE`, `MIGRATING` and `ABORTING`.
If Google changes its markup mid-run, a whole-page fallback parser keeps the Homes.com Email Scraper returning emails without account details rather than nothing.

#### How do I export the data?

Download the Homes.com Email Scraper dataset as CSV, JSON or Excel from the Apify console, or pull it through the Apify API into your CRM.

#### Is this affiliated with Homes.com?

No. The Homes.com Email Scraper is an independent Actor and is not affiliated with, supported by or endorsed by Homes.com.

### Related Actors

| Actor | What it collects |
|---|---|
| [Homes.com Email and Phone Number Scraper](https://apify.com/leads-scraper/homes-com-email-and-phone-number-scraper) | Emails and phone numbers from Homes.com |
| [Homes.com Phone Number Scraper](https://apify.com/leads-scraper/homes-com-phone-number-scraper) | Public phone numbers from Homes.com |
| [Apartment List Email Scraper](https://apify.com/leads-scraper/apartment-list-email-scraper) | Public contact emails from Apartment List |
| [ApartmentFinder Email Scraper](https://apify.com/leads-scraper/apartmentfinder-email-scraper) | Public contact emails from ApartmentFinder |
| [Apartments.com Email Scraper](https://apify.com/leads-scraper/apartments-com-email-scraper) | Public contact emails from Apartments.com |
| [Century 21 Agent Email Scraper](https://apify.com/neuro-scraper/century-21-agent-email-scraper) | Public contact emails from Century 21 |
| [Coldwell Banker Agent Email Scraper](https://apify.com/neuro-scraper/coldwell-banker-agent-email-scraper) | Public contact emails from Coldwell Banker |
| [CommercialCafe Email Scraper](https://apify.com/neuro-scraper/commercialcafe-email-scraper) | Public contact emails from CommercialCafe |
| [CommercialSearch Email Scraper](https://apify.com/neuro-scraper/commercialsearch-email-scraper) | Public contact emails from CommercialSearch |
| [Compass Agent Email Scraper](https://apify.com/neuro-scraper/compass-agent-email-scraper) | Public contact emails from Compass |
| [Crexi Email Scraper](https://apify.com/leads-scraper/crexi-email-scraper) | Public contact emails from Crexi |
| [Domain Agents Email Scraper](https://apify.com/leads-scraper/domain-agents-email-scraper) | Public contact emails from Domain |
| [Homes & Land Email Scraper](https://apify.com/neuro-scraper/homes-and-land-email-scraper) | Public contact emails from Homes & Land |
| [HotPads Email Scraper](https://apify.com/leads-scraper/hotpads-email-scraper) | Public contact emails from HotPads |
| [Keller Williams Agent Email Scraper](https://apify.com/neuro-scraper/keller-williams-agent-email-scraper) | Public contact emails from Keller Williams |
| [Land And Farm Email Scraper](https://apify.com/leads-scraper/land-and-farm-email-scraper) | Public contact emails from Land And Farm |
| [Land.com Email Scraper](https://apify.com/leads-scraper/land-com-email-scraper) | Public contact emails from Land.com |
| [LandWatch Email Scraper](https://apify.com/leads-scraper/landwatch-email-scraper) | Public contact emails from LandWatch |
| [LoopNet Email Scraper](https://apify.com/leads-scraper/loopnet-email-scraper) | Public contact emails from LoopNet |
| [OnTheMarket Email Scraper](https://apify.com/leads-scraper/onthemarket-email-scraper) | Public contact emails from OnTheMarket |
| [RealEstate.com.au Agents Email Scraper](https://apify.com/neuro-scraper/realestate-com-au-agents-email-scraper) | Public contact emails from realestate.com.au |
| [Realtor.ca Email Scraper](https://apify.com/leads-scraper/realtor-ca-email-scraper) | Public contact emails from Realtor.ca |
| [Realtor.com Rentals Email Scraper](https://apify.com/leads-scraper/realtor-com-rentals-email-scraper) | Public contact emails from Realtor.com |
| [Redfin Rentals Email Scraper](https://apify.com/leads-scraper/redfin-rentals-email-scraper) | Public contact emails from Redfin |
| [RE/MAX Agent Email Scraper](https://apify.com/leads-scraper/remax-agent-email-scraper) | Public contact emails from RE/MAX |
| [Rent.com Email Scraper](https://apify.com/leads-scraper/rent-com-email-scraper) | Public contact emails from Rent.com |
| [RentCafe Email Scraper](https://apify.com/leads-scraper/rentcafe-email-scraper) | Public contact emails from RentCafe |
| [Zillow Rentals Email Scraper](https://apify.com/leads-scraper/zillow-rentals-email-scraper) | Public contact emails from Zillow |
| [Zumper Email Scraper](https://apify.com/leads-scraper/zumper-email-scraper) | Public contact emails from Zumper |
| [Apartment List Email and Phone Number Scraper](https://apify.com/neuro-scraper/apartment-list-email-and-phone-number-scraper) | Emails and phone numbers from Apartment List |
| [ApartmentFinder Email and Phone Number Scraper](https://apify.com/neuro-scraper/apartmentfinder-email-and-phone-number-scraper) | Emails and phone numbers from ApartmentFinder |
| [Apartments.com Email and Phone Number Scraper](https://apify.com/neuro-scraper/apartments-com-email-and-phone-number-scraper) | Emails and phone numbers from Apartments.com |
| [Century 21 Email and Phone Number Scraper](https://apify.com/neuro-scraper/century-21-agent-email-and-phone-number-scraper) | Emails and phone numbers from Century 21 |
| [Coldwell Banker Email and Phone Number Scraper](https://apify.com/neuro-scraper/coldwell-banker-agent-email-and-phone-number-scraper) | Emails and phone numbers from Coldwell Banker |
| [CommercialCafe Email and Phone Number Scraper](https://apify.com/neuro-scraper/commercialcafe-email-and-phone-number-scraper) | Emails and phone numbers from CommercialCafe |
| [CommercialSearch Email and Phone Number Scraper](https://apify.com/neuro-scraper/commercialsearch-email-and-phone-number-scraper) | Emails and phone numbers from CommercialSearch |
| [Compass Email and Phone Number Scraper](https://apify.com/neuro-scraper/compass-agent-email-and-phone-number-scraper) | Emails and phone numbers from Compass |
| [Crexi Email and Phone Number Scraper](https://apify.com/leads-scraper/crexi-email-and-phone-number-scraper) | Emails and phone numbers from Crexi |
| [Domain Email and Phone Number Scraper](https://apify.com/leads-scraper/domain-agents-email-and-phone-number-scraper) | Emails and phone numbers from Domain |
| [Homes & Land Email and Phone Number Scraper](https://apify.com/neuro-scraper/homes-and-land-email-and-phone-number-scraper) | Emails and phone numbers from Homes & Land |
| [Keller Williams Email and Phone Number Scraper](https://apify.com/neuro-scraper/keller-williams-agent-email-and-phone-number-scraper) | Emails and phone numbers from Keller Williams |
| [Land And Farm Email and Phone Number Scraper](https://apify.com/neuro-scraper/land-and-farm-email-and-phone-number-scraper) | Emails and phone numbers from Land And Farm |

### Leave a review

If the Homes.com 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, a bug report or a custom build? Email neurodata.apify@gmail.com and we will help.

# Actor input Schema

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

Search terms describing the Homes.com 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 Homes.com.

## `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": [
    "real estate agent",
    "realtor"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "maxEmails": 20,
  "countryCode": "",
  "expandQueries": true,
  "queryModifiers": [
    "email",
    "contact",
    "listing agent",
    "inquiries",
    "broker"
  ],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

# Actor output Schema

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

Records produced by Homes.com 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": [
        "real estate agent",
        "realtor"
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com"
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contact",
        "listing agent",
        "inquiries",
        "broker"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("leads-scraper/homes-com-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": [
        "real estate agent",
        "realtor",
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com",
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contact",
        "listing agent",
        "inquiries",
        "broker",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("leads-scraper/homes-com-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": [
    "real estate agent",
    "realtor"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "countryCode": "",
  "queryModifiers": [
    "email",
    "contact",
    "listing agent",
    "inquiries",
    "broker"
  ]
}' |
apify call leads-scraper/homes-com-email-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,leads-scraper/homes-com-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/5BNqaSFLXYGhU4ASn/builds/hIbZ7yQia8uK3KI2q/openapi.json
