# Zillow Photos Scraper - Full-Res Listing Images (`themineworks/zillow-photos`) Actor

Download every photo from any Zillow listing at full resolution (up to 1536px), by URL or ZPID. One row per photo. No login, no API key. Works in Claude, ChatGPT & any MCP-compatible AI agent.

- **URL**: https://apify.com/themineworks/zillow-photos.md
- **Developed by:** [The Mine Works](https://apify.com/themineworks) (community)
- **Categories:** Real estate, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.73 / 1,000 photos

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## Zillow Photos Scraper

> 🏆 Part of The Mine Works' 149-actor portfolio · 40,000+ runs · 200,000+ results delivered across our full distribution stack · 99.9%+ success rate

> 💰 $0.73 / 1,000 results.

> ⚡ Every photo on a listing at full resolution, up to 1536px wide, one row per photo, by URL or ZPID.
> 💸 Priced per photo actually delivered. A listing with no accessible photos costs nothing on that line.

Every photo from any Zillow listing, at full resolution (up to 1536px wide), by URL or ZPID. One row per photo. No login, no API key.

This is one of three actors extending The Mine Works' four established Zillow actors (search, recently sold, rentals, property details), which already feed the Real Estate MCP server. Point it at anything those four return to get the full image set.

### Input

- **urls** (required), Zillow listing URLs or numeric ZPIDs. Pass `detailUrl` or `zpid` straight from [zillow-search-scraper](https://apify.com/themineworks/zillow-search-scraper) or [zillow-zip-bulk-search](https://apify.com/themineworks/zillow-zip-bulk-search) output.
- **maxItems**, cap on properties processed (each property can return many photos).
- **maxPhotosPerProperty**, cap on photos per property (default 25).

### Output

One row per photo: `zpid`, `address`, `photoIndex`/`photoCount`, full-resolution `url`.

### Pricing

| Event | Price | You pay when |
| --- | --- | --- |
| Photo | $0.000727 | A full-resolution photo lands in your dataset |
| Actor Start | $0.005 | The run starts. Applies from 14 September 2026. One event per GB of memory, and this actor runs on 512 MB, so one per run |

The per-photo charge only fires on a delivered image, so a property with no accessible photos costs nothing on that line. Flat pricing across every Apify plan, not tiered.

### Run it on a schedule

Useful for keeping a photo archive current as listings change. Weekly suits an
active listing, monthly a portfolio you are only archiving. Diff photo counts and
URLs against the last run to catch new images or a listing that has come down.

1. Run it once with the input you want repeated, then click **Save as a task**
   so that exact input is attached to every future run.
2. In the Apify Console go to **Schedules** and create a new one, either a
   preset (hourly / daily / weekly) or a cron expression.
3. Save. It then runs unattended, billed the same pay-per-result way. Nothing
   is charged for the schedule existing.

### FAQ

**What resolution do I get?**
Full resolution, up to 1536px wide, the same images Zillow serves on its own listing pages.

**Can I cap how much a run costs?**
Yes. `maxItems` caps how many properties are processed and `maxPhotosPerProperty` caps photos per property, default 25 and up to 60.

**Do I need a Zillow login or API key?**
No.

**What do I pass in?**
Listing URLs or numeric ZPIDs. `detailUrl` and `zpid` from [zillow-search-scraper](https://apify.com/themineworks/zillow-search-scraper) or [zillow-zip-bulk-search](https://apify.com/themineworks/zillow-zip-bulk-search) output go straight in.

### Use from Claude, ChatGPT & any MCP agent

Hosted MCP endpoint, no install, OAuth on first connect:

```
https://mcp.apify.com/?tools=themineworks/zillow-photos
```

Claude Desktop / Cursor config (token auth):

```json
{
  "mcpServers": {
    "zillow-photos": {
      "url": "https://mcp.apify.com/?tools=themineworks/zillow-photos",
      "headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }
    }
  }
}
```

Ask your agent: *"Pull every full-resolution photo for this Zillow listing: <URL>."*

### Related Zillow actors

- [zillow-property-details](https://apify.com/themineworks/zillow-property-details), full 39-field detail record for these same properties.
- [zillow-search-scraper](https://apify.com/themineworks/zillow-search-scraper) / [zillow-zip-bulk-search](https://apify.com/themineworks/zillow-zip-bulk-search), find properties to pass in here.
- [zillow-agent-leads](https://apify.com/themineworks/zillow-agent-leads), find the agents behind these listings.
- [zillow-rental-listings](https://apify.com/themineworks/zillow-rental-listings) · [zillow-recently-sold](https://apify.com/themineworks/zillow-recently-sold)

For multi-source real estate research over one connection, see the [Real Estate MCP server](https://apify.com/themineworks/real-estate-mcp), which bundles Zillow, Redfin, Realtor and Airbnb tools behind a single endpoint.

Keywords: Zillow photos scraper, Zillow listing images, full resolution property photos, Zillow photo download, real estate image scraper, ZPID photo lookup, bulk property photo extraction

# Actor input Schema

## `urls` (type: `array`):

Zillow listing URLs or numeric ZPIDs to fetch photos for. Pass detailUrl or zpid from zillow-search-scraper / zillow-zip-bulk-search output, e.g. "https://www.zillow.com/homedetails/9837-Easton-Dr-Beverly-Hills-CA-90210/20532709\_zpid/" or the bare ZPID "20532709".

## `maxItems` (type: `integer`):

Cap on how many properties to fetch photos for (not photos themselves — each property can return many photos).

## `maxPhotosPerProperty` (type: `integer`):

Cap on photos returned per property.

## Actor input object example

```json
{
  "urls": [
    "https://www.zillow.com/homedetails/9837-Easton-Dr-Beverly-Hills-CA-90210/20532709_zpid/"
  ],
  "maxPhotosPerProperty": 25
}
```

# 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 = {
    "urls": [
        "https://www.zillow.com/homedetails/9837-Easton-Dr-Beverly-Hills-CA-90210/20532709_zpid/"
    ],
    "maxPhotosPerProperty": 25
};

// Run the Actor and wait for it to finish
const run = await client.actor("themineworks/zillow-photos").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 = {
    "urls": ["https://www.zillow.com/homedetails/9837-Easton-Dr-Beverly-Hills-CA-90210/20532709_zpid/"],
    "maxPhotosPerProperty": 25,
}

# Run the Actor and wait for it to finish
run = client.actor("themineworks/zillow-photos").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 '{
  "urls": [
    "https://www.zillow.com/homedetails/9837-Easton-Dr-Beverly-Hills-CA-90210/20532709_zpid/"
  ],
  "maxPhotosPerProperty": 25
}' |
apify call themineworks/zillow-photos --silent --output-dataset

```

## MCP server setup

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

```

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/9H3NFnmURur27JFXV/builds/RG8PBZ6hZ6hXh0gnu/openapi.json
