# Real Estate Agent Contact Scraper (`scrapido/real-estate-agent-contact-scraper`) Actor

🏡 Real Estate Agent Contact Scraper collects agent and brokerage records from Google Maps with full address, city, state, ZIP & phone. 📧 Site crawling adds emails and socials. 🔑 Great for proptech vendors, lenders & realtor marketing.

- **URL**: https://apify.com/scrapido/real-estate-agent-contact-scraper.md
- **Developed by:** [Scrapido](https://apify.com/scrapido) (community)
- **Categories:** Lead generation, Real estate, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 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.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### Real Estate Agent Contact Scraper

**Real Estate Agent Contact Scraper** is a practical Apify actor for finding real estate agent leads, agent directory scraping, and real estate agent emails from publicly available web data. It helps marketers, data analysts, and researchers save time on real estate prospecting by turning manual contact lookup into a structured workflow with fast, scalable results. 🏡📬

### What is Real Estate Agent Contact Scraper? 🔍

Real Estate Agent Contact Scraper is an Apify actor that collects public business contact details for real estate professionals and related property agent scraper use cases. It is designed for real estate contact extraction at scale, helping users find business names, websites, phone numbers, addresses, ratings, reviews, and social links from publicly available sources.

This real estate lead generation tool is useful for marketers building realtor lead generation lists, analysts enriching a real estate database, and researchers doing licensed agent lookup or broker contact scraper workflows. Instead of manually checking individual pages one by one, the actor organizes contact data into a clean dataset you can export and use quickly. ⚡

### What Data Does Real Estate Agent Contact Scraper Collect? 📊

The actor captures structured business contact data that supports real estate marketing leads, real estate prospecting, and MLS contact extraction-style workflows. It returns contact, location, reputation, and discovery details in a predictable format that is easy to review or export.

| Data Category | Fields Extracted | Description |
|---|---|---|
| Contact | `phone`, `scraped_emails`, `scraped_phones` | Public contact details associated with the business |
| Identity | `name` | Business name |
| Navigation | `website` | Business website link |
| Location | `full_address`, `city`, `state`, `zip`, `country_code`, `lat`, `long` | Address and geographic details |
| Reputation | `avg_rating`, `total_reviews` | Public rating and review totals |
| Discovery | `place_id`, `scrape_status` | Record identification and scrape outcome |
| Enrichment | `scraped_social_media`, `emails_found`, `pages_scraped` | Social links and scrape summary metrics |

### What Do Results from Real Estate Agent Contact Scraper Look Like? 👀

Each result is saved as a structured JSON record in your Apify dataset. Here’s a realistic example of the output you can expect from real estate contact extraction runs:

```json
{
  "name": "Samantha Lee Real Estate",
  "website": "https://www.samanthaleerealty.com",
  "phone": "+1 212-555-0148",
  "full_address": "123 Madison Ave New York NY 10016 US",
  "city": "New York",
  "state": "NY",
  "zip": "10016",
  "country_code": "US",
  "scraped_emails": [
    "samantha@samanthaleerealty.com"
  ],
  "scraped_phones": [
    "+1 212-555-0148"
  ],
  "scraped_social_media": [
    "https://www.instagram.com/samanthaleerealty"
  ],
  "emails_found": 1,
  "pages_scraped": 4,
  "avg_rating": 4.8,
  "total_reviews": 126,
  "lat": "40.7512",
  "long": "-73.9822",
  "place_id": "ChIJTQp3Q7hYwokR8K4z8u7K1mA",
  "scrape_status": "success"
}
```

Results are stored in the Apify dataset, ready for export and downstream real estate database enrichment.

#### Core Features: Real Estate Agent Contact Scraper ⚡

| Feature | Benefit |
|---|---|
| ✅ **Keyword-Driven Targeting** | Uses your search term to find relevant real estate contact extraction results |
| ✅ **Location Filter** | Focus on a specific city or region for better local prospecting |
| ✅ **Result Cap Control** | Set a maximum number of businesses to keep runs focused and cost-efficient |
| ✅ **Per-Location Option** | Collect up to the target amount for each location or use one combined limit |
| ✅ **Proxy Support** | Built-in proxy support for reliable scraping at larger scale |
| ✅ **Real-Time Data Saving** | Results are saved as the run progresses, reducing the risk of data loss |
| ✅ **Structured Dataset Output** | Clean records for CRM import, lead lists, and research workflows |
| ✅ **Contact Enrichment** | Captures emails, phone numbers, and social media links when available |

### Getting Started with Real Estate Agent Contact Scraper 🚀

1. **Open Apify** — Sign in to your Apify account and open the actor.
2. **Set the Search Term** — Enter the business type or niche you want to target.
3. **Add Locations** — Provide one or more target geographic locations.
4. **Choose a Result Limit** — Set how many businesses with emails you want to collect.
5. **Decide How Locations Are Counted** — Turn on per-location collection if you want the limit applied separately to each location.
6. **Configure Proxy Settings** — Use the proxy configuration for more reliable large-scale scraping.
7. **Start the Run** — Launch the actor and monitor progress in the logs.
8. **Review the Dataset** — Export your results from the dataset tab when the run finishes.

No coding is required, and the actor is built for fast, practical real estate prospecting workflows. 🏁

### Ways to Use Real Estate Agent Contact Scraper 💡

- 🎯 **Real Estate Prospecting** — Build contact lists for outreach to agents and brokers in specific markets
- 📣 **Realtor Lead Generation** — Find public contact details for business development campaigns
- 📊 **Real Estate Database Enrichment** — Append missing phone numbers, websites, and social media links to your records
- 🔬 **Market Research** — Analyze real estate agent concentration by city, state, or region
- 🤝 **Broker Contact Scraper Workflows** — Identify businesses that match brokerage or agent search terms
- 🏠 **Property Professional Contacts** — Compile structured contact data for sales and partnership efforts

#### Input Parameters — Real Estate Agent Contact Scraper

```json
{
  "googleMapsSearchTerm": "Real Estate Agent",
  "googleMapsLocation": [
    "New York"
  ],
  "maxBusinesses": 5,
  "scrapeMaxBusinessesPerLocation": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| `googleMapsSearchTerm` | String | Yes | `Real Estate Agent` | The business type or niche you want to search for. |
| `googleMapsLocation` | Array | Yes | `["New York"]` | One or more target geographic locations. |
| `maxBusinesses` | Integer | No | `5` | The maximum number of businesses with emails to collect. |
| `scrapeMaxBusinessesPerLocation` | Boolean | No | `false` | If enabled, the actor collects up to the maximum number of results per location. If disabled, all locations share one total limit. |
| `proxyConfiguration` | Object | No | `{ "proxy support": true }` | Proxy settings for more reliable web scraping at larger scale. |

#### Output Parameters — Real Estate Agent Contact Scraper

```json
{
  "name": "Samantha Lee Real Estate",
  "website": "https://www.samanthaleerealty.com",
  "phone": "+1 212-555-0148",
  "full_address": "123 Madison Ave New York NY 10016 US",
  "city": "New York",
  "state": "NY",
  "zip": "10016",
  "country_code": "US",
  "scraped_emails": [
    "samantha@samanthaleerealty.com"
  ],
  "scraped_phones": [
    "+1 212-555-0148"
  ],
  "scraped_social_media": [
    "https://www.instagram.com/samanthaleerealty"
  ],
  "emails_found": 1,
  "pages_scraped": 4,
  "avg_rating": 4.8,
  "total_reviews": 126,
  "lat": "40.7512",
  "long": "-73.9822",
  "place_id": "ChIJTQp3Q7hYwokR8K4z8u7K1mA",
  "scrape_status": "success"
}
```

| Field | Label | Format | Description |
|---|---|---|---|
| `name` | Business Name | text | The business name returned in the dataset. |
| `website` | Website | link | The business website URL. |
| `phone` | Phone | text | The main public phone number. |
| `full_address` | Address | text | The full address assembled from available location parts. |
| `city` | City | text | The city value in the result. |
| `state` | State | text | The state value in the result. |
| `zip` | zip | text | The postal code value in the result. |
| `country_code` | country\_code | text | The country code value in the result. |
| `scraped_emails` | Emails Found | array | A list of public email addresses found for the business. |
| `scraped_phones` | Phone Numbers | array | A list of phone numbers found during scraping. |
| `scraped_social_media` | Social Media | array | A list of social media links found for the business. |
| `emails_found` | # Emails | number | The number of email addresses found. |
| `pages_scraped` | Pages Scraped | number | The number of pages processed for the business website. |
| `avg_rating` | Rating | number | The public average rating. |
| `total_reviews` | Reviews | number | The public total review count. |
| `lat` | lat | text | The latitude value returned for the business location. |
| `long` | long | text | The longitude value returned for the business location. |
| `place_id` | place\_id | text | The unique place identifier returned in the dataset. |
| `scrape_status` | Status | text | The scraping outcome for the record. |

### Why Choose Real Estate Agent Contact Scraper? 🏆

Real Estate Agent Contact Scraper is built for fast, structured real estate agent leads collection without forcing you to do manual research. It supports location-based prospecting, saves results live, and returns clean dataset rows that are easy to import into outreach tools or a CRM. For teams doing realtor data scraping, this means less time hunting for contacts and more time using them. If you need help or want to share feedback, contact <scrapidocontact@gmail.com>. 📬

### How Many Results Can You Scrape? 📈

You control the output with the `maxBusinesses` setting, which can be set from 1 to 1000. The number of results you actually get depends on how many relevant businesses are available and how many public contacts can be found. For larger real estate prospecting runs, proxy support helps keep the process reliable and scalable.

### Legal Guidelines for Scraping Real Estate Agent Contact Scraper ⚖️

This actor works with publicly available web data only. It does not require logins or access private accounts, and it is intended for lawful research, marketing, and enrichment use cases. You are responsible for following applicable privacy laws, anti-spam rules, and the terms of the websites you collect from. Always use the data ethically and respectfully. For data removal requests, please contact <scrapidocontact@gmail.com>.

### FAQ — Real Estate Agent Contact Scraper ❓

#### How does Real Estate Agent Contact Scraper find contact details?

It uses your search term and location inputs to collect publicly available business records, then organizes the contact details it can find into a structured dataset. This makes it useful for real estate agent emails, phone numbers, and related contact extraction workflows.

#### What kind of businesses can I target with this actor?

You can target real estate agents and related property professional contacts by using the business type or niche that best matches your research or outreach needs. It works well for realtor lead generation, broker contact scraper use cases, and similar local prospecting tasks.

#### Can I use multiple locations?

Yes. The `googleMapsLocation` field accepts an array, so you can provide more than one location in a single run. This is especially helpful for real estate database enrichment across multiple cities or regions.

#### What happens if a business does not have a website?

If a business does not have a website, the actor still records the business and marks the scrape status as `no_website`. If email-only results are enabled by your workflow, those records are skipped from output.

#### How many email addresses can I collect?

The actor counts emails using `emails_found`, and the total number you can request is controlled by `maxBusinesses`. The actual yield depends on how many public emails are available on the businesses you target.

#### Is proxy support available?

Yes. The input includes `proxyConfiguration`, which is recommended for larger-scale scraping or when you want more reliable runs.

#### How is the output structured?

Results are saved to the Apify dataset using fields such as `name`, `website`, `phone`, `scraped_emails`, `scraped_phones`, `scraped_social_media`, `emails_found`, and `scrape_status`. This makes exporting and analysis straightforward.

#### Who is this actor best for?

It is a strong fit for marketers, data analysts, and researchers who need real estate marketing leads, licensed agent lookup data, or other public property agent scraper results in a clean, reusable format.

### Conclusion 🏁

Real Estate Agent Contact Scraper is a fast, practical way to gather public contact data for real estate prospecting, realtor lead generation, and real estate database enrichment. With location targeting, result caps, proxy support, and structured dataset output, it helps you move from manual research to scalable outreach. 🚀

### 🆘 Support & Feedback

Have a question, bug report, or feature request for Real Estate Agent Contact Scraper?

- 🐞 **Bug Reports:** Send details about the issue you experienced
- ✨ **Feature Requests:** Share ideas for improving real estate contact extraction workflows
- 📧 **Email:** <scrapidocontact@gmail.com>

### Multiple Email Type

**Email Types** keeps only the kinds of mailbox you want. Every row records what
it was classified as in `emailType`.

| Type | What it matches |
| --- | --- |
| Personal | Free webmail (Gmail, Outlook, Yahoo, iCloud, ...) |
| Business | Company domains — free webmail and institutions excluded |
| Education | `.edu`, `.ac.uk`, `.edu.au` and other academic suffixes |
| Government | `.gov`, `.mil`, `.gov.uk`, `.gc.ca`, ... |
| Non-profit | `.org`, `.ngo`, `.org.uk`, ... |

A business found with no email at all is unaffected — whether those rows are
wanted is already governed by the existing email-only setting.

### Multiple Phone Type

**Phone Types** does the same for numbers, checked against the line's *real*
type rather than a guess. Numbers on ranges where mobile and landline cannot be
told apart are kept rather than dropped, since discarding them would lose good
leads.

### Outreach links

| Field | Meaning |
| --- | --- |
| `telLink` | A clickable `tel:` link for the primary number |
| `whatsappLink` | A `wa.me` chat link, or empty for a landline or an invalid number |
| `whatsappCapable` | Whether the line could support WhatsApp |
| `phoneContacts` | Every kept number with its own type, links and validity |

`whatsappCapable` never claims the person uses WhatsApp — only that the number
is of a kind that could. Turn the links off with **Include WhatsApp links**; the
capability flag is still reported.

# Actor input Schema

## `googleMapsSearchTerm` (type: `string`):

Enter the business type or niche for email scraper (e.g., 'coffee shops', 'dentists').

## `googleMapsLocation` (type: `array`):

Target geographic location for the email scraper (e.g., 'Miami, Florida').

## `maxBusinesses` (type: `integer`):

Target number of businesses to find (1-1000). The scraper will stop when this target is reached.

## `scrapeMaxBusinessesPerLocation` (type: `boolean`):

If enabled, the scraper will collect up to `maxBusinesses` results per location. If disabled, it combines all locations up to a single total limit.

## `validateEmails` (type: `boolean`):

Run DNS/MX validation and confidence scoring on every email found, and include the results (confidence score, validation status, role-based/catch-all flags) in the output.

## `minRating` (type: `integer`):

Skip businesses rated below this (1-5 stars). Leave at 0 for no filter.

## `minReviews` (type: `integer`):

Skip businesses with fewer than this many Google reviews. Leave at 0 for no filter.

## `requireWebsite` (type: `boolean`):

Skip businesses with no website listed on Google Maps (they can't be crawled for contact info anyway).

## `leadMode` (type: `string`):

Business Contacts (default) returns the business's generic contact info (info@, main phone, socials). Decision-Maker Finder instead looks for a named person with a job title (e.g. "Jane Smith, Owner") on the business's team/about pages — a best-effort heuristic, not guaranteed on every site.

## `proxyConfiguration` (type: `object`):

Proxy settings for scraping. Recommended for large-scale scraping.

## `emailTypes` (type: `array`):

Which kinds of mailbox to keep. Pick as many as you like; leave empty for every type. A business with no email at all is unaffected by this - whether those rows are wanted is governed by the existing email-only setting.

## `phoneTypes` (type: `array`):

Which kinds of line to keep. Leave empty for every type. Numbers on ranges where mobile and landline cannot be told apart are always kept rather than silently dropped.

## `includeWhatsappLinks` (type: `boolean`):

Add a ready-made wa.me chat link for numbers on a line WhatsApp can run on. The link means the number is in a form WhatsApp accepts - not proof that an account exists.

## Actor input object example

```json
{
  "googleMapsSearchTerm": "Real Estate Agent",
  "googleMapsLocation": [
    "New York"
  ],
  "maxBusinesses": 5,
  "scrapeMaxBusinessesPerLocation": false,
  "validateEmails": false,
  "minRating": 0,
  "minReviews": 0,
  "requireWebsite": false,
  "leadMode": "Business Contacts",
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "emailTypes": [
    "Business"
  ],
  "phoneTypes": [
    "Mobile",
    "Landline"
  ],
  "includeWhatsappLinks": true
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

# 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 = {
    "googleMapsSearchTerm": "Real Estate Agent",
    "googleMapsLocation": [
        "New York"
    ],
    "maxBusinesses": 5,
    "proxyConfiguration": {
        "useApifyProxy": true
    },
    "emailTypes": [
        "Business"
    ],
    "phoneTypes": [
        "Mobile",
        "Landline"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapido/real-estate-agent-contact-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 = {
    "googleMapsSearchTerm": "Real Estate Agent",
    "googleMapsLocation": ["New York"],
    "maxBusinesses": 5,
    "proxyConfiguration": { "useApifyProxy": True },
    "emailTypes": ["Business"],
    "phoneTypes": [
        "Mobile",
        "Landline",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("scrapido/real-estate-agent-contact-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 '{
  "googleMapsSearchTerm": "Real Estate Agent",
  "googleMapsLocation": [
    "New York"
  ],
  "maxBusinesses": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "emailTypes": [
    "Business"
  ],
  "phoneTypes": [
    "Mobile",
    "Landline"
  ]
}' |
apify call scrapido/real-estate-agent-contact-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapido/real-estate-agent-contact-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/ghEleSwGtWnOsYHYu/builds/XRuQxoDVJpsazQVNX/openapi.json
