# Domain Agents Email Scraper (`leads-scraper/domain-agents-email-scraper`) Actor

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

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

### Domain Agents Email Scraper: agency-level contacts from Australia's second national portal

The Domain Agents Email Scraper collects contact emails that are publicly visible in Google's index alongside Domain pages.
The Domain Agents Email Scraper is aimed at the agency layer rather than the individual salesperson, which is what separates it from every other Australian Actor in this category.
Domain's canonical handle format is an agency path, so when the Domain Agents Email Scraper resolves a handle you get an office, not a person.

Set expectations before you run it. Domain indexes listing and suburb pages more than agency profiles, so most rows carry an agency email without a resolvable handle.
In a measured run of the Domain Agents Email Scraper, roughly ten parsed result blocks produced about five unique emails, with two carrying identity data and two resolving to a profile URL.
That is a middling, workable yield: enough to build a real list, not enough to treat handle coverage as reliable.

Domain is where a large share of Sydney and Melbourne inventory is published, alongside suburb guides and agency directory pages.
Agencies put an address on those pages because vendors, buyers and renters must be able to reach the office.
The Domain Agents Email Scraper reads only what Google already indexed from those public pages, which is why a Domain email extractor works at all.

#### Who the Domain Agents Email Scraper is for

Vendors selling at the office level run the Domain Agents Email Scraper for agency CRM, rent-roll and trust accounting software, IDX-style websites and transaction management.
Mortgage brokers, conveyancers and settlement partners use it when they want a principal or office manager rather than a single agent.
Recruiters, franchise development teams, listing photographers and videographers use the Domain Agents Email Scraper to pitch an entire agency at once.

#### What the Domain Agents Email Scraper never does

The Domain Agents Email Scraper never logs into Domain, never uses a Domain API and never opens the domain.com.au 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 Domain Agents Email Scraper

| Feature | What it does for an Australian agency contact database |
|---|---|
| Google `site:` targeting | Every query is scoped to `domain.com.au` 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 |
| 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 |

Because handle coverage is partial, deduplication is the feature that carries the most weight in a Domain Agents Email Scraper run.
An agency address often appears across many suburb and listing pages, and the Domain Agents Email Scraper collapses all of that into a single clean row.

### How the Domain Agents Email Scraper works

1. The Domain Agents Email Scraper reads your input: keywords, location, email domains and limits.
2. It builds Google queries with the `site:` operator, for example `site:domain.com.au "agency" "@gmail.com" "Parramatta"`.
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 strongest Domain results arrive first in the dataset.
The Domain Agents Email Scraper writes rows as it finds them, so an aborted run still leaves you everything collected up to that point.

### Input reference for the Domain Agents Email Scraper

| Field | Type | Default | Meaning |
|---|---|---|---|
| `keywords` | array (required) | `["real estate agent", "agency"]` | 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 input that decides your result set

Domain's index is organised around suburbs, so `location` is the single most valuable control in the Domain Agents Email Scraper.
Start at city level: `Sydney`, `Melbourne`, `Brisbane`, `Perth`, `Adelaide`, `Canberra`, `Newcastle`, `Geelong`.
Then move to suburb farming, which is where Domain's index is densest: `Parramatta`, `Bondi Junction`, `Chatswood`, `Richmond`, `Brunswick`, `Toorak`, `Bulimba`, `Subiaco`.

Match the phrasing a Domain suburb page would print.
`Bondi Junction` beats `Bondi Junction, NSW 2022, Australia`, and a suburb name almost always beats a postcode.
Run one Domain Agents Email Scraper job per suburb cluster so you can attribute reply rates by market, and so a single dense suburb does not consume your whole `maxEmails` budget.

#### `countryCode` guidance

Set `countryCode` to `AU`. Australian routing keeps ambiguous suburb names such as `Richmond`, `Newtown` or `Kensington` on Australian pages.
Leaving it blank still works, but the Domain Agents Email Scraper will spend part of its page budget on results you do not want.

#### Example input

