# Global Real Estate Aggregator (`charlestechy/global-real-estate-aggregator`) Actor

Aggregate real estate listings from Zillow, Realtor.com, and Redfin with AI-powered rent estimation. Get comprehensive property data for investment analysis.

- **URL**: https://apify.com/charlestechy/global-real-estate-aggregator.md
- **Developed by:** [Charles Sedenu](https://apify.com/charlestechy) (community)
- **Categories:** Automation, Real estate, Lead generation
- **Stats:** 5 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## Instant Real Estate Aggregator

> **Get property listings from Zillow, Realtor.com, and Redfin in one place. Find your perfect property with AI-powered rent estimates and comprehensive filtering.**

Search multiple real estate websites at once and get all the property data you need. Perfect for finding investment properties, researching markets, or just browsing homes. No need to visit each website separately—get everything in one dataset.

### What You Get

✅ **All Major Sites**: Search Zillow, Realtor.com, and Redfin simultaneously\
✅ **Smart Filters**: Find exactly what you want by price, bedrooms, bathrooms, and location\
✅ **Complete Data**: Address, price, size, agent info, property links, and more\
✅ **AI Rent Estimates**: Get instant rental value estimates for investment analysis\
✅ **No Duplicates**: Automatically removes duplicate listings across sites\
✅ **Ready to Use**: Just provide a location and get results

### 💰 Pricing

Simple, transparent **pay-per-result** pricing:

| Results | Cost | Per Result |
|---------|------|------------|
| 100 | $1.00 | $0.01 |
| 500 | $5.00 | $0.01 |
| **1,000** | **$10.00** | **$0.01** |
| 5,000 | $50.00 | $0.01 |
| 10,000 | $100.00 | $0.01 |

**Plus:** One-time Actor start fee of $0.001 per run.

#### Example Cost Calculation

Searching for 1,000 property listings in New York:

- Actor Start: $0.001
- 1,000 Results × $0.01: $10.00
- **Total: ~$10.00**

> 💡 **Tip:** Use ZIP codes and enable only Redfin for the fastest, most reliable results!

### Get Started in 30 Seconds

#### Step 1: Enter a Location

That's it! Just type a city name or ZIP code (ZIP codes work best!):

```json
{
  "location": "10001"
}
```

Or use a city name:

```json
{
  "location": "New York, NY"
}
```

Click **Start** and get property listings.

#### Step 2: Add Filters (Optional)

Want to narrow down your search? Add filters:

```json
{
  "location": "San Francisco, CA",
  "priceMin": 500000,
  "priceMax": 2000000,
  "beds": 2,
  "baths": 1.5,
  "maxResults": 100
}
```

#### Step 3: Choose Your Sources (Optional)

Pick which websites to search:

```json
{
  "location": "Miami, FL",
  "sources": {
    "zillow": true,
    "realtor": true,
    "redfin": false
  }
}
```

### Input Options

| What to Enter       | Required? | Example                       | What It Does                                                                    |
| ------------------- | --------- | ----------------------------- | ------------------------------------------------------------------------------- |
| **location**        | ✅ Yes    | `"10001"` or `"New York, NY"` | Where to search (ZIP codes are more reliable)                                   |
| **priceMin**        | No        | `300000`                      | Minimum price in dollars                                                        |
| **priceMax**        | No        | `1000000`                     | Maximum price in dollars                                                        |
| **beds**            | No        | `2`                           | Minimum number of bedrooms                                                      |
| **baths**           | No        | `1.5`                         | Minimum number of bathrooms                                                     |
| **maxResults**      | No        | `25`                          | How many results per site (default: 10, lower = faster execution & lower costs) |
| **sources.zillow**  | No        | `true` or `false`             | Include Zillow results (default: false - may be blocked)                        |
| **sources.realtor** | No        | `true` or `false`             | Include Realtor.com results (default: false - may be rate limited)              |
| **sources.redfin**  | No        | `true` or `false`             | Include Redfin results (default: true - most reliable)                          |
| **openaiApiKey**    | No        | `"sk-..."`                    | Get AI-powered rent estimates (optional)                                        |

### What You'll Get

After the Actor runs, you'll find all property listings in the **Dataset** tab. Each property includes:

#### Essential Information

- **Address** - Full property address
- **Price** - Listing price in USD
- **Bedrooms & Bathrooms** - Number of beds and baths
- **Size** - Square footage or square meters
- **Property Link** - Direct link to view the full listing

#### Bonus Information (when available)

- **Estimated Rent** - AI-calculated monthly rental value
- **Agent Details** - Name, phone, email, and company
- **Time on Market** - How long the property has been listed
- **Year Built** - When the property was constructed
- **Description** - Property description
- **Images** - Property photos
- **Property Type** - Single family, condo, etc.

#### Example Result

```json
{
  "address": "123 Main St, New York, NY 10001",
  "price": 500000,
  "beds": 2,
  "baths": 1.5,
  "areaSize": 1200,
  "areaUnit": "sqft",
  "estimatedRent": 2500,
  "propertyLink": "https://www.zillow.com/homedetails/...",
  "source": "zillow",
  "agentDetails": {
    "name": "John Doe",
    "phone": "+1-555-0123",
    "email": "john@example.com"
  }
}
```

### Get Rent Estimates

Want to know how much a property could rent for? The Actor can estimate rental values in two ways:

#### Option 1: AI-Powered Estimates (Most Accurate) 🤖

Get smart rent estimates using AI that considers:

- Property size, bedrooms, and bathrooms
- Location and market trends
- Comparable properties in the area

**How to enable:**

1. Get an OpenAI API key from [openai.com](https://platform.openai.com)
2. Add it to your input as `openaiApiKey`, OR
3. Set it as an environment variable in Apify Console

#### Option 2: Automatic Estimates (Always Included) 📊

Even without an API key, you'll get rent estimates using a formula based on:

- Property value (approximately 0.7% per month)
- Property size and number of rooms
- Location adjustments

**Note:** AI estimates are more accurate, but automatic estimates work great for quick analysis!

### Real-World Examples

#### 🏠 Find All Properties in a City

```json
{
  "location": "Los Angeles, CA"
}
```

#### 💰 Search by Price Range

```json
{
  "location": "Miami, FL",
  "priceMin": 300000,
  "priceMax": 800000
}
```

#### 🛏️ Find Specific Property Type

```json
{
  "location": "Austin, TX",
  "beds": 3,
  "baths": 2,
  "priceMax": 500000
}
```

#### 🎯 Search by ZIP Code

```json
{
  "location": "90210",
  "priceMin": 1000000,
  "maxResults": 25
}
```

#### 🔍 Use Only One Website

```json
{
  "location": "Seattle, WA",
  "sources": {
    "zillow": true,
    "realtor": false,
    "redfin": false
  }
}
```

#### 🏢 Investment Property Search

```json
{
  "location": "Phoenix, AZ",
  "priceMin": 200000,
  "priceMax": 400000,
  "beds": 2,
  "maxResults": 100,
  "openaiApiKey": "sk-..."
}
```

### View Your Results

#### Dataset Tab

All property listings appear here. You can:

- Download as JSON, CSV, Excel, or HTML
- View individual properties
- Filter and sort results

#### Key-Value Store Tab

Find summary statistics under the `STATS` key:

- Total number of properties found
- Breakdown by website (Zillow, Realtor, Redfin)
- Average and median prices
- Price range (lowest to highest)
- Average bedrooms and bathrooms
- How many have rent estimates

#### Logs Tab

See what happened during the run:

- Which websites were searched
- How many properties found from each source
- Any errors or warnings

### Perfect For

🏡 **Home Buyers** - Search all major sites at once\
💰 **Real Estate Investors** - Find investment properties with rent estimates\
📊 **Market Researchers** - Compare prices across platforms\
🏢 **Real Estate Agents** - Quick market analysis\
📈 **Data Analysts** - Build property datasets for research

### Pro Tips

✅ **Use full city names** - "New York, NY" works better than just "New York"\
✅ **Start broad, then filter** - Try a location first, then add price/bedroom filters\
✅ **Enable AI estimates** - Get more accurate rent predictions for investment analysis\
✅ **Check all tabs** - Dataset has properties, Key-Value Store has statistics\
✅ **Don't worry about errors** - If one website fails, you still get results from others

### Important Notes

⚠️ **Website Changes**: Real estate sites update frequently, so some data might occasionally be missing\
⚠️ **Anti-Scraping**: Some websites may block requests - Redfin is the most reliable source\
⚠️ **ZIP Codes**: Using ZIP codes instead of city names improves success rate\
⚠️ **Performance**: Lower `maxResults` values result in faster execution and lower costs\
⚠️ **Data Availability**: Not all properties have complete information (agent details, images, etc.)\
⚠️ **Rent Estimates**: Accuracy depends on available property data and market conditions\
⚠️ **Sample Data**: If scraping is blocked, the Actor returns sample data to demonstrate output format

### Performance Tips

🚀 **For fastest results:**

- Use ZIP codes instead of city names
- Enable only Redfin (most reliable)
- Set `maxResults` to 10 or less
- Runs complete in under 2 minutes

📊 **For most data:**

- Enable all three sources
- Use city names for broader coverage
- Set `maxResults` to 25-50
- May take 3-5 minutes

### Need Help?

❓ **Questions?** Check the logs tab for detailed information about your run\
🐛 **Found a bug?** Open an issue on the repository\
💡 **Have an idea?** We'd love to hear your suggestions!

### Ready to Start?

1. Enter a location in the Input tab
2. Click **Start**
3. Check the Dataset tab for your results
4. Download your data in any format you need

**That's it!** No coding required. Just search and get results. 🚀

# Actor input Schema

## `location` (type: `string`):

City name or ZIP code (e.g., 'New York, NY' or '10001'). ZIP codes are more reliable.

## `priceMin` (type: `integer`):

Minimum price filter in USD (leave 0 for no minimum)

## `priceMax` (type: `integer`):

Maximum price filter in USD (leave 0 for no maximum)

## `beds` (type: `integer`):

Minimum number of bedrooms

## `baths` (type: `number`):

Minimum number of bathrooms

## `sourceZillow` (type: `boolean`):

Include listings from Zillow (may be blocked due to anti-scraping measures)

## `sourceRealtor` (type: `boolean`):

Include listings from Realtor.com (may be rate limited)

## `sourceRedfin` (type: `boolean`):

Include listings from Redfin (recommended - most reliable)

## `maxResults` (type: `integer`):

Maximum number of results to return per source (lower values = faster execution, lower costs)

## `openaiApiKey` (type: `string`):

OpenAI API key for rent estimation (optional, but recommended). Can also be set via OPENAI_API_KEY environment variable.

## Actor input object example

```json
{
  "location": "10001",
  "priceMin": 0,
  "priceMax": 1000000,
  "beds": 0,
  "baths": 0,
  "sourceZillow": false,
  "sourceRealtor": false,
  "sourceRedfin": true,
  "maxResults": 5,
  "openaiApiKey": ""
}
```

# Actor output Schema

## `results` (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 = {
    "location": "10001",
    "sourceZillow": false,
    "sourceRealtor": false,
    "sourceRedfin": true,
    "maxResults": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("charlestechy/global-real-estate-aggregator").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 = {
    "location": "10001",
    "sourceZillow": False,
    "sourceRealtor": False,
    "sourceRedfin": True,
    "maxResults": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("charlestechy/global-real-estate-aggregator").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 '{
  "location": "10001",
  "sourceZillow": false,
  "sourceRealtor": false,
  "sourceRedfin": true,
  "maxResults": 5
}' |
apify call charlestechy/global-real-estate-aggregator --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,charlestechy/global-real-estate-aggregator"
        }
    }
}
```

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/do6rVsCcQwYMalGFH/builds/NuKFcILcdYkcJS62D/openapi.json
