# Real-estate reference

Subcommands: `zillow-listing`, `zillow-property`, `redfin-listing`, `redfin-property`, `airbnb-listing`, `airbnb-property` — 5 credits each.

`*-listing` is for filtered searches; `*-property` is a single-property deep dive.

---

## zillow-listing

```bash
hasdata zillow-listing --keyword "Austin, TX" --type forSale [filters] --raw | jq '.results[]'
```

Required:
- `--keyword "City, ST"` (default: `New York, NY`)
- `--type forSale|forRent|sold` (default: `forSale`)

Price / size (bracketed pairs, kept as floats):
- `--price-min N --price-max N`
- `--beds-min N --beds-max N`
- `--baths-min N --baths-max N`
- `--square-feet-min N --square-feet-max N`
- `--lot-size-min N --lot-size-max N`
- `--year-built-min N --year-built-max N`
- `--hoa N` — max HOA fee
- `--parking-spots-min N`

Array filters (enum-validated, lowercase camelCase values):
- `--home-types house|townhome|multiFamily|condo|lot|apartment|manufactured` (repeatable)
- `--pets allowsLargeDogs|allowsSmallDogs|allowsCats` (repeatable)
- `--other-amenities ac|pool|waterfront|onsiteParking|inUnitLaundry|acceptZillowApplications|incomeRestricted|apartmentCommunity` (repeatable)
- `--views city|mountain|park|water` (repeatable)
- `--basement finished|unfinished` (repeatable)
- `--property-status comingSoon|acceptingBackupOffers|pendingAndUnderContract` (repeatable)
- `--listing-publish-options ownerPosted|agentListed|newConstruction|foreclosures|auctions|foreclosed|preForeclosures` (repeatable)
- `--tours open|3d` (repeatable)

Booleans:
- `--must-have-garage` — only listings with a garage
- `--single-story-only`
- `--hide55plus-communities`

Other:
- `--listing-type byAgent|byOwner`
- `--days-on-zillow 1|7|14|30|90|6m|12m|24m|36m`
- `--keywords "open floor plan"` — refinement keywords (matches in description)
- `--move-in-date 2026-06-01`
- `--page N` — pagination
- `--sort verifiedSource|homesForYou|priceHighToLow|priceLowToHigh|paymentHighToLow|paymentLowToHigh|newest|bedrooms|bathrooms|squareFeet|lotSize`

### Examples

```bash
# Family home, mid-market, sorted cheapest first
hasdata zillow-listing \
  --keyword "Austin, TX" --type forSale \
  --price-min 400000 --price-max 900000 \
  --beds-min 3 --beds-max 5 --baths-min 2 \
  --home-types house --home-types townhome \
  --sort priceLowToHigh --raw | jq '.results[] | {address, price, beds, baths}'

# Pet-friendly rental
hasdata zillow-listing \
  --keyword "Seattle, WA" --type forRent \
  --price-max 4000 \
  --pets allowsSmallDogs --pets allowsCats \
  --parking-spots-min 1 --must-have-garage \
  --raw

# Recently sold comps
hasdata zillow-listing \
  --keyword "Miami, FL" --type sold \
  --square-feet-min 1500 --square-feet-max 4000 \
  --year-built-min 2000 --year-built-max 2020 \
  --days-on-zillow 12m --sort newest --raw
```

Bracketed query params (`price[max]`, `homeTypes[]`, `yearBuilt[min]`) are handled by the CLI — pass the kebab-case flags shown above, not the raw API names.

## zillow-property

```bash
hasdata zillow-property --url "https://www.zillow.com/homedetails/.../123_zpid/" --raw | jq .
```

Or with `--zpid <ID>`. Returns full property details (photos, history, schools, taxes, walk-score, etc.).

## redfin-listing

Similar shape to `zillow-listing` but Redfin's enums differ. Run `hasdata redfin-listing --help` for the exact list. Common pattern:

```bash
hasdata redfin-listing --location "San Francisco, CA" --status forSale \
  --min-price 800000 --max-price 1500000 \
  --min-beds 2 --raw
```

## redfin-property

```bash
hasdata redfin-property --url "https://www.redfin.com/CA/San-Francisco/.../home/12345" --raw
```

## airbnb-listing

```bash
hasdata airbnb-listing --location "Lisbon, Portugal" \
  --check-in 2026-06-15 --check-out 2026-06-22 \
  --adults 2 --price-max 200 --raw
```

Run `--help` for the full filter set (room type, amenities, instant book, etc.).

## airbnb-property

```bash
hasdata airbnb-property --url "https://www.airbnb.com/rooms/12345678" --raw
```

---

## Non-obvious use cases

- **Investment screening** — combine `--type sold` + `--days-on-zillow 12m` + `--year-built-min` + `--lot-size-min` to surface flip / value-add candidates. Then `xargs` into `zillow-property` for ARV analysis.
- **Tax-appeal comps** — `--type sold --keyword "ZIP CODE" --days-on-zillow 12m` filtered to your home's beds/baths/sqft band gives recent sales the assessor used; export to CSV with `jq -r '.results[] | [.address, .price, .beds, .baths, .squareFootage, .soldDate] | @csv'`.
- **Appraiser comp pull** — same trick, narrower square-footage and same year-built band.
- **Motivated-seller signal** — `--type forSale --days-on-zillow 90` returns listings that have lingered. Often willing to negotiate.
- **Pre-relocation neighborhood scan** — run the same `--type forRent` filter across 5–10 neighborhoods, dump rent distributions with `jq '.results[].price'`, eyeball cost differences before booking visits.
- **STR-vs-LTR feasibility** — pair `airbnb-listing` for nightly rates with `zillow-listing --type forSale` for purchase price in the same area; compute gross yield client-side.
- **HOA filter** — `--hoa N` caps fee; useful for buyers who want max payment ceilings.
- **School-driven house hunt** — `zillow-property` returns school ratings; filter `zillow-listing` results down by walking each property and keeping those with rating ≥ X.
- **Open-houses this weekend** — Zillow tags open-house listings; check `.results[].openHouseTimes` for upcoming slots.
- **3D-tour / virtual-tour-only filter** — `--tours 3d` → only listings with virtual tours. Useful for remote / international buyers.
- **Pet-friendly rentals at scale** — `--pets allowsLargeDogs --pets allowsCats` for multi-pet households. Pairs well with `--keyword` for specific neighborhoods.
- **Foreclosure and pre-foreclosure leads** — `--listing-publish-options foreclosures --listing-publish-options preForeclosures`.
- **Non-traditional listing types** — `--listing-type byOwner` for FSBO; `--listing-type byAgent` for agent-listed (default mix).
- **Move-in date constraint** — `--move-in-date YYYY-MM-DD` for rental searches with a hard timing requirement.
- **Bulk address verification** — pipe a list of property URLs through `zillow-property` to confirm they resolve and pull the canonical address Zillow uses.
- **Airbnb price-arbitrage check** — same dates, same area, two `airbnb-listing` calls with different `--adults` counts to surface listings that don't scale per-person price. Sometimes the difference is the deal.
- **Verify a Redfin/Zillow listing is real** — `redfin-property --url X --raw | jq .status` to confirm it hasn't been pulled.

