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.
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.
Endpoint
| Method | POST |
|---|---|
| URL | https://api.apify.com/v2/acts/housingfeed~rental-listings-api/run-sync-get-dataset-items |
| Query | ?token=YOUR_TOKEN |
| Body | JSON object of filters (all optional). See Input parameters. |
| Returns | JSON 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.
| Field | Type | Description |
|---|---|---|
country | string | ISO-style code — one of US, UK, IE, FR, DE, NL, PL, BE, ES, IT, NO, EU. Blank = all countries. |
state | string | US state code (e.g. CA, NY, TX) or region. Blank = all. |
city | string | City name, partial match (e.g. "Los Angeles"). Blank = all. |
minRent | integer | Minimum monthly rent, in the listing's local currency. |
maxRent | integer | Maximum monthly rent, in the listing's local currency. |
minBeds | integer | Minimum number of bedrooms. |
maxBeds | integer | Maximum number of bedrooms. |
platform | string | Restrict to one source (e.g. appfolio, zumper, immoweb, rightmove). Blank = all. |
availableNow | boolean | Only return listings marked available now. Default false. |
maxItems | integer | Max listings to return. Default 100, up to 5000. |
refresh | boolean | Live-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.
| Field | Type | Description |
|---|---|---|
platform | string | Source platform the listing came from. |
source_id | string | Company subdomain / account id on that platform. |
listing_id | string | Platform-local listing id. |
url | string | Link to the original listing. |
address | string | Full address as displayed. |
street, city, state, zip | string | Parsed address components. |
country | string | Country code, derived at load. |
lat, lng | float | Coordinates where available. |
rent_min, rent_max | integer | Monthly rent range in native currency. |
currency | string | Native currency code, derived from country. |
rent_usd | number | Rent converted to USD for cross-market comparison. |
beds, baths | float | Bedroom / bathroom counts. |
sqft_min, sqft_max | integer | Floor-area range where available. |
property_type | string | e.g. apartment, house, condo (where provided). |
furnished | boolean | True for furnished / mid-term listings. |
available | string | Raw availability string, e.g. "NOW" or a date. |
units_available | integer | Floorplan-level unit count where applicable. |
image | string | Primary listing photo URL. |
granularity | string | "unit" or "floorplan". |
scraped_at | string | ISO-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.