# HomeLight Scraper \[$0.95/1K💰] | Agent Leads | Reviews (`ahmed_jasarevic/homelight-scraper`) Actor

Scrape HomeLight real estate agents by market: licences, 12-month homes sold, sales volume, service areas, certifications and reviews. Export to CSV, JSON or API for agent recruiting.

- **URL**: https://apify.com/ahmed_jasarevic/homelight-scraper.md
- **Developed by:** [Ahmed Jasarevic](https://apify.com/ahmed_jasarevic) (community)
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.85 / 1,000 agents

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
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

## HomeLight Scraper

Scrape HomeLight real estate agents for any US market — licence details, 12-month homes sold, sales volume, service areas, certifications and reviews — and export a recruiting, referral or market-research list.

### Recruit Real Estate Agents And Research Local Markets

- Build agent recruiting lists by market, brokerage or production level
- Benchmark homes sold, sales volume and average price point across a metro
- Find agents by specialty, language, certification or service area
- Pull reviews into a separate dataset for reputation analysis
- Monitor a market monthly to spot new top producers and changing production

### How It Works

![How the HomeLight Scraper turns a US market page into agent rows with 12-month production, licences and reviews.](https://api.apify.com/v2/key-value-stores/oeuA0kLOyhbRM4fzt/records/how-it-works-homelight-scraper.webp)

The Actor collects publicly available HomeLight agent data and normalizes it into one schema. Provide a market, neighborhood or profile URL; it reads the published area and agent profile pages, then writes one row per agent with reviews in a separate dataset.

- One market page lists about 40 top agents; neighborhood coverage expands larger metros.
- `includeDetails` adds licence, service areas, specialties, certifications and reviews.
- `includeTransactions` computes 12-month homes sold, sales volume and average price point.

### Scrape HomeLight Agents By Market Or Profile URL

- `locations` accepts market slugs (`atlanta-ga`, `houston-tx`) or full top-agent directory URLs. Neighborhood slugs also work (`atlanta-ga/inman-park`).
- `startUrls` adds extra market URLs or individual `https://www.homelight.com/agents/<slug>` profiles.
- One market page lists roughly 40 agents. Above that, the Actor expands into neighborhood coverage; Atlanta, for example, exposes 27 neighborhoods and well over 100 unique agents.
- Some neighborhood pages are mislabelled upstream, so the Actor checks sub-area results against the state of the requested market and skips agents from another state.
- `maxAgents` caps unique agent rows per run (default 10, maximum 5,000).
- `maxConcurrency` defaults to 25 parallel operations (maximum 50).

### Agent Production Data From 12-Month Closed Transactions

For each agent with details enabled, the Actor reads the profile and published transaction history:

| Metric | Source |
| --- | --- |
| `homesSold12Mo` | Count of closed transactions in the last 12 months |
| `salesVolume12Mo` | Sum of transaction prices in the last 12 months |
| `averagePricePoint` | Average price of those transactions |
| `transactionMix` | Single-family, condo and townhome counts |
| Buyer/seller split | `represented` value on each transaction |

`includeTransactions` adds one extra pass per agent. Turn it off to keep only the fields already present in the market data.

### Real Estate Agent Leads For Recruiting And Referrals

- **Recruiting** — filter by 12-month production and brokerage, then export to a spreadsheet or CRM
- **Referral networks** — shortlist agents by city, specialty and language
- **Competitive research** — compare production distribution across neighborhoods in one metro
- **Reputation tracking** — store reviews in the separate `reviews` dataset and track rating changes over time

### Input

| Field | Type | Required | Default | Notes |
| --- | --- | --- | --- | --- |
| `locations` | array | No | — | Market slugs, neighborhood slugs or top-agent directory URLs. |
| `startUrls` | array | No | — | Extra market URLs or individual agent profile URLs. |
| `maxAgents` | integer | No | `10` | Unique agent records to deliver. Minimum 1, maximum 5,000. Above ~40 triggers neighborhood expansion. |
| `maxConcurrency` | integer | No | `25` | Parallel operations. Minimum 1, maximum 50. |
| `includeDetails` | boolean | No | `true` | Collect each profile for service areas, certifications and contact flags. Off = fast market-data-only mode. |
| `includeTransactions` | boolean | No | `true` | Compute 12-month production. Requires details. |
| `includeReviews` | boolean | No | `true` | Write reviews to a separate `reviews` dataset. Requires details. |
| `maxReviewsPerAgent` | integer | No | `5` | Reviews kept per agent. HomeLight shows up to 10. Minimum 0, maximum 50. |
| `maxRequestsPerCrawl` | integer | No | — | Optional hard safety cap on collection work. |
| `proxy` | object | No | — | Standard Apify proxy configuration. Off by default. |

### Output

One row per agent in the default dataset; reviews go to a second dataset.

| Field | Description |
| --- | --- |
| `agentId`, `name`, `brokerage`, `profileUrl`, `photoUrl` | Agent identity. |
| `licenseNumber`, `licenseState` | Licence details when published on the profile. |
| `city`, `state`, `serviceAreas` | Primary market and listed service areas. |
| `yearsOfExperience`, `rating`, `reviewCount`, `reviewSnippet` | Experience and reputation signals. |
| `homesSold12Mo`, `salesVolume12Mo`, `averagePricePoint` | Aggregated from closed transactions. |
| `transactionMix` | `singleFamily`, `condo`, `townhome` counts. |
| `specialties`, `languages`, `certifications` | Profile attributes. |
| `homelightTier`, `inContract`, `hasPhone`, `hasContactForm` | Platform status and contact-option flags (no phone numbers are exported). |
| `bio`, `awards`, `education` | Profile text when available. |
| `scrapedAt`, `source` | Run metadata. |

Reviews dataset: `agentId`, `agentName`, `profileUrl`, `city`, `reviewer`, `text`, `rating`, `date`, `relationship`, `scrapedAt`, `source`.

### Example Input

```json
{
  "locations": ["atlanta-ga", "houston-tx"],
  "maxAgents": 100,
  "includeDetails": true,
  "includeTransactions": true,
  "includeReviews": true,
  "maxReviewsPerAgent": 5
}
```

### Example Output

```json
{
  "agentId": "123456",
  "name": "Jordan Ellis",
  "brokerage": "Example Realty",
  "licenseNumber": "123456",
  "licenseState": "GA",
  "city": "Atlanta",
  "state": "GA",
  "serviceAreas": ["Inman Park", "Midtown", "Decatur"],
  "yearsOfExperience": 11,
  "rating": 4.9,
  "reviewCount": 127,
  "homesSold12Mo": 34,
  "salesVolume12Mo": 14200000,
  "averagePricePoint": 418000,
  "transactionMix": {
    "singleFamily": 24,
    "condo": 7,
    "townhome": 3
  },
  "specialties": ["Buyer's Agent", "Listing Agent"],
  "languages": ["English"],
  "certifications": ["CLHMS"],
  "homelightTier": "top_agent",
  "inContract": false,
  "hasPhone": true,
  "hasContactForm": true,
  "profileUrl": "https://www.homelight.com/agents/jordan-ellis-ga-123456",
  "scrapedAt": "2026-10-23T08:10:00.000Z",
  "source": "homelight"
}
```

### Schedule Agent Market Monitoring

- Read results through the **Apify API** (`GET /v2/datasets/{datasetId}/items`) or export **JSON, CSV, Excel or HTML**
- Connect **Zapier, Make or Google Sheets** through Apify integrations
- Add a **webhook** to push finished datasets into your CRM or BI tool
- Schedule a monthly run per market and diff `agentId` sets and production totals to see who is gaining or losing share

For a cheap monthly change check, run with `includeDetails: false`; enable details and transactions only for the markets that changed.

### Related Actors

- [Zillow Agents Leads Scraper](https://apify.com/memo23/zillow-agents-leads-scraper-ppe) — Zillow agent database with contact details and sales history
- [Realtor Real Estate Agent Leads Scraper](https://apify.com/braveleads/realtor-real-estate-agent-leads-scraper) — Realtor.com agent leads with emails and phones
- [Realtor Agent Leads Scraper](https://apify.com/peakydev/realtor-real-estate-agent-leads-scraper) — another Realtor.com agent source for cross-checking coverage
- [Redfin Scraper](https://apify.com/scrapesage/redfin-scraper) — for-sale and sold homes with listing agents and brokerages
- [Idealista Scraper](https://apify.com/igolaizola/idealista-scraper) — Southern European real estate listings and agent contacts

### FAQ

#### Does HomeLight have a public API?

HomeLight runs a partner API for lead creation, which sends leads into HomeLight rather than reading agent data out. There is no public read API for agent profiles or production metrics. This Actor collects the public agent data shown on HomeLight.

#### Why use this Actor instead of scraping HomeLight manually?

A market page shows about 40 agents, and production numbers only load inside each profile. The Actor expands into neighborhood coverage to go beyond that cap and aggregates published transaction history into 12-month production, which would take hours by hand.

#### What are alternatives to this Actor?

Zillow and Realtor.com agent scrapers cover different agent populations and usually add direct contact details. HomeLight is strongest for agents who actively market themselves as top producers, so the three sources complement each other rather than replace one another.

#### How many agents can I get per market?

One market page lists about 40. With neighborhood expansion, larger metros return well over 100 unique agents; the hard cap is `maxAgents` (maximum 5,000 per run). Very small markets may have fewer agents than requested.

#### Are reviews included?

Yes, when `includeReviews` is on. Reviews are written to a separate `reviews` dataset so the agent dataset stays one row per agent. `maxReviewsPerAgent` controls how many are kept (default 5, HomeLight shows up to 10).

#### Does the output include agent phone numbers?

No. The Actor exports `hasPhone` and `hasContactForm` booleans plus the public profile URL; phone numbers are not included in the dataset.

### For AI Agents & LLM Apps

Returns one row per HomeLight agent with market, licence, 12-month production, specialties and review signals; reviews optionally go to a second dataset.

Minimal working input:

```json
{ "locations": ["atlanta-ga"], "maxAgents": 20 }
```

Fast mode (market data only, no per-agent detail pass):

```json
{ "locations": ["houston-tx"], "maxAgents": 40, "includeDetails": false }
```

Output fields: `agentId`, `name`, `brokerage`, `licenseNumber`, `licenseState`, `city`, `state`, `serviceAreas`, `yearsOfExperience`, `rating`, `reviewCount`, `reviewSnippet`, `homesSold12Mo`, `salesVolume12Mo`, `averagePricePoint`, `transactionMix`, `specialties`, `languages`, `certifications`, `homelightTier`, `inContract`, `hasPhone`, `hasContactForm`, `bio`, `awards`, `education`, `profileUrl`, `photoUrl`, `scrapedAt`, `source`.

Behaviors an agent should know:

- `maxAgents` above ~40 triggers extra profile and neighborhood passes; one market page alone cannot exceed roughly 40.
- `includeTransactions` and `includeReviews` require `includeDetails: true`; with details off they are ignored.
- Each review is billed as a separate event, so cap `maxReviewsPerAgent` when budgeting.
- `maxAgents` is a deduplicated cap, not a per-page count.
- Reviews land in a separate dataset, not in the agent rows.

Billing: **$0.00095 per agent row** ($0.95 per 1,000), **$0.001 per agent detail** event and **$0.002 per review** event.

### Legal & Compliance Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by or sponsored by HomeLight. It collects publicly visible market and profile pages; it does not log in, bypass access controls or solve CAPTCHAs.

Agent profiles and reviews can contain personal data such as names and review text. Users are responsible for complying with HomeLight's Terms of Service and applicable data-protection law, including GDPR and CCPA where relevant. Do not use this data for unsolicited outreach in violation of applicable law.

### SEO Keywords

homelight scraper, homelight agent data, homelight real estate agents, real estate agent leads, realtor agent leads, agent production data, homes sold last 12 months, real estate recruiting, top real estate agents atlanta, homelight api, agent sales volume, real estate agent database, listing agent data, buyer agent data, homelight alternative, real estate market research, agent reviews dataset, realtor database

# Actor input Schema

## `locations` (type: `array`):

HomeLight market slugs or top-agent directory URLs, e.g. "atlanta-ga", "houston-tx" or "https://www.homelight.com/atlanta-ga/top-real-estate-agents". Neighborhood slugs also work (e.g. "atlanta-ga/inman-park"). When Max agents is higher than the ~40 agents one feed returns, the Actor automatically adds the neighborhood feeds of each requested market.

## `startUrls` (type: `array`):

Additional HomeLight market directory URLs or individual agent profile URLs (https://www.homelight.com/agents/<slug>).

## `maxAgents` (type: `integer`):

Number of unique agent records to deliver to the agents dataset. HomeLight returns ~40 agents per directory feed, so the Actor automatically expands into neighborhood feeds until the limit is reached (or the market has no more agents).

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

Number of parallel HTTP requests. Higher values finish runs faster but put more load on HomeLight. 25 is a good default for this plain-HTTP crawler.

## `includeDetails` (type: `boolean`):

Fetch each agent's profile page (service areas, certifications, reviews, contact options, full details) and optionally transactions. Turn off for a fast, cheap crawl that returns only the fields in the area agent feed. Details are billed as one `agent-detail` pay-per-event event per agent; reviews require details.

## `includeTransactions` (type: `boolean`):

Fetch each agent's transaction history and compute homes sold in the last 12 months, sales volume and average price point. Requires agent details. Adds one cheap JSON request per agent.

## `includeReviews` (type: `boolean`):

Save individual reviews (reviewer, text, rating, date, relationship) to a separate reviews dataset. Requires agent details. Each review is charged as one `review` pay-per-event event.

## `maxReviewsPerAgent` (type: `integer`):

How many reviews to keep per agent (HomeLight shows up to 10 on the profile page).

## `maxRequestsPerCrawl` (type: `integer`):

Hard safety cap on HTTP requests. Leave empty to derive it from Max agents.

## `proxy` (type: `object`):

Select proxies to be used by your crawler.

## Actor input object example

```json
{
  "locations": [
    "atlanta-ga"
  ],
  "startUrls": [],
  "maxAgents": 10,
  "maxConcurrency": 25,
  "includeDetails": true,
  "includeTransactions": true,
  "includeReviews": true,
  "maxReviewsPerAgent": 5,
  "proxy": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `agents` (type: `string`):

One item per HomeLight agent.

## `reviews` (type: `string`):

One item per review, billed as a `review` event.

# 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 = {
    "locations": [
        "atlanta-ga"
    ],
    "startUrls": [],
    "proxy": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("ahmed_jasarevic/homelight-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 = {
    "locations": ["atlanta-ga"],
    "startUrls": [],
    "proxy": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("ahmed_jasarevic/homelight-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 '{
  "locations": [
    "atlanta-ga"
  ],
  "startUrls": [],
  "proxy": {
    "useApifyProxy": false
  }
}' |
apify call ahmed_jasarevic/homelight-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ahmed_jasarevic/homelight-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/HuJJ3R3AzcOn450Hb/builds/7CdhcbVWRC8KM8jMq/openapi.json
