Docs · Data API

Data API: query rental listings

The HousingFeed Data API answers queries over the whole rental listings database by city, ZIP, state, rent, bedrooms or map box, paid per returned row, for research and internal tools.

Request

curl -X POST "https://api.apify.com/v2/acts/housingfeed~rental-listings-api/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"state": "TX", "city": "Austin", "minBeds": 2, "maxRent": 2500, "maxItems": 100}'

The Data API runs as an Actor on Apify. Sign in to Apify for a token, then call the endpoint above; the response is a JSON array of listing objects. Paid per returned row, no contract. For internal use: research, analytics and internal tools. Showing the listings publicly needs the Display Feed licence.

Input

FieldTypeMeaning
countrystringCountry code, one of US, JP, BR, ES, UK, DE, FR, CA, AU, BE, PL, AT, IT, PK, RO, CH, PT, AE, NO, BH, EU, EG, QA, AR, SA, MX, IE, PE, EC, NL. US is the maintained market, re-read weekly; other countries are older portal snapshots. Blank = all countries.
statestringUS state code (CA, NY, TX) or region. Blank = all.
citystringCity name, partial match (for example Los Angeles), or a county (Hudson County; add the state when the name exists in several states). Blank = all.
zipstringExact ZIP or postal code, for example 94110. Blank = all.
minRent, maxRentintegerMonthly rent range, in the listing's own currency.
minBeds, maxBedsintegerBedroom range. Equal values match an exact bedroom count.
managerDirectOnlybooleanOnly listings published by property managers and owners on their own software or websites, no consumer portals. Default false. See the manager-direct example.
includePortalsbooleanAlso return listings from consumer portals and other countries, licensed for research and internal use only. Default false.
availableNowbooleanOnly listings marked available now. Default false.
cursorstringThe nextCursor value from the previous run's OUTPUT record, with sort stable: the next page of the same query, every listing exactly once across pages. Blank on the first run.
newSinceDaysintegerNew listings only: records first seen by HousingFeed in the last N days (first_seen_at). Blank or 0 = no limit. See the new-listings example.
removedSinceDaysintegerRemovals instead of live listings: records our weekly liveness check confirmed gone at the source in the last N days (1 to 90), each with removed_at, newest first. Run it next to a newSinceDays pull and delete these ids from your copy.
timeWindowstringChanges instead of all live listings: new_7d or new_30d for listings first seen in that window, removed_7d or removed_30d for listings confirmed gone at the source, each with removed_at. Blank = all live listings. newSinceDays or removedSinceDays, if set, take precedence.
countOnlybooleanReturn one row with the number of matching listings (matched, estimated, query) instead of the listings, charged as one result. Default false.
freshDaysintegerExclude rows last collected more than N days ago (scraped_at). Default 30 (90 when country is not US); set 0 to disable the age filter (other filters and delisting exclusions still apply).
minLat, maxLatfloatBounding-box latitude bounds in decimal degrees. Pair with the longitude bounds to return only listings inside a map box.
minLng, maxLngfloatBounding-box longitude bounds. Any combination of the four bounds is allowed; geo filters return geocoded rows only, and boxes crossing the 180° antimeridian are unsupported.
sortstringResult ordering: best (default), newest, oldest, cheapest, rent_desc, stable. best puts geocoded rows with a photo first, freshest first, mixed across sources; newest and oldest order by scraped_at; cheapest and rent_desc by monthly rent.
maxItemsintegerRows to return, 1 to 25,000. Default 25. You are charged per returned row.
refreshbooleanRe-collect the portal sources live at query time instead of serving the database. Slow (minutes), portal tier only. Default false.

Weekly new and removed listings

Set "timeWindow": "new_7d" for listings first seen in the last 7 days and "removed_7d" for listings confirmed gone at the source, each with removed_at. Run both weekly and a copy stays in sync. "countOnly": true returns just the number of matching listings.

The Actor on Apify →

Want the full file for your market?

Tell us your cities and what you are building. You get a sample in the production format and the listing count for your markets, usually within one business day.

Request a sample