# Real Estate AI Analyzer (`studio-amba/real-estate-ai-analyzer`) Actor

AI-powered real estate investment analysis. Scrape any European property listing — get price assessment, investment score, renovation estimate, and neighborhood insights. Supports Immoweb, Funda, Idealista, Rightmove, and more.

- **URL**: https://apify.com/studio-amba/real-estate-ai-analyzer.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 result scrapeds

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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 AI Analyzer

Turn any European property listing into an investment report. Paste listing URLs from Immoweb, Funda, Idealista, Rightmove, or any other portal -- get AI-powered price assessments, investment scores, renovation estimates, and neighborhood insights in seconds.

### Why use this actor?

Evaluating real estate deals manually takes hours per listing. This actor automates the analysis: scrape any property listing, run it through GPT-4o, and get structured investment intelligence you can filter, sort, and export. Property investors, agencies, and analysts use it to screen hundreds of listings and surface the best opportunities instantly.

### What you get

For every listing URL you provide, the actor scrapes the property data and generates:

- **Property Summary** -- 2-3 sentence marketing overview
- **Price Assessment** -- `below_market`, `at_market`, or `above_market` with reasoning
- **Price per m2** -- calculated automatically from price and surface area
- **Investment Score** -- 1-10 rating with detailed reasoning
- **Renovation Estimate** -- `none`, `light`, `moderate`, or `heavy` (photo-based in Full mode)
- **Neighborhood Insights** -- what the AI infers about the area from the listing
- **Key Features** -- 5 bullet-point highlights for quick scanning

### Analysis modes

| Mode | Model | What it analyzes | Cost per listing |
|------|-------|-----------------|-----------------|
| **Basic** | GPT-4o-mini | Text data only (title, price, description, specs) | ~$0.003 |
| **Full** | GPT-4o Vision | Text + up to 5 property photos for condition assessment | ~$0.03 |

Full mode examines property photos to assess condition, renovation needs, quality of finishes, natural light, and overall appeal -- giving you deeper insights that text alone cannot provide.

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `startUrls` | Array | Yes | Property listing URLs to analyze |
| `maxResults` | Integer | No | Maximum listings to analyze (default: 10) |
| `analysisDepth` | String | No | `basic` (text only) or `full` (with photo analysis) |
| `proxyConfiguration` | Object | No | Proxy settings (recommended for some portals) |

### Output

Each result contains scraped property data plus AI analysis:

| Field | Type | Example |
|-------|------|---------|
| `url` | String | `"https://www.immoweb.be/en/classified/house/for-sale/..."` |
| `title` | String | `"Charming townhouse in Ixelles"` |
| `price` | Number | `485000` |
| `currency` | String | `"EUR"` |
| `address` | String | `"Rue de la Paix 42, 1050 Ixelles"` |
| `city` | String | `"Ixelles"` |
| `bedrooms` | Number | `3` |
| `bathrooms` | Number | `2` |
| `surface` | Number | `180` |
| `buildYear` | Number | `1920` |
| `epcScore` | String | `"D"` |
| `description` | String | Original listing description |
| `imageUrls` | Array | Property photo URLs |
| `aiPropertySummary` | String | `"Elegant 3-bed townhouse in the heart of Ixelles..."` |
| `aiPriceAssessment` | String | `"at_market"` |
| `aiPriceAssessmentReasoning` | String | `"At EUR 2,694/m2 for Ixelles, this is..."` |
| `aiPricePerSqm` | Number | `2694` |
| `aiInvestmentScore` | Number | `7` |
| `aiInvestmentScoreReasoning` | String | `"Strong location with rental demand..."` |
| `aiRenovationNeeded` | String | `"light"` |
| `aiNeighborhoodInsights` | String | `"Ixelles is a sought-after commune..."` |
| `aiKeyFeatures` | Array | `["Period features with original moldings", ...]` |
| `analysisDepth` | String | `"basic"` or `"full"` |
| `scrapedAt` | String | `"2026-04-04T14:30:00.000Z"` |

### Example output

