# Zillow Vision Assessor (`jrr_one/zillow-vision-assessor`) Actor

Scrape Zillow properties and enrich the data with AI-generated condition scores, damage detection, and room summaries.

- **URL**: https://apify.com/jrr\_one/zillow-vision-assessor.md
- **Developed by:** [Jorge Rodriguez Ramos](https://apify.com/jrr_one) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$50.00 / 1,000 property analyzeds

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

## 🏡 Zillow Vision AI: Property Condition Assessor

Stop manually clicking through hundreds of listing photos to find your next flip.

This Actor takes standard Zillow listing URLs, safely bypasses anti-bot protections to extract the high-resolution images, and feeds them into a custom **Vision AI Model** to automatically assess the physical condition of the property.

Whether you are looking for heavily distressed properties or turnkey homes, this API gives you structured data on the exact state of the house.

### ✨ Key Features

- **🤖 AI Damage Detection:** Automatically flags explicit, severe property damage (abandonment, heavy debris, broken windows, and major structural decay).
- **📊 Condition Scoring:** Grades rooms on a 1-10 condition rating scale.
- **🕰️ Outdated Feature Detection:** Identifies unrenovated kitchens, old wood paneling, and vintage bathrooms.
- **⚡ Batch Processing:** Input hundreds of URLs at once; the AI processes the imagery concurrently.
- **🛡️ Bulletproof Scraping:** Built-in anti-bot bypass ensures you actually get the data.

### 🎯 Who is this for?

- **Wholesalers & Flippers:** Instantly filter lists of hundreds of properties down to only those that need total renovations.
- **Real Estate Investors:** Filter out move-in-ready homes when looking for value-add opportunities in specific zip codes.
- **PropTech Developers:** Enrich your own real estate CRMs and databases with proprietary AI condition metadata.

### 💰 Pricing

This Actor operates on a **Pay-Per-Event (PPE)** model.
You are charged **$0.05 per successfully analyzed property**.

- *Zero risk:* If a listing has been removed, has no photos, or fails to analyze, you are not charged for that property.

***

### 📥 Input

The Actor accepts a simple JSON object containing an array of Zillow URLs.

```json
{
  "zillow_urls": [
    "https://www.zillow.com/homedetails/3131-Cloister-Ln-Dayton-OH-45449/34996402_zpid/",
    "https://www.zillow.com/homedetails/13921-Gildea-Rd-Belgrade-MO-63622/124384544_zpid/"
  ]
}
```

### 📤 Output Example (Turnkey vs. Distressed)

The Actor outputs clean, highly structured JSON. Because it evaluates images individually, you can easily write scripts to filter properties based on their worst rooms.

Here is a real example showing how the AI contrasts a modern, move-in ready home with an abandoned, distressed property:

```json
[
  {
    "listing_url": "https://www.zillow.com/homedetails/3131-Cloister-Ln-Dayton-OH-45449/34996402_zpid/",
    "address": "3131 Cloister Ln Dayton Oh 45449",
    "total_images_scraped": 10,
    "vision_analysis": [
      {
        "condition_rating": 7,
        "features": ["granite_counters"],
        "is_outdated": false,
        "visible_damage_detected": false,
        "room_detected": "kitchen",
        "raw_vlm_summary": "This image shows a modern kitchen with white cabinets and gray countertops. The walls are painted in a light blue color and the floor is made of light-colored wood. The kitchen has a built-in oven and a dishwasher. The overall style of the kitchen is clean and minimalistic.",
        "source_url": "https://photos.zillowstatic.com/fp/c86047efab19a42f80e6b031d465f568-uncropped_scaled_within_1536_1152.jpg"
      }
    ]
  },
  {
    "listing_url": "https://www.zillow.com/homedetails/13921-Gildea-Rd-Belgrade-MO-63622/124384544_zpid/",
    "address": "13921 Gildea Rd Belgrade Mo 63622",
    "total_images_scraped": 10,
    "vision_analysis": [
      {
        "condition_rating": 2,
        "features": [],
        "is_outdated": true,
        "visible_damage_detected": true,
        "room_detected": "exterior",
        "raw_vlm_summary": "The image shows a single-story building with a corrugated metal roof and a covered porch. The building appears to be old and dilapidated, with peeling paint and broken windows. The overall scene is desolate and abandoned.",
        "source_url": "https://photos.zillowstatic.com/fp/ce78500bd71ddff591775637d3d45986-uncropped_scaled_within_1536_1152.jpg"
      },
      {
        "condition_rating": 4,
        "features": [],
        "is_outdated": false,
        "visible_damage_detected": true,
        "room_detected": "interior",
        "raw_vlm_summary": "The image shows an abandoned room with a ceiling fan hanging from the wooden beams. The walls are covered in peeling paint and the floor is covered in debris. The room appears to be in a state of disrepair, with broken windows and debris covering the walls and ceiling.",
        "source_url": "https://photos.zillowstatic.com/fp/e2b0501840347b36cf80541b5c20dac7-uncropped_scaled_within_1536_1152.jpg"
      }
    ]
  }
]
```

### 💻 API Integration

You can trigger this Actor from your own applications using Apify's REST API. Apify will wait for the RunPod AI to finish and return the final dataset.

**Python Example:**

```python
import requests

url = "https://api.apify.com/v2/acts/YOUR_USERNAME~zillow-vision-assessor/run-sync-get-dataset-items"
params = {"token": "YOUR_APIFY_API_TOKEN"}
payload = {
    "zillow_urls": [
        "https://www.zillow.com/homedetails/13921-Gildea-Rd-Belgrade-MO-63622/124384544_zpid/"
    ]
}

response = requests.post(url, params=params, json=payload)
properties = response.json()

for prop in properties:
    print(f"Assessed {prop['address']}")
    for room in prop['vision_analysis']:
        if room['visible_damage_detected']:
            print(f"⚠️ Damage found in {room['room_detected']}!")
```

# Actor input Schema

## `zillow_urls` (type: `array`):

A list of Zillow property URLs to analyze.

## Actor input object example

```json
{
  "zillow_urls": [
    "https://www.zillow.com/homedetails/3131-Cloister-Ln-Dayton-OH-45449/34996402_zpid/",
    "https://www.zillow.com/homedetails/13921-Gildea-Rd-Belgrade-MO-63622/124384544_zpid/"
  ]
}
```

# 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 = {
    "zillow_urls": [
        "https://www.zillow.com/homedetails/3131-Cloister-Ln-Dayton-OH-45449/34996402_zpid/",
        "https://www.zillow.com/homedetails/13921-Gildea-Rd-Belgrade-MO-63622/124384544_zpid/"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("jrr_one/zillow-vision-assessor").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 = { "zillow_urls": [
        "https://www.zillow.com/homedetails/3131-Cloister-Ln-Dayton-OH-45449/34996402_zpid/",
        "https://www.zillow.com/homedetails/13921-Gildea-Rd-Belgrade-MO-63622/124384544_zpid/",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("jrr_one/zillow-vision-assessor").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 '{
  "zillow_urls": [
    "https://www.zillow.com/homedetails/3131-Cloister-Ln-Dayton-OH-45449/34996402_zpid/",
    "https://www.zillow.com/homedetails/13921-Gildea-Rd-Belgrade-MO-63622/124384544_zpid/"
  ]
}' |
apify call jrr_one/zillow-vision-assessor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jrr_one/zillow-vision-assessor"
        }
    }
}
```

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/JD53naNbMa1Fh4cpp/builds/WLr2yxeNHCY5XJWes/openapi.json