```json
{
  "keywords": ["real estate agent", "agency", "principal"],
  "location": "Parramatta",
  "customDomains": ["@gmail.com", "@yahoo.com", "@bigpond.com", "@outlook.com"],
  "maxEmails": 250,
  "countryCode": "AU",
  "expandQueries": true,
  "queryModifiers": ["email", "contact", "listing agent", "inquiries", "broker"],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

### Output reference for the Domain Agents Email Scraper

Every dataset item written by the Domain Agents 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": "Domain",
    "keyword": "agency",
    "query": "site:domain.com.au agency contact \"@gmail.com\" \"Parramatta\"",
    "title": "Ashfield Property Group - Parramatta - Domain",
    "accountName": "ashfield-property-group-parramatta",
    "fullName": "Ashfield Property Group",
    "username": "ashfield-property-group-parramatta",
    "profileUrl": "https://www.domain.com.au/real-estate-agencies/ashfield-property-group-parramatta/",
    "url": "https://www.domain.com.au/real-estate-agencies/ashfield-property-group-parramatta/",
    "description": "Sales and property management across Parramatta and Harris Park. Inquiries to ashfieldpg.sales@gmail.com.",
    "email": "ashfieldpg.sales@gmail.com",
    "emailDomain": "@gmail.com",
    "possiblyTruncated": false,
    "foundAt": "2026-08-31T11:22:31Z"
  },
  {
    "network": "Domain",
    "keyword": "real estate agent",
    "query": "site:domain.com.au \"real estate agent\" \"@yahoo.com\" \"Parramatta\"",
    "title": "Real Estate & Property for Sale in Parramatta, NSW 2150 - Domain",
    "accountName": "Domain",
    "fullName": "",
    "username": null,
    "profileUrl": "",
    "url": "https://www.domain.com.au/sale/parramatta-nsw-2150/",
    "description": "Listing agent inquiries and inspection bookings to k.varghese.agent@yahoo.com.",
    "email": "k.varghese.agent@yahoo.com",
    "emailDomain": "@yahoo.com",
    "possiblyTruncated": false,
    "foundAt": "2026-08-31T11:23:09Z"
  }
]
```

The first row is the case you want: an agency handle, a full name and a canonical Domain agency URL.
The second is the more common shape given the yield note, with `username: null` and an empty `profileUrl` because the source was a suburb listing page.
Both are usable for outreach; only the first supports enrichment or office-level segmentation, so plan your Domain Agents Email Scraper pipeline around the `email` field.

### Use cases for the Domain Agents Email Scraper

| Use case | How the Domain Agents Email Scraper fits |
|---|---|
| Agency software sales | Reach principals and office contacts rather than individual salespeople |
| Rent-roll and trust accounting vendors | Target agencies running property management in a specific suburb |
| Mortgage and conveyancing partnerships | Build referral relationships with offices, not one-off agents |
| Listing media services | Pitch a photography or video retainer to an agency with recurring inventory |
| Franchise development | Identify independent agencies in a growth corridor |
| Recruiting | Map which agencies are publishing the most inventory in a suburb |
| Australian list building | Combine with REA output and deduplicate on `email` for wider coverage |

#### Example run recipes

Three Domain Agents Email Scraper configurations that work well in practice.

Inner-west Sydney agency sweep: keywords `["agency", "real estate agent"]`, location `Newtown`, `countryCode` `AU`, `maxEmails` 200.
Melbourne premium corridor: keywords `["agency", "principal"]`, location `Toorak`, domains `["@gmail.com", "@bigpond.com", "@outlook.com"]`.
National agency pass: run the Domain Agents Email Scraper once per capital city, then merge and deduplicate on `email` before importing to your CRM.

### Results you should realistically expect

A measured run of the Domain Agents Email Scraper returned about five unique emails per ten parsed result blocks, with identity data on roughly two of them.
Handle and profile-URL coverage sat at the same low level, which is exactly what the yield note predicts.
No volume is guaranteed, and totals move with your keywords, domain list, location and what Google has indexed that week.

