Skip to main content
GET
List asking rents near a location
This route lists the newest rental record on each parcel. It does not predict rent for a subject property. A SOLD rental record does not prove a lease or a verified sale.

Location and dates

The route accepts the sale route location forms, including an address. The default includes every status within 365 calendar dates ending at each market source date. For an end date D, the inclusive start is D - 364 days. listed_until cannot extend beyond the market source date. An explicit listed_since replaces the default start. Without a start, an explicit end sets the end of a new 365-date window. A reversed effective window is an error. summary.windows reports the exact dates for every selected market. Older active listings outside this window do not appear. A range filter on an assessor fact removes a parcel that has no value for that fact. This rule applies to the bedroom, bathroom, area, and year built bounds. Distance is the default order with a reference point. Other locations use listed_desc. All sorts put null rents last. Every sort breaks ties on the market, then on the parcel ID.

Read the row

property contains assessor facts. listing retains the source listing facts. holder identifies the current registry holder. rent.monthly interprets a source asking price greater than 0 and below 10,000 US dollars as monthly rent. rent.basis=PRICE_RULE identifies that interpretation. FEED_FLAG identifies a rental with no usable monthly asking price. A low asking price can be incorrect. This rule does not verify the price against a lease. rent.per_sqft needs usable rent, positive area, and an SFR or CONDO_TH segment. The source sold price never contributes to asking rent statistics.

Method 1

Every statistic reads all filtered matches before pagination. Each metric reports its own valid observation count as n. A metric with fewer than five observations returns null statistics and retains its count. Five observations do not establish statistical confidence.
  • rent reports the median and continuous 25th and 75th percentiles for SFR and CONDO_TH asking rents.
  • rent_per_sqft uses raw rent divided by positive area for those segments.
  • by_segment_bedrooms separates each segment and known bedroom count. Zero bedrooms is a valid group.
  • by_segment includes OTHER and UNKNOWN counts. These segments do not contribute to headline rent statistics.
  • n_with_rent includes usable rents in every segment.
  • days_listed_ended reports valid source duration for SOLD and OFF_MARKET rows. It does not measure time to lease.
  • n_for_rent_now counts ACTIVE and PENDING records within the date window at the source date.
The API interpolates percentiles before rounding. It rounds asking rents to whole dollars and ratios and durations to two decimals. Exact halves round upward for these nonnegative values. Each group and metric applies the five-observation floor independently. The sample excludes rentals advertised only outside this feed. Parcel records can combine buildings or units. The results do not measure complete market inventory. summary.as_of_by_market dates each market. summary.as_of is null when those dates differ. Search nearby inventory includes an asking rent request.

Authorizations

Authorization
string
header
required

API key from the developer console (starts with zpka_). Create one at https://developers.investorlift.com/get-a-key. The same key works on POST /mcp.

Query Parameters

lat
number

Point latitude (with lng). With radius_miles it is the search geometry. With bbox it is the reference point only.

Required range: -90 <= x <= 90
lng
number

Point longitude (with lat).

Required range: -180 <= x <= 180
radius_miles
number

Search radius in miles around the point or around the centre of the property_id parcel, 0.25 to 20 (default 2). Not allowed with bbox.

Required range: 0.25 <= x <= 20
bbox
string

Viewport as west,south,east,north (WGS84 degrees). West must be less than east, south less than north, and the diagonal at most 40 mi. It must intersect a loaded market's coverage bbox (422 outside_coverage otherwise). It can carry lat + lng (without radius_miles) as the reference point for distances and sort=distance.

property_id
string

Parcel geometry: search around the centre of that parcel, with radius_miles. Not allowed with lat, lng or bbox.

Pattern: ^prop_[0-9a-f]{32}$
zip
string[]

ZIP list for a place search. With address, use exactly one five-digit ZIP. ZIP takes precedence over city for an address.

Required array length: 1 - 50 elements
Pattern: ^\d{5}$
city
string

Postal city for a place search or address resolution. With address, ZIP takes precedence when both are present.

Required string length: 1 - 100
address
string

Street address to resolve before the radius search. Needs one five-digit ZIP or a city. ZIP takes precedence over city.

Required string length: 1 - 200
unit
string

Unit of the address. Only with address. An explicit unit takes precedence over a unit in the street line.

Required string length: 1 - 16
listed_since
string<date>

Keep listing dates on or after this date. This filter does not change the status filter.

segment
enum<string>[]

Keep these assessor segments: SFR, CONDO_TH, or OTHER.

Minimum array length: 1

Parcel segment: SFR, CONDO_TH (condo or townhouse) or OTHER, a mixed bucket of manufactured, multi-family, land and commercial parcels.

Available options:
SFR,
CONDO_TH,
OTHER
beds_min
integer

Minimum assessor bedroom count, inclusive.

Required range: 0 <= x <= 9007199254740991
beds_max
integer

Maximum assessor bedroom count, inclusive.

Required range: 0 <= x <= 9007199254740991
sqft_min
integer

Minimum living area in square feet, inclusive.

Required range: 0 <= x <= 9007199254740991
sqft_max
integer

Maximum living area in square feet, inclusive.

Required range: 0 <= x <= 9007199254740991
baths_min
number

Minimum assessor bathroom count, inclusive. A half bathroom counts as 0.5.

Required range: 0 <= x <= 9007199254740991
baths_max
number

Maximum assessor bathroom count, inclusive. A half bathroom counts as 0.5.

Required range: 0 <= x <= 9007199254740991
year_built_min
integer

Earliest assessor year built, inclusive.

Required range: 1600 <= x <= 2100
year_built_max
integer

Latest assessor year built, inclusive.

Required range: 1600 <= x <= 2100
investor_held
enum<string>

True keeps a PASSED ownership test. False keeps other results. Omit the filter to keep every result.

Available options:
true,
false
limit
integer
default:100

Page size, 1-500 (default 100).

Required range: 1 <= x <= 500
cursor
string

Opaque cursor from page.next_cursor of the previous page. A change of query, sort, weights or data version invalidates it (400 invalid_cursor). Then restart from page 1.

Required string length: 1 - 4096
status
enum<string>[]

Keep these statuses. Default is every status. Status does not remove the listing-date window.

Minimum array length: 1
Available options:
active,
pending,
sold,
off_market
listed_until
string<date>

Inclusive last listing date, capped at each market source date. The default window contains 365 calendar dates.

rent_min
integer

Minimum monthly asking rent in whole US dollars, inclusive. Rows without a usable rent do not match.

Required range: 0 <= x <= 9007199254740991
rent_max
integer

Maximum monthly asking rent in whole US dollars, inclusive. Rows without a usable rent do not match.

Required range: 0 <= x <= 9007199254740991
sort
enum<string>

Order by distance, newest listing, ascending monthly rent, or descending monthly rent. Null rents come last. Every sort breaks ties on the market, then on the parcel id.

Available options:
distance,
listed_desc,
rent_asc,
rent_desc

Response

Default Response

data
object[]
required

The rows of this page.

page
object
required

Pagination: the page size, the rows returned and the cursor for the next page. Paged lists carry no total. The summary block does.

meta
object
required

Response metadata: when the API produced it, which markets it covers, and how fresh they are.

summary
object
required