```json
{
    "url": "https://www.immoweb.be/en/classified/house/for-sale/ixelles/1050/12345678",
    "title": "Charming townhouse in Ixelles",
    "price": 485000,
    "currency": "EUR",
    "address": "Rue de la Paix 42, 1050 Ixelles",
    "city": "Ixelles",
    "postalCode": "1050",
    "country": "BE",
    "bedrooms": 3,
    "bathrooms": 2,
    "surface": 180,
    "landSurface": null,
    "buildYear": 1920,
    "epcScore": "D",
    "description": "Beautiful townhouse with period features...",
    "imageUrls": ["https://..."],
    "propertyType": "house",
    "listingType": "sale",
    "agencyName": "Century 21 Ixelles",
    "aiPropertySummary": "Elegant 3-bedroom townhouse in the heart of Ixelles with original period features, high ceilings, and a private garden. The property offers 180m2 of living space across three floors in one of Brussels' most desirable communes.",
    "aiPriceAssessment": "at_market",
    "aiPriceAssessmentReasoning": "At EUR 2,694/m2 for Ixelles, this aligns with current market rates for period properties requiring some energy upgrades. The D EPC rating may deter some buyers, creating negotiation room.",
    "aiPricePerSqm": 2694,
    "aiInvestmentScore": 7,
    "aiInvestmentScoreReasoning": "Strong location with consistent rental demand and historical price appreciation. The EPC D rating presents an opportunity to add value through energy renovation, which may qualify for Belgian tax incentives.",
    "aiRenovationNeeded": "light",
    "aiNeighborhoodInsights": "Ixelles is a sought-after Brussels commune known for its vibrant restaurant scene, proximity to the European Quarter, and excellent public transport. Properties here tend to hold value well and attract both young professionals and families.",
    "aiKeyFeatures": [
        "Period features with original moldings and high ceilings",
        "Private garden in central Ixelles",
        "3 bedrooms across three floors",
        "Walking distance to Flagey and Bois de la Cambre",
        "Strong rental potential in prime Brussels location"
    ],
    "analysisDepth": "basic",
    "scrapedAt": "2026-04-04T14:30:00.000Z"
}
````

### Supported portals

The actor uses Playwright for JavaScript rendering, so it works with virtually any real estate portal. Extraction is optimized for:

- **Belgium:** Immoweb, Zimmo, Logic-Immo
- **Netherlands:** Funda, Pararius
- **Spain:** Idealista, Fotocasa
- **UK:** Rightmove, Zoopla, OnTheMarket
- **France:** SeLoger, LeBonCoin Immobilier
- **Germany:** ImmobilienScout24, Immowelt
- **Any site** with JSON-LD RealEstateListing or Product markup

### Use cases

- **Property investors** -- Screen hundreds of listings and sort by investment score to find undervalued deals
- **Real estate agencies** -- Generate quick property summaries and market assessments for clients
- **Relocation services** -- Analyze neighborhoods and price levels across European cities
- **Market researchers** -- Build datasets of property prices with standardized price-per-m2 metrics
- **Portfolio managers** -- Monitor new listings and flag below-market opportunities automatically

### Cost estimate

**Actor compute:** ~0.15 compute units per listing (Playwright + page rendering).

**AI analysis cost:** included in the per-result price. There is no separate AI bill, no API key, and nothing to configure.

### Tips for best results

- **Paste listing URLs or a search URL** -- search pages are expanded into individual listings automatically
- **Immoweb, Funda, and Idealista** give the best extraction results due to structured markup
- **Full analysis mode** is most valuable for older properties where photo-based condition assessment matters
- **Use proxies** if you're analyzing many listings from the same portal to avoid rate limiting
- **Sort results by aiInvestmentScore** to quickly find the most promising opportunities

### Limitations

- The actor scrapes publicly available listing data only
- AI price assessments are estimates based on listing data, not formal appraisals
- Photo analysis quality depends on the images provided by the listing
- Some portals with heavy anti-bot protection may require residential proxy configuration
- Very large batches (500+ listings) should be split across multiple runs

### How to scrape Real Estate Ai Analyzer data

1. Go to this actor's page on the [Apify Store](https://apify.com/store).
2. Click **Try for free** to open it in Apify Console.
3. Configure your search query or URL, set the maximum number of results, and adjust proxy settings if needed.
4. Click **Start** and wait for the run to finish.
5. Download your data in JSON, CSV, Excel, or connect it to your workflow via API.

You can also schedule regular runs, set up webhooks for real-time notifications, or integrate the results directly into your application using the [Apify API](https://docs.apify.com/api).

# Actor input Schema

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

Real estate listing URLs to analyze. Supports Immoweb, Funda, Idealista, Rightmove, and most European real estate portals.

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

Maximum number of listings to analyze. Each listing requires one OpenAI API call.

## `analysisDepth` (type: `string`):

Choose analysis level. 'Basic' uses text data only (~$0.003/listing). 'Full' includes photo analysis for renovation assessment and condition scoring (~$0.03/listing).

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

Proxy settings for scraping listing pages. Recommended for Immoweb and sites with anti-bot protection.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.immoweb.be/en/search/house/for-sale?countries=BE&page=1"
    }
  ],
  "maxResults": 3,
  "analysisDepth": "basic",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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 = {
    "startUrls": [
        {
            "url": "https://www.immoweb.be/en/search/house/for-sale?countries=BE&page=1"
        }
    ],
    "maxResults": 3,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/real-estate-ai-analyzer").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 = {
    "startUrls": [{ "url": "https://www.immoweb.be/en/search/house/for-sale?countries=BE&page=1" }],
    "maxResults": 3,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/real-estate-ai-analyzer").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://www.immoweb.be/en/search/house/for-sale?countries=BE&page=1"
    }
  ],
  "maxResults": 3,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call studio-amba/real-estate-ai-analyzer --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=studio-amba/real-estate-ai-analyzer",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Real Estate AI Analyzer",
        "description": "AI-powered real estate investment analysis. Scrape any European property listing — get price assessment, investment score, renovation estimate, and neighborhood insights. Supports Immoweb, Funda, Idealista, Rightmove, and more.",
        "version": "0.1",
        "x-build-id": "FwHK76ikaz0h8xqlJ"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/studio-amba~real-estate-ai-analyzer/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-studio-amba-real-estate-ai-analyzer",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/studio-amba~real-estate-ai-analyzer/runs": {
            "post": {
                "operationId": "runs-sync-studio-amba-real-estate-ai-analyzer",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/studio-amba~real-estate-ai-analyzer/run-sync": {
            "post": {
                "operationId": "run-sync-studio-amba-real-estate-ai-analyzer",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "startUrls": {
                        "title": "Listing URLs",
                        "type": "array",
                        "description": "Real estate listing URLs to analyze. Supports Immoweb, Funda, Idealista, Rightmove, and most European real estate portals.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxResults": {
                        "title": "Max Listings",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum number of listings to analyze. Each listing requires one OpenAI API call.",
                        "default": 10
                    },
                    "analysisDepth": {
                        "title": "Analysis Depth",
                        "enum": [
                            "basic",
                            "full"
                        ],
                        "type": "string",
                        "description": "Choose analysis level. 'Basic' uses text data only (~$0.003/listing). 'Full' includes photo analysis for renovation assessment and condition scoring (~$0.03/listing).",
                        "default": "basic"
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy settings for scraping listing pages. Recommended for Immoweb and sites with anti-bot protection."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
