API Documentation

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 → Free-tier accounts can run the actor immediately.

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, UK, IE, FR, DE, NL, PL, BE, ES, IT, NO, EU. 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.
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.
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.

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
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.
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.

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. 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 iron@simpleanalytics.com and we'll get you set up.