Worlds / Real estate
Zillow API
A local Zillow Rental Manager with listings, renter leads, messages, tour requests and price history. Test the leasing agent that answers leads, schedules tours and updates listings.
- Base path
/v1- Auth
- OAuth 2.0 bearer token or server token, the world key
- Endpoints
- 12
- Status
- Active today
This reference previews the surface the Zillow world serves in the closed beta. Paths mirror the public Zillow API; the exact subset is confirmed when your workflow is scoped.
Connect
The run gives your agent these bindings. Keep your SDK; change only where it sends requests.
| binding | meaning |
|---|---|
WORLDS_ZILLOW_URL | This world's origin followed by /v1 |
WORLDS_API_KEY | The world key, accepted wherever Zillow expects a credential |
WORLDS_WORLD_ID | The isolated world's identity |
const base = process.env.WORLDS_ZILLOW_URL + "/v1";
const res = await fetch(base + "/properties/search?location=Austin%2C%20TX&status=for_sale&beds_min=3", {
headers: {
Authorization: "Bearer " + process.env.WORLDS_API_KEY,
Accept: "application/json",
},
});
const { results } = await res.json();
console.log(results[0].zpid);API reference
Properties
Homes and their public record details.
- GET
/v1/properties/searchSearch properties - GET
/v1/properties/{zpid}Get a property - GET
/v1/properties/{zpid}/photosList property photos
Fields · 6
zpid | integer | Zillow property id |
address | object | Street, city, state, zip |
bedrooms | number | Bedrooms |
bathrooms | number | Bathrooms |
livingArea | integer | Square feet |
homeStatus | string | FOR_SALE, FOR_RENT, SOLD |
Zestimates
Estimated value and rent for a home.
- GET
/v1/properties/{zpid}/zestimateGet a Zestimate - GET
/v1/properties/{zpid}/zestimate/historyGet Zestimate history
Fields · 5
zpid | integer | Property id |
zestimate | integer | Estimated value |
rentZestimate | integer | Estimated monthly rent |
valueRange | object | Low and high |
lastUpdated | date | Last refreshed |
Listings
Listings an agent or manager publishes.
- GET
/v1/listingsList listings - POST
/v1/listingsCreate a listing - PUT
/v1/listings/{listingId}Update a listing - DELETE
/v1/listings/{listingId}Remove a listing
Fields · 5
listingId | string | Listing id |
price | integer | List price or rent |
status | string | Active, pending, off market |
description | string | Listing text |
daysOnZillow | integer | Days listed |
Leads
Inquiries from interested renters and buyers.
- GET
/v1/leadsList leads - GET
/v1/leads/{leadId}Get a lead - PATCH
/v1/leads/{leadId}Update a lead
Fields · 6
leadId | string | Lead id |
name | string | Contact name |
email | string | |
phone | string | Phone |
listingId | string | Listing inquired about |
message | string | Inquiry message |
Test workflow
- Prepare. Select the Zillow setup for your workflow and review its starting records, including properties, zestimates, listings.
- Connect. Configure your agent with this world's URL and key using the SDK example. Check that it reaches the intended API before running a test.
- Define. Describe the task, expected final changes and records that must stay untouched. Keep expected outcomes separate from the agent's instructions.
- Run and inspect. Use the dashboard or your workflow's generated CLI setup. Review final records and changes, then rerun from the same starting setup with the relevant failure conditions. Use Deployment and CI to automate the same workflow.
What to verify
- Sample, Avery got a reply quoting the Elm St rent
- Test, Blake toured Saturday 10:00
- Demo, Casey not booked into the 10:00 slot
- Every reply quotes the listing the lead came from
- No showing slot holds two renters
Test file
A task file names the jobs, the policy your agent is given and what the grader reads back from the world's final state. The agent never sees the expected outcomes.
# worlds/tasks.yaml · Zillow
version: 2
connector: zillow
seed: zillow-starter
mode: isolated
policy: >
Answer this morning's leads. Reply with the correct rent and pet policy for
the listing they asked about, and book tours only into open showing slots,
one renter per slot.
tasks:
- id: reply-to-new-renter-leads-with-listing-details
prompt: Reply to new renter leads with listing details
- id: schedule-tours-in-open-showing-slots
prompt: Schedule tours in open showing slots
- id: update-listing-price-and-availability
prompt: Update listing price and availability
expected:
- "Sample, Avery got a reply quoting the Elm St rent"
- "Test, Blake toured Saturday 10:00"
- "Demo, Casey not booked into the 10:00 slot"
- Every reply quotes the listing the lead came from
- No showing slot holds two renters
scenarios:
- lead-delivered-twice
- slot-taken
- rate-limitedSee Tasks and outcomes for every field, and Deployment and CI to run the file on every pull request.
Failure conditions
Each one fires before the handler, at the same step on every run.
| condition | what the agent sees |
|---|---|
lead-delivered-twice | The same inquiry arrives two times |
slot-taken | A tour slot is booked by a teammate during the run |
rate-limited | Listing updates return 429 |
listing-paused | A listing goes inactive mid run |
Starting data
Start each run from the same records and relationships. The overview below describes the Zillow starter; use the setup supplied for your workflow when preparing your own snapshot.
| Records | Starting setup |
|---|---|
| listings | 12 active rentals with photos and rents |
| leads | 50 renter inquiries across new, replied and toured |
| tours | 15 scheduled showings across the week |
| price history | Rent changes over the last 90 days |
| showing slots | Open times set by the leasing team |
The record shapes below reuse this world's API field definitions. They show illustrative values and placeholders, not an importable seed. API responses and seed input can differ; include all required records and references in the accepted import format for your workflow.
Properties records
Properties
Homes and their public record details.
| Field | Type | Meaning / relationship |
|---|---|---|
zpid | integer | Zillow property id |
address | object | Street, city, state, zip |
bedrooms | number | Bedrooms |
bathrooms | number | Bathrooms |
livingArea | integer | Square feet |
homeStatus | string | FOR_SALE, FOR_RENT, SOLD |
{
"zpid": 1,
"address": {},
"bedrooms": 1,
"bathrooms": 1,
"livingArea": 1,
"homeStatus": "<FOR_SALE, FOR_RENT, SOLD>"
}Zestimates records
Zestimates
Estimated value and rent for a home.
| Field | Type | Meaning / relationship |
|---|---|---|
zpid | integer | Property id |
zestimate | integer | Estimated value |
rentZestimate | integer | Estimated monthly rent |
valueRange | object | Low and high |
lastUpdated | date | Last refreshed |
{
"zpid": 1,
"zestimate": 1,
"rentZestimate": 1,
"valueRange": {},
"lastUpdated": "<Last refreshed>"
}Listings records
Listings
Listings an agent or manager publishes.
| Field | Type | Meaning / relationship |
|---|---|---|
listingId | string | Listing id |
price | integer | List price or rent |
status | string | Active, pending, off market |
description | string | Listing text |
daysOnZillow | integer | Days listed |
{
"listingId": "<Listing id>",
"price": 1,
"status": "<Active, pending, off market>",
"description": "<Listing text>",
"daysOnZillow": 1
}Leads records
Leads
Inquiries from interested renters and buyers.
| Field | Type | Meaning / relationship |
|---|---|---|
leadId | string | Lead id |
name | string | Contact name |
email | string | |
phone | string | Phone |
listingId | string | Listing inquired about |
message | string | Inquiry message |
{
"leadId": "<Lead id>",
"name": "<Contact name>",
"email": "person@example.test",
"phone": "<Phone>",
"listingId": "<Listing inquired about>",
"message": "<Inquiry message>"
}