Realtor & Real Estate Agent Lead Scraper — Verified Emails
Pricing
from $40.00 / 1,000 enriched real estate leads
Realtor & Real Estate Agent Lead Scraper — Verified Emails
Scrape real estate agent & broker contacts from Google Maps with verified emails & phones. Real-time data from agency websites. Export to HubSpot, Salesforce, or CSV. Built for proptech sales & mortgage marketing.
Pricing
from $40.00 / 1,000 enriched real estate leads
Rating
0.0
(0)
Developer
Muhammad Afzal
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
A Google Maps-focused lead generation Actor that scrapes live business listings for real estate professionals — agents, brokers, property managers, mortgage lenders, home inspectors, and title companies — then crawls each business website to extract contact emails, phone numbers, office addresses, and social media profiles. It performs DNS MX lookups and SMTP handshakes to verify email deliverability, enriches and deduplicates records by business identity and location, and produces CRM-ready leads you can export to HubSpot, Salesforce, or CSV.
Use cases
- Mortgage lenders building referral partner outreach lists of agents and brokers
- Home inspection companies sourcing nearby brokers and agents for referrals
- Real estate SaaS vendors generating segmented prospect lists by city or brokerage size
- Title companies compiling broker contact lists across service counties for email campaigns
- Property management software vendors identifying property managers in metro areas
- Home staging companies targeting agents and brokers who list vacant properties
- PropTech firms prospecting specific metro markets with fresh, verified contacts
- Real estate CRM vendors and marketing agencies building pipelines for product demos and outreach
Features
- 6 real estate professional types — Real Estate Agents, Brokers, Property Managers, Mortgage Lenders, Home Inspectors, Title Companies, plus a Custom mode for niche queries
- Multi-location search — run a single search across multiple cities, ZIP codes, or regions in one run
- Email enrichment — crawls each business website (homepage, contact, about, team pages) and extracts email addresses from HTML, mailto links, and encoded entities
- Email verification — DNS MX record lookup + SMTP RCPT TO handshake confirms the mailbox exists before it reaches your list. Detects catch-all domains and role-based addresses (info@, contact@, sales@)
- Social media extraction — finds Facebook, Instagram, LinkedIn, Twitter/X, YouTube, and TikTok profile links from business websites
- CRM export formats — Full (all fields), HubSpot Import (matching HubSpot CSV column names), or Salesforce Import (matching Salesforce lead fields)
- Automatic deduplication — within a single run, duplicate Google Maps place IDs are filtered out
- Run resumption — saves checkpoint state so interrupted runs continue from the last processed position
- Pay-per-result pricing — $0.04 per enriched lead, with no charge for the actor start event beyond memory
Input parameters
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
businessType | enum | Yes | Real Estate Agent | Type of real estate professional to target. Options: Real Estate Agent, Real Estate Broker, Property Manager, Mortgage Lender, Home Inspector, Title Company, Custom |
locations | array | Yes | ["Miami, FL"] | One or more cities, states, ZIP codes, or regions. Use "City, ST" format (e.g., "Austin, TX") |
searchQuery | string | No | — | Raw Google Maps query, only used when businessType is "Custom" |
maxResults | integer | No | 50 | Maximum number of leads to collect across all locations |
maxResultsPerLocation | integer | No | 0 | Per-location cap (0 = use global max only) |
enrichEmails | boolean | No | true | Visit each business website and extract email addresses |
verifyEmails | boolean | No | true | Validate emails via DNS MX + SMTP handshake (requires enrichEmails) |
enrichSocials | boolean | No | true | Extract social media profile links from business websites |
outputFormat | enum | No | full | Output structure: full, hubspot, or salesforce |
countryCode | string | No | us | Two-letter country code for Google Maps localization |
languageCode | string | No | en | Two-letter language code for results |
proxyConfiguration | object | No | Apify proxy | Proxy settings (defaults to Apify residential proxy) |
Output data
Each record contains the following fields:
| Field | Type | Description |
|---|---|---|
name | string | Business name from Google Maps |
category | string | Google Maps business category |
businessType | string | The input business type used for the search |
address | string | Full street address |
phone | string|null | Phone number from Google Maps |
website | string|null | Business website URL |
mapsUrl | string|null | Direct Google Maps listing link |
rating | number|null | Google star rating (0–5) |
reviewCount | number|null | Number of Google reviews |
latitude | number|null | GPS latitude |
longitude | number|null | GPS longitude |
email | string|null | Best email found on the business website |
allEmails | array | All emails found, each with address, verified, status, verificationNote |
emailVerified | boolean | Whether the primary email passed verification |
emailVerificationStatus | string | valid, invalid, catch_all, role_based, unknown, or not_verified |
emailVerificationNote | string | Human-readable verification detail (MX host, SMTP response) |
socialLinks | object | Facebook, Instagram, LinkedIn, Twitter/X, YouTube, TikTok URLs |
location | string | The search location that produced this lead |
placeId | string|null | Google Maps Place ID |
sourceUrl | string | Google Maps search URL |
scrapedAt | string | ISO 8601 timestamp |
Sample output
{"name": "Premier Realty Group","category": "Real estate agency","businessType": "Real Estate Agent","address": "123 Ocean Dr, Miami, FL 33139, USA","phone": "+1 305-555-0100","website": "https://premierrealty.com","mapsUrl": "https://www.google.com/maps/place/?q=place_id:ChIJabc123","rating": 4.8,"reviewCount": 127,"latitude": 25.7617,"longitude": -80.1918,"email": "info@premierrealty.com","allEmails": [{"address": "info@premierrealty.com","verified": true,"status": "role_based","verificationNote": "MX: aspmx.l.google.com, SMTP 250 OK (role-based address)"}],"emailVerified": true,"emailVerificationStatus": "role_based","emailVerificationNote": "MX: aspmx.l.google.com, SMTP 250 OK (role-based address)","socialLinks": {"facebook": "https://facebook.com/premierrealty","instagram": "https://instagram.com/premierrealty","linkedin": "https://linkedin.com/company/premierrealty","twitter": null,"youtube": null,"tiktok": null},"location": "Miami, FL","placeId": "ChIJabc123","sourceUrl": "https://www.google.com/maps/search/Real%20Estate%20Agents%20in%20Miami%2C%20FL","scrapedAt": "2026-06-24T22:00:00.000Z"}
Pricing
This actor uses pay-per-event pricing: $0.04 per enriched real estate lead.
Cost examples
| Leads | Cost |
|---|---|
| 10 leads | $0.40 |
| 50 leads | $2.00 |
| 200 leads | $8.00 |
| 1,000 leads | $40.00 |
You only pay for leads actually returned in the dataset — no charge for pages that return zero results or for the actor start event (beyond standard memory usage).
Code examples
Run via Apify SDK (JavaScript)
const { ApifyClient } = require('apify-client');const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('USERNAME/realtor-lead-scraper').call({businessType: 'Real Estate Agent',locations: ['Miami, FL', 'Austin, TX'],maxResults: 100,enrichEmails: true,verifyEmails: true,enrichSocials: true,outputFormat: 'full'});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Got ${items.length} verified real estate leads`);
Run via REST API (cURL)
curl -X POST "https://api.apify.com/v2/acts/USERNAME~realtor-lead-scraper/runs?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"businessType": "Real Estate Broker","locations": ["Denver, CO"],"maxResults": 50,"verifyEmails": true,"outputFormat": "hubspot"}'
Export to HubSpot CSV
Set outputFormat to hubspot in the input. The output records will use HubSpot's column names (firstname, lastname, company, email, phone, etc.) so you can export the dataset as CSV and import it directly into HubSpot.
How email verification works
- DNS MX lookup — the actor resolves the domain's MX (Mail Exchange) records. If no MX records exist, the email is marked
invalid - SMTP handshake — the actor connects to the mail server on port 25 and performs
HELO→MAIL FROM→RCPT TO. If the server responds with a 250 OK code, the email is markedvalid - Catch-all detection — if a domain has DNS records but no MX, it may be a catch-all domain (accepts all email addresses). These are marked
catch_all - Role-based detection — addresses like
info@,contact@,sales@are flagged asrole_basedeven when the SMTP check passes, so you can filter them for personalized outreach
FAQ
Why do some leads have no email?
Not every real estate business lists an email on their website. The actor scans the homepage, contact page, about page, and team page, but some sites use contact forms instead of email addresses. These leads will still have phone numbers, addresses, and ratings.
What's the difference between "valid" and "role_based" status?
valid means the SMTP server confirmed the mailbox exists. role_based means the same, but the address is a generic inbox (like info@ or sales@) rather than a person's name. Both are deliverable, but role-based addresses may have lower engagement for cold outreach.
Can I search multiple cities in one run?
Yes. Add multiple entries to the locations array. The actor processes each location sequentially and deduplicates results across locations.
How many leads can I get per search?
Google Maps typically returns up to ~120 results per search query. Use maxResultsPerLocation to balance results across multiple locations.
Does the actor work outside the US?
Yes. Set countryCode to the appropriate two-letter code (e.g., ca for Canada, gb for United Kingdom) and languageCode as needed.
Troubleshooting
| Issue | Solution |
|---|---|
| Zero results | Check that your location string is recognized by Google Maps. Use "City, ST" format. |
| No emails found | The business may not list an email publicly. Try disabling verifyEmails to get unverified emails faster. |
| All emails show "unknown" status | The target mail server may be blocking SMTP probes. This is common with large providers like Google. The emails are likely still valid. |
| Run takes too long | Email verification adds ~1-2 seconds per email. Disable verifyEmails for faster runs, or reduce maxResults. |
| Serper API error 401/403 | The Serper API key is missing or invalid. Check the SERPER_API_KEY environment variable in actor settings. |