API Documentation

Rental Listings API documentation

Try it live — no signup

Real data, straight from the feed. Run a query and see the actual JSON a paying key returns — capped at 10 results, no key required.

GET /listings live sample

Quickstart

The HousingFeed Rental Listings API is delivered as an Apify actor. You send a single POST request with your filters as JSON, and get an array of rental listings back synchronously. No SDK, no proxies, no infrastructure on your side.

One call to try it: replace YOUR_TOKEN with your Apify API token and run the request below. Leave the body as {} to get the latest listings across all platforms.
# 2-bed listings in California under $3,000/mo
curl -X POST "https://api.apify.com/v2/acts/housingfeed~rental-listings-api/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "country": "US",
    "state": "CA",
    "minBeds": 2,
    "maxRent": 3000,
    "maxItems": 100
  }'

Authentication

Every request needs your Apify API token, passed as a query-string parameter. You can find it in your Apify account under Settings → Integrations. Keep it secret, treat it like a password.

Don't have an account yet? Get API access → New Apify accounts include free platform credits, so it's free to try right away.

Endpoint

MethodPOST
URLhttps://api.apify.com/v2/acts/housingfeed~rental-listings-api/run-sync-get-dataset-items
Query?token=YOUR_TOKEN
BodyJSON object of filters (all optional). See Input parameters.
ReturnsJSON array of listing objects. See Response schema.

run-sync-get-dataset-items runs the actor and returns the dataset in one blocking call, ideal for direct queries. For large or scheduled pulls, use the standard async Apify run endpoints and read the dataset when the run finishes.

Input parameters

All fields are optional. Send an empty body {} to get the latest listings across every platform and country.

FieldTypeDescription
countrystringISO-style 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. Blank = all countries.
statestringUS state code (e.g. CA, NY, TX) or region. Blank = all.
citystringCity name, partial match (e.g. "Los Angeles"). Blank = all.
minLat, maxLatfloatBounding-box latitude bounds (decimal degrees). Pair with the longitude bounds to return only listings inside a map box.
minLng, maxLngfloatBounding-box longitude bounds (decimal degrees). Any combination of the four is allowed; geo filters return geocoded listings only, and boxes crossing the 180° antimeridian are unsupported.
minRentintegerMinimum monthly rent, in the listing's local currency.
maxRentintegerMaximum monthly rent, in the listing's local currency.
minBedsintegerMinimum number of bedrooms.
maxBedsintegerMaximum number of bedrooms.
platformstringRestrict to one source (e.g. appfolio, zumper, immoweb, rightmove). Blank = all.
availableNowbooleanOnly return listings marked available now. Default false.
sortstringResult ordering. One of newest (default, most recently scraped first), oldest, cheapest (lowest rent first), or rent_desc (highest rent first).
maxItemsintegerMax listings to return. Default 100, up to 5000.
refreshbooleanLive-refresh: re-scrape the portal platforms at query time for the freshest data. Slower. Default false.
Bounding-box query: pass a map box and get every listing inside it, across all platforms in one schema.
# every listing in downtown Miami — all platforms, one schema
{ "minLat": 25.70, "maxLat": 25.86, "minLng": -80.32, "maxLng": -80.10, "maxItems": 100 }

Response schema

The API returns a JSON array of listing objects. Every listing shares the same shape regardless of source, every field is nullable, and coverage varies by platform.

FieldTypeDescription
uidstringStable primary key, unique across the whole feed. Use it for client-side dedup.
platformstringSource platform the listing came from.
source_idstringCompany subdomain / account id on that platform.
listing_idstringPlatform-local listing id.
urlstringLink to the original listing.
addressstringFull address as displayed.
street, city, state, zipstringParsed address components.
countrystringCountry code, derived at load.
canonical_citystringMetro rollup of city: borough/ward labels collapse to the parent metro (Tokyo's 23 wards → Tokyo, NYC boroughs → New York). Group on this for market-level aggregation; city stays as-labelled.
lat, lngfloatCoordinates where available.
rent_min, rent_maxintegerMonthly rent range in native currency.
currencystringNative currency code, derived from country.
rent_usdnumberRent converted to USD for cross-market comparison.
beds, bathsfloatBedroom / bathroom counts.
sqft_min, sqft_maxintegerFloor-area range where available.
property_typestringe.g. apartment, house, condo (where provided).
furnishedbooleanTrue for furnished / mid-term listings.
availablestringRaw availability string, e.g. "NOW" or a date.
units_availableintegerFloorplan-level unit count where applicable.
imagestringPrimary listing photo URL.
granularitystring"unit" or "floorplan".
scraped_atstringISO-8601 timestamp of when the record was scraped.
updated_atstringISO-8601 timestamp of the record's last update.

Example response

[
  {
    "platform": "appfolio",
    "source_id": "aberdeenrealty",
    "listing_id": "206",
    "url": "https://aberdeenrealty.appfolio.com/listings/detail/40dd11be-…",
    "address": "2528 Pacific Ave. #2, Hoquiam, WA 98550",
    "city": "Hoquiam",
    "state": "WA",
    "zip": "98550",
    "country": "US",
    "rent_min": 1550,
    "rent_max": 1550,
    "currency": "USD",
    "rent_usd": 1550,
    "beds": 2,
    "baths": 1,
    "available": "NOW",
    "image": "https://images.cdn.appfolio.com/…/medium.jpeg",
    "granularity": "unit",
    "scraped_at": "2026-07-03T21:43:31Z"
  }
]

Freshness

The feed is refreshed by a scheduled harvester that re-scrapes the network on a recurring cron. Each record's scraped_at tells you exactly when it was captured. When you need the absolute latest data for the portal platforms, set "refresh": true in your request body to re-scrape at query time (this is slower, leave it off for fast snapshot queries).

Limits & pricing

The actor runs on Apify with pay-per-use pricing from $2 per 1,000 listings ($0.002 per result). maxItems caps results per run (up to 5,000). Higher run limits, live-refresh, and bulk dataset exports are available on paid plans, see Pricing. For full-country exports or custom sources, talk to us about Enterprise.

Need help integrating? Email hello@housingfeed.com and we'll get you set up.