Rental Deal Alerts — New Listings & Price Drops, No Login avatar

Rental Deal Alerts — New Listings & Price Drops, No Login

Pricing

from $10.00 / 1,000 alerts

Go to Apify Store
Rental Deal Alerts — New Listings & Price Drops, No Login

Rental Deal Alerts — New Listings & Price Drops, No Login

Watch Zillow and Zumper rentals by city, ZIP, price and beds and get only NEW listings and PRICE DROPS since the last run, with previous price, days on market and specials. Schedule it every few hours. No login. MCP-ready. $10 per 1,000 alerts.

Pricing

from $10.00 / 1,000 alerts

Rating

0.0

(0)

Developer

Khrystyna Skotte

Khrystyna Skotte

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Rental Deal Alerts — new listings & price drops from Zillow and Zumper

Schedule this actor and get only what changed: rentals that appeared since the last run and match your city, budget, bedrooms and home type, plus price drops on listings it has already seen. It remembers every listing it reported, so a run every few hours emits just the delta (changeType: new or price_drop), posts a summary to your webhook, and costs you only for actual alerts.

Built for renters hunting a specific budget, investors tracking rent softening in a submarket, and relocation or property-management firms who need a feed rather than a spreadsheet to diff.

How it works

  1. Geocodes each location (city, ZIP or neighborhood) and searches Zillow and Zumper rentals inside it, newest first, with your rent, bedroom and home-type filters applied server-side.
  2. Compares every listing against the monitor's saved state (source:listingId → last price).
  3. Emits a record when the listing is unseen (new) or its rent is lower than last time (price_drop, with previousPrice and priceChangePct). price_increase alerts are off by default.
  4. Saves the updated state, then POSTs a run summary to webhookUrl if set.

State lives in a named key-value store rental-alerts-<hash of monitorId> in your Apify account, capped at 50,000 listings (least recently seen are dropped). Delete the store to reset a monitor.

Input

FieldDefaultNotes
locations["Austin, TX"]Cities, ZIPs or neighborhoods; each is searched on every source
sources["zillow","zumper"]Either or both
minPrice / maxPrice0 / 3000Monthly rent in USD; 0 = no bound
minBeds10 includes studios
homeTypes[]house, apartment, townhouse, condo, multiFamily; empty = all
maxNewPerLocation5Cap on new alerts per location per run; the rest stay unseen and come out next run
alertOnPriceDropstrueEmit price_drop when a seen listing is now cheaper
alertOnPriceIncreasesfalseAlso emit price_increase
firstRunModeemitAllemitAll reports current matches on the first run; baseline records them silently
webhookUrl""Optional POST target for the run summary
monitorIddefaultOne state store per ID — run several watchlists side by side
maxItems10Total alerts per run (new + price changes)
proxyConfigurationApify residential, USRequired for Zillow on the Apify platform
  1. Create a task with your filters and a meaningful monitorId (austin-2br-under-2k).
  2. First run: set firstRunMode to baseline. This records everything currently listed (up to 500 per source per location), emits nothing, and stops your first alert from being a 500-row backlog.
  3. Switch firstRunMode back to emitAll (it only matters while the state is empty), raise maxNewPerLocation and maxItems to what you want per run.
  4. Schedule the task every 2–6 hours. Both sites post throughout the day; a 4-hour cadence catches new listings within the window that matters for a competitive rental market. Daily is fine for price-drop tracking only.
  5. Point webhookUrl at Slack (incoming webhook), Zapier, Make, or your own endpoint.

The default settings ({}) run emitAll for Austin, TX so you see real output on the first try.

Example: investor watching rent cuts on houses in two suburbs

{
"locations": ["Round Rock, TX", "Pflugerville, TX"],
"sources": ["zillow", "zumper"],
"minPrice": 1500,
"maxPrice": 3500,
"minBeds": 3,
"homeTypes": ["house"],
"maxNewPerLocation": 20,
"alertOnPriceDrops": true,
"firstRunMode": "baseline",
"webhookUrl": "https://hooks.slack.com/services/XXX/YYY/ZZZ",
"monitorId": "north-austin-sfh",
"maxItems": 200
}

Output

One record per alert:

{
"source": "zillow",
"listingId": "29547445",
"address": "12716 Margit Dr",
"city": "Austin",
"state": "TX",
"zip": "78729",
"latitude": 30.445044,
"longitude": -97.7621,
"price": 2100,
"previousPrice": 2300,
"priceChangePct": -8.7,
"beds": 3,
"baths": 3,
"sqft": 1725,
"homeType": "house",
"daysOnMarket": 6,
"listedAt": "2026-09-22",
"specialOffer": null,
"url": "https://www.zillow.com/homedetails/12716-Margit-Dr-Austin-TX-78729/29547445_zpid/",
"imageUrl": "https://photos.zillowstatic.com/fp/29d480fff38872098ef462d569dd55e6-p_e.jpg",
"location": "Austin, TX",
"changeType": "price_drop",
"firstSeenAt": "2026-09-22T14:00:03.118Z",
"monitorId": "default"
}

previousPrice and priceChangePct are null on new records. firstSeenAt is when this monitor first recorded the listing.

Webhook payload

POSTed once per run as application/json, also saved as the SUMMARY record in the run's key-value store:

{
"monitorId": "north-austin-sfh",
"runAt": "2026-09-29T10:00:03.118Z",
"newCount": 4,
"priceDropCount": 2,
"priceIncreaseCount": 0,
"scanned": 1000,
"seenTotal": 1812,
"baseline": false,
"alerts": [ { "...first 50 records, same shape as the dataset..." } ]
}

Source notes

  • Zillow: price is the listed monthly rent; for buildings with several floorplans it is the cheapest unit. specialOffer carries Zillow's concession text ("1 month free") when the card shows one. Zillow needs the residential proxy on the platform.
  • Zumper: price is the entry rent of the listing or building (min_price). Home-type filtering covers houses, apartments and townhouses; condo/multi-family selections fall back to all types on this source. specialOffer is not available from Zumper's search feed.
  • Each run examines up to 500 newest listings per source per location when looking for price changes, so a price cut on a listing deeper than that in a very large market is caught once it re-sorts nearer the top or the filters are narrowed. A first emitAll run stops as soon as it has maxNewPerLocation new listings.
  • Rent comparisons use the listing's headline price. A floorplan swap in a large building can register as a drop or increase; alertOnPriceIncreases stays off by default for that reason.

Pricing

Pay per event: a small start fee plus a per-alert fee only for records emitted. A run that finds nothing new costs just the start fee.