A rent estimate API takes a home and returns what it would rent for each month. The Houski API holds that figure as one field, estimate_rent_monthly, on nearly every property it covers. This post shows how to request the field, how to list the homes that are for rent now, how to read rental listing history, and how investors can sort a market by cap rate.
The audience is the people who build with rent data: proptech builders, lenders, investors and analysts.
Get an estimated monthly rent with one field
The rent estimate is an ordinary field. Name estimate_rent_monthly in the select parameter of any request and the estimate comes back in the same row as the rest of the home's facts.
Every request is a GET that answers in JSON. The key goes in the api_key query parameter, and your code should read it from the HOUSKI_API_KEY environment variable instead of holding it in source. A request for three bedroom houses in Calgary with their estimated rent looks like this:
curl "https://api.houski.ca/properties?api_key=$HOUSKI_API_KEY&country_abbreviation=ca&province_abbreviation=ab&city=calgary&property_type_eq=House&bedroom_gte=3&results_per_page=10&page=1&select=address,bedroom,interior_sq_m,estimate_rent_monthly&exclude=inferred"
Three things are worth knowing about the field.
- It is an estimate, and it is labelled as one. Values that no record states are estimated across the whole data set, which is why the field is present for a home that has never been rented.
- It is in the local currency. Money is in each country's own currency, so the estimate for a home in Calgary is in Canadian dollars and the estimate for a home in Manchester is in pounds.
- It filters and sorts like any other field. estimate_rent_monthly_lte=2500 keeps the homes estimated at or under that rent, and estimate_rent_monthly_sort=desc puts the highest first.
To look up a single address, send it to the /search endpoint with estimate_rent_monthly in select. For the median rent estimate of a city or a community, use the /aggregate endpoint with the same field.
List homes that are for rent now
The for_rent field says whether a home is on the rental market. Add for_rent_eq=true to a request on the /properties endpoint and only those homes come back.
curl "https://api.houski.ca/properties?api_key=$HOUSKI_API_KEY&country_abbreviation=ca&province_abbreviation=ab&city=calgary&for_rent_eq=true&bedroom_gte=2&results_per_page=10&page=1&select=address,bedroom,property_type,estimate_rent_monthly&exclude=inferred"
Billing is on the values returned, never on how much was searched, so a tight filter over a large city costs no more than the rows you take.
Rental listing history with expand=listings_rent
A current estimate tells you where rent stands. Listing history tells you how a home has been offered over time. Adding expand=listings_rent to a request attaches the rental listing rows of each property to its row in the answer. The expand documentation lists the fields those rows carry.
Analysts use the history to see how often a home returns to the market. No license or Multiple Listing Service (MLS) membership is needed to read it.
Cap rate for rental property investors
Rent matters most to an investor as a share of price. The cap_rate field holds that measure for a property, so a market can be sorted by yield in one request. The data also carries cash_on_cash_return and return_on_investment.
The block below is a live call against the real API. It asks for houses that are for sale in Calgary, sorted by cap rate from the highest down. The request code and the JSON answer are generated each time this page loads.
const houski_data = async (): Promise<PropertiesResponse> => {
// You must copy the PropertiesResponse type declarations from the
// Houski API documentation to strongly type the response
const url = new URL('https://api.houski.ca/properties');
url.searchParams.set('api_key', 'YOUR_API_KEY');
url.searchParams.set('cap_rate_sort', 'desc');
url.searchParams.set('city', 'calgary');
url.searchParams.set('country_abbreviation', 'ca');
url.searchParams.set('for_sale_eq', 'true');
url.searchParams.set('page', '1');
url.searchParams.set('property_type_eq', 'House');
url.searchParams.set('province_abbreviation', 'ab');
url.searchParams.set('results_per_page', '3');
url.searchParams.set('select', 'for_sale,cash_on_cash_return,return_on_investment,cap_rate');
const response = await fetch(url);
const data = await response.json();
return data;
}
(async () => {
let data: PropertiesResponse = await houski_data();
// Log the response
console.log(data);
})();
{
"cache_hit": true,
"cost_cents": 1.26,
"data": [
{
"address": "5407 8 Avenue SE",
"cap_rate": 0.08332655,
"cash_on_cash_return": 0.123928145,
"for_sale": true,
"property_id": "f39b824ee46e72d6",
"return_on_investment": 1.0583456
},
{
"address": "90 Coventry Lane NE",
"cap_rate": 0.08163181,
"cash_on_cash_return": 0.117149204,
"for_sale": true,
"property_id": "e0414f73a3800041",
"return_on_investment": 1.0311623
},
{
"address": "56 Pinecliff Close NE",
"cap_rate": 0.080086336,
"cash_on_cash_return": 0.110967286,
"for_sale": true,
"property_id": "a8128cbcd913a81d",
"return_on_investment": 1.0063727
}
],
"error": "",
"pagination": {
"current_page": 1,
"has_next_page": true,
"has_previous_page": false,
"page_total": 922
},
"price_quote": false,
"result_total": 2766,
"time_ms": 30,
"ui_info": {
"city": "Calgary",
"city_id": "6ec95b53075d062c",
"city_link": "ca/ab/calgary",
"city_slug": "calgary",
"country": "Canada",
"country_abbreviation": "CA",
"country_abbreviation_id": "9ace2b6431b7f1be",
"country_abbreviation_link": "ca",
"country_slug": "canada",
"province": "Alberta",
"province_abbreviation": "AB",
"province_abbreviation_id": "aae1f05a0f89d2c7",
"province_abbreviation_link": "ca/ab",
"province_slug": "alberta"
}
}
Add address, estimate_rent_monthly and estimate_list_price to select and each row becomes a short investment summary. Add cap_rate_gte with a threshold and the request becomes a screen that returns only the homes above it.
For a closer look at one home, the /predict endpoint returns modelled values for any date from 2021-01-01 to today. It does not forecast, so a projection of future rent is yours to make and to label.
What a rent estimate request costs
Most fields, the rent estimate included, cost $0.001 per value returned. A field with no value for a home is not billed. To see the cost of a request before you send it, add price_quote=true: the API returns the price for free with no data.
Pay as you go has a $99 monthly minimum in United States dollars, and every account sets its own maximum monthly spend. The pricing page has the detail.
Where the rent estimates are available
The same field and the same schema apply in every country Houski covers: Canada, the United States, Great Britain, France, Spain, the Netherlands, Poland, Czechia, Austria, Switzerland, Norway, Finland, Estonia, Latvia, Slovenia and South Korea. That is more than 220 million properties, with data updated daily. Code written for one country works in the next by changing the place parameters.
Place scope runs from country_abbreviation to province_abbreviation to city to community, and each level needs every level above it. The /location endpoint lists the places that hold data, so your menus never need a list written by hand.
Get started
Request estimate_rent_monthly on any home, filter with for_rent_eq=true, and sort a market by cap_rate. Get a key and send your first request with the quick start guide.
