Skip to main content
GET
List licensed short-term rental parcels around a location
Investorlift sells this route per jurisdiction under an order form: a key from the developer console cannot call it. Ask through the console.
Every parcel around a location with a record on a city’s own short-term rental licence roll. Each row carries the owner and says if that owner runs a business or lives there.

Use it when

The short-term rental map layer, and the “STR operators” list beside it. God Mode does not otherwise list these owners, because most of them hold one parcel and never appear as a registered investor.

Read the response

  • Every row is a parcel with a record on a roll: status is LICENSED, PENDING or EXPIRED, and the default keeps the first two. The list never includes parcels with no record, and a parcel outside every loaded city carries no block anywhere.
  • meta.geometry echoes the location that ran. The envelope describes it.
  • owner_attributed and attribution_basis say if the licence belongs to the current owner, and what settled that. business_use is the flag that matters: attributed, and not a person’s own home. That is the row to treat as an operator. prior_owner_permit marks a licence a former owner left behind. See the short-term rental parcel.
  • owner.names and owner.mailing exist when the parcel is a registered investor’s hold, or a business-use licence attributed by a date or a name. Otherwise redacted_reason is not_an_investor_hold and the row shows only the licence facts. On this host both are null on every row, with contact_redacted: true. A null redacted_reason tells you the owner is one the API can name.
  • investor carries a value when a registered investor holds the parcel. has_investor=false keeps the owners without one.
  • manager is the property-management company on the city’s record, a business name the API serves to every key. operator says who runs the rental: the owner, that manager, or nobody the record names.
  • meta.coverage[].str.jurisdictions lists every city the build knows, served or not. It carries the snapshot date each block reads, and why the API does not serve a city.

Gotchas

  • sort=current_application_desc (the default) puts undated rows last, and expires_on_asc puts rows without an expiry last.
  • This route has no CSV on api.investorlift.com. Page the JSON list instead (Give me a spreadsheet). The one public CSV is the loans of a lender.
  • For a market with no published short-term rental tables, the API answers 422 str_unavailable.
  • jurisdiction= compares case-insensitively with the served city names. A loaded city that the API does not serve has no rows here, and coverage_reason in the jurisdiction table says why.
  • city= is a different thing: the location, like zip=, a point with radius_miles, a bbox or a property_id. It is the parcel’s postal city as the county records it, in any letter case, and not the licensing jurisdiction. So a Scottsdale postal address licensed by another city lists under city=Scottsdale and not under jurisdiction=Scottsdale. For a ZIP or a city that no loaded market’s parcels carry, the API answers 422 outside_coverage naming it. lat + lng beside a place is the reference point for distance_miles only.

Authorizations

Authorization
string
header
required

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

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[]

Place geometry: the parcels of these 5-digit ZIP codes, as a comma list or a repeated key, up to 50. On the deal and investor routes the Free and Starter plans take exactly one ZIP, and more is 403 plan_limit. You can add lat + lng as the reference point for distances. Not with radius_miles, bbox, property_id or city. A ZIP that no parcel of a loaded market carries is 422 outside_coverage (zips_unknown in the body).

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

Place geometry: the parcels whose postal city is this one, as the county records it ("Scottsdale"). Case does not matter: the API compares the value folded upper case. Never the short-term rental jurisdiction (meta.coverage[].str.jurisdictions[]). You can add lat + lng as the reference point, but not radius_miles, bbox, property_id or zip. On the deal and investor routes of the Free and Starter plans a city-wide search is 403 plan_limit. A city that no parcel of a loaded market carries is 422 outside_coverage.

Required string length: 1 - 100
str_status
enum<string>[]

Statuses to keep (comma list or repeated key). Default LICENSED,PENDING: the parcels licensed or applying at the roll's as-of date (meta.coverage[].str_as_of). Add EXPIRED for lapsed licences.

Minimum array length: 1

A short-term rental status a listed parcel can carry. LICENSED means an active licence or permit, PENDING an application on file with none active, and EXPIRED every record on the parcel inactive. The list never carries a parcel with no record, so NONE is not a value here.

Available options:
LICENSED,
PENDING,
EXPIRED
owner_attributed
enum<string>

With true, keep only parcels whose licence the API attributes to the current owner. With false, keep only those whose licence it does not: a prior owner's permit or an expired record.

Available options:
true,
false
business_use
enum<string>

With true, keep only parcels whose licence is a business use: attributed to the owner and not a person's or a trust's own home. With false, keep only the rest.

Available options:
true,
false
has_investor
enum<string>

With true, keep only parcels a registered investor holds: investor is not null and the parcel is a hold row of GET /v1/deals. With false, keep only parcels no registered investor holds: the owners God Mode does not list.

Available options:
true,
false
operator
enum<string>

Keep only parcels whose operator is the owner, a named property-management company, or nobody the record names. Who operates the rental, from the city's record. With owner, a name on the record keys to the current owner of the parcel. With manager, the record names a property-management company and no name keys to the owner. With unknown, the record names nobody the test can use: every Houston record, and every record whose names match neither.

Available options:
owner,
manager,
unknown
jurisdiction
string

Keep only parcels inside this city, for example SCOTTSDALE (case does not matter). The served cities are in meta.coverage[].str.jurisdictions.

Required string length: 1 - 64
sort
enum<string>

Row order. With current_application_desc, the default, the newest application by the current owner comes first and undated rows last. With expires_on_asc, the soonest expiry comes first and rows without an expiry last. Every sort breaks ties on the parcel id.

Available options:
current_application_desc,
expires_on_asc
limit
integer
default:500

Page size, 1-500 (default 500).

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

Response

One page of parcels with a short-term rental record inside the geometry after the filters, in the requested sort. The page carries the cursor for the next page.

Parcels with a short-term rental record inside the geometry after the filters, one page, in the requested sort.

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.