For the strongest Australian identity data, pair this with [RealEstate.com.au Agents Email Scraper](https://apify.com/neuro-scraper/realestate-com-au-agents-email-scraper), which returns full names far more consistently.
**Property.com.au Email Scraper** is worth a final top-up pass but has a small indexed footprint.
If you also sell into the US, [Keller Williams Agent Email Scraper](https://apify.com/neuro-scraper/keller-williams-agent-email-scraper) is the densest source in this whole category.

### Responsible use

Australian agencies publish these addresses so vendors, buyers and renters can reach them, so make Domain Agents Email Scraper outreach a relevant business offer rather than a blast.
The Australian Spam Act governs commercial electronic messages to Australian recipients, covering consent, sender identification and a working unsubscribe path.
CAN-SPAM applies to US recipients, CASL to Canadian ones, and GDPR with PECR to EU and UK ones; phone follow-up brings TCPA-adjacent rules into scope.

Fair Housing style principles apply to property outreach in every market.
Do not use the `location` input to include or exclude people on the basis of protected characteristics.
This is not legal advice; confirm your own obligations before you send.

### Limitations of the Domain Agents Email Scraper

- Domain indexes listing and suburb pages more than agency profiles, so most rows carry an agency email without a resolvable handle. This is the governing limitation.
- The Domain Agents Email Scraper only finds addresses 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 Domain Agents 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 Domain Agents Email Scraper

#### How many results should I expect?

A measured run of the Domain Agents Email Scraper produced about five unique emails per ten parsed result blocks, with identity data on around two.
Widen keywords, domains and locations if a run finishes short of your `maxEmails` target.

#### Why do most rows have no handle?

Because Domain indexes listing and suburb pages more than agency profiles, Google often prints no agency path for the Domain Agents Email Scraper to build a link from.
The email is still real; only the profile link is missing.

#### Does the Domain Agents Email Scraper return agencies or individual agents?

Mostly agencies. Domain's canonical handle format is an agency path, so a resolved `profileUrl` points at an office rather than a single salesperson.

#### Does it log into Domain?

No. The Domain Agents Email Scraper reads publicly indexed Google results only, with no login, no API and no site visits.

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

A suburb or city as a Domain page would print it: `Parramatta`, `Chatswood`, `Richmond`, `Subiaco`, `Sydney`.
Suburb-level phrasing matches how Domain organises its index and how Australian agencies farm.

#### Should I set `countryCode`?

Yes, `AU`. It keeps ambiguous suburb names on Australian pages and stops the page budget leaking into US results.

#### Which email domains should I add?

The defaults plus `@bigpond.com`, `@optusnet.com.au`, `@iinet.net.au`, `@outlook.com` and `@hotmail.com`.
Add specific agency domains when you already know which offices you want.

#### How do I get more from a single Domain Agents Email Scraper run?

Raise `maxEmails`, keep `expandQueries` on, add keywords such as `principal`, `sales agent` and `property management`, and add domains.
Several narrow suburb runs usually beat one broad state-level run.

#### 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 Domain Agents 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`.

#### What happens if Google changes its markup?

A whole-page fallback parser takes over, so the Domain Agents Email Scraper degrades to emails without account details rather than returning nothing.

#### Is this affiliated with Domain?

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

### Related Actors

| Actor | What it collects |
|---|---|
| [Domain Email and Phone Number Scraper](https://apify.com/leads-scraper/domain-agents-email-and-phone-number-scraper) | Emails and phone numbers from Domain |
| [Domain Phone Number Scraper](https://apify.com/leads-scraper/domain-agents-phone-number-scraper) | Public phone numbers from Domain |
| [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 |
| [Homes & Land Email Scraper](https://apify.com/neuro-scraper/homes-and-land-email-scraper) | Public contact emails from Homes & Land |
| [Homes.com Email Scraper](https://apify.com/leads-scraper/homes-com-email-scraper) | Public contact emails from Homes.com |
| [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 |
| [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 |
| [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 |
| [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 Domain Agents 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 Domain 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 Domain.

## `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",
    "agency"
  ],
  "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 Domain Agents 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",
        "agency"
    ],
    "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/domain-agents-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",
        "agency",
    ],
    "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/domain-agents-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",
    "agency"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "countryCode": "",
  "queryModifiers": [
    "email",
    "contact",
    "listing agent",
    "inquiries",
    "broker"
  ]
}' |
apify call leads-scraper/domain-agents-email-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,leads-scraper/domain-agents-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/9s2mNEvECvSGk8gXc/builds/t6QVf8BAFVQAD1LYp/openapi.json
