NAV
java ruby php go

Introduction

Main API Endpoint:

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.mashvisor.com/v1.1/client")
  .get()
  .build();

Response response = client.newCall(request).execute();
require 'uri'
require 'net/http'

url = URI("https://api.mashvisor.com/v1.1/client")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Get.new(url)

response = http.request(request)
puts response.read_body
<?php

$request = new HttpRequest();
$request->setUrl('https://api.mashvisor.com/v1.1/client');
$request->setMethod(HTTP_METH_GET);

try {
  $response = $request->send();

  echo json_decode($response->getBody());
} catch (HttpException $ex) {
  echo $ex;
}
package main

import (
    "fmt"
    "strings"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://api.mashvisor.com/v1.1/client"

    req, _ := http.NewRequest("GET", url, payload)

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}

Welcome to the Mashvisor API documentation. Mashvisor API endpoints allow developer access for the implementation of custom applications. We provide granular and summary level real estate information, in-depth property performance analysis, and up-to-date calculations performance metrics for cities, zip codes, and neighborhoods across the United States.

Preview code examples on the right, and switch the programming language of the examples using tabs in the top right.

Mashvisor API is RESTfull. Our API has predictable, resource-oriented URLs, and uses HTTPresponse codes to indicate API errors. We use built-in HTTP features, like HTTP authentication and HTTP verbs, which are understood by off-the-shelf HTTP clients. JSON is returned by all API responses, including errors.

The requests in the right sidebar are designed to work as-is. The sample requests are performed using a test mode.Our data is updated nightly.

NOTE: MLS data shared via APIs is only available for inactive listings due to MLS regulations.

Contact us at [email protected] if you have questions.

Global Data Support

In our commitment to providing comprehensive and valuable data services to our users worldwide, we are pleased to announce an expansion of our API offerings to include support for global data. This means that in addition to our existing United States-focused data, our APIs will now provide access to information from other key countries, including Great Britain, Spain, and more.

Supported Countries

Our APIs are now equipped to provide data from several prominent countries, with plans to continually expand our coverage. As of this update, we are proud to support data access from the following countries:

We are actively working on extending our global data coverage to include additional countries. Stay tuned for updates on new supported regions.

How to Use

In the Short Term Rentals APIs, you have the ability to configure the 'country' parameter. By default, it is set to 'US,' but specifying this parameter is optional. Please note that if you choose to specify the 'country' parameter, it should be in ISO-3166 Alpha-2 code format. For example, 'GB' for Great Britain and 'ES' for Spain.

Authentication

To authorize, use the below code, and make sure to replace YOUR_API_KEY with your API key:

OkHttpClient client = new OkHttpClient();

MediaType mediaType = MediaType.parse("application/octet-stream");
RequestBody body = RequestBody.create(mediaType, null);
Request request = new Request.Builder()
  .url("https://api.mashvisor.com/v1.1/client")
  .get()
  .addHeader("x-api-key", "YOUR_API_KEY")
  .build();

Response response = client.newCall(request).execute();
require 'uri'
require 'net/http'

url = URI("https://api.mashvisor.com/v1.1/client")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Get.new(url)
request["x-api-key"] = 'YOUR_API_KEY'

response = http.request(request)
puts response.read_body
<?php

$request = new HttpRequest();
$request->setUrl('https://api.mashvisor.com/v1.1/client');
$request->setMethod(HTTP_METH_GET);

$request->setHeaders(array(
  'x-api-key' => 'YOUR_API_KEY'
));

try {
  $response = $request->send();

  echo json_decode($response->getBody());
} catch (HttpException $ex) {
  echo $ex;
}
package main

import (
    "fmt"
    "strings"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://api.mashvisor.com/v1.1/client"

    req, _ := http.NewRequest("GET", url, payload)

    req.Header.Add("x-api-key", "YOUR_API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}

Mashvisor uses API keys to allow access. To request your API key, follow these steps:

To request your API key, register for a new developer user account, and you will be able to start a 2-weeks trial when you’re ready.

The API key is required to be included in all API requests.

Mashvisor allows you to authenticate your account when using the API by including your secret x-api-key header in the request, performed via the authentication scheme (token authentication) which is an HTTP authentication scheme.

All API requests require the JWT authentication must be made over HTTPS. Calls made over non-secure HTTP will fail.

Core Resources

Below is the detailed list of resources that Mashvisor allows you to access via API.

Search

List Cities

Sample Request

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.mashvisor.com/v1.1/client/city/list?state=FL")
  .get()
  .addHeader("x-api-key", "YOUR_API_KEY")
  .build();

Response response = client.newCall(request).execute();
require 'uri'
require 'net/http'

url = URI("https://api.mashvisor.com/v1.1/client/city/list?state=FL")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Get.new(url)
request["x-api-key"] = 'YOUR_API_KEY'

response = http.request(request)
puts response.read_body
<?php

$request = new HttpRequest();
$request->setUrl('https://api.mashvisor.com/v1.1/client/city/list');
$request->setMethod(HTTP_METH_GET);

$request->setQueryData(array(
  'state' => 'FL'
));

$request->setHeaders(array(
  'x-api-key' => 'YOUR_API_KEY'
));

try {
  $response = $request->send();

  echo json_decode($response->getBody());
} catch (HttpException $ex) {
  echo $ex;
}
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://api.mashvisor.com/v1.1/client/city/list?state=FL"

  req, _ := http.NewRequest("GET", url, nil)

  req.Header.Add("x-api-key", "YOUR_API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}

The above command returns JSON structured like this:

{
    "status": "success",
    "content": {
        "count": 693,
        "list": [
            "Alachua",
            "Alford",
            "ALLIGATOR POINT",
            "Altamonte Springs",
            "ALTHA",
            "ALTOONA",
            "Alva",
            "ANNA MARIA",
            "Anthony",
            "APALACHICOLA"
        ]
    }
}

This endpoint retrieves the cities with the highest occupancy rates in a specific state.

HTTP Request

GET http://api.mashvisor.com/v1.1/client/city/list

Request Headers

Parameter Value
x-api-key User Authentication Header

Query Parameters

Parameter Value Default Description
state* String state* name, ex: NV. If ignored, it will fetch all available cities.
page Integer 1 The page to return the content for. Valid values:1, ... etc.
items Integer 10 The items to return the content for. Valid values: 10, ... etc.

List Neighborhoods

Sample Request

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.mashvisor.com/v1.1/client/city/neighborhoods/CA/Los%20Angeles")
  .get()
  .addHeader("x-api-key", "YOUR_API_KEY")
  .build();

Response response = client.newCall(request).execute();
require 'uri'
require 'net/http'

url = URI("https://api.mashvisor.com/v1.1/client/city/neighborhoods/CA/Los%20Angeles")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Get.new(url)
request["x-api-key"] = 'YOUR_API_KEY'

response = http.request(request)
puts response.read_body
<?php

$request = new HttpRequest();
$request->setUrl('https://api.mashvisor.com/v1.1/client/city/neighborhoods/CA/Los%20Angeles');
$request->setMethod(HTTP_METH_GET);

$request->setHeaders(array(
  'x-api-key' => 'YOUR_API_KEY'
));

try {
  $response = $request->send();

  echo json_decode($response->getBody());
} catch (HttpException $ex) {
  echo $ex;
}
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://api.mashvisor.com/v1.1/client/city/neighborhoods/CA/Los%20Angeles"

  req, _ := http.NewRequest("GET", url, nil)

  req.Header.Add("x-api-key", "YOUR_API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}

The above command returns JSON structured like this:

{
    "status": "success",
    "content": {
        "count": 96,
        "results": [
            {
                "id": 7877,
                "city": "Los Angeles",
                "latitude": 33.952138,
                "longitude": -118.404407,
                "name": "Westchester",
                "state": "CA",
                "county": "Los Angeles",
                "is_village": 0
            },
            {
                "id": 13017,
                "city": "Los Angeles",
                "latitude": 34.238792,
                "longitude": -118.477272,
                "name": "North Hills",
                "state": "CA",
                "county": "Los Angeles",
                "is_village": 0
            },
            {
                "id": 13176,
                "city": "Los Angeles",
                "latitude": 34.228894,
                "longitude": -118.444025,
                "name": "Panorama City",
                "state": "CA",
                "county": "Los Angeles",
                "is_village": 0
            },
            ...
        ]
    },
    "message": "City neighborhoods list fetched successfully"
}

This endpoint retrieves all available neighborhoods/areas per city.

HTTP Request

GET https://api.mashvisor.com/v1.1/client/city/neighborhoods/{state}/{city}

Request Headers

Parameter Value
x-api-key User Authentication Header

Path Parameters

Parameter Value Default Description
state* String state* name, ex: NV.
city* String City Name, Ex: Los Angeles

List Top Markets

Sample Request

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.mashvisor.com/v1.1/client/city/top-markets?state=GA")
  .get()
  .addHeader("x-api-key", "YOUR_API_KEY")
  .build();

Response response = client.newCall(request).execute();
require 'uri'
require 'net/http'

url = URI("https://api.mashvisor.com/v1.1/client/city/top-markets?state=GA")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Get.new(url)
request["x-api-key"] = 'YOUR_API_KEY'

response = http.request(request)
puts response.read_body
<?php

$request = new HttpRequest();
$request->setUrl('https://api.mashvisor.com/v1.1/client/trends/neighborhoods');
$request->setMethod(HTTP_METH_GET);

$request->setQueryData(array(
  'state' => 'GA'
));

$request->setHeaders(array(
  'x-api-key' => 'YOUR_API_KEY'
));

try {
  $response = $request->send();

  echo json_decode($response->getBody());
} catch (HttpException $ex) {
  echo $ex;
}
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://api.mashvisor.com/v1.1/client/city/top-markets?state=GA"

  req, _ := http.NewRequest("GET", url, nil)

  req.Header.Add("x-api-key", "YOUR_API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}

The above command returns JSON structured like this:

{
    "status": "success",
    "content": [
        {
            "city": "Atlanta",
            "state": "GA",
            "smart_location": "Atlanta, GA",
            "homes_for_sale": 6019
        },
        {
            "city": "Marietta",
            "state": "GA",
            "smart_location": "Marietta, GA",
            "homes_for_sale": 1183
        },
        {
            "city": "Savannah",
            "state": "GA",
            "smart_location": "Savannah, GA",
            "homes_for_sale": 1110
        },
        {
            "city": "Decatur",
            "state": "GA",
            "smart_location": "Decatur, GA",
            "homes_for_sale": 1029
        },
        {
            "city": "Lawrenceville",
            "state": "GA",
            "smart_location": "Lawrenceville, GA",
            "homes_for_sale": 873
        }
    ],
    "message": "Top markets list fetched successfully"
}

This endpoint retrieves top cities/metro areas in a specific state with a count of active homes for sale.

HTTP Request

GET https://api.mashvisor.com/v1.1/client/city/top-markets

Request Headers

Parameter Value
x-api-key User Authentication Header

Query Parameters

Parameter Value Default Description
state* String state* name, ex: NV.
items Integer 5 The items to return the content for. Valid values: 10, ... etc.

Get City Invesmtent Performance

Sample Request

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.mashvisor.com/v1.1/client/city/investment/CA/Los%20Angeles")
  .get()
  .addHeader("x-api-key", "YOUR_API_KEY")
  .build();

Response response = client.newCall(request).execute();
require 'uri'
require 'net/http'

url = URI("https://api.mashvisor.com/v1.1/client/city/investment/CA/Los%20Angeles")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Get.new(url)
request["x-api-key"] = 'YOUR_API_KEY'

response = http.request(request)
puts response.read_body
<?php

$request = new HttpRequest();
$request->setUrl('https://api.mashvisor.com/v1.1/client/city/investment/CA/Los%20Angeles');
$request->setMethod(HTTP_METH_GET);

$request->setHeaders(array(
  'x-api-key' => 'YOUR_API_KEY'
));

try {
  $response = $request->send();

  echo json_decode($response->getBody());
} catch (HttpException $ex) {
  echo $ex;
}
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://api.mashvisor.com/v1.1/client/city/investment/CA/Los%20Angeles"

  req, _ := http.NewRequest("GET", url, nil)

  req.Header.Add("x-api-key", "YOUR_API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}

The above command returns JSON structured like this:

{
    "status": "success",
    "content": {
        "median_price": 998378.0407,
        "sqft": 1842.1734,
        "investment_properties": 4448,
        "airbnb_properties": 7084,
        "traditional_properties": 14354,
        "occupancy": 68.6682,
        "traditional_coc": 1.6432380442643497,
        "airbnb_coc": 1.6819542874835247,
        "traditional_rental": 3777.875777894207,
        "airbnb_rental": 4093.917001833255,
        "airbnb_rental_rates": {
            "oneBedRoomHomeValue": 2336.444943967073,
            "twoBedRoomsHomeValue": 3083.203274119984,
            "threeBedRoomsHomeValue": 4045.138149354516,
            "fourBedRoomsHomeValue": 5573.433687482561
        },
        "traditional_rental_rates": {
            "oneBedRoomHomeValue": 1763.9154224395752,
            "twoBedRoomsHomeValue": 2686.9422912597656,
            "threeBedRoomsHomeValue": 3942.8028729756675,
            "fourBedRoomsHomeValue": 4796.2156499226885
        }
    },
    "message": "City Overview fetched successfully"
}

This endpoint retrieves the details of median property performance metrics per city.

HTTP Request

GET https://api.mashvisor.com/v1.1/client/city/investment/{state}/{city}

Request Headers

Parameter Value
x-api-key User Authentication Header

Path Parameters

Parameter Value Default Description
state* String state* name, ex: NV.
city String City Name, Ex: Los Angeles

Get City Top Properties

Sample Request

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.mashvisor.com/v1.1/client/city/properties/CA/Los%20Angeles")
  .get()
  .addHeader("x-api-key", "YOUR_API_KEY")
  .build();

Response response = client.newCall(request).execute();
require 'uri'
require 'net/http'

url = URI("https://api.mashvisor.com/v1.1/client/city/properties/CA/Los%20Angeles")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Get.new(url)
request["x-api-key"] = 'YOUR_API_KEY'

response = http.request(request)
puts response.read_body
<?php

$request = new HttpRequest();
$request->setUrl('https://api.mashvisor.com/v1.1/client/city/properties/CA/Los%20Angeles');
$request->setMethod(HTTP_METH_GET);

$request->setHeaders(array(
  'x-api-key' => 'YOUR_API_KEY'
));

try {
  $response = $request->send();

  echo json_decode($response->getBody());
} catch (HttpException $ex) {
  echo $ex;
}
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://api.mashvisor.com/v1.1/client/city/properties/CA/Los%20Angeles"

  req, _ := http.NewRequest("GET", url, nil)

  req.Header.Add("x-api-key", "YOUR_API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}

The above command returns JSON structured like this:

{
    "status": "success",
    "content": {
        "properties": [
            {
                "id": 642325,
                "neighborhood": "Westlake",
                "neighborhood_id": 276023,
                "address": "308 N Mountain View Avenue",
                "zip_code": 90026,
                "zip": 90026,
                "city": "Los Angeles",
                "county": "LOS ANGELES",
                "state": "CA",
                "type": "Single Family Residential",
                "image_url": "https://bc9f40b414b80f1ce90f-212b46b1c531b50ebb00763170d70160.ssl.cf5.rackcdn.com/Properties/property-default.png",
                "list_price": 275000,
                "baths": 1,
                "beds": 2,
                "sqft": 1247,
                "days_on_market": 1203,
                "next_open_house_date": null,
                "next_open_house_start_time": null,
                "next_open_house_end_time": null,
                "last_sale_date": "2017-02-15 00:00:00",
                "last_sale_price": 415000,
                "listing_id": "RS16117046",
                "has_pool": null,
                "is_water_front": null,
                "num_of_units": null,
                "latitude": 34.0691,
                "longitude": -118.267,
                "traditional_ROI": 5.10278,
                "airbnb_ROI": 9.7587,
                "traditional_rental": 2406.54,
                "airbnb_rental": 4217.37,
                "traditional_cap": 5.10278,
                "airbnb_cap": 9.7587,
                "list_price_formatted": "$275,000",
                "price_per_sqft": 221,
                "country": "United States",
                "COC": {
                    "airbnb": 9.7587,
                    "traditional": 5.10278
                },
                "rental_income": {
                    "airbnb": 4217.37,
                    "traditional": 2406.54
                },
                "cap_rate": {
                    "airbnb": 9.7587,
                    "traditional": 5.10278
                },
                "image": "https://bc9f40b414b80f1ce90f-212b46b1c531b50ebb00763170d70160.ssl.cf5.rackcdn.com/Properties/property-default.png"
            },
            {
                "id": 1046266,
                "neighborhood": "Sun Valley",
                "neighborhood_id": 41131,
                "address": "11854 Roscoe Boulevard",
                "zip_code": 91352,
                "zip": 91352,
                "city": "Los Angeles",
                "county": "LOS ANGELES",
                "state": "CA",
                "type": "Single Family Residential",
                "image_url": "https://bc9f40b414b80f1ce90f-212b46b1c531b50ebb00763170d70160.ssl.cf5.rackcdn.com/Properties/property-default.png",
                "list_price": 255000,
                "baths": 2,
                "beds": 3,
                "sqft": 1048,
                "days_on_market": 449,
                "next_open_house_date": null,
                "next_open_house_start_time": null,
                "next_open_house_end_time": null,
                "last_sale_date": null,
                "last_sale_price": null,
                "listing_id": "18006654",
                "has_pool": null,
                "is_water_front": null,
                "num_of_units": null,
                "latitude": 34.2213,
                "longitude": -118.392,
                "traditional_ROI": 6.54324,
                "airbnb_ROI": 9.51711,
                "traditional_rental": 2672.32,
                "airbnb_rental": 3857.34,
                "traditional_cap": 6.54324,
                "airbnb_cap": 9.51711,
                "list_price_formatted": "$255,000",
                "price_per_sqft": 243,
                "country": "United States",
                "COC": {
                    "airbnb": 9.51711,
                    "traditional": 6.54324
                },
                "rental_income": {
                    "airbnb": 3857.34,
                    "traditional": 2672.32
                },
                "cap_rate": {
                    "airbnb": 9.51711,
                    "traditional": 6.54324
                },
                "image": "https://bc9f40b414b80f1ce90f-212b46b1c531b50ebb00763170d70160.ssl.cf5.rackcdn.com/Properties/property-default.png"
            },
            {
                "id": 2104921,
                "neighborhood": "Boyle Heights",
                "neighborhood_id": 113886,
                "address": "1222 S Herbert Avenue",
                "zip_code": 90023,
                "zip": 90023,
                "city": "Los Angeles",
                "county": "Los Angeles",
                "state": "CA",
                "type": "Single Family Residential",
                "image_url": "https://bc9f40b414b80f1ce90f-212b46b1c531b50ebb00763170d70160.ssl.cf5.rackcdn.com/Properties/property-default.png",
                "list_price": 340000,
                "baths": 2,
                "beds": 4,
                "sqft": 1600,
                "days_on_market": 7,
                "next_open_house_date": null,
                "next_open_house_start_time": null,
                "next_open_house_end_time": null,
                "last_sale_date": "2017-03-14 00:00:00",
                "last_sale_price": 280000,
                "listing_id": "MB19181287",
                "has_pool": null,
                "is_water_front": null,
                "num_of_units": null,
                "latitude": 34.0182,
                "longitude": -118.183,
                "traditional_ROI": 3.39692,
                "airbnb_ROI": 9.04391,
                "traditional_rental": 2455.65,
                "airbnb_rental": 4994.44,
                "traditional_cap": 3.39692,
                "airbnb_cap": 9.04391,
                "list_price_formatted": "$340,000",
                "price_per_sqft": 213,
                "country": "United States",
                "COC": {
                    "airbnb": 9.04391,
                    "traditional": 3.39692
                },
                "rental_income": {
                    "airbnb": 4994.44,
                    "traditional": 2455.65
                },
                "cap_rate": {
                    "airbnb": 9.04391,
                    "traditional": 3.39692
                },
                "image": "https://bc9f40b414b80f1ce90f-212b46b1c531b50ebb00763170d70160.ssl.cf5.rackcdn.com/Properties/property-default.png"
            },
            {
                "id": 1953384,
                "neighborhood": "Harbor City",
                "neighborhood_id": 38888,
                "address": "24815 Normandie Avenue #66",
                "zip_code": 90710,
                "zip": 90710,
                "city": "Los Angeles",
                "county": "LOS ANGELES",
                "state": "CA",
                "type": "Other",
                "image_url": "https://bc9f40b414b80f1ce90f-212b46b1c531b50ebb00763170d70160.ssl.cf5.rackcdn.com/Properties/property-default.png",
                "list_price": 65000,
                "baths": 1,
                "beds": 1,
                "sqft": 654,
                "days_on_market": 86,
                "next_open_house_date": null,
                "next_open_house_start_time": null,
                "next_open_house_end_time": null,
                "last_sale_date": null,
                "last_sale_price": null,
                "listing_id": "SB19148313",
                "has_pool": null,
                "is_water_front": null,
                "num_of_units": null,
                "latitude": 33.8002,
                "longitude": -118.298,
                "traditional_ROI": 9.94736,
                "airbnb_ROI": 8.81465,
                "traditional_rental": 1179.68,
                "airbnb_rental": 1552.57,
                "traditional_cap": 9.94736,
                "airbnb_cap": 8.81465,
                "list_price_formatted": "$65,000",
                "price_per_sqft": 99,
                "country": "United States",
                "COC": {
                    "airbnb": 8.81465,
                    "traditional": 9.94736
                },
                "rental_income": {
                    "airbnb": 1552.57,
                    "traditional": 1179.68
                },
                "cap_rate": {
                    "airbnb": 8.81465,
                    "traditional": 9.94736
                },
                "image": "https://bc9f40b414b80f1ce90f-212b46b1c531b50ebb00763170d70160.ssl.cf5.rackcdn.com/Properties/property-default.png"
            }
        ]
    },
    "message": "City Properties fetched successfully"
}

This endpoint retrieves detailed data on a specific city's top X investment properties performance.

HTTP Request

GET https://api.mashvisor.com/v1.1/client/city/properties/{state}/{city}

Request Headers

Parameter Value
x-api-key User Authentication Header

Path Parameters

Parameter Value Default Description
state* String state* name, ex: NV.
city String City Name, Ex: Los Angeles

Get Top Neighborhoods

Sample Request

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.mashvisor.com/v1.1/client/trends/neighborhoods?state=IL&city=Chicago&items=3")
  .get()
  .build();

Response response = client.newCall(request).execute();
require 'uri'
require 'net/http'

url = URI("https://api.mashvisor.com/v1.1/client/trends/neighborhoods?state=IL&city=Chicago&items=3")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Get.new(url)
request["x-api-key"] = 'YOUR_API_KEY'

response = http.request(request)
puts response.read_body
<?php

$request = new HttpRequest();
$request->setUrl('https://api.mashvisor.com/v1.1/client/trends/neighborhoods');
$request->setMethod(HTTP_METH_GET);

$request->setQueryData(array(
  'state' => 'IL',
  'city' => 'Chicago',
  'items' => '3'
));

try {
  $response = $request->send();

  echo json_decode($response->getBody());
} catch (HttpException $ex) {
  echo $ex;
}
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://api.mashvisor.com/v1.1/client/trends/neighborhoods?state=IL&city=Chicago&items=3"

    req, _ := http.NewRequest("GET", url, nil)

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}

The above command returns JSON structured like this:

{
    "status": "success",
    "content": {
        "total_results": 3,
        "current_page": 1,
        "state": "IL",
        "city": "Chicago",
        "neighborhoods": [
            {
                "id": 269585,
                "name": "Humboldt Park",
                "city": "Chicago",
                "state": "IL",
                "occupancy": "55.40430000",
                "total_listing": 47,
                "description": null,
                "single_home_value": 520000,
                "single_home_value_formatted": "$520,000",
                "investment_rentals": {
                    "airbnb_rental": {
                        "roi": 2.206806357417788,
                        "cap_rate": 4.275257478632692,
                        "rental_income": 1852.6115740741664
                    },
                    "traditional_rental": {
                        "roi": 0.2465075217187405,
                        "cap_rate": 3.185552884615385,
                        "rental_income": 1380.40625
                    }
                },
                "mashMeter": 57.7665
            },
            {
                "id": 269592,
                "name": "Logan Square",
                "city": "Chicago",
                "state": "IL",
                "occupancy": "55.10080000",
                "total_listing": 119,
                "description": null,
                "single_home_value": 350000,
                "single_home_value_formatted": "$350,000",
                "investment_rentals": {
                    "airbnb_rental": {
                        "roi": 3.7590651363134384,
                        "cap_rate": 6.757881386799999,
                        "rental_income": 1971.0487378166665
                    },
                    "traditional_rental": {
                        "roi": 1.5805461276322603,
                        "cap_rate": 5.608165714285714,
                        "rental_income": 1635.715
                    }
                },
                "mashMeter": 58.353
            },
            {
                "id": 403312,
                "name": "Ukrainian Village",
                "city": "Chicago",
                "state": "IL",
                "occupancy": "54.73170000",
                "total_listing": 41,
                "description": null,
                "single_home_value": 464500,
                "single_home_value_formatted": "$464,500",
                "investment_rentals": {
                    "airbnb_rental": {
                        "roi": 2.949021758402095,
                        "cap_rate": 6.284044771359168,
                        "rental_income": 2432.448996913611
                    },
                    "traditional_rental": {
                        "roi": 0.749465583878405,
                        "cap_rate": 4.492094725511302,
                        "rental_income": 1738.815
                    }
                },
                "mashMeter": 62.044
            }
        ]
    },
    "message": "City Overview fetched successfully"
}

This endpoint retrieves top X neighborhoods with the highest occupancy rate in a specific city and state.

HTTP Request

GET http://api.mashvisor.com/v1.1/client/trends/neighborhoods

Request Headers

Parameter Value
x-api-key User Authentication Header

Query Parameters

Parameter Value Default Description
state* String state* name, ex: NV.
city String* city name, ex: Las Vegas.
page Integer 1 The page to return the content for. Valid values:1, ... etc.
items Integer 5 The items to return the content for. Valid values: 10, ... etc.

Get Neighborhood Overview

Sample Request

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.mashvisor.com/v1.1/client/neighborhood/268201/bar?state=CA")
  .get()
  .addHeader("x-api-key", "YOUR_API_KEY")
  .build();

Response response = client.newCall(request).execute();
require 'uri'
require 'net/http'

url = URI("https://api.mashvisor.com/v1.1/client/neighborhood/268201/bar?state=CA")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Get.new(url)
request["x-api-key"] = 'YOUR_API_KEY'

response = http.request(request)
puts response.read_body
<?php

$request = new HttpRequest();
$request->setUrl('https://api.mashvisor.com/v1.1/client/neighborhood/268201/bar');
$request->setMethod(HTTP_METH_GET);

$request->setHeaders(array(
  'x-api-key' => 'YOUR_API_KEY'
));

$request->setQueryData(array(
  'state' => 'CA'
));

try {
  $response = $request->send();

  echo json_decode($response->getBody());
} catch (HttpException $ex) {
  echo $ex;
}
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://api.mashvisor.com/v1.1/client/neighborhood/268201/bar?state=CA"

  req, _ := http.NewRequest("GET", url, nil)

  req.Header.Add("x-api-key", "YOUR_API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}

The above command returns JSON structured like this:

{
    "status": "success",
    "content": {
        "id": "268201",
        "name": "Haight Ashbury",
        "city": "San Francisco",
        "county": "San Francisco",
        "state": "CA",
        "is_village": 0,
        "description": "It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout.",
        "image": "https://9ac82074a42d61a93c2a-4910baab8d3df1a59178432e0b86512c.ssl.cf5.rackcdn.com",
        "latitude": 37.768094,
        "longitude": -122.448285,
        "walkscore": 96,
        "num_of_properties": 3,
        "num_of_airbnb_properties": 161,
        "num_of_traditional_properties": 21,
        "median_price": 699000,
        "price_per_sqft": 908.19,
        "mashMeter": 84.86,
        "avg_occupancy": 82.7578,
        "strategy": "airbnb",
        "airbnb_rental": {
            "roi": 3.7042534351348877,
            "cap_rate": 10.878766820904865,
            "rental_income": 6336.881673177083
        },
        "traditional_rental": {
            "roi": 2.3523680369059243,
            "cap_rate": 7.266060085836912,
            "rental_income": 4232.4800000000005
        }
    },
    "message": "Neighborhood bar fetched successfully"
}

This endpoint retrieves a neighborhood/area overview and investment analysis. Neighborhoods are defined by MLS publishers and could represent communities or in some cases entire cities.

HTTP Request

GET https://api.mashvisor.com/v1.1/client/neighborhood/{id}/bar

Request Headers

Parameter Value
x-api-key User Authentication Header

Path Parameters

Parameter Value Default Description
id Integer Neighborhood id

Query Parameters

Parameter Value Default Description
state* String Neighborhood's state

Property Info

The Property Object

The Property Object:

{
  "status": "success",
  "content": {
    "stateInterest": {
      "state": "GA",
      "thirtyYearFixed": 4.41,
      "thirtyYearFixedCount": 0,
      "fifteenYearFixed": 3.83,
      "fifteenYearFixedCount": 0,
      "fiveOneARM": 3.95,
      "fiveOneARMCount": 0
    },
    "isShortSale": null,
    "source": "Property Services of Atlanta, Inc.",
    "yearBuilt": 2005,
    "nextOpenHouseEndTime": null,
    "sqft": 1566,
    "lastSaleDate": "2017-03-23 00:00:00",
    "id": 2214791,
    "state": "GA",
    "county": "DeKalb",
    "longitude": -84.51863861083984,
    "zip": 30331,
    "image": {
      "image": "https://bc9f40b414b80f1ce90f-212b46b1c531b50ebb00763170d70160.ssl.cf5.rackcdn.com/Properties/property-default.png",
      "url": "https://bc9f40b414b80f1ce90f-212b46b1c531b50ebb00763170d70160.ssl.cf5.rackcdn.com/Properties/property-default.png",
      "width": 100,
      "height": 100
    },
    "extra_images": [
      "https://bc9f40b414b80f1ce90f-212b46b1c531b50ebb00763170d70160.ssl.cf5.rackcdn.com/Properties/property-default.png",
      "https://bc9f40b414b80f1ce90f-212b46b1c531b50ebb00763170d70160.ssl.cf5.rackcdn.com/Properties/property-default.png",
      "https://bc9f40b414b80f1ce90f-212b46b1c531b50ebb00763170d70160.ssl.cf5.rackcdn.com/Properties/property-default.png",
      "https://bc9f40b414b80f1ce90f-212b46b1c531b50ebb00763170d70160.ssl.cf5.rackcdn.com/Properties/property-default.png",
      "https://bc9f40b414b80f1ce90f-212b46b1c531b50ebb00763170d70160.ssl.cf5.rackcdn.com/Properties/property-default.png"
    ],
    "videos": [],
    "virtual_tours": [],
    "tax": 1765,
    "mls_id": "8655658",
    "daysOnMarket": 3,
    "neighborhood": {
      "country": "United States",
      "image": "https://9ac82074a42d61a93c2a-4910baab8d3df1a59178432e0b86512c.ssl.cf5.rackcdn.com",
      "city": "Atlanta",
      "singleHomeValue": 140000,
      "mashMeter": 67.49,
      "latitude": 33.692139,
      "description": null,
      "singleHomeValue_formatted": "$140,000",
      "is_village": false,
      "mashMeter_formatted": 67.49,
      "name": "Fairburn",
      "id": 403452,
      "state": "GA",
      "longitude": -84.522495,
      "walkscore": 14,
      "airbnb_properties_count": 6,
      "traditional_properties_count": 0
    },
    "homeType": "Single Family Residential",
    "property_type": "Residential",
    "property_sub_type": "Single Family Detached",
    "beds": 4,
    "num_of_units": null,
    "favorite": null,
    "city": "Atlanta",
    "saleType": "MLS Listing",
    "latitude": 33.69144821166992,
    "description": "Lorem Ipsum is simply dummy text of the printing and typesetting industry.",
    "nextOpenHouseDate": null,
    "recentReductionDate": null,
    "title": "Single Family Detached, Traditional - Atlanta, GA",
    "rent_appreciation_rate": null,
    "originalListPrice": null,
    "parkingSpots": 1,
    "parkingType": "Attached",
    "address": "2333 Daniel",
    "nextOpenHouseStartTime": null,
    "lotSize": 5663,
    "agents": [
      {
        "id": 39995,
        "office_id": 8461
      }
    ],
    "url": "https://www.mashvisor.com/explore/#!/property/analysis/fairburn-atlanta-ga/2333-daniel/home/2214766",
    "baths": 3,
    "address_revealing": true,
    "location": "Fairburn",
    "interested": null,
    "listPrice": 125000,
    "price_per_sqft": 79.82120051085569,
    "lastSalePrice": 145000,
    "is_foreclosure": 0,
    "foreclosure_status": null,
    "occupancy_status": null,
    "owner_occupied": false,
    "heating_system": "Fireplace",
    "cooling_system": "Ceiling Fan(s)",
    "hoa_dues": null,
    "view_type": null,
    "parcel_number": "14F-0032-0005-068-9",
    "architecture_style": "New Traditional",
    "has_pool": null,
    "is_water_front": null,
    "needs_repair": 0,
    "tenant_occupied": 0,
    "is_market_place": 0,
    "schools": [
      {
        "category": "Elementary",
        "name": "Deerwood Academy",
        "district": null
      },
      {
        "category": "High",
        "name": "Therrell",
        "district": null
      },
      {
        "category": "JuniorHigh",
        "name": null,
        "district": null
      },
      {
        "category": "Middle",
        "name": "Bunche",
        "district": null
      }
    ],
    "modification_timestamp": "2019-09-08T18:40:39.000Z",
    "created_at": "2019-09-09T05:23:45.000Z",
    "updated_at": "2019-09-09T05:23:45.000Z"
  }
}

Our property database consists of 6M+ MLS listings (active and inactive), with active listings added daily, with coverage of all major MLS (600+ from the total of 820 in the US).

Property Data Dictionary

Attribute Definition Possible Returns
id Mashvisor Property ID Integer
title A short title for the property String
description Longer description of the property String
home_type The property sub type as provided by the MLS provider String
Possible values:
1. Single Family Residential
2.Townhouse
3.Condo/Coop
4.Multi Family
5. Other
property_main_type The property main type as provided by the MLS provider String
Possible values:
* Residential
* Commercial
* Common Interest
* Farm And Agriculture
* Lots And Land
* MultiFamily
* Other
* Rental
* Residential
property_category The main property listing category String
Possible values:
* Purchase
* Lease
* Rent
address The full street address of the property, ex:
 36981 Newark Blvd #B
String
city The city where the property is located String
state* The state where the property is located String
county County where a property is located String
zip Postal code where a property is located Integer
location The neighborhood where the property is located String
beds Property full bedrooms count Integer
baths Property full bathrooms count Integer
num_of_units Number of units in the property, only exists with multifamily properties Integer
sqft Property living area in square feet unit  Integer
lot_size The lot size of the property in square feet unit  Integer
parcel_number The property APN assigned by tax assessor String
listing_id The MLS ID of the property String
year_built The year was constructed in Integer
walkscore The walkscore value of the property address Integer
tax The last knows tax amount Integer
tax_history Collection of all the taxes reported for a property JSON Array
list_price The listed price for the property Integer
price_per_sqft Price per sqft value Float
days_on_market Number of days since the property was on market for sale Integer
parking_spots Number of parking spots Integer
parking_type An indicator for the parking type Integer
last_sale_date The last sale date of the property Date
last_sale_price The last sale price of the property Integer
is_foreclosure An indicator if the property is foreclosure or not Boolean
Possible values: 0, 1
foreclosure_status The foreclosure status as described by the MLS provider String
Possible values
* Foreclosure - Other
* Lis Pendens (Pre-Foreclosure)
* Notice of Default (Pre-Foreclosure)
* Notice of Foreclosure Sale (Auction)
* Notice of Trustee Sale (Auction)
* Other
* REO - Bank Owned
next_open_house_date The date of the open house occuring Date
next_open_house_start_time The time of the open house starting Time
next_open_house_end_time The time of the open house ending Time
url The URL of the property String
source The name of the entity authorized the property to be syndicated String
provider_url The URL of the entity authorized the property to be syndicated String
franchise The franchise of the property String
latitude Latitude of the property Float
longitude Longitude of the property Float
directions The directions for the property String
heating_system The heating system type String
cooling_system The cooling system type String
neighborhood_id The property neighborhood ID Integer
schools Collection of all the schools nearby a property JSON Array
view_type The property view type String
Possible values:
* Airport
* Average
* Bluff
* Bridge
* Canyon
* City
* Desert
* Forest
* Golf Course
* Harbor
* Hills
* Lake
* Marina
* Mountain
* None
* Ocean
* Other
* Panorama
* Park
* Ravine
* River
* Territorial
* Unknown
* Valley
* Vista
* Water
image_url The property main image URL String
extra_images List of the images associated with a property String
videos Videos associated with a property String
virtual_tours Virtual tour link for a property String
updated_at Date it’s updated in the database Date
buyer_name The property buyer’s name String
seller_name The property seller’s name String
owner_ame The property owner’s name String
owner_address The owner full street address String
owner_city The owner city String
owner_state The owner city String
owner_zip_code The owner city String
owner_phone_number The owner phone number String
owner_image The owner headshot String
owner_email The owner email String
occupancy_status Property occupancy status String
Possible values:
* Assumed Owner Occupancy
* Owner Occupied or Primary Residence
* Second Home
agent_id The property’s agent ID associated to it Integer
Expense Collection of all the expenses reported for a property JSON Array
Possible values:
* AC Maintenance Fee
* Accounting Fee
* Additional Pet Fee
* Amenity Fee
* Annual Operating Expenses
* Application Fee
* Beach Fee
* Boat Fee
* Broadband Fee
* Building Insurance
* Building Maintenance Fee
* Bus Service Fee
* Cable Fee
* Capital Improvements Fee
* Carpet Cleaning Fee
* Cleaning Deposit
* Cleaning Fee
* Closing Cost
* Club Fee
* Club Membership Fee
* Co-Op Fee
* Cold Water Fee
* Common Area Maintenance Fee
* Community Development District Fee
* Community/Master Home Owner Fee
* Condo Management Fee
* Condo/Co-Op Fee
* Contingency Fund Fee
* Cook Fee
* Day Care Fee
* Dock Fee
* Doorman Fee
* Dredging Fee
* Electric Fee
* ElevatorUseFee
* EquestrianFee
* ExterminatorFee
* FacilitiesFee
* FireDepartmentDues
* FireInsuranceFee
* FirewoodFee
* FirstMonthsRent
* FirstTwoMonthsRent
* FitnessCenterFee
* FrontFootFee
* GardenerFee
* GasFee
* GreenFee
* GroundMaintenanceFee
* GroundRent
* GutterCleaningFee
* HealthFee
* HomeOwnerAssessmentsFee
* HomeOwnerTransferFee
* HorseCareFee
* InitiationFee
* KeyDeposit
* LandAssessmentFee
* LandFee
* LastMonthsRent
* LawnMaintenanceFee
* LegalFee
* LifeguardFee
* LightBulbs Filters Fuses AlarmCareFee
* LightFee
* MaidServiceFee
* MaintenanceonPool
* ManagementFee
* MarinaFee
* Mello-RoosCommunityFacilitiesDistrictFee
* MHParkFees
* MoveinFee
* MoveoutFee
* OilFee
* OnsiteParkingFee
* OriginationFee
* Other
* OwnerPays
* ParkFee
* ParkingFee
* PetAddendumFee
* PetApplicationFee
* PetDeposit
* PhoneFee
* Pier/DockMaintenanceFee
* PlannedAreaDevelopmentFee
* POAFee
* Pool/SpaFee
* ProcessingFee
* RanchFee
* Re-KeyFee
* RecaptureFee
* RecreationFee
* RecyclingFee
* RegimeFee
* RepairDeductible
* ReservationFee
* ResortFee
* RoofMaintenanceFee
* RoofRepairFee
* RoofReplacementFee
* RVFee
* RVParkingFee
* SecurityDeposit
* SecurityLightFee
* SecurityMonitoringFee
* SecurityServiceFee
* SecurityStaffFee
* SecuritySystemFee
* SepticInspectionFee
* SewerFee
* SewerTapFee
* SnowRemovalFee
* SocialFee
* SpecialAssessmentFee
* StormWaterFee
* StreetLightingFee
* StreetMaintenanceFee
* StreetParkingFee
* StructuralMaintenanceFee
* TenantPays
* TennisFee
* TrashFee
* TripleNetFee
* UtilitiesFee
* WalkingTrailFee
* WaterFee
* WaterHeaterFee
* WaterIrrigationFee
* WaterPipeFee
* WaterRightsFee
* WaterTapFee
* WaterTreatmentFee
* WaterUseFee
* Water/SewerHookupFee
* WaterfrontFee
* WindowCleaningFee
* YardCareFee
builder_name The builder name of a property String
builder_email The builder email of a property String
builder_number The builder phone number of a property String
builder_address The builder full address of a property String
disclaimer String serves as a negation or limitation of the rights under a warranty given by a seller to a buyer String
appliances A description of the appliance as provided JSON Array
Possible values:
* BarbequeorGrill
* CoffeeSystem
* CoffeeSystem-Roughin
* Cooktop
* Cooktop-Electric
* Cooktop-Electric2burner
* Cooktop-Electric6burner
* Cooktop-Gas
* Cooktop-Gas2burner
* Cooktop-Gas5burner
* Cooktop-Gas6burner
* Cooktop-GasCustom
* Cooktop-Induction
* Cooktop-Induction2burner
* Cooktop-Induction6burner
* Dishwasher
* Dishwasher-Drawer
* Dishwasher-Twoormore
* Dryer
* Dryer-Dualfuel
* Dryer-Electric110V
* Dryer-Electric220V
* Dryer-Gas
* Dryer-Gasroughin
* Freezer
* Freezer-Compact
* Freezer-Upright
* GarbageDisposer
* IceMaker
* Microwave
* None
* Other
* Oven
* Oven-Convection
* Oven-Double
* Oven-DoubleElectric
* Oven-DoubleGas
* Oven-Gas
* Oven-Gas3wide
* Oven-Self-Cleaning
* Oven-Steam
* Oven-Twin
* Oven-TwinElectric
* Oven-TwinGas
* Oven-TwinGas3wide
* Oven-TwinMixed
* Range
* Range-BuiltIn
* Range-Dual
* Range-Dual10burner
* Range-Dual6burner
* Range-Dual8burner
* Range-Electric
* Range-Gas
* Range-Gas10burner
* Range-Gas6burner
* Range-Gas8burner
* Range-Induction
* Range-Other
* Rangetop-Electric
* Rangetop-Electric2burner
* Rangetop-Electric6burner
* Rangetop-Gas
* Rangetop-Gas10burner
* Rangetop-Gas2burner
* Rangetop-Gas4burnercompact
* Rangetop-Gas6burner
* Rangetop-Gas8burner
* Rangetop-GasCustom
* Rangetop-Induction
* Rangetop-Induction2burner
* Rangetop-Induction6burner
* Refrigerator
* Refrigerator-Bar
* Refrigerator-Built-in
* Refrigerator-Built-inWithPlumbing
* Refrigerator-Drawer
* Refrigerator-SidebySide
* Refrigerator-Undercounter
* Refrigerator-WineStorage
* Refrigerator-WithPlumbing
* TrashCompactor
* VacuumSystem
* VacuumSystem-Roughin
* VentHood
* VentHood10burner
* VentHood6burner
* VentHood8burner
* WarmingDrawer
* Washer
* Washer-Frontload
* Washer-Steamer
* Washer-Topload
* Washer/DryerCombo
* Washer/DryerStack
* Water-Filter
* Water-InstantHot
* Water-Purifier
* Water-Softener
detailed_characteristics Detailed characteristics JSON Array
room_count Total rooms count Integer
year_updated Indicates the year the property received updates Integer
half_baths Indicates the half bathrooms value for a property Integer

Get Property

Sample Request

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.mashvisor.com/v1.1/client/property?id=2214791&state=GA")
  .get()
  .addHeader("x-api-key", "YOUR_API_KEY")
  .build();

Response response = client.newCall(request).execute();
require 'uri'
require 'net/http'

url = URI("https://api.mashvisor.com/v1.1/client/property?id=2214791&state=GA")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Get.new(url)
request["x-api-key"] = 'YOUR_API_KEY'

response = http.request(request)
puts response.read_body
<?php

$request = new HttpRequest();
$request->setUrl('https://api.mashvisor.com/v1.1/client/property');
$request->setMethod(HTTP_METH_GET);
$request->setHeaders(array(
  'x-api-key' => 'YOUR_API_KEY'
));

$request->setQueryData(array(
  'state' => 'GA',
  'id' => 2214791
));

try {
  $response = $request->send();

  echo json_decode($response->getBody());
} catch (HttpException $ex) {
  echo $ex;
}
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://api.mashvisor.com/v1.1/client/property?id=2214791&state=GA"

  req, _ := http.NewRequest("GET", url, nil)

  req.Header.Add("x-api-key", "YOUR_API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}

The above command returns JSON structured like this:

{
  "status": "success",
  "content": {
    "stateInterest": {
      "state": "GA",
      "thirtyYearFixed": 4.41,
      "thirtyYearFixedCount": 0,
      "fifteenYearFixed": 3.83,
      "fifteenYearFixedCount": 0,
      "fiveOneARM": 3.95,
      "fiveOneARMCount": 0
    },
    "isShortSale": null,
    "source": "Property Services of Atlanta,  Inc.",
    "yearBuilt": 2005,
    "nextOpenHouseEndTime": null,
    "sqft": 1566,
    "lastSaleDate": "2017-03-23 00:00:00",
    "id": 2214791,
    "state": "GA",
    "county": "DeKalb",
    "longitude": -84.51863861083984,
    "zip": 30331,
    "image": {
      "image": "https://bc9f40b414b80f1ce90f-212b46b1c531b50ebb00763170d70160.ssl.cf5.rackcdn.com/Properties/property-default.png",
      "url": "https://bc9f40b414b80f1ce90f-212b46b1c531b50ebb00763170d70160.ssl.cf5.rackcdn.com/Properties/property-default.png",
      "width": 100,
      "height": 100
    },
    "extra_images": [
      "https://bc9f40b414b80f1ce90f-212b46b1c531b50ebb00763170d70160.ssl.cf5.rackcdn.com/Properties/property-default.png",
      "https://bc9f40b414b80f1ce90f-212b46b1c531b50ebb00763170d70160.ssl.cf5.rackcdn.com/Properties/property-default.png",
      "https://bc9f40b414b80f1ce90f-212b46b1c531b50ebb00763170d70160.ssl.cf5.rackcdn.com/Properties/property-default.png",
      "https://bc9f40b414b80f1ce90f-212b46b1c531b50ebb00763170d70160.ssl.cf5.rackcdn.com/Properties/property-default.png",
      "https://bc9f40b414b80f1ce90f-212b46b1c531b50ebb00763170d70160.ssl.cf5.rackcdn.com/Properties/property-default.png"
    ],
    "videos": [],
    "virtual_tours": [],
    "tax": 1765,
    "mls_id": "8655658",
    "daysOnMarket": 3,
    "neighborhood": {
      "country": "United States",
      "image": "https://9ac82074a42d61a93c2a-4910baab8d3df1a59178432e0b86512c.ssl.cf5.rackcdn.com",
      "city": "Atlanta",
      "singleHomeValue": 140000,
      "mashMeter": 67.49,
      "latitude": 33.692139,
      "description": null,
      "singleHomeValue_formatted": "$140,000",
      "is_village": false,
      "mashMeter_formatted": 67.49,
      "name": "Fairburn",
      "id": 403452,
      "state": "GA",
      "longitude": -84.522495,
      "walkscore": 14,
      "airbnb_properties_count": 6,
      "traditional_properties_count": 0
    },
    "homeType": "Single Family Residential",
    "property_type": "Residential",
    "property_sub_type": "Single Family Detached",
    "beds": 4,
    "num_of_units": null,
    "favorite": null,
    "city": "Atlanta",
    "saleType": "MLS Listing",
    "latitude": 33.69144821166992,
    "description": "It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout.",
    "nextOpenHouseDate": null,
    "recentReductionDate": null,
    "title": "Single Family Detached, Traditional - Atlanta, GA",
    "rent_appreciation_rate": null,
    "originalListPrice": null,
    "parkingSpots": 1,
    "parkingType": "Attached",
    "address": "2333 Daniel",
    "nextOpenHouseStartTime": null,
    "lotSize": 5663,
    "agents": [
      {
        "id": 39995,
        "office_id": 8461
      }
    ],
    "url": "https://www.mashvisor.com/explore/#!/property/analysis/fairburn-atlanta-ga/2333-daniel/home/2214766",
    "baths": 3,
    "address_revealing": true,
    "location": "Fairburn",
    "interested": null,
    "listPrice": 125000,
    "price_per_sqft": 79.82120051085569,
    "lastSalePrice": 145000,
    "is_foreclosure": 0,
    "foreclosure_status": null,
    "occupancy_status": null,
    "owner_occupied": false,
    "heating_system": "Fireplace",
    "cooling_system": "Ceiling Fan(s)",
    "hoa_dues": null,
    "view_type": null,
    "parcel_number": "14F-0032-0005-068-9",
    "architecture_style": "New Traditional",
    "has_pool": null,
    "is_water_front": null,
    "needs_repair": 0,
    "tenant_occupied": 0,
    "is_market_place": 0,
    "schools": [
      {
        "category": "Elementary",
        "name": "Deerwood Academy",
        "district": null
      },
      {
        "category": "High",
        "name": "Therrell",
        "district": null
      },
      {
        "category": "JuniorHigh",
        "name": null,
        "district": null
      },
      {
        "category": "Middle",
        "name": "Bunche",
        "district": null
      }
    ],
    "modification_timestamp": "2019-09-08T18:40:39.000Z",
    "created_at": "2019-09-09T05:23:45.000Z",
    "updated_at": "2019-09-09T05:23:45.000Z"
  }
}

This endpoint retrieves the property's detailed dataset.

HTTP Request

GET https://api.mashvisor.com/v1.1/client/property

Request Headers

Parameter Value
x-api-key User Authentication Header

Query Parameters

Parameter Value Default Description
id Long The property Id from the Mashvisor database.
state* String The state of the property should be provided to the api or api will throw error 404.
parcel_number String Property parcel or APN
mls_id String Property MLS id
address String Property street address
city String Property city
zip_code String Property zip code

Get Taxes

Sample Request

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.mashvisor.com/v1.1/client/property/2214791/taxing?state=GA")
  .get()
  .addHeader("x-api-key", "YOUR_API_KEY")
  .build();

Response response = client.newCall(request).execute();
require 'uri'
require 'net/http'

url = URI("https://api.mashvisor.com/v1.1/client/property/2214791/taxing?state=GA")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Get.new(url)
request["x-api-key"] = 'YOUR_API_KEY'

response = http.request(request)
puts response.read_body
<?php

$request = new HttpRequest();
$request->setUrl('https://api.mashvisor.com/v1.1/client/property/2214791/taxing');
$request->setMethod(HTTP_METH_GET);
$request->setHeaders(array(
  'x-api-key' => 'YOUR_API_KEY'
));

$request->setQueryData(array(
  'state' => 'GA'
));

try {
  $response = $request->send();

  echo json_decode($response->getBody());
} catch (HttpException $ex) {
  echo $ex;
}
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://api.mashvisor.com/v1.1/client/property/2214791/taxing?state=GA"

  req, _ := http.NewRequest("GET", url, nil)

  req.Header.Add("x-api-key", "YOUR_API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}

The above command returns JSON structured like this:

{
  "status": "success",
  "content": {
    "tax_history": [
      {
        "year": "2014",
        "property_tax": 1414.47,
        "assessment": 105300
      },
      {
        "year": "2015",
        "property_tax": 1340.14,
        "assessment": 99400
      },
      {
        "year": "2016",
        "property_tax": 1340.14,
        "assessment": 99400
      },
      {
        "year": "2017",
        "property_tax": 1340.14,
        "assessment": 99400
      },
      {
        "year": "2018",
        "property_tax": 977.59,
        "assessment": 99400
      },
      {
        "year": "2019",
        "property_tax": 977.59,
        "assessment": 151200
      }
    ]
  }
}

This endpoint retrieves the property's historical tax rates.

HTTP Request

GET https://api.mashvisor.com/v1.1/client/property/{id}/taxing

Path Parameters

Parameter Value Default Description
id Long The property Id from the Mashvisor database.

Request Headers

Parameter Value
x-api-key User Authentication Header

Query Parameters

Parameter Value Default Description
state* String The state of the property should be provided to the api or api will throw error 404.

Property Ownership

The Ownership Objects

The Contact Object:

{
  "id": 3432,
  "first_name": "Ahmed",
  "last_name": "Hashlamon",
  "email_address": "[email protected]",
  "phone_number": "(669) 222-6396",
  "line_type": null,
  "address": null,
  "city": "Campbell",
  "state": "CA",
  "zip_code": "95008",
  "created_at": "2016-12-15T14:53:40.000Z",
  "updated_at": "2019-09-10T02:58:01.000Z"
  }

The Demographics Object:

{
  "dob": "24081992",
  "age_range": "25-29",
  "ethnicity": "Hispanic",
  "single_parent": "Yes",
  "senior_adult_household": "Yes",
  "young_adult_household": null,
  "business_owner": "Accountant",
  "language": "English",
  "religion": "Christian",
  "number_of_children": "3",
  "presence_of_children": "Yes",
  "education": null,
  "occupation": null,
  "gender": "Male",
  "marital_status": "Married",
  "owner_renter": "Owner",
  "social_presence_indicator": "Yes"
  }

The Lifestyle and Interests Object:

{
  "magazines": "Yes",
  "technology": "Yes",
  "dieting_and_wellness": "Yes",
  "exercise": "Yes",
  "diy_home_improvement": "Yes",
  "jewelry": null,
  "mail_order_buyer": "Yes",
  "membership_clubs": "Yes",
  "online_education": "Yes",
  "spectator_sports": "Yes",
  "outdoor_sports": "Yes",
  "investing": null,
  "books": null,
  "political_donor": "Yes",
  "hobbies_and_crafts": "Yes",
  "cosmetics": "Yes",
  "travel": "Yes",
  "charitable_donations": "Yes",
  "arts_and_antiques": "Yes",
  "pet_owner": "Yes",
  "cooking": null,
  "diy_auto_work": "Yes",
  "health_and_beauty": "Yes",
  "parenting": null,
  "music": null,
  "film_and_movies": "Yes",
  "self_improvement": "Yes",
  "womens_apparel": "Yes"
  }

The Financials, Household incomes, wealth score, and autos Object:

{
  "est_household_income": "$80,000 - 100,000",
  "length_of_residence": "10 years",
  "home_purchase_date": "201770",
  "est_home_purchase_price": "$950,000-1,100,999",
  "dwelling_type": "Single Family",
  "auto_year": null,
  "number_of_credit_lines": "2",
  "auto_make": null,
  "credit_card_holder": "Yes",
  "auto_model": null,
  "est_home_value": null,
  "auto_edition": null,
  "est_net_worth": "$500,000-749,999",
  "gas_credit_card_holder": null,
  "upscale_card_holder": "Yes",
  "wealth_score": 98
}

Mashvisor database contains historical data on property owners' contact information, demographics, lifestyle, interests, financials, and estimated household income.

Owner Data Dictionary

Attribute Definition Possible Returns
First Name Owner First name String
Last Name Owner Last name String
Phone Number Phone number, including area code Integer
Line Type Landline or Mobile String
Email Address Owner email address String
Address Street address String
City City name String
state* state* abbreviation String
Zip Code Zip code Integer
DOB A month and year of person’s born String
Age Range Age range of the person String
Ethnicity Ethnicity of the person String
Single Parent Is single parent presence in household String
Senior Adult Household Yes or null String
Young Adult Household Yes or null String
Business Owner Business owner; Accountant, Builder, Director, ..  String
Language Primary Language String
Religion Person’s religion String
Number of Children Children within the household Integer
Presence of Children Yes or null String
Education Highest level of education String
Occupation Industry of occupation String
Gender Male or Female String
Marital Status Single or Married String
Own/Rent Own or rent household String
Social Presence Indicator Whether the person has an account on social networks or not, Yes or null String
Magazines If there’s a match, the title will be listed String
Technology If there’s a match, the title will be listed String
Dieting and Wellness If there’s a match, the title will be listed String
Exercise If there’s a match, the title will be listed String
DIY Home Improvement If there’s a match, the title will be listed String
Jewelry If there’s a match, the title will be listed String
Mail Order Buyer If there’s a match, the title will be listed String
Membership Clubs If there’s a match, the title will be listed String
Online Education If there’s a match, the title will be listed String
Spectator Sports If there’s a match, the title will be listed String
Outdoor Sports If there’s a match, the title will be listed String
Investing If there’s a match, the title will be listed String
Books If there’s a match, the title will be listed String
Political Donor If there’s a match, the title will be listed String
Hobbies and Crafts If there’s a match, the title will be listed String
Cosmetics If there’s a match, the title will be listed String
Travel If there’s a match, the title will be listed String
Charitable Donations If there’s a match, the title will be listed String
Arts and Antiques If there’s a match, the title will be listed String
Pet Owner If there’s a match, the title will be listed String
Cooking If there’s a match, the title will be listed String
DIY Auto work If there’s a match, the title will be listed String
Health and Beauty If there’s a match, the title will be listed String
Parenting If there’s a match, the title will be listed String
Music If there’s a match, the title will be listed String
Film and Movies If there’s a match, the title will be listed String
Self Improvement If there’s a match, the title will be listed String
Womens Apparel Yes or null String
Est. Household Income Estimated household income String
Length of Residence Length of residence String
Home Purchase Date Estimated date of home purchase Date
Est. Home Purchase Price Estimated price of home purchase String
Dwelling Type Single family or multi-family String
Auto year Year of automobile Integer
Number of credit lines City Number of lines of credit Integer
Auto make Make of automobile String
Credit card holder Yes or null String
Auto model Model of automobile String
Est. Home Value Estimated home value String
Auto edition Edition of automobile String
Est. Net Worth Estimated net worth String
Gas credit card holder Yes or null String
Upscale card holder Yes or null String
Wealth Score Measure of wealth, 0 - 100 Integer

Get Contact Info

Sample Request

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.mashvisor.com/v1.1/client/owner/contact?mls_id=SF453443465&state=GA")
  .get()
  .addHeader("x-api-key", "YOUR_API_KEY")
  .build();

Response response = client.newCall(request).execute();
require 'uri'
require 'net/http'

url = URI("https://api.mashvisor.com/v1.1/client/owner/contact?mls_id=SF453443465&state=GA")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Get.new(url)
request["x-api-key"] = 'YOUR_API_KEY'

response = http.request(request)
puts response.read_body
<?php

$request = new HttpRequest();
$request->setUrl('https://api.mashvisor.com/v1.1/client/owner/contact');
$request->setMethod(HTTP_METH_GET);

$request->setQueryData(array(
  'mls_id' => 'SF453443465'
  'state' => 'GA'
));

$request->setHeaders(array(
  'x-api-key' => 'YOUR_API_KEY'
));

try {
  $response = $request->send();

  echo json_decode($response->getBody());
} catch (HttpException $ex) {
  echo $ex;
}
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://api.mashvisor.com/v1.1/client/owner/contact?mls_id=SF453443465&state=GA"

    req, _ := http.NewRequest("GET", url, nil)

  req.Header.Add("x-api-key", "YOUR_API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}

The above command returns JSON structured like this:

{
  "status": "success",
  "content": {
    "id": 3432,
    "first_name": "Ahmed",
    "last_name": "Hashlamon",
    "email_address": "[email protected]",
    "phone_number": "(669) 222-6396",
    "line_type": "Mobile",
    "address": null,
    "city": "Campbell",
    "state": "CA",
    "zip_code": "95008",
    "created_at": "2016-12-15T14:53:40.000Z",
    "updated_at": "2019-09-10T02:58:01.000Z"
  }
}

This endpoint retrieves contact details for a single property owner.

HTTP Request

GET https://api.mashvisor.com/v1.1/client/owner/contact

Request Headers

Parameter Value
x-api-key User Authentication Header

Query Parameters

Parameter Value Default Description
parcel_number String Property parcel or APN
mls_id String Property MLS id
address String Property street address
city String Property city
state* String Property state
zip_code String Property zip code

Get Demographics

Sample Request

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.mashvisor.com/v1.1/client/owner/demographics?phone_number=+16692226396")
  .get()
  .addHeader("x-api-key", "YOUR_API_KEY")
  .build();

Response response = client.newCall(request).execute();
require 'uri'
require 'net/http'

url = URI("https://api.mashvisor.com/v1.1/client/owner/demographics?phone_number=+16692226396")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Get.new(url)
request["x-api-key"] = 'YOUR_API_KEY'

response = http.request(request)
puts response.read_body
<?php

$request = new HttpRequest();
$request->setUrl('https://api.mashvisor.com/v1.1/client/owner/demographics');
$request->setMethod(HTTP_METH_GET);

$request->setQueryData(array(
  'phone_number' => '+16692226396'
));

$request->setHeaders(array(
  'x-api-key' => 'YOUR_API_KEY'
));

try {
  $response = $request->send();

  echo json_decode($response->getBody());
} catch (HttpException $ex) {
  echo $ex;
}
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://api.mashvisor.com/v1.1/client/owner/demographics?phone_number=+16692226396"

    req, _ := http.NewRequest("GET", url, nil)

  req.Header.Add("x-api-key", "YOUR_API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}

The above command returns JSON structured like this:

{
  "status": "success",
  "content": {
    "dob": "24081992",
    "age_range": "25-29",
    "ethnicity": "Catholic",
    "single_parent": "Yes",
    "senior_adult_household": "Yes",
    "young_adult_household": null,
    "business_owner": "Accountant",
    "language": "English",
    "religion": "Christian",
    "number_of_children": "3",
    "presence_of_children": "Yes",
    "education": null,
    "occupation": null,
    "gender": "Male",
    "marital_status": "Married",
    "owner_renter": "Owner",
    "social_presence_indicator": "Yes"
  }
}

This endpoint retrieves the property owners’ demographics when matching on a full name, phone number, email address, or on a complete mailing address.

HTTP Request

GET https://api.mashvisor.com/v1.1/client/owner/demographics

Request Headers

Parameter Value
x-api-key User Authentication Header

Query Parameters

Parameter Value Default Description
first_name String First name
last_name String Last name
phone_number String Person phone number
email_address String Person email address
address String Property street address
zip_code String Property zip code
city String Property city
state* String Property state

Get Lifestyle and Interests

Sample Request

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.mashvisor.com/v1.1/client/owner/lifeint?phone_number=+16692226396")
  .get()
  .addHeader("x-api-key", "YOUR_API_KEY")
  .build();

Response response = client.newCall(request).execute();
require 'uri'
require 'net/http'

url = URI("https://api.mashvisor.com/v1.1/client/owner/lifeint?phone_number=+16692226396")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Get.new(url)
request["x-api-key"] = 'YOUR_API_KEY'

response = http.request(request)
puts response.read_body
<?php

$request = new HttpRequest();
$request->setUrl('https://api.mashvisor.com/v1.1/client/owner/lifeint');
$request->setMethod(HTTP_METH_GET);

$request->setQueryData(array(
  'phone_number' => '+16692226396'
));

$request->setHeaders(array(
  'x-api-key' => 'YOUR_API_KEY'
));

try {
  $response = $request->send();

  echo json_decode($response->getBody());
} catch (HttpException $ex) {
  echo $ex;
}
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://api.mashvisor.com/v1.1/client/owner/lifeint?phone_number=+16692226396"

    req, _ := http.NewRequest("GET", url, nil)

  req.Header.Add("x-api-key", "YOUR_API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}

The above command returns JSON structured like this:

{
  "status": "success",
  "content": {
    "magazines": "Yes",
    "technology": "Yes",
    "dieting_and_wellness": "Yes",
    "exercise": "Yes",
    "diy_home_improvement": "Yes",
    "jewelry": null,
    "mail_order_buyer": "Yes",
    "membership_clubs": "Yes",
    "online_education": "Yes",
    "spectator_sports": "Yes",
    "outdoor_sports": "Yes",
    "investing": null,
    "books": null,
    "political_donor": "Yes",
    "hobbies_and_crafts": "Yes",
    "cosmetics": "Yes",
    "travel": "Yes",
    "charitable_donations": "Yes",
    "arts_and_antiques": "Yes",
    "pet_owner": "Yes",
    "cooking": null,
    "diy_auto_work": "Yes",
    "health_and_beauty": "Yes",
    "parenting": null,
    "music": null,
    "film_and_movies": "Yes",
    "self_improvement": "Yes",
    "womens_apparel": "Yes"
  }
}

This endpoint retrieves the property owners’ lifestyle and interests when matching on a full name, phone number, email address, or on a complete mailing address.

HTTP Request

GET https://api.mashvisor.com/v1.1/client/owner/lifeint

Request Headers

Parameter Value
x-api-key User Authentication Header

Query Parameters

Parameter Value Default Description
first_name String First name
last_name String Last name
phone_number String Person phone number
email_address String Person email address
address String Property street address
zip_code String Property zip code
city String Property city
state* String Property state

Get Financials, Household Incomes

Sample Request

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.mashvisor.com/v1.1/client/owner/finhouse?phone_number=+16692226396")
  .get()
  .addHeader("x-api-key", "YOUR_API_KEY")
  .build();

Response response = client.newCall(request).execute();
require 'uri'
require 'net/http'

url = URI("https://api.mashvisor.com/v1.1/client/owner/finhouse?phone_number=+16692226396")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Get.new(url)
request["x-api-key"] = 'YOUR_API_KEY'

response = http.request(request)
puts response.read_body
<?php

$request = new HttpRequest();
$request->setUrl('https://api.mashvisor.com/v1.1/client/owner/finhouse');
$request->setMethod(HTTP_METH_GET);

$request->setQueryData(array(
  'phone_number' => '+16692226396'
));

$request->setHeaders(array(
  'x-api-key' => 'YOUR_API_KEY'
));

try {
  $response = $request->send();

  echo json_decode($response->getBody());
} catch (HttpException $ex) {
  echo $ex;
}
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://api.mashvisor.com/v1.1/client/owner/finhouse?phone_number=+16692226396"

    req, _ := http.NewRequest("GET", url, nil)

  req.Header.Add("x-api-key", "YOUR_API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}

The above command returns JSON structured like this:

{
  "status": "success",
  "content": {
    "est_household_income": "$80,000 - 100,000",
    "length_of_residence": "10 years",
    "home_purchase_date": "201770",
    "est_home_purchase_price": "$950,000-1,100,999",
    "dwelling_type": "Single Family",
    "auto_year": null,
    "number_of_credit_lines": "2",
    "auto_make": null,
    "credit_card_holder": "Yes",
    "auto_model": null,
    "est_home_value": null,
    "auto_edition": null,
    "est_net_worth": "$500,000-749,999",
    "gas_credit_card_holder": null,
    "upscale_card_holder": "Yes",
    "wealth_score": 98
  }
}

This endpoint retrieves property owners’ financials, household income, and wealth score when matching on a full name, phone number, email address, or on a complete mailing address.

HTTP Request

GET https://api.mashvisor.com/v1.1/client/owner/finhouse

Request Headers

Parameter Value
x-api-key User Authentication Header

Query Parameters

Parameter Value Default Description
first_name String First name
last_name String Last name
phone_number String Person phone number
email_address String Person email address
address String Property street address
zip_code String Property zip code
city String Property city
state* String Property state

Investment Analysis

The Investment Performance Object

The Investment Performance Object:

{
  "principle_with_interest": 0,
  "traditional": {
      "occupancy": 93.9,
      "cash_flow": 698.3238000000001,
      "roi": 9.53343071672355,
      "cap_rate": 9.53343071672355,
      "rental_income": 1450.755,
      "maintenance_cost": 73.25,
      "traditional_utilities": 170,
      "management_cost": 145.0755,
      "traditional_property_tax": 70,
      "traditional_home_owner_insurance": 91,
      "cleaningFees": 0,
      "traditional_rental_income_tax": 203.10570000000004,
      "total_expenses": 752.4312,
      "traditional_other": 0,
      "hoa_dues": 0,
      "expenses_details": {
          "utilities": {
              "expenses": {
                  "trash": null,
                  "water": null,
                  "cable": null,
                  "electricity": null,
                  "fuel": null
              },
              "sum": 0
          }
      }
  },
  "airbnb": {
      "occupancy": 62.5,
      "cash_flow": 1686.5176527777778,
      "roi": 23.024131778536216,
      "cap_rate": 23.024131778536216,
      "rental_income": 2751.0100694444445,
      "maintenance_cost": 73.25,
      "airbnb_utilities": 170,
      "management_cost": 275.10100694444446,
      "airbnb_property_tax": 70,
      "airbnb_home_owner_insurance": 91,
      "airbnb_rental_income_tax": 385.1414097222223,
      "cleaningFees": 0,
      "total_expenses": 1064.4924166666667,
      "airbnb_other": 0,
      "hoa_dues": 0,
      "expenses_details": {
          "utilities": {
              "expenses": {
                  "trash": null,
                  "water": null,
                  "cable": null,
                  "electricity": null,
                  "fuel": null
              },
              "sum": 0
          }
      }
  },
  "property_tax": 70
}

Property Data Dictionary

Attribute Definition Possible Returns
Traditional Rental The expected monthly rent if the property is rented out traditionally (long-term rental) Double
Traditional ROI Measures the returns of a property based on the amount of cash put down: (Cash Flow X 12 Months X 100)/Total Cash Invested Double
Traditional Cap Rate Measures the expected income and potential return of a property; does not take property financing into consideration, gives return as if property is paid off: (Cash Flow X 12 Months)/Property Price Double
Traditional Vacancy Rate The expected number of days the property won’t be reserved/rented per year.  Double
AirBnB Rental The expected monthly rent if the property is listed on Airbnb (short-term vacation rental) versus if the property is rented out traditionally (long-term rental) Double
AirBnB ROI Measures the returns of a property based on the amount of cash put down: (Cash Flow X 12 Months X 100)/Total Cash Invested Double
AirBnB Cap Rate Measures the expected income and potential return of a property; does not take property financing into consideration, gives return as if property is paid off: (Cash Flow X 12 Months)/Property Price Double
AirBnB Occupancy The expected number of days the property will be reserved/rented per year. num of days per year, or a percentage Based on "is_days" param, eg: 70 as a percentage, or 150 as days Double
Down Payment Down payment Integer
Loan Type Loan type Integer
Interest Rate Interest rate Double
Payment Type loan, or cash String
Default: cash
Traditional Occupancy num of days per year, or a percentage Based on "is_days" param, eg: 70 as a percentage, or 150 as days Double
Is Days If it's set to 0, the "traditional_occupancy" is considered as a percentage, if it's 1, it's considered as num of days per year Integer
Default: 0
Max Bid Sets the property listing price to its value Integer
Traditional Maintenance Cost Sets the traditional maintenance cost, e.g: 250 Double
Airbnb Maintenance Cost Sets the airbnb maintenance cost, e.g: 230 Double
Traditional Management Cost Sets the traditional management cost, e.g: 130 Double
Airbnb Management Cost Sets the airbnb management cost, e.g: 120 Double
Airbnb Property Tax Sets the airbnb property tax value, e.g: 1705 Float
Traditional Property Tax Sets the traditional property tax value, e.g: 1705 Float
Airbnb Home Owner Insurance Sets the airbnb home owner insurance cost, e.g: 83 Integer
Traditional Home Owner Insurance Sets the traditional home owner insurance cost, e.g: 83 Integer
Airbnb Total Expenses Sets the airbnb total expenses, e.g: 1700 Double
Traditional Total Expenses Sets the traditional total expenses, e.g: 1900 Double
Startup Cost First time costs, paid only once Integer
Default: 8000

Get Investment Performance

Sample Request

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.mashvisor.com/v1.1/client/property/664367/investment?state=GA&payment_type=loan&interest_rate=0.5&loan_type=1&down_payment=100")
  .get()
  .addHeader("x-api-key", "YOUR_API_KEY")
  .build();

Response response = client.newCall(request).execute();
require 'uri'
require 'net/http'

url = URI("https://api.mashvisor.com/v1.1/client/property/664367/investment?state=GA&payment_type=loan&interest_rate=0.5&loan_type=1&down_payment=100")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Get.new(url)
request["x-api-key"] = 'YOUR_API_KEY'

response = http.request(request)
puts response.read_body
<?php

$request = new HttpRequest();
$request->setUrl('https://api.mashvisor.com/v1.1/client/property/664367/investment');
$request->setMethod(HTTP_METH_GET);
$request->setHeaders(array(
  'x-api-key' => 'YOUR_API_KEY'
));
$request->setQueryData(array(
  'state' => 'GA',
  'payment_type' => 'loan',
  'interest_rate' => '0.5',
  'loan_type' => '1',
  'down_payment' => '100'
));

try {
  $response = $request->send();

  echo json_decode($response->getBody());
} catch (HttpException $ex) {
  echo $ex;
}
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://api.mashvisor.com/v1.1/client/property/664367/investment?state=GA&payment_type=loan&interest_rate=0.5&loan_type=1&down_payment=100"

    req, _ := http.NewRequest("GET", url, nil)

  req.Header.Add("x-api-key", "YOUR_API_KEY")

    req.Header.Add("cache-control", "no-cache")
    req.Header.Add("postman-token", "6dc17686-8955-e00f-f0bb-d8f60f49a16b")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}

The above command returns JSON structured like this:

{
  "status": "success",
  "content": {
      "principle_with_interest": 0,
      "traditional": {
          "occupancy": 93.9,
          "cash_flow": 698.3238000000001,
          "roi": 9.53343071672355,
          "cap_rate": 9.53343071672355,
          "rental_income": 1450.755,
          "maintenance_cost": 73.25,
          "traditional_utilities": 170,
          "management_cost": 145.0755,
          "traditional_property_tax": 70,
          "traditional_home_owner_insurance": 91,
          "cleaningFees": 0,
          "traditional_rental_income_tax": 203.10570000000004,
          "total_expenses": 752.4312,
          "traditional_other": 0,
          "hoa_dues": 0,
          "expenses_details": {
              "utilities": {
                  "expenses": {
                      "trash": null,
                      "water": null,
                      "cable": null,
                      "electricity": null,
                      "fuel": null
                  },
                  "sum": 0
              }
          }
      },
      "airbnb": {
          "occupancy": 62.5,
          "cash_flow": 1686.5176527777778,
          "roi": 23.024131778536216,
          "cap_rate": 23.024131778536216,
          "rental_income": 2751.0100694444445,
          "maintenance_cost": 73.25,
          "airbnb_utilities": 170,
          "management_cost": 275.10100694444446,
          "airbnb_property_tax": 70,
          "airbnb_home_owner_insurance": 91,
          "airbnb_rental_income_tax": 385.1414097222223,
          "cleaningFees": 0,
          "total_expenses": 1064.4924166666667,
          "airbnb_other": 0,
          "hoa_dues": 0,
          "expenses_details": {
              "utilities": {
                  "expenses": {
                      "trash": null,
                      "water": null,
                      "cable": null,
                      "electricity": null,
                      "fuel": null
                  },
                  "sum": 0
              }
          }
      },
      "property_tax": 70
  }
}

This endpoint retrieves the property's investment performance.

HTTP Request

GET https://api.mashvisor.com/v1.1/client/property/{id}/investment

Request Headers

Parameter Value
x-api-key User Authentication Header

Path Parameters

Parameter Value Default Description
id Long The property Id from the Mashvisor database.

Query Parameters

Parameter Value Default Description
state* String The state of the property should be provided to the api or api will throw error 404.
down_payment Integer Down payment
loan_type Integer Loan type
interest_rate Double Interest rate
payment_type String loan, cash
airbnb_rental Double Monthly Airbnb rental income, ex: 2000
traditional_rental Double Monthly traditional rental income, ex: 1700
airbnb_occupancy Double num of days per year, or a percentage Based on "is_days" param, eg: 70 as a percentage, or 150 as days
traditional_occupancy Double num of days per year, or a percentage Based on "is_days" param, eg: 70 as a percentage, or 150 as days
is_days Integer 0 If it's set to 0, the "traditional_occupancy" is considered as a percentage, if it's 1, it's considered as num of days per year
max_bid Integer Sets the property listing price to its value
traditional_maintenance_cost Double Sets the traditional maintenance cost, e.g: 250
airbnb_maintenance_cost Double Sets the airbnb maintenance cost, e.g: 230
traditional_management_cost Double Sets the traditional management cost, e.g: 130
airbnb_management_cost Double Sets the airbnb management cost, e.g: 120
airbnb_property_tax Float Sets the airbnb property tax value, e.g: 1705
traditional_property_tax Float Sets the traditional property tax value, e.g: 1705
airbnb_home_owner_insurance Integer Sets the airbnb home owner insurance cost, e.g: 83
traditional_home_owner_insurance Integer Sets the traditional home owner insurance cost, e.g: 83
airbnb_total_expenses Double Sets the airbnb total expenses, e.g: 1700
traditional_total_expenses Double Sets the traditional total expenses, e.g: 1900
valuation_score Boolean false If true, gets the property valuation score
startup_cost Integer 8000

Get Investment Breakdown

Sample Request

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.mashvisor.com/v1.1/client/property/664367/investment/breakdown?state=GA&startup_cost=39000&recurring_cost=200&turnover_cost=200")
  .get()
  .addHeader("x-api-key", "YOUR_API_KEY")
  .build();

Response response = client.newCall(request).execute();
require 'uri'
require 'net/http'

url = URI("https://api.mashvisor.com/v1.1/client/property/664367/investment/breakdown?state=GA&startup_cost=39000&recurring_cost=200&turnover_cost=200")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Get.new(url)
request["x-api-key"] = 'YOUR_API_KEY'

response = http.request(request)
puts response.read_body
<?php

$request = new HttpRequest();
$request->setUrl('https://api.mashvisor.com/v1.1/client/property/664367/investment/breakdown');
$request->setMethod(HTTP_METH_GET);
$request->setHeaders(array(
  'x-api-key' => 'YOUR_API_KEY'
));
$request->setQueryData(array(
  'state' => 'GA',
  'startup_cost' => '39000',
  'recurring_cost' => '200',
  'turnover_cost' => '200'
));

try {
  $response = $request->send();

  echo json_decode($response->getBody());
} catch (HttpException $ex) {
  echo $ex;
}
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://api.mashvisor.com/v1.1/client/property/664367/investment/breakdown?state=GA&startup_cost=39000&recurring_cost=200&turnover_cost=200"

    req, _ := http.NewRequest("GET", url, nil)

  req.Header.Add("x-api-key", "YOUR_API_KEY")
    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}

The above command returns JSON structured like this:

{
    "status": "success",
    "content": {
        "strategy": "Airbnb",
        "breakdown": [
            {
                "month": 1,
                "gross_rental_revenue": 4091.0416666666665,
                "cleaning_fee_collected": 316.84027777777777,
                "vacancy": 1534.140625,
                "airbnb_hosting_fee": 122.73124999999999,
                "adjusted_gross_income": 2751.0100694444445,
                "net_rents": 2351.0100694444445,
                "yield_on_investment": 6.028230947293448,
                "balance": 36648.98993055556
            },
            {
                "month": 2,
                "gross_rental_revenue": 4091.0416666666665,
                "cleaning_fee_collected": 316.84027777777777,
                "vacancy": 1534.140625,
                "airbnb_hosting_fee": 122.73124999999999,
                "adjusted_gross_income": 2751.0100694444445,
                "net_rents": 2351.0100694444445,
                "yield_on_investment": 6.028230947293448,
                "balance": 34297.97986111112
            },
            {
                "month": 3,
                "gross_rental_revenue": 4091.0416666666665,
                "cleaning_fee_collected": 316.84027777777777,
                "vacancy": 1534.140625,
                "airbnb_hosting_fee": 122.73124999999999,
                "adjusted_gross_income": 2751.0100694444445,
                "net_rents": 2351.0100694444445,
                "yield_on_investment": 6.028230947293448,
                "balance": 31946.969791666674
            },
            {
                "month": 4,
                "gross_rental_revenue": 4091.0416666666665,
                "cleaning_fee_collected": 316.84027777777777,
                "vacancy": 1534.140625,
                "airbnb_hosting_fee": 122.73124999999999,
                "adjusted_gross_income": 2751.0100694444445,
                "net_rents": 2351.0100694444445,
                "yield_on_investment": 6.028230947293448,
                "balance": 29595.95972222223
            },
            {
                "month": 5,
                "gross_rental_revenue": 4091.0416666666665,
                "cleaning_fee_collected": 316.84027777777777,
                "vacancy": 1534.140625,
                "airbnb_hosting_fee": 122.73124999999999,
                "adjusted_gross_income": 2751.0100694444445,
                "net_rents": 2351.0100694444445,
                "yield_on_investment": 6.028230947293448,
                "balance": 27244.949652777785
            },
            {
                "month": 6,
                "gross_rental_revenue": 4091.0416666666665,
                "cleaning_fee_collected": 316.84027777777777,
                "vacancy": 1534.140625,
                "airbnb_hosting_fee": 122.73124999999999,
                "adjusted_gross_income": 2751.0100694444445,
                "net_rents": 2351.0100694444445,
                "yield_on_investment": 6.028230947293448,
                "balance": 24893.93958333334
            },
            {
                "month": 7,
                "gross_rental_revenue": 4091.0416666666665,
                "cleaning_fee_collected": 316.84027777777777,
                "vacancy": 1534.140625,
                "airbnb_hosting_fee": 122.73124999999999,
                "adjusted_gross_income": 2751.0100694444445,
                "net_rents": 2351.0100694444445,
                "yield_on_investment": 6.028230947293448,
                "balance": 22542.929513888896
            },
            {
                "month": 8,
                "gross_rental_revenue": 4091.0416666666665,
                "cleaning_fee_collected": 316.84027777777777,
                "vacancy": 1534.140625,
                "airbnb_hosting_fee": 122.73124999999999,
                "adjusted_gross_income": 2751.0100694444445,
                "net_rents": 2351.0100694444445,
                "yield_on_investment": 6.028230947293448,
                "balance": 20191.91944444445
            },
            {
                "month": 9,
                "gross_rental_revenue": 4091.0416666666665,
                "cleaning_fee_collected": 316.84027777777777,
                "vacancy": 1534.140625,
                "airbnb_hosting_fee": 122.73124999999999,
                "adjusted_gross_income": 2751.0100694444445,
                "net_rents": 2351.0100694444445,
                "yield_on_investment": 6.028230947293448,
                "balance": 17840.909375000007
            },
            {
                "month": 10,
                "gross_rental_revenue": 4091.0416666666665,
                "cleaning_fee_collected": 316.84027777777777,
                "vacancy": 1534.140625,
                "airbnb_hosting_fee": 122.73124999999999,
                "adjusted_gross_income": 2751.0100694444445,
                "net_rents": 2351.0100694444445,
                "yield_on_investment": 6.028230947293448,
                "balance": 15489.899305555562
            },
            {
                "month": 11,
                "gross_rental_revenue": 4091.0416666666665,
                "cleaning_fee_collected": 316.84027777777777,
                "vacancy": 1534.140625,
                "airbnb_hosting_fee": 122.73124999999999,
                "adjusted_gross_income": 2751.0100694444445,
                "net_rents": 2351.0100694444445,
                "yield_on_investment": 6.028230947293448,
                "balance": 13138.889236111117
            },
            {
                "month": 12,
                "gross_rental_revenue": 4091.0416666666665,
                "cleaning_fee_collected": 316.84027777777777,
                "vacancy": 1534.140625,
                "airbnb_hosting_fee": 122.73124999999999,
                "adjusted_gross_income": 2751.0100694444445,
                "net_rents": 2351.0100694444445,
                "yield_on_investment": 6.028230947293448,
                "balance": 10787.879166666673
            }
        ],
        "avg_occupancy": 0.625,
        "days_leased_per_month": 19.010416666666668,
        "avg_daily_leased_rate": 134.5,
        "airbnb_tax": 0,
        "cash_flow": 2351.0100694444445,
        "net_operating_income": 2351.0100694444445,
        "rental_yield": 32.09570060675009,
        "annually_breakdown": [
            {
                "year": 1,
                "gross_rental_revenue": 49092.5,
                "cleaning_fee_collected": 3802.083333333333,
                "vacancy": 18409.6875,
                "airbnb_hosting_fee": 1472.7749999999999,
                "adjusted_gross_income": 33012.120833333334,
                "net_rents": 28212.120833333334,
                "yield_on_investment": 6.028230947293448,
                "balance": 10787.879166666666
            },
            {
                "year": 2,
                "gross_rental_revenue": 49092.5,
                "cleaning_fee_collected": 3802.083333333333,
                "vacancy": 18409.6875,
                "airbnb_hosting_fee": 1472.7749999999999,
                "adjusted_gross_income": 33012.120833333334,
                "net_rents": 28212.120833333334,
                "yield_on_investment": 6.028230947293448,
                "balance": -17424.24166666667
            },
            {
                "year": 3,
                "gross_rental_revenue": 49092.5,
                "cleaning_fee_collected": 3802.083333333333,
                "vacancy": 18409.6875,
                "airbnb_hosting_fee": 1472.7749999999999,
                "adjusted_gross_income": 33012.120833333334,
                "net_rents": 28212.120833333334,
                "yield_on_investment": 6.028230947293448,
                "balance": -45636.3625
            },
            {
                "year": 4,
                "gross_rental_revenue": 49092.5,
                "cleaning_fee_collected": 3802.083333333333,
                "vacancy": 18409.6875,
                "airbnb_hosting_fee": 1472.7749999999999,
                "adjusted_gross_income": 33012.120833333334,
                "net_rents": 28212.120833333334,
                "yield_on_investment": 6.028230947293448,
                "balance": -73848.48333333334
            },
            {
                "year": 5,
                "gross_rental_revenue": 49092.5,
                "cleaning_fee_collected": 3802.083333333333,
                "vacancy": 18409.6875,
                "airbnb_hosting_fee": 1472.7749999999999,
                "adjusted_gross_income": 33012.120833333334,
                "net_rents": 28212.120833333334,
                "yield_on_investment": 6.028230947293448,
                "balance": -102060.60416666667
            },
            {
                "year": 6,
                "gross_rental_revenue": 49092.5,
                "cleaning_fee_collected": 3802.083333333333,
                "vacancy": 18409.6875,
                "airbnb_hosting_fee": 1472.7749999999999,
                "adjusted_gross_income": 33012.120833333334,
                "net_rents": 28212.120833333334,
                "yield_on_investment": 6.028230947293448,
                "balance": -130272.725
            },
            {
                "year": 7,
                "gross_rental_revenue": 49092.5,
                "cleaning_fee_collected": 3802.083333333333,
                "vacancy": 18409.6875,
                "airbnb_hosting_fee": 1472.7749999999999,
                "adjusted_gross_income": 33012.120833333334,
                "net_rents": 28212.120833333334,
                "yield_on_investment": 6.028230947293448,
                "balance": -158484.84583333333
            },
            {
                "year": 8,
                "gross_rental_revenue": 49092.5,
                "cleaning_fee_collected": 3802.083333333333,
                "vacancy": 18409.6875,
                "airbnb_hosting_fee": 1472.7749999999999,
                "adjusted_gross_income": 33012.120833333334,
                "net_rents": 28212.120833333334,
                "yield_on_investment": 6.028230947293448,
                "balance": -186696.96666666667
            },
            {
                "year": 9,
                "gross_rental_revenue": 49092.5,
                "cleaning_fee_collected": 3802.083333333333,
                "vacancy": 18409.6875,
                "airbnb_hosting_fee": 1472.7749999999999,
                "adjusted_gross_income": 33012.120833333334,
                "net_rents": 28212.120833333334,
                "yield_on_investment": 6.028230947293448,
                "balance": -214909.08750000002
            },
            {
                "year": 10,
                "gross_rental_revenue": 49092.5,
                "cleaning_fee_collected": 3802.083333333333,
                "vacancy": 18409.6875,
                "airbnb_hosting_fee": 1472.7749999999999,
                "adjusted_gross_income": 33012.120833333334,
                "net_rents": 28212.120833333334,
                "yield_on_investment": 6.028230947293448,
                "balance": -243121.20833333337
            }
        ]
    }
}

This endpoint retrieves the property's investment breakdown performance for Airbnb or Traditional.

HTTP Request

GET https://api.mashvisor.com/v1.1/client/property/{id}/investment/breakdown

Request Headers

Parameter Value
x-api-key User Authentication Header

Path Parameters

Parameter Value Default Description
id Long The property Id from the Mashvisor database.

Query Parameters

Parameter Value Default Description
state* String The state of the property should be provided to the api or api will throw error 404.
airbnb_rental Double Monthly Airbnb rental income, ex: 2000
traditional_rental Double Monthly traditional rental income, ex: 1700
airbnb_occupancy Double num of days per year, or a percentage Based on "is_days" param, eg: 70 as a percentage, or 150 as days
traditional_occupancy Double num of days per year, or a percentage Based on "is_days" param, eg: 70 as a percentage, or 150 as days
is_days Integer 0 If it's set to 0, the "traditional_occupancy" is considered as a percentage, if it's 1, it's considered as num of days per year
max_bid Integer Sets the property listing price to its value
startup_cost Double 8000 Startup cost for the investment, e.x: 8000
source String Airbnb Defines the monthly calculations should be calculated for "Airbnb" or "Traditional"
recurring_cost Double Recurring cost of the investment strategy, ex: 1435
turnover_cost Double Turnover cost

Get Property Marker

Sample Request

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.mashvisor.com/v1.1/client/property/marker?state=CA&pid=2207289&type=Investment")
  .get()
  .addHeader("x-api-key", "YOUR_API_KEY")
  .build();

Response response = client.newCall(request).execute();
require 'uri'
require 'net/http'

url = URI("https://api.mashvisor.com/v1.1/client/property/marker?state=CA&pid=2207289&type=Investment")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Get.new(url)
request["x-api-key"] = 'YOUR_API_KEY'

response = http.request(request)
puts response.read_body
<?php

$request = new HttpRequest();
$request->setUrl('https://api.mashvisor.com/v1.1/client/property/marker');
$request->setMethod(HTTP_METH_GET);

$request->setQueryData(array(
  'state' => 'CA',
  'pid' => '2207289',
  'type' => 'Investment'
));

$request->setHeaders(array(
  'x-api-key' => 'YOUR_API_KEY'
));

try {
  $response = $request->send();

  echo json_decode($response->getBody());
} catch (HttpException $ex) {
  echo $ex;
}
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://api.mashvisor.com/v1.1/client/property/marker?state=CA&pid=2207289&type=Investment"

  req, _ := http.NewRequest("GET", url, nil)

  req.Header.Add("x-api-key", "YOUR_API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}

The above command returns JSON structured like this:

{
    "status": "success",
    "content": {
        "id": 2207289,
        "neighborhood": {
            "id": 417524,
            "name": "Buena Vista Park"
        },
        "address": "110 Alpine Terrace",
        "city": "San Francisco",
        "state": "CA",
        "listPrice": 1695000,
        "ROI": {
            "airbnb_ROI": 0.620426,
            "traditional_ROI": -0.208019
        },
        "Cap": {
            "airbnb_Cap": 0.620426,
            "traditional_Cap": -0.208019
        }
    }
}

This endpoint retrieves snapshot data on a specific property.

HTTP Request

GET https://api.mashvisor.com/v1.1/client/property/marker

Request Headers

Parameter Value
x-api-key User Authentication Header

Query Parameters

Parameter Value Default Description
pid Long The property Id from the Mashvisor database.
state* String The state of the property should be provided to the api or API will throw error 404.
type String Investment, Airbnb, or Traditional
payment String CASH CASH, or LOAN
downPayment Integer The downpayment for mortgage calculations, e.g: 40000
loanType Integer The loan type, e.g: 30
interestRate Double The interest rate for mortgage, e.g: 3.51
loanInterestOnlyYears Integer
loanArmType Double 3/1 3/1, 5/1, 7/1, 10/1
loanArmRate Double .25
startupCost Double 8000
loanTerm Double

Get Airbnb Comparable Listings

Sample Request

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.mashvisor.com/v1.1/client/neighborhood/269590/airbnb/details?state=IL")
  .get()
  .addHeader("x-api-key", "YOUR_API_KEY")
  .build();

Response response = client.newCall(request).execute();
require 'uri'
require 'net/http'

url = URI("https://api.mashvisor.com/v1.1/client/neighborhood/269590/airbnb/details?state=IL")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Get.new(url)
request["x-api-key"] = 'YOUR_API_KEY'

response = http.request(request)
puts response.read_body
<?php

$request = new HttpRequest();
$request->setUrl('https://api.mashvisor.com/v1.1/client/neighborhood/269590/airbnb/details');
$request->setMethod(HTTP_METH_GET);
$request->setHeaders(array(
  'x-api-key' => 'YOUR_API_KEY'
));
$request->setQueryData(array(
  'state' => 'IL'
));

try {
  $response = $request->send();

  echo json_decode($response->getBody());
} catch (HttpException $ex) {
  echo $ex;
}
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://api.mashvisor.com/v1.1/client/neighborhood/269590/airbnb/details?state=IL"

  req, _ := http.NewRequest("GET", url, nil)

  req.Header.Add("x-api-key", "YOUR_API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}

The above command returns JSON structured like this:

{
    "status": "success",
    "content": {
        "properties": [
            {
                "id": 21131720,
                "propertyId": "20992111",
                "source": "Airbnb",
                "status": "ACTIVE",
                "nightPrice": 235,
                "weeklyPrice": 0,
                "monthlyPrice": 0,
                "numOfBaths": 2,
                "numOfRooms": 4,
                "occupancy": 56,
                "rentalIncome": 3948,
                "airbnbNeighborhoodId": 397651,
                "name": "Perfect getaway in the Hudson Valley",
                "address": "Red Hook, NY, United States",
                "airbnbNeighborhood": null,
                "airbnbCity": "Red Hook",
                "state": "NY",
                "capacityOfPeople": 6,
                "zip": "12571",
                "propertyType": "House",
                "roomType": "Entire home/apt",
                "roomTypeCategory": "entire_home",
                "amenities": null,
                "reviewsCount": 16,
                "startRating": 5,
                "reviews": null,
                "createdAt": "2019-08-19T16:00:19.000Z",
                "updatedAt": "2019-08-19T16:00:19.000Z",
                "numOfBeds": 4,
                "lat": 41.9516716003418,
                "lon": -73.77474975585938,
                "image": "https://bc9f40b414b80f1ce90f-212b46b1c531b50ebb00763170d70160.ssl.cf5.rackcdn.com/Properties/property-default.png",
                "url": null,
                "rental_income": 3948.0000000000005,
                "neighborhood": {
                    "id": 397651,
                    "name": null
                },
                "nightRate": 235,
                "property_id": "20992111",
                "airbnbZIP": "12571",
                "distance": 6.204173070158869,
                "similarity": 0.5
            },
            {
                "id": 21131669,
                "propertyId": "15235032",
                "source": "Airbnb",
                "status": "ACTIVE",
                "nightPrice": 268,
                "weeklyPrice": 0,
                "monthlyPrice": 0,
                "numOfBaths": 1.5,
                "numOfRooms": 2,
                "occupancy": 84,
                "rentalIncome": 6754,
                "airbnbNeighborhoodId": 397651,
                "name": "Modern Upstate NY cabin + hot pool in the woods.",
                "address": "Red Hook, NY, United States",
                "airbnbNeighborhood": null,
                "airbnbCity": "Red Hook",
                "state": "NY",
                "capacityOfPeople": 6,
                "zip": "12571",
                "propertyType": "Cabin",
                "roomType": "Entire home/apt",
                "roomTypeCategory": "entire_home",
                "amenities": null,
                "reviewsCount": 90,
                "startRating": 5,
                "reviews": null,
                "createdAt": "2019-08-19T15:59:49.000Z",
                "updatedAt": "2019-08-19T15:59:49.000Z",
                "numOfBeds": 3,
                "lat": 42.00767135620117,
                "lon": -73.7533187866211,
                "image": "https://bc9f40b414b80f1ce90f-212b46b1c531b50ebb00763170d70160.ssl.cf5.rackcdn.com/Properties/property-default.png",
                "url": null,
                "rental_income": 6753.599999999999,
                "neighborhood": {
                    "id": 397651,
                    "name": null
                },
                "nightRate": 268,
                "property_id": "15235032",
                "airbnbZIP": "12571",
                "distance": 4.958961405286708,
                "similarity": 0.48
            },
            {
                "id": 21131735,
                "propertyId": "5602615",
                "source": "Airbnb",
                "status": "ACTIVE",
                "nightPrice": 965,
                "weeklyPrice": 4000,
                "monthlyPrice": 10000,
                "numOfBaths": 2.5,
                "numOfRooms": 4,
                "occupancy": 21,
                "rentalIncome": 6080,
                "airbnbNeighborhoodId": 397651,
                "name": "Lovely Hudson Valley Country Home",
                "address": "Red Hook, NY, United States",
                "airbnbNeighborhood": null,
                "airbnbCity": "Red Hook",
                "state": "NY",
                "capacityOfPeople": 8,
                "zip": "12571",
                "propertyType": "House",
                "roomType": "Entire home/apt",
                "roomTypeCategory": "entire_home",
                "amenities": null,
                "reviewsCount": 23,
                "startRating": 5,
                "reviews": null,
                "createdAt": "2019-08-19T16:00:26.000Z",
                "updatedAt": "2019-08-19T16:00:26.000Z",
                "numOfBeds": 4,
                "lat": 42.0384407043457,
                "lon": -73.8933334350586,
                "image": "https://bc9f40b414b80f1ce90f-212b46b1c531b50ebb00763170d70160.ssl.cf5.rackcdn.com/Properties/property-default.png",
                "url": null,
                "rental_income": 6079.5,
                "neighborhood": {
                    "id": 397651,
                    "name": null
                },
                "nightRate": 965,
                "property_id": "5602615",
                "airbnbZIP": "12571",
                "distance": 2.569544555210685,
                "similarity": 0.53
            }
        ],
        "num_of_properties": 23,
        "avg_occupancy": 45.913,
        "avg_price": 296.1304,
        "num_page_properties": 3,
        "page": "3"
    }
}

This endpoint retrieves neighborhood/area Airbnb data with comparable attributes and within proximity from the target MLS property.

HTTP Request

GET https://api.mashvisor.com/v1.1/client/neighborhood/{id}/airbnb/details

Request Headers

Parameter Value
x-api-key User Authentication Header

Path Parameters

Parameter Value Default Description
id Long The neighborhood Id from the Mashvisor database.

Query Parameters

Parameter Value Default Description
state* String The state of the neighborhood should be provided to the api or api will throw error 404.
page Integer 1 Page number
items Integer 3 items number
bedrooms Integer bedrooms number
pid Long Property to fetch comparble listings for.
sort_by String Sorting type.
Possible input:
* name
* similarity
* distance
* address
* occupancy
* night_price
* rental_income
* num_of_baths
* num_of_rooms
* reviews_count
order String desc Order type: desc, or asc
format String json json, or xml

Get Traditional Comparable Listings

Sample Request

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.mashvisor.com/v1.1/client/neighborhood/397651/traditional/listing?format=json&items=9&order=desc&page=1&pid=325215&sort_by=address&state=ny")
  .get()
  .addHeader("x-api-key", "YOUR_API_KEY")
  .build();

Response response = client.newCall(request).execute();
require 'uri'
require 'net/http'

url = URI("https://api.mashvisor.com/v1.1/client/neighborhood/397651/traditional/listing?format=json&items=9&order=desc&page=1&pid=325215&sort_by=address&state=NY")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Get.new(url)
request["x-api-key"] = 'YOUR_API_KEY'

response = http.request(request)
puts response.read_body
<?php

$request = new HttpRequest();
$request->setUrl('https://api.mashvisor.com/v1.1/client/neighborhood/397651/traditional/listing');
$request->setMethod(HTTP_METH_GET);
$request->setHeaders(array(
  'x-api-key' => 'YOUR_API_KEY'
));

$request->setQueryData(array(
  'format' => 'json',
  'order' => 'desc',
  'pid' => '325215',
  'state' => 'ny',
  'items' => '4',
  'page' => '8',
  'sort_by' => 'address'
));

try {
  $response = $request->send();

  echo json_decode($response->getBody());
} catch (HttpException $ex) {
  echo $ex;
}
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://api.mashvisor.com/v1.1/client/neighborhood/397651/traditional/listing?format=json&items=9&order=desc&page=1&pid=325215&sort_by=address&state=ny"

  req, _ := http.NewRequest("GET", url, nil)

  req.Header.Add("x-api-key", "YOUR_API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}

The above command returns JSON structured like this:

{
    "status": "success",
    "content": {
        "results": [
            {
                "id": 6699070,
                "title": "2-4 Family, Other - Red Hook, NY",
                "lon": -73.84407806396484,
                "lat": 42.02531051635742,
                "state": "NY",
                "city": "Red Hook",
                "county": "DUTCHESS COUNTY",
                "neighborhood": "Red Hook",
                "description": "It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout.",
                "price": 2300,
                "baths": 2,
                "beds": 4,
                "num_of_units": null,
                "sqft": 2600,
                "lot_size": 28314,
                "days_on_market": 26,
                "year_built": 1810,
                "tax": null,
                "tax_history": null,
                "videos": null,
                "virtual_tours": null,
                "parking_spots": null,
                "parking_type": "Off Street",
                "walkscore": null,
                "mls_id": "382940",
                "image": "https://bc9f40b414b80f1ce90f-212b46b1c531b50ebb00763170d70160.ssl.cf5.rackcdn.com/Properties/property-default.png",
                "extra_images": "https://bc9f40b414b80f1ce90f-212b46b1c531b50ebb00763170d70160.ssl.cf5.rackcdn.com/Properties/property-default.png",
                "zipcode": "12571",
                "address": "14 SPRING LAKE RD",
                "type": "Other",
                "property_type": "Rental",
                "property_sub_type": "Other",
                "source": "GARY DiMAURO REAL ESTATE, INC.",
                "architecture_style": "Other",
                "has_pool": null,
                "is_water_front": null,
                "heating_system": "Forced Air",
                "cooling_system": "None",
                "view_type": null,
                "schools": "[{\"category\":\"Elementary\",\"name\":\"Mill Road - Primary Grades\",\"district\":\"Red Hook Central\"},{\"category\":\"High\",\"name\":\"Red Hook Senior High School\",\"district\":\"Red Hook Central\"},{\"category\":\"JuniorHigh\",\"name\":null,\"district\":\"Red Hook Central\"},{\"category\":\"Middle\",\"name\":\"Linden Avenue Middle School\",\"district\":\"Red Hook Central\"}]",
                "parcel_number": "13488900637300012828230000",
                "neighborhood_id": 397651,
                "modification_timestamp": "2019-07-13T00:18:44.000Z",
                "created_at": "2019-06-30T01:04:43.000Z",
                "updated_at": "2019-07-24T04:27:49.000Z",
                "distance": 0.2280876552393839,
                "similarity": 0.45
            },
            {
                "id": 6584461,
                "title": "Single Family Detached, Ranch - V. Red Hook, NY",
                "lon": -73.87642669677734,
                "lat": 42.00033187866211,
                "state": "NY",
                "city": "Red Hook",
                "county": null,
                "neighborhood": "Red Hook",
                "description": "It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout.",
                "price": 2300,
                "baths": 2,
                "beds": 4,
                "num_of_units": null,
                "sqft": 1435,
                "lot_size": null,
                "days_on_market": null,
                "year_built": 1950,
                "tax": null,
                "tax_history": null,
                "videos": null,
                "virtual_tours": null,
                "parking_spots": null,
                "parking_type": null,
                "walkscore": null,
                "mls_id": "376976",
                "image": "https://bc9f40b414b80f1ce90f-212b46b1c531b50ebb00763170d70160.ssl.cf5.rackcdn.com/Properties/property-default.png",
                "extra_images": null,
                "zipcode": "12571",
                "address": "14 PARK AVENUE",
                "type": "single_home",
                "property_type": null,
                "property_sub_type": null,
                "source": "Berkshire Hathaway HomeServices Hudson Valley Properties",
                "original_source": null,
                "architecture_style": null,
                "has_pool": null,
                "is_water_front": null,
                "heating_system": null,
                "cooling_system": null,
                "view_type": null,
                "schools": null,
                "parcel_number": null,
                "neighborhood_id": 397651,
                "modification_timestamp": null,
                "created_at": "2018-11-30T01:21:38.000Z",
                "updated_at": "2019-03-08T01:34:44.000Z",
                "distance": 2.1697949933012572,
                "similarity": 0.6
            },
            {
                "id": 6756141,
                "title": "2-4 Family, Other - Red Hook, NY",
                "lon": -73.84525299072266,
                "lat": 42.03054809570313,
                "state": "NY",
                "city": "Red Hook",
                "county": "DUTCHESS COUNTY",
                "neighborhood": "Red Hook",
                "description": "It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout.",
                "price": 1450,
                "baths": 1,
                "beds": 2,
                "num_of_units": null,
                "sqft": 1100,
                "lot_size": 16988,
                "days_on_market": 6,
                "year_built": 1860,
                "tax": null,
                "tax_history": null,
                "videos": null,
                "virtual_tours": null,
                "parking_spots": null,
                "parking_type": "Off Street",
                "walkscore": null,
                "mls_id": "384191",
                "image": "https://bc9f40b414b80f1ce90f-212b46b1c531b50ebb00763170d70160.ssl.cf5.rackcdn.com/Properties/property-default.png",
                "extra_images": "https://bc9f40b414b80f1ce90f-212b46b1c531b50ebb00763170d70160.ssl.cf5.rackcdn.com/Properties/property-default.png,https://bc9f40b414b80f1ce90f-212b46b1c531b50ebb00763170d70160.ssl.cf5.rackcdn.com/Properties/property-default.png",
                "zipcode": "12571",
                "address": "123 OLD POST ROAD NORTH #B",
                "type": "Other",
                "property_type": "Rental",
                "property_sub_type": "Other",
                "source": "PAULA REDMOND LIC. R.E. BKR",
                "architecture_style": "Other",
                "has_pool": null,
                "is_water_front": null,
                "heating_system": "Hot Water (Oil)",
                "cooling_system": "None",
                "view_type": null,
                "schools": "[{\"category\":\"Elementary\",\"name\":\"Mill Road - Primary Grades\",\"district\":\"Red Hook Central\"},{\"category\":\"High\",\"name\":\"Red Hook Senior High School\",\"district\":\"Red Hook Central\"},{\"category\":\"JuniorHigh\",\"name\":null,\"district\":\"Red Hook Central\"},{\"category\":\"Middle\",\"name\":\"Linden Avenue Middle School\",\"district\":\"Red Hook Central\"}]",
                "parcel_number": "13488900637400002520120000",
                "neighborhood_id": 397651,
                "modification_timestamp": "2019-09-06T03:19:16.000Z",
                "created_at": "2019-09-07T04:20:03.000Z",
                "updated_at": "2019-09-11T04:08:44.000Z",
                "distance": 0.5151012639728284,
                "similarity": 0.38
            },
            {
                "id": 3035205,
                "title": "2-4 Family, Other - Red Hook, NY",
                "lon": -73.84519958496094,
                "lat": 42.03060150146484,
                "state": "NY",
                "city": "Red Hook",
                "county": null,
                "neighborhood": "Red Hook",
                "description": "It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout.",
                "price": 1400,
                "baths": 2,
                "beds": 2,
                "num_of_units": null,
                "sqft": 950,
                "lot_size": null,
                "days_on_market": null,
                "year_built": 1860,
                "tax": null,
                "tax_history": null,
                "videos": null,
                "virtual_tours": null,
                "parking_spots": null,
                "parking_type": null,
                "walkscore": null,
                "mls_id": "379210",
                "image": "https://bc9f40b414b80f1ce90f-212b46b1c531b50ebb00763170d70160.ssl.cf5.rackcdn.com/Properties/property-default.png",
                "extra_images": null,
                "zipcode": "12571",
                "address": "123 N OLD POST ROAD #A",
                "type": "Other",
                "property_type": null,
                "property_sub_type": null,
                "source": "PAULA REDMOND LIC. R.E. BKR",
                "original_source": null,
                "architecture_style": null,
                "has_pool": null,
                "is_water_front": null,
                "heating_system": null,
                "cooling_system": null,
                "view_type": null,
                "schools": null,
                "parcel_number": null,
                "neighborhood_id": 397651,
                "modification_timestamp": null,
                "created_at": "2017-11-03T01:13:44.000Z",
                "updated_at": "2019-04-09T01:09:43.000Z",
                "distance": 0.5193335664792641,
                "similarity": 0.4
            }
        ],
        "total_results": 35,
        "total_pages": 9,
        "current_page": "8"
    }
}

This endpoint retrieves neighborhood/area data for traditionally rented properties with comparable attributes and within proximity from the target MLS property.

HTTP Request

GET https://api.mashvisor.com/v1.1/client/neighborhood/{id}/traditional/listing

Request Headers

Parameter Value
x-api-key User Authentication Header

Path Parameters

Parameter Value Default Description
id Long The neighborhood Id from the Mashvisor database.

Query Parameters

Parameter Value Default Description
state* String The state of the neighborhood should be provided to the api or api will throw error 404.
page Integer 1 Page number
items Integer 3 items number
category Integer bedrooms number
min_price Integer min_price of rental value
max_price Integer max_price of rental value
pid Long Property to fetch comparble listings for.
sort_by String Sorting type.
Possible input:
* address
* similarity
* distance
* beds
* baths
* price
order String desc Order type: desc, or asc
format String json json, or xml

Rental Rates

The Rental Rates Object

The Rental Rates Object:

{
    "retnal_rates": {
        "studio_value": 2100,
        "one_room_value": 2500,
        "two_room_value": 3890,
        "three_room_value": 4997.5,
        "four_room_value": 7995
    },
    "sample_count": 268,
    "detailed": [
        {
            "state": "CA",
            "city": null,
            "neighborhood": "117954",
            "zipcode": null,
            "beds": "0",
            "count": 7,
            "min": 2000,
            "max": 3000,
            "avg": 2221.4285714285716,
            "median": 2100,
            "adjusted_rental_income": 2022.3
        },
        {
            "state": "CA",
            "city": null,
            "neighborhood": "117954",
            "zipcode": null,
            "beds": "1",
            "count": 31,
            "min": 995,
            "max": 4500,
            "avg": 2641.6129032258063,
            "median": 2500,
            "adjusted_rental_income": 2407.5
        },
        {
            "state": "CA",
            "city": null,
            "neighborhood": "117954",
            "zipcode": null,
            "beds": "2",
            "count": 136,
            "min": 1300,
            "max": 7500,
            "avg": 3979.8970588235293,
            "median": 3890,
            "adjusted_rental_income": 3746.07
        },
        {
            "state": "CA",
            "city": null,
            "neighborhood": "117954",
            "zipcode": null,
            "beds": "3",
            "count": 78,
            "min": 645,
            "max": 12000,
            "avg": 5288.961538461538,
            "median": 4997.5,
            "adjusted_rental_income": 4812.5925
        },
        {
            "state": "CA",
            "city": null,
            "neighborhood": "117954",
            "zipcode": null,
            "beds": "4",
            "count": 16,
            "min": 4700,
            "max": 27000,
            "avg": 11459.6875,
            "median": 7995,
            "adjusted_rental_income": 7699.1849999999995
        }
    ]
}

Mashvisor API allows estimating rental rates for a specific location either for long-term rentals (traditional rent strategy), or for short-term rentals (Airbnb, VRBO, or Homeaway). These estimates are categorized by the number of bedrooms of a target property/location. The estimates are based on 12-month historical performance for the target area and calculated using sampling of similar listings either recently or currently actively rented in the area.

Property Data Dictionary

Attribute Definition Possible Returns
Studio Value The expected monthly rent if a studio property is rented out Double
One Rroom Value The expected monthly rent if a one bedroom property is rented out Double
Two Room Value The expected monthly rent if a two bedrooms property is rented out Double
Three Room Value The expected monthly rent if a three bedrooms property is rented out Double
Four Room Value The expected monthly rent if a four bedrooms property is rented out Double

Get Rental Rates

Sample Request

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.mashvisor.com/v1.1/client/rental-rates?city=Chicago&state=IL&neighborhood=138261&source=airbnb")
  .get()
  .addHeader("x-api-key", "YOUR_API_KEY")
  .build();

Response response = client.newCall(request).execute();
require 'uri'
require 'net/http'

url = URI("https://api.mashvisor.com/v1.1/client/rental-rates?city=Chicago&state=IL&neighborhood=138261&source=airbnb")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Get.new(url)
request["x-api-key"] = 'YOUR_API_KEY'

response = http.request(request)
puts response.read_body
<?php

$request = new HttpRequest();
$request->setUrl('https://api.mashvisor.com/v1.1/client/neighborhood/rental-rates');
$request->setMethod(HTTP_METH_GET);
$request->setHeaders(array(
  'x-api-key' => 'YOUR_API_KEY'
));

$request->setQueryData(array(
  'city' => 'Chicago',
  'state' => 'IL',
  'neighborhood' => '138261',
  'source' => 'airbnb'
));

try {
  $response = $request->send();

  echo json_decode($response->getBody());
} catch (HttpException $ex) {
  echo $ex;
}
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://api.mashvisor.com/v1.1/client/rental-rates?city=Chicago&state=IL&neighborhood=138261&source=airbnb"

  req, _ := http.NewRequest("GET", url, nil)

  req.Header.Add("x-api-key", "YOUR_API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}

The above command returns JSON structured like this:

{
    "status": "success",
    "content": {
        "retnal_rates": {
            "studio_value": 2100,
            "one_room_value": 2500,
            "two_room_value": 3890,
            "three_room_value": 4997.5,
            "four_room_value": 7995
        },
        "sample_count": 268,
        "detailed": [
            {
                "state": "CA",
                "city": null,
                "neighborhood": "117954",
                "zipcode": null,
                "beds": "0",
                "count": 7,
                "min": 2000,
                "max": 3000,
                "avg": 2221.4285714285716,
                "median": 2100,
                "adjusted_rental_income": 2022.3
            },
            {
                "state": "CA",
                "city": null,
                "neighborhood": "117954",
                "zipcode": null,
                "beds": "1",
                "count": 31,
                "min": 995,
                "max": 4500,
                "avg": 2641.6129032258063,
                "median": 2500,
                "adjusted_rental_income": 2407.5
            },
            {
                "state": "CA",
                "city": null,
                "neighborhood": "117954",
                "zipcode": null,
                "beds": "2",
                "count": 136,
                "min": 1300,
                "max": 7500,
                "avg": 3979.8970588235293,
                "median": 3890,
                "adjusted_rental_income": 3746.07
            },
            {
                "state": "CA",
                "city": null,
                "neighborhood": "117954",
                "zipcode": null,
                "beds": "3",
                "count": 78,
                "min": 645,
                "max": 12000,
                "avg": 5288.961538461538,
                "median": 4997.5,
                "adjusted_rental_income": 4812.5925
            },
            {
                "state": "CA",
                "city": null,
                "neighborhood": "117954",
                "zipcode": null,
                "beds": "4",
                "count": 16,
                "min": 4700,
                "max": 27000,
                "avg": 11459.6875,
                "median": 7995,
                "adjusted_rental_income": 7699.1849999999995
            }
        ]
    }
}

This endpoint retrieves traditional neighborhood/area data with comparable attributes and within proximity from the target MLS property.

HTTP Request

GET https://api.mashvisor.com/v1.1/client/rental-rates

Request Headers

Parameter Value
x-api-key User Authentication Header

Query Parameters

Parameter Value Default Description
state* String The state of the neighborhood should be provided to the api or api will throw error 404.
city String A specific city you're looking for.
neighborhood Long Neighborhood id you're targeting
zip_code Integer Any postal zip code.
source String Targeting service to fetch estiamtes for.
Possible inputs:
* airbnb
* traditional

Rento Calculator

Lookup

Sample Request

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.mashvisor.com/v1.1/client/rento-calculator/lookup?state=TX&zip_code=76549&resource=airbnb&beds=2")
  .get()
  .addHeader("x-api-key", "YOUR_API_KEY")
  .build();

Response response = client.newCall(request).execute();
require 'uri'
require 'net/http'

url = URI("https://api.mashvisor.com/v1.1/client/rento-calculator/lookup?city=Chicago&state=TX&zip_code=76549&resource=airbnb&beds=2")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Get.new(url)
request["x-api-key"] = 'YOUR_API_KEY'

response = http.request(request)
puts response.read_body
<?php

$request = new HttpRequest();
$request->setUrl('https://api.mashvisor.com/v1.1/client/rento-calculator/lookup');
$request->setMethod(HTTP_METH_GET);
$request->setHeaders(array(
  'x-api-key' => 'YOUR_API_KEY'
));

$request->setQueryData(array(
  'state' => 'TX',
  'zip_code' => '76549',
  'source' => 'airbnb',
  'beds' => '2',
  'baths' => '2'
  ));

try {
  $response = $request->send();

  echo json_decode($response->getBody());
} catch (HttpException $ex) {
  echo $ex;
}
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://api.mashvisor.com/v1.1/client/rento-calculator/lookup?state=TX&zip_code=76549&resource=airbnb&beds=2"

  req, _ := http.NewRequest("GET", url, nil)

  req.Header.Add("x-api-key", "YOUR_API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}

The above command returns JSON structured like this:

{
    "status": "success",
    "content": {
        "median_home_value": 787500,
        "sample_size": 31,
        "median_occupancy_rate": 46,
        "median_rental_income": 2341,
        "median_night_rate": 165,
        "adjusted_rental_income": 2239.36625,
        "price_to_rent_ratio": 29.305166137964257,
        "cash_flow": 283.2829166666667,
        "cash_on_cash": 0.427328095537398,
        "cap_rate": 0.43166920634920636,
        "expenses": 1956.0833333333333,
        "tax_rate": 0.73
    }
}

This endpoint retrieves the lookup location (city, zip code, neighborhood, or street address) and insights for CAP rate, Cash on Cash rate, median home price, occupancy rate, night rate, and rental incomes and rates.

HTTP Request

GET https://api.mashvisor.com/v1.1/client/rento-calculator/lookup

Request Headers

Parameter Value
x-api-key User Authentication Header

Query Parameters

Parameter Value Default Description
state String The state of the neighborhood should be provided to the api or api will throw error 404.
city String A specific city you're looking for.
zip_code String Any postal zip code.
address String Any street address
lat Float Latitude value
lng Float Longitude value
beds Integer Possible inputs:
* 0
* 1
* 2
* 3
* 4
* 5
baths Integer Possible inputs:
* 0
* 1
* 2
* 3
* 4
* 5
home_type String Possible inputs:
* single family residential
* condo/coop
* townhouse
* multi family
* other
resource String Default "airbnb"
Possible inputs:
* airbnb
* traditional
neighborhood_id String Any Neighborhood Id

Beds

Sample Request

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.mashvisor.com/v1.1/client/rento-calculator/beds?state=TX&zip_code=76549&resource=airbnb&beds=2")
  .get()
  .addHeader("x-api-key", "YOUR_API_KEY")
  .build();

Response response = client.newCall(request).execute();
require 'uri'
require 'net/http'

url = URI("https://api.mashvisor.com/v1.1/client/rento-calculator/beds?state=TX&zip_code=76549&resource=airbnb&beds=2")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Get.new(url)
request["x-api-key"] = 'YOUR_API_KEY'

response = http.request(request)
puts response.read_body
<?php

$request = new HttpRequest();
$request->setUrl('https://api.mashvisor.com/v1.1/client/rento-calculator/beds');
$request->setMethod(HTTP_METH_GET);
$request->setHeaders(array(
  'x-api-key' => 'YOUR_API_KEY'
));

$request->setQueryData(array(
  'state' => 'TX',
  'zip_code' => '76549',
  'source' => 'airbnb',
  'beds' => '2',
  'baths' => '2'
  ));

try {
  $response = $request->send();

  echo json_decode($response->getBody());
} catch (HttpException $ex) {
  echo $ex;
}
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://api.mashvisor.com/v1.1/client/rento-calculator/beds?state=TX&zip_code=76549&resource=airbnb&beds=2"

  req, _ := http.NewRequest("GET", url, nil)

  req.Header.Add("x-api-key", "YOUR_API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}

The above command returns JSON structured like this:

{
    "status": "success",
    "content": [
        {
            "beds": "3",
            "count": 18,
            "median": 2260.5,
            "adjusted_rental_income": 2384.742708333333,
            "median_night_rate": 116.5,
            "median_occupancy": 61.5,
            "cleaning_fee": 120
        },
        {
            "beds": "4",
            "count": 6,
            "median": 2652,
            "adjusted_rental_income": 2857.088194444444,
            "median_night_rate": 136.5,
            "median_occupancy": 64,
            "cleaning_fee": 100
        },
        {
            "beds": "2",
            "count": 2,
            "median": 2332,
            "adjusted_rental_income": 2686.2225694444446,
            "median_night_rate": 88.5,
            "median_occupancy": 86.5,
            "cleaning_fee": 40
        },
        {
            "beds": "5",
            "count": 1,
            "median": 1307,
            "adjusted_rental_income": 1349.4861111111109,
            "median_night_rate": 140,
            "median_occupancy": 31,
            "cleaning_fee": 150
        }
    ]
}

This endpoint retrieves the locations’ count with city, zip code, neighborhood, or street address and its revenue and occupancy breakdown based on the number of bedrooms.

HTTP Request

GET https://api.mashvisor.com/v1.1/client/rento-calculator/beds

Request Headers

Parameter Value
x-api-key User Authentication Header

Query Parameters

Parameter Value Default Description
state String The state of the neighborhood should be provided to the api or api will throw error 404.
city String A specific city you're looking for.
zip_code String Any postal zip code.
address String Any street address
lat Float Latitude value
lng Float Longitude value
beds Integer Possible inputs:
* 0
* 1
* 2
* 3
* 4
* 5
baths Integer Possible inputs:
* 0
* 1
* 2
* 3
* 4
* 5
home_type String Possible inputs:
* single family residential
* condo/coop
* townhouse
* multi family
* other
resource String Default "airbnb"
Possible inputs:
* airbnb
* traditional
neighborhood_id String Any Neighborhood Id

Baths

Sample Request

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.mashvisor.com/v1.1/client/rento-calculator/baths?state=TX&zip_code=76549&resource=airbnb&beds=2")
  .get()
  .addHeader("x-api-key", "YOUR_API_KEY")
  .build();

Response response = client.newCall(request).execute();
require 'uri'
require 'net/http'

url = URI("https://api.mashvisor.com/v1.1/client/rento-calculator/baths?state=TX&zip_code=76549&resource=airbnb&beds=2")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Get.new(url)
request["x-api-key"] = 'YOUR_API_KEY'

response = http.request(request)
puts response.read_body
<?php

$request = new HttpRequest();
$request->setUrl('https://api.mashvisor.com/v1.1/client/rento-calculator/baths');
$request->setMethod(HTTP_METH_GET);
$request->setHeaders(array(
  'x-api-key' => 'YOUR_API_KEY'
));

$request->setQueryData(array(
  'state' => 'TX',
  'zip_code' => '76549',
  'source' => 'airbnb',
  'beds' => '2',
  'baths' => '2'));

try {
  $response = $request->send();

  echo json_decode($response->getBody());
} catch (HttpException $ex) {
  echo $ex;
}
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://api.mashvisor.com/v1.1/client/rento-calculator/baths?state=TX&zip_code=76549&resource=airbnb&beds=2&_t=QcG6kP3yDnUHD67hWAAQyqrDdFm4gBPW&baths=2"

  req, _ := http.NewRequest("GET", url, nil)

  req.Header.Add("x-api-key", "YOUR_API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}

The above command returns JSON structured like this:

{
    "status": "success",
    "content": [
        {
            "baths": 2,
            "count": 9,
            "min": 526,
            "max": 2444,
            "avg": 1647.3333333333333,
            "median": 1760,
            "adjusted_rental_income": 2089.625,
            "median_night_rate": 97,
            "median_occupancy": 63
        },
        {
            "baths": 1,
            "count": 6,
            "min": 537,
            "max": 2176,
            "avg": 1393.6666666666667,
            "median": 1391,
            "adjusted_rental_income": 1711.2416666666666,
            "median_night_rate": 74,
            "median_occupancy": 64.5
        }
    ]
}

This endpoint retrieves the locations’ count with city, zip code, neighborhood, or street address and its revenue and occupancy breakdown based on the number of bathrooms.

HTTP Request

GET https://api.mashvisor.com/v1.1/client/rento-calculator/baths

Request Headers

Parameter Value
x-api-key User Authentication Header

Query Parameters

Parameter Value Default Description
state String The state of the neighborhood should be provided to the api or api will throw error 404.
city String A specific city you're looking for.
zip_code String Any postal zip code.
address String Any street address
lat Float Latitude value
lng Float Longitude value
beds Integer Possible inputs:
* 0
* 1
* 2
* 3
* 4
* 5
baths Integer Possible inputs:
* 0
* 1
* 2
* 3
* 4
* 5
home_type String Possible inputs:
* single family residential
* condo/coop
* townhouse
* multi family
* other
resource String Default "airbnb"
Possible inputs:
* airbnb
* traditional
neighborhood_id String Any Neighborhood Id

Nearby Listings

Sample Request

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.mashvisor.com/v1.1/client/rento-calculator/nearby-listings?state=TX&zip_code=76549&resource=airbnb&beds=2")
  .get()
  .addHeader("x-api-key", "YOUR_API_KEY")
  .build();

Response response = client.newCall(request).execute();
require 'uri'
require 'net/http'

url = URI("https://api.mashvisor.com/v1.1/client/rento-calculator/nearby-listings?state=TX&zip_code=76549&resource=airbnb&beds=2")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Get.new(url)
request["x-api-key"] = 'YOUR_API_KEY'

response = http.request(request)
puts response.read_body
<?php

$request = new HttpRequest();
$request->setUrl('https://api.mashvisor.com/v1.1/client/rento-calculator/nearby-listings');
$request->setMethod(HTTP_METH_GET);
$request->setHeaders(array(
  'x-api-key' => 'YOUR_API_KEY'
));

$request->setQueryData(array(
  'state' => 'TX',
  'zip_code' => '76549',
  'source' => 'airbnb',
  'beds' => '2',
  'baths' => '2'));

try {
  $response = $request->send();

  echo json_decode($response->getBody());
} catch (HttpException $ex) {
  echo $ex;
}
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://api.mashvisor.com/v1.1/client/rento-calculator/nearby-listings?state=TX&zip_code=76549&resource=airbnb&beds=2&_t=QcG6kP3yDnUHD67hWAAQyqrDdFm4gBPW&baths=2"

  req, _ := http.NewRequest("GET", url, nil)

  req.Header.Add("x-api-key", "YOUR_API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}

The above command returns JSON structured like this:

{
    "status": "success",
    "content": [
        {
            "address": "2413 Royal Crest Circle",
            "city": "Killeen",
            "state": "TX",
            "zip": 76549,
            "beds": 2,
            "baths": 2,
            "home_type": "Townhouse",
            "list_price": 105000,
            "neighborhood": "Killeen",
            "image_url": "http://photos.listhub.net/SMABOR/448457/1?lm=20210811T133003",
            "sqft": 1072,
            "mls_id": "448457",
            "days_on_market": 8,
            "last_sale_date": null,
            "last_sale_price": null,
            "listing_id": "448457",
            "has_pool": null,
            "is_water_front": null,
            "num_of_units": null,
            "latitude": 31.1124,
            "longitude": -97.7669,
            "traditional_ROI": 2.456,
            "airbnb_ROI": 8.98189,
            "traditional_rental": 601.417,
            "airbnb_rental": 1709.72,
            "traditional_cap": 2.456,
            "airbnb_cap": 8.98189
        }
    ]
}

This endpoint retrieves the top 5 locations (city, zip code, neighborhood, or a street address) MLS listings in the area.

HTTP Request

GET https://api.mashvisor.com/v1.1/client/rento-calculator/nearby-listings

Request Headers

Parameter Value
x-api-key User Authentication Header

Query Parameters

Parameter Value Default Description
state String The state of the neighborhood should be provided to the api or api will throw error 404.
city String A specific city you're looking for.
zip_code String Any postal zip code.
address String Any street address
lat Float Latitude value
lng Float Longitude value
beds Integer Possible inputs:
* 0
* 1
* 2
* 3
* 4
* 5
baths Integer Possible inputs:
* 0
* 1
* 2
* 3
* 4
* 5
home_type String Possible inputs:
* single family residential
* condo/coop
* townhouse
* multi family
* other
resource String Default "airbnb"
Possible inputs:
* airbnb
* traditional
neighborhood_id String Any Neighborhood Id

Rental Activity Data

Sample Request

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.mashvisor.com/v1.1/client/rento-calculator/rental-activity-data?state=TX&zip_code=76549&resource=airbnb")
  .get()
  .addHeader("x-api-key", "YOUR_API_KEY")
  .build();

Response response = client.newCall(request).execute();
require 'uri'
require 'net/http'

url = URI("https://api.mashvisor.com/v1.1/client/rento-calculator/rental-activity-data?state=TX&zip_code=76549&resource=airbnb")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Get.new(url)
request["x-api-key"] = 'YOUR_API_KEY'

response = http.request(request)
puts response.read_body
<?php

$request = new HttpRequest();
$request->setUrl('https://api.mashvisor.com/v1.1/client/rento-calculator/rental-activity-data');
$request->setMethod(HTTP_METH_GET);
$request->setHeaders(array(
  'x-api-key' => 'YOUR_API_KEY'
));

$request->setQueryData(array(
  'state' => 'TX',
  'zip_code' => '76549',
  'source' => 'airbnb'));

try {
  $response = $request->send();

  echo json_decode($response->getBody());
} catch (HttpException $ex) {
  echo $ex;
}
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://api.mashvisor.com/v1.1/client/rento-calculator/rental-activity-data?state=TX&zip_code=76549&resource=airbnb"

  req, _ := http.NewRequest("GET", url, nil)

  req.Header.Add("x-api-key", "YOUR_API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}

The above command returns JSON structured like this:

{
    "status": "success",
    "content": [
        [
            {
                "count": 14,
                "sale_quarter": "quarter_1-90_day",
                "book_range": "1-90"
            },
            {
                "count": 12,
                "sale_quarter": "quarter_181-270_day",
                "book_range": "181-270"
            },
            {
                "count": 7,
                "sale_quarter": "quarter_272-365_day",
                "book_range": "271-365"
            },
            {
                "count": 14,
                "sale_quarter": "quarter_91-180_day",
                "book_range": "91-180"
            }
        ],
        [
            {
                "count": 5,
                "sale_quarter": "quarter_1-90_day",
                "unbook_range": "1-90"
            },
            {
                "count": 16,
                "sale_quarter": "quarter_181-270_day",
                "unbook_range": "181-270"
            },
            {
                "count": 14,
                "sale_quarter": "quarter_272-365_day",
                "unbook_range": "271-365"
            },
            {
                "count": 12,
                "sale_quarter": "quarter_91-180_day",
                "unbook_range": "91-180"
            }
        ]
    ]
}

This endpoint retrieves the Airbnb location rental activity performance grouped by booked and unbooked nights.

HTTP Request

GET https://api.mashvisor.com/v1.1/client/rento-calculator/rental-activity-data

Request Headers

Parameter Value
x-api-key User Authentication Header

Query Parameters

Parameter Value Default Description
state String The state of the neighborhood should be provided to the api or api will throw error 404.
city String A specific city you're looking for.
zip_code String Any postal zip code.
address String Any street address
lat Float Latitude value
lng Float Longitude value
beds Integer Possible inputs:
* 0
* 1
* 2
* 3
* 4
* 5
baths Integer Possible inputs:
* 0
* 1
* 2
* 3
* 4
* 5
home_type String Possible inputs:
* single family residential
* condo/coop
* townhouse
* multi family
* other
resource String Default "airbnb"
Possible inputs:
* airbnb
* traditional
neighborhood_id String Any Neighborhood Id

Export Comps

Sample Request

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.mashvisor.com/v1.1/client/rento-calculator/export-comps?state=TX&zip_code=76549&resource=airbnb")
  .get()
  .addHeader("x-api-key", "YOUR_API_KEY")
  .build();

Response response = client.newCall(request).execute();
require 'uri'
require 'net/http'

url = URI("https://api.mashvisor.com/v1.1/client/rento-calculator/export-comps?state=TX&zip_code=76549&resource=airbnb")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Get.new(url)
request["x-api-key"] = 'YOUR_API_KEY'

response = http.request(request)
puts response.read_body
<?php

$request = new HttpRequest();
$request->setUrl('https://api.mashvisor.com/v1.1/client/rento-calculator/export-comps');
$request->setMethod(HTTP_METH_GET);
$request->setHeaders(array(
  'x-api-key' => 'YOUR_API_KEY'
));

$request->setQueryData(array(
  'state' => 'TX',
  'zip_code' => '76549',
  'source' => 'airbnb'));

try {
  $response = $request->send();

  echo json_decode($response->getBody());
} catch (HttpException $ex) {
  echo $ex;
}
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://api.mashvisor.com/v1.1/client/rento-calculator/export-comps?state=TX&zip_code=76549&resource=airbnb"

  req, _ := http.NewRequest("GET", url, nil)

  req.Header.Add("x-api-key", "YOUR_API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}

The above command returns JSON structured like this:

{
    "status": "success",
    "content": {
        "status": 100,
        "link": "https://storage.googleapis.com/exports.mashvisor.com/devel%2F8bf2c526-e5a7-4bdb-aa8d-92d7f74ac4fc.xlsx?GoogleAccessId=cultivated-link-832.mashvisor.com@appspot.gserviceaccount.com&Expires=1629616428&Signature=kcQWaA6MZFfwfGMhtZw2YVwBCL3uuReS9vF5JNr%2B3pRElB3A9CF%2B8IfhiXZD5a9T0RlC%2FoE5Es%2F6olpx3sk2aXCnE8BJbZ7Qyjm4yDfguBOY2t%2FZ2qPmZKHHELl%2FZlSYzHGMxUC%2BVI0RisjURNYwSmYy4VPIY9PjXqhXNzX24XOimcuLVfIkpfIsT%2Fos%2F4WKUcXAZIOtIDuZOBhWLbnWE%2BlkePfXpZRuTf1%2Bg0LBSBD0qxlSrksECtKcgg2Q7mVZ0iE%2FcpJJwZfHuVpUexlVODZLagyb1OZBpVvflwdvZcvErrhKuImxl8l3Wp0vSura2B6GVd1dAy5dgrlCC6d5VQ%3D%3D"
    }
}

This endpoint retrieves the export of all listings used in the analysis for a specific area based on the inputs for the city, zip code, and the neighborhood/street address.

HTTP Request

GET https://api.mashvisor.com/v1.1/client/rento-calculator/export-comps

Request Headers

Parameter Value
x-api-key User Authentication Header

Query Parameters

Parameter Value Default Description
state String The state of the neighborhood should be provided to the api or api will throw error 404.
city String A specific city you're looking for.
zip_code String Any postal zip code.
address String Any street address
lat Float Latitude value
lng Float Longitude value
beds Integer Possible inputs:
* 0
* 1
* 2
* 3
* 4
* 5
baths Integer Possible inputs:
* 0
* 1
* 2
* 3
* 4
* 5
home_type String Possible inputs:
* single family residential
* condo/coop
* townhouse
* multi family
* other
resource String Default "airbnb"
Possible inputs:
* airbnb
* traditional
neighborhood_id String Any Neighborhood Id

List Comps

Sample Request

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.mashvisor.com/v1.1/client/rento-calculator/list-comps?state=TX&zip_code=76549&resource=airbnb&beds=2")
  .get()
  .addHeader("x-api-key", "YOUR_API_KEY")
  .build();

Response response = client.newCall(request).execute();
require 'uri'
require 'net/http'

url = URI("https://api.mashvisor.com/v1.1/client/rento-calculator/list-comps?state=TX&zip_code=76549&resource=airbnb&beds=2")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Get.new(url)
request["x-api-key"] = 'YOUR_API_KEY'

response = http.request(request)
puts response.read_body
<?php

$request = new HttpRequest();
$request->setUrl('https://api.mashvisor.com/v1.1/client/rento-calculator/list-comps');
$request->setMethod(HTTP_METH_GET);
$request->setHeaders(array(
  'x-api-key' => 'YOUR_API_KEY'
));

$request->setQueryData(array(
  'state' => 'TX',
  'zip_code' => '76549',
  'source' => 'airbnb',
  'beds' => '2',
  'baths' => '2'));

try {
  $response = $request->send();

  echo json_decode($response->getBody());
} catch (HttpException $ex) {
  echo $ex;
}
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://api.mashvisor.com/v1.1/client/rento-calculator/list-comps?state=TX&zip_code=76549&resource=airbnb&beds=2"

  req, _ := http.NewRequest("GET", url, nil)

  req.Header.Add("x-api-key", "YOUR_API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}

The above command returns JSON structured like this:

{
    "status": "success",
    "content": {
        "list": [
            {
                "id": 31072743,
                "property_id": "40677385",
                "source": "Airbnb",
                "status": "ACTIVE",
                "night_priceـnative": 107,
                "night_price": 80,
                "weekly_price": 0,
                "monthly_price": 0,
                "cleaning_fee_native": 55,
                "num_of_baths": 2,
                "num_of_rooms": 2,
                "occupancy": 91,
                "nights_booked": 333,
                "rental_income": 2220,
                "airbnb_neighborhood_id": 5424,
                "name": "Blue House at Ft Hood, 2/2, King, W/D,  Big Yard",
                "address": "Killeen, TX, United States",
                "airbnb_neighborhood": null,
                "airbnb_city": "Killeen",
                "state": "TX",
                "capacity_of_people": 6,
                "zip": "76549",
                "property_type": "House",
                "room_type": "Entire home/apt",
                "room_type_category": "entire_home",
                "amenities": null,
                "reviews_count": 45,
                "start_rating": 5,
                "reviews": null,
                "created_at": "2021-08-16T12:08:36.000Z",
                "updated_at": "2021-08-16T12:08:36.000Z",
                "num_of_beds": 3,
                "lat": 31.1044,
                "lon": -97.768,
                "image": "https://a0.muscache.com/im/pictures/59162131-c52a-4762-a10b-8adae3e1aae0.jpg?aki_policy=medium",
                "url": null,
                "listing_name": "Blue House at Ft Hood, 2/2, King, W/D,  Big Yard"
            },
            {
                "id": 31072890,
                "property_id": "48955740",
                "source": "Airbnb",
                "status": "ACTIVE",
                "night_priceـnative": 99,
                "night_price": 97,
                "weekly_price": 0,
                "monthly_price": 0,
                "cleaning_fee_native": 25,
                "num_of_baths": 2,
                "num_of_rooms": 2,
                "occupancy": 82,
                "nights_booked": 126,
                "rental_income": 2444,
                "airbnb_neighborhood_id": 5424,
                "name": "Your Home away from Home!!!",
                "address": "Killeen, TX, United States",
                "airbnb_neighborhood": null,
                "airbnb_city": "Killeen",
                "state": "TX",
                "capacity_of_people": 4,
                "zip": "76549",
                "property_type": "House",
                "room_type": "Entire home/apt",
                "room_type_category": "entire_home",
                "amenities": null,
                "reviews_count": 13,
                "start_rating": 5,
                "reviews": null,
                "created_at": "2021-08-16T12:08:53.000Z",
                "updated_at": "2021-08-16T12:08:53.000Z",
                "num_of_beds": 2,
                "lat": 31.0922,
                "lon": -97.7583,
                "image": "https://a0.muscache.com/im/pictures/e5074c00-de3c-4cc2-b822-01da981d8cc7.jpg?aki_policy=medium",
                "url": null,
                "listing_name": "Your Home away from Home!!!"
            }
        ],
        "count": 2
    }
}

This endpoint retrieves the list of all listings used in the analysis for a specific area based on the inputs for the city, zip code, and the neighborhood/street address.

HTTP Request

GET https://api.mashvisor.com/v1.1/client/rento-calculator/list-comps

Request Headers

Parameter Value
x-api-key User Authentication Header

Query Parameters

Parameter Value Default Description
state String The state of the neighborhood should be provided to the api or api will throw error 404.
city String A specific city you're looking for.
zip_code String Any postal zip code.
address String Any street address
lat Float Latitude value
lng Float Longitude value
beds Integer Possible inputs:
* 0
* 1
* 2
* 3
* 4
* 5
baths Integer Possible inputs:
* 0
* 1
* 2
* 3
* 4
* 5
home_type String Possible inputs:
* single family residential
* condo/coop
* townhouse
* multi family
* other
resource String Default "airbnb"
Possible inputs:
* airbnb
* traditional
neighborhood_id String Any Neighborhood Id

Historical Performance

Sample Request

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.mashvisor.com/v1.1/client/rento-calculator/historical-performance?city=Miami&state=fl&neighborhood_id=269093&resource=airbnb")
  .get()
  .addHeader("x-api-key", "YOUR_API_KEY")
  .build();

Response response = client.newCall(request).execute();
require 'uri'
require 'net/http'

url = URI("https://api.mashvisor.com/v1.1/client/rento-calculator/historical-performance?city=Miami&state=fl&neighborhood_id=269093&resource=airbnb")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Get.new(url)
request["x-api-key"] = 'YOUR_API_KEY'

response = http.request(request)
puts response.read_body
<?php

$request = new HttpRequest();
$request->setUrl('https://api.mashvisor.com/v1.1/client/rento-calculator/historical-performance');
$request->setMethod(HTTP_METH_GET);
$request->setHeaders(array(
  'x-api-key' => 'YOUR_API_KEY'
));

$request->setQueryData(array(
  'state' => 'TX',
  'zip_code' => '76549',
  'source' => 'airbnb',
  'beds' => '2',
  'baths' => '2'));

try {
  $response = $request->send();

  echo json_decode($response->getBody());
} catch (HttpException $ex) {
  echo $ex;
}
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://api.mashvisor.com/v1.1/client/rento-calculator/historical-performance?city=Miami&state=fl&neighborhood_id=269093&resource=airbnb"

  req, _ := http.NewRequest("GET", url, nil)

  req.Header.Add("x-api-key", "YOUR_API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}

The above command returns JSON structured like this:

   {
  "status": "success",
  "content": {
    "rental_income_yoy_changes": -33.02289322724056,
    "night_price_yoy_changes": 5.320001591623517,
    "occupancy_yoy_changes": -34.84511338350376,
    "historical_performance": [
      {
        "rental_income": null,
        "night_price": null,
        "occupancy": null,
        "month": 1,
        "year": 2023,
        "date": "1-2023"
      },
      {
        "rental_income": 1115.0851063829787,
        "night_price": 197.10638297872342,
        "occupancy": 27.72340425531915,
        "month": 12,
        "year": 2022,
        "date": "12-2022"
      },
      {
        "rental_income": 1105.3829787234042,
        "night_price": 181.36170212765958,
        "occupancy": 29.851063829787233,
        "month": 11,
        "year": 2022,
        "date": "11-2022"
      },
      {
        "rental_income": 1795.2340425531916,
        "night_price": 180.53191489361703,
        "occupancy": 41.361702127659576,
        "month": 10,
        "year": 2022,
        "date": "10-2022"
      },
      {
        "rental_income": 1074.4255319148936,
        "night_price": 175.7872340425532,
        "occupancy": 26.914893617021278,
        "month": 9,
        "year": 2022,
        "date": "9-2022"
      },
      {
        "rental_income": 813.6170212765958,
        "night_price": 188.46808510638297,
        "occupancy": 24.361702127659573,
        "month": 8,
        "year": 2022,
        "date": "8-2022"
      },
      {
        "rental_income": 1508.0425531914893,
        "night_price": 213.5531914893617,
        "occupancy": 31.02127659574468,
        "month": 7,
        "year": 2022,
        "date": "7-2022"
      },
      {
        "rental_income": 589.6170212765958,
        "night_price": 192.70212765957447,
        "occupancy": 15.595744680851064,
        "month": 6,
        "year": 2022,
        "date": "6-2022"
      },
      {
        "rental_income": 1270.1739130434783,
        "night_price": 194.47826086956522,
        "occupancy": 28.891304347826086,
        "month": 5,
        "year": 2022,
        "date": "5-2022"
      },
      {
        "rental_income": 2631.782608695652,
        "night_price": 206.8913043478261,
        "occupancy": 52.76086956521739,
        "month": 4,
        "year": 2022,
        "date": "4-2022"
      },
      {
        "rental_income": 2040.6097560975609,
        "night_price": 246.58536585365854,
        "occupancy": 32.80487804878049,
        "month": 3,
        "year": 2022,
        "date": "3-2022"
      },
      {
        "rental_income": 1664.875,
        "night_price": 187.15,
        "occupancy": 42.55,
        "month": 2,
        "year": 2022,
        "date": "2-2022"
      }
    ]
  }
}

This endpoint retrieves the historical performance of all listings used in the analysis for a specific area based on the inputs for the city, zip code, and the neighborhood/street address.

HTTP Request

GET https://api.mashvisor.com/v1.1/client/rento-calculator/historical-performance

Request Headers

Parameter Value
x-api-key User Authentication Header

Query Parameters

Parameter Value Default Description
state String The state of the neighborhood should be provided to the api or api will throw error 404.
city String A specific city you're looking for.
zip_code String Any postal zip code.
address String Any street address
lat Float Latitude value
lng Float Longitude value
beds Integer Possible inputs:
* 0
* 1
* 2
* 3
* 4
* 5
baths Integer Possible inputs:
* 0
* 1
* 2
* 3
* 4
* 5
home_type String Possible inputs:
* single family residential
* condo/coop
* townhouse
* multi family
* other
resource String Default "airbnb"
Possible inputs:
* airbnb
* traditional
neighborhood_id String Any Neighborhood Id

Property Types

Sample Request

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.mashvisor.com/v1.1/client/rento-calculator/property-types?state=TX&zip_code=76549&resource=airbnb")
  .get()
  .addHeader("x-api-key", "YOUR_API_KEY")
  .build();

Response response = client.newCall(request).execute();
require 'uri'
require 'net/http'

url = URI("https://api.mashvisor.com/v1.1/client/rento-calculator/property-types?state=TX&zip_code=76549&resource=airbnb")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Get.new(url)
request["x-api-key"] = 'YOUR_API_KEY'

response = http.request(request)
puts response.read_body
<?php

$request = new HttpRequest();
$request->setUrl('https://api.mashvisor.com/v1.1/client/rento-calculator/property-types');
$request->setMethod(HTTP_METH_GET);
$request->setHeaders(array(
  'x-api-key' => 'YOUR_API_KEY'
));

$request->setQueryData(array(
 'state' => 'TX',
  'zip_code' => '76549',
  'source' => 'airbnb'));

try {
  $response = $request->send();

  echo json_decode($response->getBody());
} catch (HttpException $ex) {
  echo $ex;
}
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://api.mashvisor.com/v1.1/client/rento-calculator/property-types?state=TX&zip_code=76549&resource=airbnb"

  req, _ := http.NewRequest("GET", url, nil)

  req.Header.Add("x-api-key", "YOUR_API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}

The above command returns JSON structured like this:

{
    "status": "success",
    "content": [
        {
            "property_type": "House",
            "count": 25,
            "min": 238,
            "max": 3752,
            "avg": 2083.44,
            "median": 2238,
            "adjusted_rental_income": 2346.848611111111,
            "median_night_rate": 109,
            "median_occupancy": 64
        },
        {
            "property_type": "Apartment",
            "count": 13,
            "min": 537,
            "max": 2470,
            "avg": 1626.5384615384614,
            "median": 1688,
            "adjusted_rental_income": 1782.923611111111,
            "median_night_rate": 89,
            "median_occupancy": 58
        },
        {
            "property_type": "Townhouse",
            "count": 7,
            "min": 526,
            "max": 3098,
            "avg": 1943,
            "median": 1887,
            "adjusted_rental_income": 2521.6430555555553,
            "median_night_rate": 123,
            "median_occupancy": 62
        },
        {
            "property_type": "Tiny house",
            "count": 1,
            "min": 992,
            "max": 992,
            "avg": 992,
            "median": 992,
            "adjusted_rental_income": 1272.4305555555557,
            "median_night_rate": 50,
            "median_occupancy": 65
        },
        {
            "property_type": "Condominium",
            "count": 1,
            "min": 1018,
            "max": 1018,
            "avg": 1018,
            "median": 1018,
            "adjusted_rental_income": 1346.951388888889,
            "median_night_rate": 45,
            "median_occupancy": 74
        }
    ]
}

This endpoint retrieves the search for property types and their key metrics for a specific area based on the inputs for the city, zip code, and the neighborhood/street address.

HTTP Request

GET https://api.mashvisor.com/v1.1/client/rento-calculator/property-types

Request Headers

Parameter Value
x-api-key User Authentication Header

Query Parameters

Parameter Value Default Description
state String The state of the neighborhood should be provided to the api or api will throw error 404.
city String A specific city you're looking for.
zip_code String Any postal zip code.
address String Any street address
lat Float Latitude value
lng Float Longitude value
beds Integer Possible inputs:
* 0
* 1
* 2
* 3
* 4
* 5
baths Integer Possible inputs:
* 0
* 1
* 2
* 3
* 4
* 5
home_type String Possible inputs:
* single family residential
* condo/coop
* townhouse
* multi family
* other
resource String Default "airbnb"
Possible inputs:
* airbnb
* traditional
neighborhood_id String Any Neighborhood Id

Revenue Stats

Sample Request

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.mashvisor.com/v1.1/client/rento-calculator/revenue-stats?state=TX&zip_code=76549&resource=airbnb")
  .get()
  .addHeader("x-api-key", "YOUR_API_KEY")
  .build();

Response response = client.newCall(request).execute();
require 'uri'
require 'net/http'

url = URI("https://api.mashvisor.com/v1.1/client/rento-calculator/revenue-stats?state=TX&zip_code=76549&resource=airbnb")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Get.new(url)
request["x-api-key"] = 'YOUR_API_KEY'

response = http.request(request)
puts response.read_body
<?php

$request = new HttpRequest();
$request->setUrl('https://api.mashvisor.com/v1.1/client/rento-calculator/revenue-stats');
$request->setMethod(HTTP_METH_GET);
$request->setHeaders(array(
  'x-api-key' => 'YOUR_API_KEY'
));

$request->setQueryData(array(
  'state' => 'TX',
  'zip_code' => '76549',
  'source' => 'airbnb'));

try {
  $response = $request->send();

  echo json_decode($response->getBody());
} catch (HttpException $ex) {
  echo $ex;
}
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://api.mashvisor.com/v1.1/client/rento-calculator/revenue-stats?state=TX&zip_code=76549&resource=airbnb"

  req, _ := http.NewRequest("GET", url, nil)

  req.Header.Add("x-api-key", "YOUR_API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}

The above command returns JSON structured like this:

    {
    "status": "success",
    "content": {
        "count": 47,
        "rental_income": {
            "adjusted_rental_income": 180.22719907407406,
            "median": 1887,
            "min": 238,
            "max": 3752,
            "avg": 1890.2553191489362,
            "percentile_20": 1191,
            "percentile_10": 845.2000000000002,
            "percentile_5": 529.3,
            "percentile_80": 2586.0000000000005,
            "percentile_90": 2843.7999999999997,
            "percentile_95": 3116.9
        },
        "occuapncy_rate": {
            "median": 62,
            "min": 15,
            "max": 100,
            "avg": 60.04255319148936,
            "percentile_20": 42.2,
            "percentile_10": 28.6,
            "percentile_5": 19.1,
            "percentile_80": 79.80000000000003,
            "percentile_90": 84.19999999999999,
            "percentile_95": 89.79999999999998
        },
        "median_night_rate": 103
    }
}

This endpoint retrieves the count of properties, revenue, and occupancy statistics for a specific area based on the inputs for the city, zip code, and the neighborhood/street address.

HTTP Request

GET https://api.mashvisor.com/v1.1/client/rento-calculator/revenue-stats

Request Headers

Parameter Value
x-api-key User Authentication Header

Query Parameters

Parameter Value Default Description
state String The state of the neighborhood should be provided to the api or api will throw error 404.
city String A specific city you're looking for.
zip_code String Any postal zip code.
address String Any street address
lat Float Latitude value
lng Float Longitude value
beds Integer Possible inputs:
* 0
* 1
* 2
* 3
* 4
* 5
baths Integer Possible inputs:
* 0
* 1
* 2
* 3
* 4
* 5
home_type String Possible inputs:
* single family residential
* condo/coop
* townhouse
* multi family
* other
resource String Default "airbnb"
Possible inputs:
* airbnb
* traditional
neighborhood_id String Any Neighborhood Id

Predictive Scores

Investment Likelihood

Sample Request

OkHttpClient client = new OkHttpClient();

MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, '{"airbnb_ROI":9.33728,"airbnb_rental":3235.36,"traditional_ROI":1.92281,"traditional_rental":1270,"baths":10,"beds":10,"days_on_market":152,"home_type":"Multi Family","list_price":599000,"sqft":2000}');
Request request = new Request.Builder()
  .url("https://api.mashvisor.com/v1.1/client/ml/investment-likelihood")
  .post(body)
  .addHeader("Content-Type", "application/json")
  .build();

Response response = client.newCall(request).execute();
require 'uri'
require 'net/http'

url = URI("https://api.mashvisor.com/v1.1/client/ml/investment-likelihood")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Post.new(url)
request["x-api-key"] = 'YOUR_API_KEY'
request["Postman-Token"] = 'd84dcf05-a554-48d1-a7c4-a675b624dfb3'
request.body = '{"airbnb_ROI":9.33728,"airbnb_rental":3235.36,"traditional_ROI":1.92281,"traditional_rental":1270,"baths":10,"beds":10,"days_on_market":152,"home_type":"Multi Family","list_price":599000,"sqft":2000}'

response = http.request(request)
puts response.read_body
<?php

$request = new HttpRequest();
$request->setUrl('https://api.mashvisor.com/v1.1/client/ml/investment-likelihood');
$request->setMethod(HTTP_METH_POST);

$request->setHeaders(array(
  'Content-Type' => 'application/json'
));

$request->setBody('{"airbnb_ROI":9.33728,"airbnb_rental":3235.36,"traditional_ROI":1.92281,"traditional_rental":1270,"baths":10,"beds":10,"days_on_market":152,"home_type":"Multi Family","list_price":599000,"sqft":2000}');

try {
  $response = $request->send();

  echo json_decode($response->getBody());
} catch (HttpException $ex) {
  echo $ex;
}
package main

import (
    "fmt"
    "strings"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://api.mashvisor.com/v1.1/client/ml/investment-likelihood"

    payload := strings.NewReader('{"airbnb_ROI":9.33728,"airbnb_rental":3235.36,"traditional_ROI":1.92281,"traditional_rental":1270,"baths":10,"beds":10,"days_on_market":152,"home_type":"Multi Family","list_price":599000,"sqft":2000}')

    req, _ := http.NewRequest("POST", url, payload)

    req.Header.Add("Content-Type", "application/json")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}

The above command returns JSON structured like this:

{
  "status": "success",
  "content": {
    "contact": {
      "prediction": {
        "Value": 1
      },
      "prediction_likelihood": {
        "Value": 67.31213123
      }
    }
  },
  "message": "prediction_likelihood succeeded"
}

“Property Finder” is the functionality supported by the Investment Likelihood machine learning model, predicting the investment feasibility score for each MLS listing. Users can search for up to 5 areas concurrently for potential investments.

The model has achieved over 86% of accuracy score and is being optimized on an ongoing basis, using enriched data sets and enhanced methodology.

HTTP Request

POST https://api.mashvisor.com/v1.1/client/ml/investment-likelihood

HTTP Headers

Header Value Default
Content-Type application/json
x-api-key User Authentication Header

Body Parameters

Parameter Value Required Description
airbnb_ROI Double YES Airbnb cash on cash (rent over investment)
airbnb_rental Double YES Airbnb monthly rental income
traditional_ROI Double YES Airbnb cash on cash (rent over investment)
traditional_rental Double YES Traditional monthly rental income
baths Integer YES Property bathrooms
beds Integer YES Property bedrooms
days_on_market Integer NO
Replace it with 0 with when missed
How many days the listing has been active on market
home_type String YES Property home type
Possible input:
* Condo/Coop
* Multi Family
* Other
* Single Family Residential
* Townhouse
list_price Integer NO
Replace it with 0 with when missed
Property list price
sqft Integer NO
Replace it with 0 with when missed
Property sqft value

Mashmeter

Sample Request

OkHttpClient client = new OkHttpClient();

MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, '{"airbnb_listings":1104,"median_airbnb_coc":6.60582,"airbnb_price_to_rent_ratio":27.884447053896,"traditional_listings":7,"median_traditional_coc":0.7074975,"traditional_price_to_rent_ratio":28.650655961001,"walkscore":55}');
Request request = new Request.Builder()
  .url("https://api.mashvisor.com/v1.1/client/ml/mashmeter")
  .post(body)
  .addHeader("Content-Type", "application/json")
  .build();

Response response = client.newCall(request).execute();
require 'uri'
require 'net/http'

url = URI("https://api.mashvisor.com/v1.1/client/ml/mashmeter")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Post.new(url)
request["x-api-key"] = 'YOUR_API_KEY'
request["Postman-Token"] = 'd84dcf05-a554-48d1-a7c4-a675b624dfb3'
request.body = '{"airbnb_listings":1104,"median_airbnb_coc":6.60582,"airbnb_price_to_rent_ratio":27.884447053896,"traditional_listings":7,"median_traditional_coc":0.7074975,"traditional_price_to_rent_ratio":28.650655961001,"walkscore":55}'

response = http.request(request)
puts response.read_body
<?php

$request = new HttpRequest();
$request->setUrl('https://api.mashvisor.com/v1.1/client/ml/mashmeter');
$request->setMethod(HTTP_METH_POST);

$request->setHeaders(array(
  'Content-Type' => 'application/json'
));

$request->setBody('{"airbnb_listings":1104,"median_airbnb_coc":6.60582,"airbnb_price_to_rent_ratio":27.884447053896,"traditional_listings":7,"median_traditional_coc":0.7074975,"traditional_price_to_rent_ratio":28.650655961001,"walkscore":55}');

try {
  $response = $request->send();

  echo json_decode($response->getBody());
} catch (HttpException $ex) {
  echo $ex;
}
package main

import (
    "fmt"
    "strings"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://api.mashvisor.com/v1.1/client/ml/mashmeter"

    payload := strings.NewReader('{"airbnb_listings":1104,"median_airbnb_coc":6.60582,"airbnb_price_to_rent_ratio":27.884447053896,"traditional_listings":7,"median_traditional_coc":0.7074975,"traditional_price_to_rent_ratio":28.650655961001,"walkscore":55}')

    req, _ := http.NewRequest("POST", url, payload)

    req.Header.Add("Content-Type", "application/json")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}

The above command returns JSON structured like this:

{
    "status": "success",
    "content": {
      "traditional_mashmeter": "75.09",
      "airbnb_mashmeter": "67.79",
      "traditional_weight": "0.46",
      "airbnb_weight": "2.52",
      "strategy": "Airbnb",
      "mashmeter": "67.79"
    },
    "message": "Mashmeter values fetched successfully"
}

Mashmeter is a blended dynamic model utilizing real-time data with an output showing a low to high propensity for investment property returns, combined with a specific market investment opportunity.

HTTP Request

POST https://api.mashvisor.com/v1.1/client/ml/mashmeter

HTTP Headers

Header Value Default
Content-Type application/json
x-api-key User Authentication Header

Body Parameters

Parameter Value Default Description
airbnb_listings Integer Number of properties listed for sale in a given neighbourhood
median_airbnb_coc Double Median Airbnb cash on cash (rent over investment) for a neighborhood
airbnb_price_to_rent_ratio Double Airbnb price to rent ratio
traditional_listings Integer Number of properties listed on Airbnb in a given neighbourhood
median_traditional_coc Double Median traditional cash on cash (rent over investment) for a neighborhood
traditional_price_to_rent_ratio Double Traditional price to rent ratio
walkscore Integer Neighborhood Walkscore value

Property Recommender

Sample Request

OkHttpClient client = new OkHttpClient();

MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, '{"AgeRange":"45-54","WealthScore":"50.0","Gender":"Female","EstimatedHouseholdIncome":"> $250,000","PresenceOfChildren":"YES","NumberOfChildren":"1","MaritalStatusInHousehold":"Single","Investing":"YES","EstWealth":"> $499,999","NumberCreditLines":"1","LengthOfResidence":"11 - 15 years","Sale1 Transfer Amt":"590000.0","BusinessOwner":"UNKNOWN"}');
Request request = new Request.Builder()
  .url("https://api.mashvisor.com/v1.1/client/ml/recommended_property")
  .post(body)
  .addHeader("Content-Type", "application/json")
  .addHeader("x-api-key", "YOUR_API_KEY")
  .build();

Response response = client.newCall(request).execute();
require 'uri'
require 'net/http'

url = URI("https://api.mashvisor.com/v1.1/client/ml/recommended_property")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Post.new(url)
request["x-api-key"] = 'YOUR_API_KEY'
request["Postman-Token"] = 'd84dcf05-a554-48d1-a7c4-a675b624dfb3'
request.body = '{"AgeRange":"45-54","WealthScore":"50.0","Gender":"Female","EstimatedHouseholdIncome":"> $250,000","PresenceOfChildren":"YES","NumberOfChildren":"1","MaritalStatusInHousehold":"Single","Investing":"YES","EstWealth":"> $499,999","NumberCreditLines":"1","LengthOfResidence":"11 - 15 years","Sale1 Transfer Amt":"590000.0","BusinessOwner":"UNKNOWN"}'

response = http.request(request)
puts response.read_body
<?php

$request = new HttpRequest();
$request->setUrl('https://api.mashvisor.com/v1.1/client/ml/recommended_property');
$request->setMethod(HTTP_METH_POST);

$request->setHeaders(array(
  'x-api-key' => 'YOUR_API_KEY',
  'Content-Type' => 'application/json'
));

$request->setBody('{"AgeRange":"45-54","WealthScore":"50.0","Gender":"Female","EstimatedHouseholdIncome":"> $250,000","PresenceOfChildren":"YES","NumberOfChildren":"1","MaritalStatusInHousehold":"Single","Investing":"YES","EstWealth":"> $499,999","NumberCreditLines":"1","LengthOfResidence":"11 - 15 years","Sale1 Transfer Amt":"590000.0","BusinessOwner":"UNKNOWN"}');

try {
  $response = $request->send();

  echo json_decode($response->getBody());
} catch (HttpException $ex) {
  echo $ex;
}
package main

import (
    "fmt"
    "strings"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://api.mashvisor.com/v1.1/client/ml/recommended_property"

    payload := strings.NewReader('{"AgeRange":"45-54","WealthScore":"50.0","Gender":"Female","EstimatedHouseholdIncome":"> $250,000","PresenceOfChildren":"YES","NumberOfChildren":"1","MaritalStatusInHousehold":"Single","Investing":"YES","EstWealth":"> $499,999","NumberCreditLines":"1","LengthOfResidence":"11 - 15 years","Sale1 Transfer Amt":"590000.0","BusinessOwner":"UNKNOWN"}')

    req, _ := http.NewRequest("POST", url, payload)

    req.Header.Add("Content-Type", "application/json")
    req.Header.Add("x-api-key", "YOUR_API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}

The above command returns JSON structured like this:

{
  "status": "success",
  "content": {
    "property_type": {
      "Condo/Coop": 69
    },
    "bedrooms": {
      "1": 95
    },
    "bathrooms": {
      "['1', '2']": 57.4
    },
    "home_value": {
      "> $1,000,000": 71.5
    }
  }
}

The API returns a JSON object with data representing specifications for recommended properties based on an input consisting of demographics and other data. The returned data includes property type, number of beds/baths, and the home value.

HTTP Request

POST https://api.mashvisor.com/v1.1/client/ml/recommended_property

HTTP Headers

Header Value Default
Content-Type application/json
x-api-key User Authentication Header

Body Parameters

Parameter Value Default Description
AgeRange String Person age range
Possbile Inputs:
* '18-24'
* '25-34'
* '35-44'
* '45-54'
* '55-64'
* '65-74'
* '75+'
* 'UNKNOWN'
WealthScore Integer Any from 0 to 100
Or 'UNKNOWN'
Gender String Possbile Inputs:
* Male
* Female
* UNKNOWN
EstimatedHouseholdIncome String Possbile Inputs:
* '< $20,000'
* '$10,000-49,999'
* '$50,000-99,999'
* '$100,000-149,999'
* '$150,000-199,999'
* '$200,000-249,999'
* $250,000'
*'UNKNOWN'
PresenceOfChildren String Possbile Inputs:
* 'YES'
* UNKNOWN
NumberOfChildren String Any positive integer number
If missing, value should be sent as -1
MaritalStatusInHousehold String Possbile Inputs:
* Married
* Signle
* UNKNOWN
Investing String Possbile Inputs:
* 'YES'
* UNKNOWN
EstWealth String Possbile Inputs:
* '< $1'
*'$1-4,999'
*'$5,000-9,999'
*'$10,000-24,999'
*'$25,000-49,999'
*'$50,000-99,999'
*'$100,000-249,999'
*'$250,000-499,999'
*'>$499,999'
*'UNKNOWN'
NumberCreditLines String Any positive integer number
LengthOfResidence String Possbile Inputs:
* '1 - 4 year'
* '11 - 15 years'
* '5 - 10 years'
* UNKNOWN
Sale1 Transfer Amt String Any positive number
BusinessOwner String Possbile Inputs:
* Accountant
* 'Contractor'
* 'Owner','Partner'
*'Person Owns a Business'
* Self Employed'
* 'UNKNOWN'

Short Term Rentals

Mashvisor provides data and analysis for different short-term rental services, including AirBnB, HomeAway, and VRBO.

Mashvisor has one of the largest databases (over 2.5M+ records) of historical short-term rental data with detailed property information, reviews, photos, host information, and a yearly calendar of daily booking availability and booking price per night.

Our short-term occupancy calculator is supported by an algorithm calculating the occupancy rate for each listing based on the properties’ historical performance and available future bookings. Our algorithms can differentiate between booked and blocked days, and estimate monthly rental income for future bookings.

We have established a validation process for occupancy rates calculations with verified Airbnb hosts to ensure higher accuracy and certify our data.

Get Airbnb Listing Info

Sample Request

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.mashvisor.com/v1.1/client/airbnb-property/22518616?state=AZ")
  .get()
  .addHeader("x-api-key", "YOUR_API_KEY")
  .build();

Response response = client.newCall(request).execute();
require 'uri'
require 'net/http'

url = URI("https://api.mashvisor.com/v1.1/client/property/22518616?state=AZ")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Get.new(url)
request["x-api-key"] = 'YOUR_API_KEY'

response = http.request(request)
puts response.read_body
<?php

$request = new HttpRequest();
$request->setUrl('https://api.mashvisor.com/v1.1/client/airbnb-property/22518616');
$request->setMethod(HTTP_METH_GET);
$request->setHeaders(array(
  'x-api-key' => 'YOUR_API_KEY'
));
$request->setQueryData(array(
  'state' => 'AZ'
));

try {
  $response = $request->send();

  echo json_decode($response->getBody());
} catch (HttpException $ex) {
  echo $ex;
}
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://api.mashvisor.com/v1.1/client/property/22518616?state=AZ"

  req, _ := http.NewRequest("GET", url, nil)

  req.Header.Add("x-api-key", "YOUR_API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}

The above command returns JSON structured like this:

{
  "status": "success",
  "content": {
    "id": 21419158,
    "city": "Tempe",
    "picture_url": "https://a0.muscache.com/4ea/air/v2//pictures/81b62204-5602-49e9-83af-baf5a2477dcb.jpg?t=r:w1200-h720-sfit,e:fjpg-c85",
    "thumbnail_url": "https://a0.muscache.com/im/pictures/81b62204-5602-49e9-83af-baf5a2477dcb.jpg?aki_policy=small",
    "medium_url": "https://a0.muscache.com/im/pictures/81b62204-5602-49e9-83af-baf5a2477dcb.jpg?aki_policy=medium",
    "xl_picture_url": "https://a0.muscache.com/im/pictures/81b62204-5602-49e9-83af-baf5a2477dcb.jpg?aki_policy=x_large",
    "user_id": 2158239,
    "price": 250,
    "native_currency": "USD",
    "price_native": 250,
    "price_formatted": "$250",
    "lat": 33.4433,
    "lng": -111.9222,
    "country": "United States",
    "name": "Luxury Three Story Home with Two Balconies",
    "smart_location": "Tempe, AZ",
    "has_double_blind_reviews": false,
    "instant_bookable": false,
    "bedrooms": 4,
    "beds": 5,
    "bathrooms": 3.5,
    "market": "Phoenix",
    "min_nights": 1,
    "neighborhood": null,
    "person_capacity": 9,
    "state": "AZ",
    "zipcode": "85281",
    "address": "Tempe, AZ, United States",
    "country_code": "US",
    "cancellation_policy": "moderate",
    "property_type": "House",
    "reviews_count": 41,
    "room_type": "Entire home/apt",
    "room_type_category": "entire_home",
    "picture_count": 42,
    "currency_symbol_left": "$",
    "currency_symbol_right": null,
    "bed_type": "Real Bed",
    "bed_type_category": "real_bed",
    "require_guest_profile_picture": false,
    "require_guest_phone_verification": false,
    "force_mobile_legal_modal": false,
    "cancel_policy": 4,
    "check_in_time": 15,
    "check_out_time": 10,
    "guests_included": 4,
    "license": null,
    "max_nights": 1125,
    "square_feet": null,
    "locale": "en",
    "has_viewed_terms": null,
    "has_viewed_cleaning": null,
    "has_agreed_to_legal_terms": null,
    "has_viewed_ib_perf_dashboard_panel": null,
    "language": "en",
    "public_address": "Tempe, AZ, United States",
    "map_image_url": "https://maps.googleapis.com/maps/api/staticmap?maptype=roadmap&markers=33.4433%2C-111.9222&size=480x320&zoom=15&client=gme-airbnbinc&channel=monorail-prod&signature=QM7Jbt_vQkf3Nodd5X4RELn0InM%3D",
    "experiences_offered": "none",
    "max_nights_input_value": null,
    "min_nights_input_value": 1,
    "requires_license": false,
    "property_type_id": 2,
    "house_rules": "- No smoking inside the house\n- No pets allowed\n- No parties or large gatherings (smaller events or gatherings considered with prior homeowner approval)\n- Must be at least 25 years old to book\n- Additional fees and taxes may apply\n- Photo ID may be required upon check-in\n- No early check-in/out during Nov-Apr.\n- Extra cleaning charge will be reported to Airbnb if the house needs extensive cleaning efforts (longer than 3 hours: $55/hour)\n-Please do not park the car in front of the garage door.",
    "security_deposit_native": 200,
    "security_price_native": 200,
    "security_deposit_formatted": "$200",
    "description": "Bask in the sun on one of the two lovely balconies, or socialise at the pool, at this dreamy desert getaway. Utilise the comfy bedrooms on all three floors, cook a gourmet meal in the high-end kitchen and watch TV on the giant projection screen.",
    "description_locale": "en",
    "summary": "Bask in the sun on one of the two lovely balconies, or socialise at the pool, at this dreamy desert getaway. Utilise the comfy bedrooms on all three floors, cook a gourmet meal in the high-end kitchen and watch TV on the giant projection screen.",
    "space": "Master Bedroom: King Bed | Bedroom 2: Queen Bed | Bedroom 3: Queen Bed, Twin Trundle Bed | Bedroom 4 (1st floor): Queen Sleeper Sofa \n\nNestled in the pristine Newport community, this spacious home is designed to impress with modern elegance and comfortable furnishings. \n\nJust steps from your home-away-from-home is the shared outdoor pool and spa. Dive into relaxation in this pristine body of water or enjoy a soothing soak in the jacuzzi for optimal holiday relaxation. \n\nWhen you're not lounging poolside, unwind in the living area, featuring plush sofas, a stereo, smart home system, and a Smart TV with cable channels and a large projector screen. \n\nYou'll want to put your culinary skills to the test in the high-end kitchen, adorned with stainless steel appliances, sleek countertops, a breakfast bar, and a farmhouse sink. Enjoy your home-cooked cuisine at the 2-person breakfast bar or at the dining room table with seating for 6. \n\nFor a front-row seat to colorful Arizona sunsets, retreat upstairs to the private rooftop patio, with seating for 2 and picturesque Tempe views. The property also features a second-floor balcony - the perfect place to jumpstart your day with a cup of coffee or end it with an evening nightcap.\n\nRetire to the well-appointed master bedroom, offering a king-sized bed and an en-suite bathroom with a large shower and bathtub. Sleep will come easy in Bedrooms 2 and 3, boasting high-quality memory foam queen mattresses. Additional sleeping can be found in the downstairs 4th bedroom with high-end foam mattress queen-sized sleeper sofa.",
    "access": "Guest has access to the whole house. Just make it your own home in the dessert.",
    "interaction": "Keyless entry and self check in is available. Instruction will be sent to you after booking.",
    "neighborhood_overview": "Visit boutiques, museums, galleries, live theatre, gourmet fare and more in these lively cities, or head out into nature for more adventure. Downtown Tempe is just a stone's throw away, and Old Scottsdale is only 15 minutes away.",
    "transit": "Rental car is highly recommended. Although uber/Lyft are also very convenient to use in town. There’s also free flash to go to ASU and downtown. \nWe have two bikes you can use for free.",
    "amenities": [
        "TV",
        "Cable TV",
        "Wifi",
        "Air conditioning",
        "Pool",
        "Kitchen",
        "Free parking on premises",
        "Gym",
        "Free street parking",
        "Hot tub",
        "Indoor fireplace",
        "Heating",
        "Washer",
        "Dryer",
        "Smoke detector",
        "Carbon monoxide detector",
        "Essentials",
        "Shampoo",
        "Hangers",
        "Hair dryer",
        "Iron",
        "Laptop friendly workspace",
        "Self check-in",
        "Smart lock",
        "Private entrance",
        "Bathtub",
        "Room-darkening shades",
        "Hot water",
        "Body soap",
        "Bath towel",
        "Toilet paper",
        "Bed linens",
        "Extra pillows and blankets",
        "Microwave",
        "Coffee maker",
        "Refrigerator",
        "Dishwasher",
        "Dishes and silverware",
        "Cooking basics",
        "Oven",
        "Stove",
        "BBQ grill",
        "Patio or balcony",
        "Long term stays allowed",
        "Cleaning before checkout",
        "Handheld shower head",
        "Hot water kettle",
        "Central air conditioning",
        "Smart TV",
        "Mountain view",
        "Rain shower",
        "Balcony",
        "Sound system",
        "Gas oven",
        "Projector and screen",
        "Exercise equipment",
        "Breakfast table",
        "Espresso machine",
        "Formal dining area",
        "Sun loungers",
        "Day bed",
        "Shared gym",
        "Shared pool",
        "Shared hot tub",
        "Convection oven",
        "Amazon Echo",
        "Memory foam mattress",
        "En suite bathroom",
        "Outdoor seating",
        "Soaking tub",
        "Walk-in shower",
        "Full kitchen",
        "Bedroom comforts",
        "Bathroom essentials"
    ],
    "is_location_exact": false,
    "cancel_policy_short_str": "Moderate",
    "star_rating": 5,
    "price_for_extra_person_native": 15,
    "weekly_price_native": null,
    "monthly_price_native": null,
    "time_zone_name": "America/Phoenix",
    "loc": {
        "type": "Point",
        "coordinates": [
            -111.9222,
            33.4433
        ]
    },
    "exists": true,
    "created_at": "2018-04-05T23:17:26.415Z",
    "updated_at": "2019-11-08T06:22:15.499Z",
    "cleaning_fee_native": 250,
    "extras_price_native": 250,
    "in_building": false,
    "in_toto_area": false,
    "instant_book_enabled": true,
    "is_business_travel_ready": false,
    "listing_cleaning_fee_native": 250,
    "listing_monthly_price_native": null,
    "listing_price_for_extra_person_native": 15,
    "listing_weekend_price_native": 295,
    "listing_weekly_price_native": null,
    "localized_city": "Tempe",
    "monthly_price_factor": 0.92,
    "special_offer": null,
    "toto_opt_in": null,
    "weekly_price_factor": 0.95,
    "wireless_info": null,
    "host_id": 2158239,
    "airbnb_id": 22518616,
    "mashvisor_id": 21419158,
    "occupancy": 63,
    "rental_income": 3059,
    "nights_booked": 209
  }
}

This endpoint retrieves the Airbnb property's detailed information, reviews, photos, host information, estimated rental income, and calculated occupancy rate.

Airbnb Property Data Dictionary

Attribute Definition Possible Returns
id Airbnb listing ID: 9998508 Integer
name Listing full name String
neighborhood Listing neighborhood Boolean
city The city where the listing is located String
state* The state where the property is located String
zip code Postal code where a listing is located Integer
country County where a listing is located String
smart_location Full location of listing String
address Address of listing entered by host String
public_address Full address along with the country String
country_code Listing’s country code, ex: US String
market Listing market String
lat Latitude of listing location Float
lng Longitude of listing location Float
instant_bookable Indicator if listing is available for instant booking Boolean
picture_url Main picture url String
thumbnail_url Main thumbnail picture url String
medium_url Main XL picture url String
xl_picture_url All XL pictures urls.  String
picture_urls All pictures url String - array
thumbnail_urls All thumbnail pictures url String - array
xl_picture_urls All XL pictures urls.  String - array
picture_count Count of all pictures Integer
picture_captions All pictures captions String - array
map_image_url Google map image url String
user_id Listing’s host ID Integer
price Listing current booking price per night Integer
native_currency Natiec price currency, ex: “USD” String
price_native Listing nartive price Integer
price_formatted Price along with the currency String
price_for_extra_person_native Extra person’s price Integer
weekly_price_native Weekly price after the discount Integer
monthly_price_native Monthly price after the discount Integer
currency_symbol_left Currency symbol, ex: “$” String
currency_symbol_right Currency symbol, ex: “€” String
security_deposit_native Security deposit price Integer
security_price_native Security deposit native price Integer
security_deposit_formatted Security deposit price with currency String
bedrooms Number of bedrooms Integer
beds Number of beds Integer
bathrooms Number of bathrooms Integer
min_nights Min allowed booking nights Integer
person_capacity Max listing capacity of persons Integer
user The time of the open house starting User Object
cancellation_policy Cancellation policy category String
cancel_policy Cancellation policy category ID Integer
cancel_policy_short_str Summary of cancellation policy String
has_double_blind_reviews Boolean indicator for blind reviews Boolean
property_type Property main type String
Available types:
* House
* Apartment
* Bed and breakfast
* Boutique hotel
* More information
* Bungalow
* Cabin
* Chalet
* Cottage
* Guest suite
* Guesthouse
* Hostel
* Hotel
* Loft
* Resort
* Townhouse
* Villa
reviews_count Total reviews count Integer
review_scores Detailed reviews scores per category Review Scores object
room_type Listing room type String
Available types:
* Entire home/apt
* Private room
* Shared room
room_type_category Room type category String
bed_type Bed type String
bed_type_category Bed type category String
require_guest_profile_picture Boolean
Require_guest_phone_ Boolean
verification
force_mobile_legal_modal Boolean
check_in_time Check in time hour Integer
check_out_time Check out time hour Integer
guests_included Number of guests included Integer
license AirBnB license for listing String
max_nights Max booking nights Integer
square_feet Listing living area Integer
locale Listing’s locale String
has_viewed_terms Boolean
has_viewed_cleaning Boolean
has_agreed_to_legal_terms Boolean
Has_viewed_ib_ Boolean
perf_dashboard_panel
language Listing page language  String
experiences_offered Listing’ experience offered along with booking String
max_nights_input_value Integer
min_nights_input_value Integer
requires_license Indicator if the listing requires licence Boolean
property_type_id Property type ID Integer
house_rules Hosting rules provided by host when booking String
description Listing full description String
description_locale Description locale String
summary Description summary String
space Listing space String
access Allowed accesses in the listing from host String
interaction Host interaction String
neighborhood_overview Listing neighborhood overview String
transit Listing around transit String
amenities All included amenities String - array
is_location_exact Verified exact location Boolean
star_rating Total start rating Float
time_zone_name Full timezone name String
created_at Listing creation date and time Timestamp
updated_at Listing updates date and time Timestamp
exists Indicator if the listing is still active over AirBnB or not. Boolean

HTTP Request

GET https://api.mashvisor.com/v1.1/client/airbnb-property/{id}

Request Headers

Parameter Value
x-api-key User Authentication Header

Path Parameters

Parameter Value Default Description
id Long The Airbnb listing Id.

Query Parameters

Parameter Value Default Description
state* String The state of the listing should be provided to the api or api will throw error 404.
country String US Country ISO-3166 Alpha-2code, e.g. GB, ES.

Get VRBO Listing Info

Sample Request

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.mashvisor.com/v1.1/client/vrbo-property/1943760?state=FL")
  .get()
  .addHeader("x-api-key", "YOUR_API_KEY")
  .build();

Response response = client.newCall(request).execute();
require 'uri'
require 'net/http'

url = URI("https://api.mashvisor.com/v1.1/client/vrbo-property/1943760?state=FL")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Get.new(url)
request["x-api-key"] = 'YOUR_API_KEY'

response = http.request(request)
puts response.read_body
<?php

$request = new HttpRequest();
$request->setUrl('https://api.mashvisor.com/v1.1/client/vrbo-property/1943760');
$request->setMethod(HTTP_METH_GET);
$request->setHeaders(array(
  'x-api-key' => 'YOUR_API_KEY'
));
$request->setQueryData(array(
  'state' => 'FL'
));

try {
  $response = $request->send();

  echo json_decode($response->getBody());
} catch (HttpException $ex) {
  echo $ex;
}
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://api.mashvisor.com/v1.1/client/vrbo-property/1943760?state=FL"

  req, _ := http.NewRequest("GET", url, nil)

  req.Header.Add("x-api-key", "YOUR_API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}

The above command returns JSON structured like this:

{
  "status": "success",
  "content": {
    "propertyTimezone": "America/New_York",
    "accomodationSummary": null,
    "address": {
      "city": "Gainesville",
      "country": "US",
      "postalCode": "32608",
      "stateProvince": "FL"
    },
    "availabilityUpdated": "2023-09-01",
    "averageRating": 4.8541665,
    "bedrooms": 2,
    "canonicalLink": "https://www.vrbo.com/1943760",
    "description": "One block from Shands Hospital, VA Hospital, and the University of Florida campus. This is a spacious ground level condo with two bedrooms. Each includes walk-in closet, luxury queen bed, chest of drawers, ceiling fan, bedside table, bed linens provided; there is one bathroom, tiled with tub/shower grab bar, towels provided; fully furnished kitchen with refrigerator, dishwasher, gas stove, microwave, all dishes and cooking utensils; table and 4 chairs; living room with large comfortable sofa, two large upholstered chairs, 50 inch flat screen TV, cable, internet, wireless;  sleeps four comfortably and 1 other on the sofa.\nThe complex does not allow dogs.",
    "detailPageUrl": "/1943760?unitId=2506282&childrenCount=0&noDates=true",
    "featuredAmenities": [
      "POOL",
      "INTERNET",
      "AIR_CONDITIONING",
      "TV",
      "CABLE",
      "PARKING",
      "HEATER"
    ],
    "firstLiveInLastThirtyDays": false,
    "geoCode": {
      "exact": false,
      "latitude": 29.6353672,
      "longitude": -82.34372944
    },
    "geography": {
      "description": "Gainesville, Florida, United States of America",
      "ids": [
        {
          "type": "LBS",
          "value": "d616f541-1f46-4b1a-a665-986baf96dfec"
        }
      ],
      "name": "Gainesville",
      "relatedGeographies": null,
      "types": [
        "locality"
      ],
      "location": {
        "lat": 29.651939,
        "lng": -82.325043
      }
    },
    "propertyManagerProfile": null,
    "headline": "2Short walk to Shands & VA Hospitals, and UF campus",
    "houseRules": {
      "children": {
        "label": "Children allowed",
        "note": "There are no play areas for children.",
        "allowed": true
      },
      "events": {
        "label": "No events",
        "note": null,
        "allowed": false
      },
      "smoking": {
        "label": "Smoking allowed",
        "note": null,
        "allowed": true
      },
      "pets": {
        "label": "No pets",
        "note": null,
        "allowed": false
      },
      "unitUrl": "/units/0004/33784c7c-d1c6-4803-8f3d-f022b46ba272",
      "checkInTime": "4:00 PM",
      "checkOutTime": "11:00 AM",
      "minimumAge": {
        "label": "Minimum age of primary renter:",
        "note": null,
        "minimumAge": 20,
        "displayText": "Minimum age to rent: 20"
      },
      "maxOccupancy": {
        "adults": null,
        "guests": 4,
        "label": "Max guests:",
        "maxAdultsLabel": null,
        "note": null,
        "displayText": "Maximum overnight guests: 4"
      },
      "standardRules": [
        {
          "key": "childrenRule",
          "label": "Children allowed",
          "note": "There are no play areas for children."
        },
        {
          "key": "petsRule",
          "label": "No pets",
          "note": null
        },
        {
          "key": "eventsRule",
          "label": "No events",
          "note": null
        },
        {
          "key": "smokingRule",
          "label": "Smoking allowed",
          "note": null
        }
      ],
      "customRules": [],
      "label": "House Rules",
      "checkInRule": {
        "label": "<strong>Check in</strong> after 4:00 PM",
        "time": "4:00 PM"
      },
      "checkOutRule": {
        "label": "<strong>Check out</strong> before 11:00 AM",
        "time": "11:00 AM"
      },
      "childrenRule": {
        "displayText": "Children allowed: ages 0-17",
        "allowed": true,
        "childrenNotAllowedNote": null,
        "note": "There are no play areas for children."
      },
      "petsRule": {
        "displayText": "No pets allowed",
        "allowed": false,
        "note": null
      },
      "eventsRule": {
        "displayText": "No events allowed",
        "allowed": false,
        "maxEventAttendeesLabel": null,
        "allowedEventsNote": null,
        "note": null
      },
      "smokingRule": {
        "displayText": "Smoking allowed: outside",
        "allowed": true,
        "outside": {
          "allowed": true,
          "note": null
        },
        "inside": null,
        "note": null
      }
    },
    "cancellationPolicy": {
      "cancellationPolicyPeriods": [
        {
          "label": "<strong>100% refund of amount paid</strong> if you cancel at least 14 days before check-in."
        },
        {
          "label": "<strong>50% refund of amount paid</strong> (minus the service fee) if you cancel at least 7 days before check-in."
        },
        {
          "label": "<strong>No refund</strong> if you cancel less than 7 days before check-in."
        }
      ],
      "cancellationPolicyLabel": {
        "label": "<strong>Free cancellation</strong> up to",
        "date": "14 days before check-in",
        "isFullRefundWindow": true
      },
      "cancellationTimelinePeriods": [
        {
          "timelineLabel": "14 days before check-in",
          "refundPercent": 100,
          "refundWindowLabel": "100% refund",
          "shortDateLocalized": null,
          "isPast": false,
          "isActive": false,
          "iconCode": null
        },
        {
          "timelineLabel": "7 days before check-in",
          "refundPercent": 50,
          "refundWindowLabel": "50% refund",
          "shortDateLocalized": null,
          "isPast": false,
          "isActive": false,
          "iconCode": null
        },
        {
          "timelineLabel": "Check in",
          "refundPercent": 0,
          "refundWindowLabel": "No refund",
          "shortDateLocalized": null,
          "isPast": false,
          "isActive": false,
          "iconCode": "KEY"
        }
      ],
      "policyType": "RELAXED"
    },
    "instantBookable": true,
    "egratedPropertyManager": null,
    "platformPropertyManager": false,
    "ipmGuaranteedPricingActive": false,
    "isBasicListing": false,
    "isCrossSell": false,
    "isSubscription": false,
    "listingId": "321.1943760.2506282",
    "listingNumber": 1943760,
    "minStayRange": {
      "minStayHigh": 7,
      "minStayLow": 2
    },
    "multiUnitProperty": false,
    "onlineBookable": true,
    "ownerManaged": true,
    "ownersListingProfile": {
      "aboutYou": null,
      "storyPhoto": null,
      "uniqueBenefits": null,
      "whyHere": null
    },
    "payPerBooking": true,
    "petsAllowed": false,
    "priceSummary": {
      "amount": 98,
      "currency": "USD",
      "formattedAmount": "$98",
      "pricePeriodDescription": "avg/night",
      "currencySymbol": "$"
    },
    "propertyId": "1943760",
    "id": "49177741",
    "propertyManagerMessaging": null,
    "propertyName": "H2",
    "propertyType": "Condo",
    "propertyTypeKey": "condo",
    "recentlyAdded": false,
    "registrationNumber": "",
    "reviewCount": 48,
    "sleeps": 4,
    "sleepsDisplay": "Sleeps 4",
    "spu": "vrbo-1943760-2506282",
    "status": "AVAILABLE",
    "takesInquiries": true,
    "testListing": false,
    "thumbnailUrl": "https://media.vrbo.com/lodging/50000000/49180000/49177800/49177741/7d1d1ee0.TREATMENT.jpg",
    "travelerFeeEligible": true,
    "videoUrls": [],
    "bathrooms": {
      "full": 1,
      "half": 0,
      "toiletOnly": 0
    },
    "industryHealthAssociations": [],
    "regionalHealthGuidelines": [],
    "impressum": null,
    "allFeaturedAmenitiesRanked": [
      "INTERNET",
      "PETS",
      "AIR_CONDITIONING",
      "POOL",
      "WHEELCHAIR",
      "HEATER",
      "FIREPLACE",
      "CABLE",
      "CHILDREN_WELCOME",
      "WASHER_DRYER",
      "HOT_TUB",
      "PARKING",
      "TV",
      "NO_SMOKING"
    ],
    "created_at": "2023-08-31T07:05:24.451Z",
    "updated_at": "2023-09-07T12:35:40.968Z",
    "exists": true,
    "vrbo_id": "1943760",
    "mashvisor_id": null,
    "occupancy": null,
    "rental_income": null,
    "nights_booked": null
  }
}

This endpoint retrieves the VRBO property's detailed information, reviews count, address, estimated rental income, and calculated occupancy rate.

VRBO Property Data Dictionary

Attribute Definition Data Type
id VRBO listing ID: 321.1943760.2506282 String
headline Listing full name String
address Listing address including country, state, city, postal code String
propertyTimezone Full timezone name String
created_at Listing creation date and time Timestamp
updated_at Listing updates date and time Timestamp
exists Indicator if the listing is still active over AirBnB Boolean
propertyId Property ID String
propertyName Property name String
propertyType Property type (e.g., "Condo") String
propertyTypeKey Property type key (e.g., "condo") String
description Property description String
canonicalLink Link to the property listing String
sleeps Number of guests the property sleeps Integer
bedrooms Number of bedrooms in the property Integer
bathrooms Number of bathrooms in the property Object
averageRating Average rating of the property Float
reviewCount Number of reviews for the property Integer
onlineBookable Indicates if the property is bookable online Boolean
instantBookable Indicates if the property supports instant booking Boolean
unitMetadata Metadata for the unit Object
featuredAmenities Featured amenities for the property Array of Strings
allFeaturedAmenitiesRanked Ranked list of featured amenities Array of Strings
houseRules Property's house rules Object
cancellationPolicy Cancellation policy for the property Object
payPerBooking Indicates if the property uses a pay-per-booking model Boolean
priceSummary Price summary for the property Object
ownerManaged Indicates if the property is owner-managed Boolean
ownerListingProfile Owner's listing profile information Object
propertyManagerProfile Property manager's profile information Object
registrationNumber Property registration number (if applicable) String
recentAdded Indicates if the property was recently added Boolean
takesInquiries Indicates if the property takes inquiries from guests Boolean
videoUrls URLs to videos related to the property Array of Strings
thumbnailUrl URL to the property's thumbnail image String
travelerFeeEligible Indicates if traveler fees are eligible for the property Boolean
listingNumber Listing number for the property Integer
multiUnitProperty Indicates if the property is a multi-unit property Boolean
egratedPropertyManager Information about an egrated property manager (if applicable) Object
platformPropertyManager Indicates if the property is managed by a platform property manager Boolean
ipmGuaranteedPricingActive Indicates if guaranteed pricing is active for the property Boolean
petsAllowed Indicates if pets are allowed in the property Boolean
minStayRange Range of minimum stay requirements for the property Object
maxOccupancy Maximum occupancy details for the property Object
industryHealthAssociations Health associations associated with the property Array of Objects
regionalHealthGuidelines Regional health guidelines for the property Array of Objects
impressum Property's impressum (if applicable) String
occupancy Occupancy details for the property Object
rentalIncome Rental income details for the property Object
nightsBooked Number of nights booked for the property Integer

HTTP Request

GET https://api.mashvisor.com/v1.1/client/vrbo-property/{id}

Request Headers

Parameter Value
x-api-key User Authentication Header

Path Parameters

Parameter Value Default Description
id Long The VRBO listing Id.

Query Parameters

Parameter Value Default Description
state* String The state of the listing should be provided to the api or api will throw error 404.
country String US Country ISO-3166 Alpha-2code, e.g. GB, ES.

Get Listing's Historical Performance

Sample Request

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.mashvisor.com/v1.1/client/airbnb-property/21419158/historical?state=AZ")
  .get()
  .addHeader("x-api-key", "YOUR_API_KEY")
  .build();

Response response = client.newCall(request).execute();
require 'uri'
require 'net/http'

url = URI("https://api.mashvisor.com/v1.1/client/airbnb-property/21419158/historical?state=AZ")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Get.new(url)
request["x-api-key"] = 'YOUR_API_KEY'

response = http.request(request)
puts response.read_body
<?php

$request = new HttpRequest();
$request->setUrl('https://api.mashvisor.com/v1.1/client/airbnb-property/21419158/historical');
$request->setMethod(HTTP_METH_GET);
$request->setHeaders(array(
  'x-api-key' => 'YOUR_API_KEY'
));
$request->setQueryData(array(
  'state' => 'AZ'
));

try {
  $response = $request->send();

  echo json_decode($response->getBody());
} catch (HttpException $ex) {
  echo $ex;
}
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://api.mashvisor.com/v1.1/client/airbnb-property/21419158/historical?state=AZ"

  req, _ := http.NewRequest("GET", url, nil)

  req.Header.Add("x-api-key", "YOUR_API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}

The above command returns JSON structured like this:

{
    "status": "success",
    "content": {
        "name": "Luxury Three Story Home with Two Balconies",
        "airbnb_id": "22518616",
        "months": [
            {
                "airbnb_id": "22518616",
                "name": "Luxury Three Story Home with Two Balconies",
                "year": 2018,
                "month": 12,
                "nightly_price": 200,
                "revenue": 2800,
                "occupancy": 14,
                "unbooked_nights": 17,
                "occupancy_rate": 45
            },
            {
                "airbnb_id": "22518616",
                "name": "Luxury Three Story Home with Two Balconies",
                "year": 2019,
                "month": 1,
                "nightly_price": 0,
                "revenue": 0,
                "occupancy": 0,
                "unbooked_nights": null,
                "occupancy_rate": null
            },
            {
                "airbnb_id": "22518616",
                "name": "Luxury Three Story Home with Two Balconies",
                "year": 2019,
                "month": 2,
                "nightly_price": 223,
                "revenue": 4462,
                "occupancy": 20,
                "unbooked_nights": 8,
                "occupancy_rate": 71
            },
            {
                "airbnb_id": "22518616",
                "name": "Luxury Three Story Home with Two Balconies",
                "year": 2019,
                "month": 3,
                "nightly_price": 264,
                "revenue": 7404,
                "occupancy": 28,
                "unbooked_nights": 3,
                "occupancy_rate": 90
            },
            {
                "airbnb_id": "22518616",
                "name": "Luxury Three Story Home with Two Balconies",
                "year": 2019,
                "month": 4,
                "nightly_price": 192,
                "revenue": 2107,
                "occupancy": 11,
                "unbooked_nights": 19,
                "occupancy_rate": 37
            },
            {
                "airbnb_id": "22518616",
                "name": "Luxury Three Story Home with Two Balconies",
                "year": 2019,
                "month": 5,
                "nightly_price": 175,
                "revenue": 3153,
                "occupancy": 18,
                "unbooked_nights": 13,
                "occupancy_rate": 58
            },
            {
                "airbnb_id": "22518616",
                "name": "Luxury Three Story Home with Two Balconies",
                "year": 2019,
                "month": 6,
                "nightly_price": 107,
                "revenue": 2345,
                "occupancy": 22,
                "unbooked_nights": 8,
                "occupancy_rate": 73
            },
            {
                "airbnb_id": "22518616",
                "name": "Luxury Three Story Home with Two Balconies",
                "year": 2019,
                "month": 7,
                "nightly_price": 95,
                "revenue": 2090,
                "occupancy": 22,
                "unbooked_nights": 9,
                "occupancy_rate": 71
            },
            {
                "airbnb_id": "22518616",
                "name": "Luxury Three Story Home with Two Balconies",
                "year": 2019,
                "month": 8,
                "nightly_price": 125,
                "revenue": 2375,
                "occupancy": 19,
                "unbooked_nights": 12,
                "occupancy_rate": 61
            },
            {
                "airbnb_id": "22518616",
                "name": "Luxury Three Story Home with Two Balconies",
                "year": 2019,
                "month": 9,
                "nightly_price": 129,
                "revenue": 2451,
                "occupancy": 19,
                "unbooked_nights": 11,
                "occupancy_rate": 63
            },
            {
                "airbnb_id": "22518616",
                "name": "Luxury Three Story Home with Two Balconies",
                "year": 2019,
                "month": 10,
                "nightly_price": 144,
                "revenue": 2599,
                "occupancy": 18,
                "unbooked_nights": 13,
                "occupancy_rate": 58
            },
            {
                "airbnb_id": "22518616",
                "name": "Luxury Three Story Home with Two Balconies",
                "year": 2019,
                "month": 11,
                "nightly_price": 123,
                "revenue": 2211,
                "occupancy": 18,
                "unbooked_nights": 12,
                "occupancy_rate": 60
            }
        ]
    }
}

This endpoint retrieves the Airbnb/VRBO property's 12 historical records - nightly price, revenue, and occupancy, unbooked nights, and occupancy rate - for a specific property.

HTTP Request

GET https://api.mashvisor.com/v1.1/client/airbnb-property/{id}/historical

Request Headers

Parameter Value
x-api-key User Authentication Header

Path Parameters

Parameter Value Default Description
id Long The property record Id from the Mashvisor database.

Query Parameters

Parameter Value Default Description
state* String The state of the property should be provided to the api or api will throw error 404.
country String US Country ISO-3166 Alpha-2code, e.g. GB, ES.

Get Neighborhood Historical Performance

Sample Request

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.mashvisor.com/v1.1/client/neighborhood/268201/historical/airbnb?average_by=revenue&state=CA")
  .get()
  .addHeader("x-api-key", "YOUR_API_KEY")
  .build();

Response response = client.newCall(request).execute();
require 'uri'
require 'net/http'

url = URI("https://api.mashvisor.com/v1.1/client/neighborhood/268201/historical/airbnb?average_by=revenue&state=CA")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Get.new(url)
request["x-api-key"] = 'YOUR_API_KEY'

response = http.request(request)
puts response.read_body
<?php

$request = new HttpRequest();
$request->setUrl('https://api.mashvisor.com/v1.1/client/neighborhood/268201/historical/airbnb');
$request->setMethod(HTTP_METH_GET);

$request->setQueryData(array(
  'state' => 'CA',
  'city' => 'San%20Francisco'
));

try {
  $response = $request->send();

  echo json_decode($response->getBody());
} catch (HttpException $ex) {
  echo $ex;
}
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://api.mashvisor.com/v1.1/client/neighborhood/268201/historical/airbnb?average_by=revenue&state=CA"

  req, _ := http.NewRequest("GET", url, nil)

  req.Header.Add("x-api-key", "YOUR_API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}

The above command returns JSON structured for occupancy category like this:

{
    "status": "success",
    "content": {
        "results": [
            {
                "year": 2018,
                "month": 10,
                "value": 71
            },
            {
                "year": 2018,
                "month": 11,
                "value": 42
            },
            {
                "year": 2018,
                "month": 12,
                "value": 17
            },
            {
                "year": 2019,
                "month": 1,
                "value": 65
            },
            {
                "year": 2019,
                "month": 2,
                "value": 76
            },
            {
                "year": 2019,
                "month": 3,
                "value": 83
            },
            {
                "year": 2019,
                "month": 4,
                "value": 73
            },
            {
                "year": 2019,
                "month": 5,
                "value": 84
            },
            {
                "year": 2019,
                "month": 6,
                "value": 79
            },
            {
                "year": 2019,
                "month": 7,
                "value": 79
            },
            {
                "year": 2019,
                "month": 8,
                "value": 66
            },
            {
                "year": 2019,
                "month": 9,
                "value": 55
            }
        ]
    },
    "message": "Historical Data fetched successfully"
}

The above command returns JSON structured for revenue category like this:

{
    "status": "success",
    "content": {
        "results": [
            {
                "year": 2018,
                "month": 10,
                "value": 6056
            },
            {
                "year": 2018,
                "month": 11,
                "value": 3767
            },
            {
                "year": 2018,
                "month": 12,
                "value": 1797
            },
            {
                "year": 2019,
                "month": 1,
                "value": 4739
            },
            {
                "year": 2019,
                "month": 2,
                "value": 5738
            },
            {
                "year": 2019,
                "month": 3,
                "value": 5970
            },
            {
                "year": 2019,
                "month": 4,
                "value": 4398
            },
            {
                "year": 2019,
                "month": 5,
                "value": 5751
            },
            {
                "year": 2019,
                "month": 6,
                "value": 5398
            },
            {
                "year": 2019,
                "month": 7,
                "value": 6004
            },
            {
                "year": 2019,
                "month": 8,
                "value": 4999
            },
            {
                "year": 2019,
                "month": 9,
                "value": 3998
            }
        ]
    },
    "message": "Historical Data fetched successfully"
}

This endpoint retrieves a neighborhood/area’s short-term historical performance for listings in an array.

HTTP Request

GET https://api.mashvisor.com/v1.1/client/neighborhood/{id}/historical/airbnb

Request Headers

Parameter Value
x-api-key User Authentication Header

Path Parameters

Parameter Value Default Description
id Long Neighborhood id to fetch data for

Query Parameters

Parameter Value Default Description
state* String The state should be provided to the api or api will throw error 404.
country String US Country ISO-3166 Alpha-2code, e.g. GB, ES.
percentile_rate Double 1 Percentile rate
average_by String occupancy Neighborhood id you're targeting.
Possbile Inputs:
* occupancy
* price
* revenue
category String AirBnB category type.
Possbile Inputs:
* flat
* house
* apartment
* loft
beds Integer 0 to 4 bedrooms value

Get Listings

Sample Request

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.mashvisor.com/v1.1/client/airbnb-property/active-listings?state=CA&city=San%20Francisco")
  .get()
  .addHeader("x-api-key", "YOUR_API_KEY")
  .build();

Response response = client.newCall(request).execute();
require 'uri'
require 'net/http'

url = URI("https://api.mashvisor.com/v1.1/client/airbnb-property/active-listings?state=CA&city=San%20Francisco")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Get.new(url)
request["x-api-key"] = 'YOUR_API_KEY'

response = http.request(request)
puts response.read_body
<?php

$request = new HttpRequest();
$request->setUrl('https://api.mashvisor.com/v1.1/client/airbnb-property/active-listings');
$request->setMethod(HTTP_METH_GET);

$request->setQueryData(array(
  'state' => 'CA',
  'city' => 'San%20Francisco'
));

try {
  $response = $request->send();

  echo json_decode($response->getBody());
} catch (HttpException $ex) {
  echo $ex;
}
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://api.mashvisor.com/v1.1/client/airbnb-property/active-listings?state=CA&city=San%20Francisco"

  req, _ := http.NewRequest("GET", url, nil)

  req.Header.Add("x-api-key", "YOUR_API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}

The above command returns JSON structured like this:

{
    "status": "success",
    "content": {
        "num_of_properties": 7115,
        "items": 5,
        "total_pages": 1423,
        "page": 2,
        "properties": [
            {
                "id": 18894069,
                "propertyId": "4733174",
                "source": "Airbnb",
                "nightPrice": 307,
                "weeklyPrice": 0,
                "monthlyPrice": 0,
                "numOfBaths": 1.5,
                "numOfRooms": 3,
                "name": "Huge Apt in Lincoln Park Mansion!",
                "address": "Chicago, IL, United States",
                "airbnbNeighborhood": "Lincoln Park",
                "airbnbCity": "Chicago",
                "capacityOfPeople": 9,
                "zip": "60614",
                "propertyType": "Apartment",
                "roomType": "Entire home/apt",
                "roomTypeCategory": "entire_home",
                "amenities": null,
                "reviewsCount": 51,
                "startRating": 5,
                "reviews": null,
                "createdAt": "2017-07-08T18:29:04.000Z",
                "updatedAt": "2017-07-08T18:29:04.000Z",
                "numOfBeds": 5,
                "lat": "41.92822647094727",
                "lon": "-87.64620208740234",
                "image": "https://bc9f40b414b80f1ce90f-212b46b1c531b50ebb00763170d70160.ssl.cf5.rackcdn.com/Properties/property-default.png",
                "nightRate": 307,
                "property_id": "4733174",
                "airbnbZIP": "60614"
            },
            {
                "id": 18894071,
                "propertyId": "14222880",
                "source": "Airbnb",
                "nightPrice": 164,
                "weeklyPrice": 0,
                "monthlyPrice": 0,
                "numOfBaths": 1,
                "numOfRooms": 2,
                "name": "Lincoln park spacious 2.5 bedroom",
                "address": "Chicago, IL 60614, United States",
                "airbnbNeighborhood": "Lincoln Park",
                "airbnbCity": "Chicago",
                "capacityOfPeople": 6,
                "zip": "60614",
                "propertyType": "Condominium",
                "roomType": "Entire home/apt",
                "roomTypeCategory": "entire_home",
                "amenities": null,
                "reviewsCount": 15,
                "startRating": 5,
                "reviews": null,
                "createdAt": "2017-07-08T18:29:08.000Z",
                "updatedAt": "2017-07-08T18:29:08.000Z",
                "numOfBeds": 3,
                "lat": "41.91649627685547",
                "lon": "-87.65447998046875",
                "image": "https://bc9f40b414b80f1ce90f-212b46b1c531b50ebb00763170d70160.ssl.cf5.rackcdn.com/Properties/property-default.png",
                "nightRate": 164,
                "property_id": "14222880",
                "airbnbZIP": "60614"
            },
            {
                "id": 18894074,
                "propertyId": "9577653",
                "source": "Airbnb",
                "nightPrice": 128,
                "weeklyPrice": 0,
                "monthlyPrice": 0,
                "numOfBaths": 1,
                "numOfRooms": 1,
                "name": "Modern Lincoln Park 1bd 1ba Parking",
                "address": "Chicago, IL 60614, United States",
                "airbnbNeighborhood": "Lincoln Park",
                "airbnbCity": "Chicago",
                "capacityOfPeople": 3,
                "zip": "60614",
                "propertyType": "Apartment",
                "roomType": "Entire home/apt",
                "roomTypeCategory": "entire_home",
                "amenities": null,
                "reviewsCount": 57,
                "startRating": 5,
                "reviews": null,
                "createdAt": "2017-07-08T18:29:12.000Z",
                "updatedAt": "2017-07-08T18:29:12.000Z",
                "numOfBeds": 1,
                "lat": "41.92398071289063",
                "lon": "-87.66230773925781",
                "image": "https://bc9f40b414b80f1ce90f-212b46b1c531b50ebb00763170d70160.ssl.cf5.rackcdn.com/Properties/property-default.png",
                "nightRate": 128,
                "property_id": "9577653",
                "airbnbZIP": "60614"
            }
        ],
        "num_page_properties": 3
    }
}

Lists all active short-term rentals for a specific location: city, zip code, or neighborhood.

HTTP Request

GET https://api.mashvisor.com/v1.1/client/airbnb-property/active-listings

Request Headers

Parameter Value
x-api-key User Authentication Header

Query Parameters

Parameter Value Default Description
state* String The state should be provided to the api or api will throw error 404.
country String US Country ISO-3166 Alpha-2code, e.g. GB, ES.
city String A specific city you're looking for.
neighborhood Long Neighborhood id you're targeting
zip_code Integer Any postal zip code.
page Integer 1 Page number
items Integer 4 Items number per page.

Get Market Summary

Sample Request

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.mashvisor.com/v1.1/client/airbnb-property/market-summary?state=CA&city=San%20Francisco")
  .get()
  .addHeader("x-api-key", "YOUR_API_KEY")
  .build();

Response response = client.newCall(request).execute();
require 'uri'
require 'net/http'

url = URI("https://api.mashvisor.com/v1.1/client/airbnb-property/market-summary?state=CA&city=San%20Francisco")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Get.new(url)
request["x-api-key"] = 'YOUR_API_KEY'

response = http.request(request)
puts response.read_body
<?php

$request = new HttpRequest();
$request->setUrl('https://api.mashvisor.com/v1.1/client/airbnb-property/market-summary');
$request->setMethod(HTTP_METH_GET);

$request->setQueryData(array(
  'state' => 'CA',
  'city' => 'San%20Francisco'
));

try {
  $response = $request->send();

  echo json_decode($response->getBody());
} catch (HttpException $ex) {
  echo $ex;
}
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://api.mashvisor.com/v1.1/client/airbnb-property/market-summary?state=CA&city=San%20Francisco"

  req, _ := http.NewRequest("GET", url, nil)

  req.Header.Add("x-api-key", "YOUR_API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}

The above command returns JSON structured like this:

{
    "status": "success",
    "content": {
        "listings_count": 60,
        "property_types": {
            "total_types": 60,
            "histogram": [
                "House",
                "House",
                "Apartment",
                "Townhouse",
                "House",
                "Apartment",
                "House",
                "Guesthouse",
                "Guesthouse",
                "House",
                "House",
                "Guest suite",
                "Apartment",
                "Bungalow",
                "Bungalow",
                "Apartment",
                "Apartment",
                "House",
                "Apartment",
                "Apartment",
                "Guesthouse",
                "House",
                "House",
                "Apartment",
                "Apartment",
                "House",
                "House",
                "Apartment",
                "Guesthouse",
                "Bungalow",
                "Loft",
                "Apartment",
                "Guesthouse",
                "Guesthouse",
                "Apartment",
                "House",
                "House",
                "House",
                "Apartment",
                "Apartment",
                "House",
                "Apartment",
                "House",
                "Apartment",
                "Guest suite",
                "Guesthouse",
                "Dome house",
                "House",
                "House",
                "House",
                "Loft",
                "House",
                "Apartment",
                "Apartment",
                "Loft",
                "Apartment",
                "Apartment",
                "Guesthouse",
                "Bungalow",
                "House"
            ]
        },
        "occupancy_histogram": {
            "average_occupancy": 63.5,
            "histogram": [
                23,
                22,
                100,
                84,
                75,
                84,
                94,
                77,
                76,
                65,
                60,
                72,
                10,
                73,
                45,
                53,
                74,
                59,
                56,
                14,
                88,
                76,
                42,
                90,
                58,
                66,
                96,
                74,
                62,
                76,
                90,
                53,
                75,
                73,
                69,
                77,
                49,
                32,
                53,
                62,
                71,
                54,
                27,
                0,
                65,
                58,
                93,
                50,
                17,
                30,
                50,
                86,
                44,
                85,
                83,
                73,
                88,
                95,
                73,
                91
            ]
        },
        "night_price_histogram": {
            "average_price": 150.26666666666668,
            "histogram": [
                95,
                109,
                105,
                91,
                293,
                95,
                98,
                122,
                106,
                132,
                197,
                85,
                180,
                93,
                135,
                230,
                67,
                301,
                243,
                95,
                77,
                147,
                278,
                94,
                245,
                179,
                166,
                128,
                109,
                144,
                92,
                65,
                96,
                71,
                108,
                72,
                198,
                226,
                235,
                231,
                167,
                238,
                545,
                95,
                76,
                89,
                98,
                117,
                143,
                303,
                116,
                114,
                205,
                109,
                87,
                130,
                122,
                94,
                135,
                200
            ]
        },
        "rental_income_histogram": {
            "average_rental_income": 2699.9,
            "histogram": [
                665,
                713,
                3179,
                2308,
                6686,
                2435,
                2806,
                2839,
                2457,
                2604,
                3605,
                1863,
                540,
                2071,
                1841,
                3701,
                1511,
                5363,
                4109,
                397,
                2066,
                3381,
                3568,
                2585,
                4299,
                3606,
                4851,
                2863,
                2061,
                3325,
                2515,
                1047,
                2179,
                1581,
                2246,
                1670,
                2911,
                2228,
                3838,
                4389,
                3637,
                3914,
                4428,
                0,
                1501,
                1587,
                2777,
                1775,
                763,
                2803,
                1763,
                2993,
                2768,
                2824,
                2199,
                2893,
                3250,
                2726,
                2982,
                5509
            ]
        },
        "listings_ids": [
            "10091952",
            "10130714",
            "10337903",
            "11606890",
            "13292266",
            "13586511",
            "13600955",
            "13716877",
            "13910936",
            "14712502",
            "16262529",
            "17000038",
            "17094877",
            "17164542",
            "17408114",
            "17642407",
            "17788570",
            "17996526",
            "18240831",
            "18624311",
            "18716083",
            "18889885",
            "21755300",
            "21937079",
            "22019979",
            "22504999",
            "24517691",
            "24694748",
            "25738917",
            "25970489",
            "26715469",
            "27049904",
            "27901098",
            "28606355",
            "29100817",
            "29921190",
            "30133810",
            "31496383",
            "32643136",
            "32892977",
            "33092851",
            "33338746",
            "33499868",
            "33606395",
            "33663979",
            "34515878",
            "35287663",
            "35343401",
            "35810250",
            "36768569",
            "37092132",
            "37365584",
            "37565110",
            "4823654",
            "590936",
            "594777",
            "636629",
            "7019957",
            "8174638",
            "839546"
        ]
    }
}

This endpoint retrieves a summary and overview for a specific location: city, zip code, or neighborhood.

HTTP Request

GET https://api.mashvisor.com/v1.1/client/airbnb-property/market-summary

Request Headers

Parameter Value
x-api-key User Authentication Header

Query Parameters

Parameter Value Default Description
state* String The state should be provided to the api or api will throw error 404.
country String US Country ISO-3166 Alpha-2code, e.g. GB, ES.
city String A specific city you're looking for.
neighborhood Long Neighborhood id you're targeting
zip_code Integer Any postal zip code.

Get Listing's Occupancy Rates

For each Airbnb/VRBO listing, we calculate its occupancy rate (month per month and annual rates), plus 12-month historical occupancy data.

Using our proprietary algorithms and data validation methods, we have solved the issue of ‘blocked by host’ vs ‘booked’ calendar and offer highly reliable and accurate occupancy data. Our algorithms account for seasonality, local market fluctuations and management of data outliers.

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.mashvisor.com/v1.1/client/airbnb-property/occupancy-rates?state=CA&city=San%20Francisco")
  .get()
  .addHeader("x-api-key", "YOUR_API_KEY")
  .build();

Response response = client.newCall(request).execute();
require 'uri'
require 'net/http'

url = URI("https://api.mashvisor.com/v1.1/client/airbnb-property/occupancy-rates?state=CA&city=San%20Francisco")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Get.new(url)
request["x-api-key"] = 'YOUR_API_KEY'

response = http.request(request)
puts response.read_body
<?php

$request = new HttpRequest();
$request->setUrl('https://api.mashvisor.com/v1.1/client/airbnb-property/occupancy-rates');
$request->setMethod(HTTP_METH_GET);

$request->setQueryData(array(
  'state' => 'CA',
  'city' => 'San%20Francisco'
));

try {
  $response = $request->send();

  echo json_decode($response->getBody());
} catch (HttpException $ex) {
  echo $ex;
}
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://api.mashvisor.com/v1.1/client/airbnb-property/occupancy-rates?state=CA&city=San%20Francisco"

  req, _ := http.NewRequest("GET", url, nil)

  req.Header.Add("x-api-key", "YOUR_API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}

The above command returns JSON structured like this:

{
    "status": "success",
    "content": {
        "occupancy_rates": {
            "studio": 84,
            "one_bedroom": 73.5,
            "two_bedrooms": 67.5,
            "three_bedrooms": 60,
            "four_bedrooms": 54
        },
        "sample_count": 60,
        "detailed": {
            "studio_occupancies_histogram": [
                53,
                73,
                75,
                84,
                88,
                90,
                95
            ],
            "one_bedroom_histogram": [
                14,
                22,
                50,
                58,
                62,
                65,
                72,
                73,
                73,
                74,
                76,
                77,
                83,
                84,
                90,
                93,
                94,
                100
            ],
            "two_bedrooms_histogram": [
                10,
                17,
                23,
                27,
                45,
                49,
                65,
                66,
                69,
                73,
                76,
                76,
                77,
                85,
                86,
                96
            ],
            "three_bedrooms_histogram": [
                32,
                50,
                59,
                60,
                71,
                74,
                91
            ],
            "four_bedrooms_histogram": [
                42,
                44,
                53,
                53,
                54,
                56,
                58,
                62,
                88
            ]
        }
    }
}

HTTP Request

GET https://api.mashvisor.com/v1.1/client/airbnb-property/occupancy-rates

Request Headers

Parameter Value
x-api-key User Authentication Header

Query Parameters

Parameter Value Default Description
state* String The state should be provided to the api or api will throw error 404.
country String US Country ISO-3166 Alpha-2code, e.g. GB, ES.
city String A specific city you're looking for.
neighborhood Long Neighborhood id you're targeting
zip_code Integer Any postal zip code.

Get Property Types

Sample Request

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.mashvisor.com/v1.1/client/airbnb-property/property-types?state=CA&city=San%20Francisco")
  .get()
  .addHeader("x-api-key", "YOUR_API_KEY")
  .build();

Response response = client.newCall(request).execute();
require 'uri'
require 'net/http'

url = URI("https://api.mashvisor.com/v1.1/client/airbnb-property/property-types?state=CA&city=San%20Francisco")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Get.new(url)
request["x-api-key"] = 'YOUR_API_KEY'

response = http.request(request)
puts response.read_body
<?php

$request = new HttpRequest();
$request->setUrl('https://api.mashvisor.com/v1.1/client/airbnb-property/property-types');
$request->setMethod(HTTP_METH_GET);

$request->setQueryData(array(
  'state' => 'CA',
  'city' => 'San%20Francisco'
));

try {
  $response = $request->send();

  echo json_decode($response->getBody());
} catch (HttpException $ex) {
  echo $ex;
}
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://api.mashvisor.com/v1.1/client/airbnb-property/property-types?state=CA&city=San%20Francisco"

  req, _ := http.NewRequest("GET", url, nil)

  req.Header.Add("x-api-key", "YOUR_API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}

The above command returns JSON structured like this:

{
  "status": "success",
  "content": {
    "Apartment": 3234,
    "Barn": 1,
    "Bungalow": 189,
    "Cabin": 12,
    "Chalet": 2,
    "Condominium": 304,
    "Cottage": 32,
    "Dome house": 2,
    "Guest suite": 552,
    "Guesthouse": 915,
    "House": 1379,
    "Loft": 271,
    "Other": 8,
    "Serviced apartment": 44,
    "Tiny house": 15,
    "Townhouse": 104,
    "Villa": 51
  }
}

Checks all market property types for a zip code or a neighborhood and returns counts.

Available Property Types:

HTTP Request

GET https://api.mashvisor.com/v1.1/client/airbnb-property/property-types

Request Headers

Parameter Value
x-api-key User Authentication Header

Query Parameters

Parameter Value Default Description
state* String The state should be provided to the api or api will throw error 404.
country String US Country ISO-3166 Alpha-2code, e.g. GB, ES.
city String A specific city you're looking for.
neighborhood Long Neighborhood id you're targeting
zip_code Integer Any postal zip code.

Get Super Hosts

Sample Request

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.mashvisor.com/v1.1/client/airbnb-property/super-hosts?state=CA&city=San%20Francisco")
  .get()
  .addHeader("x-api-key", "YOUR_API_KEY")
  .build();

Response response = client.newCall(request).execute();
require 'uri'
require 'net/http'

url = URI("https://api.mashvisor.com/v1.1/client/airbnb-property/super-hosts?state=CA&city=San%20Francisco")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Get.new(url)
request["x-api-key"] = 'YOUR_API_KEY'

response = http.request(request)
puts response.read_body
<?php

$request = new HttpRequest();
$request->setUrl('https://api.mashvisor.com/v1.1/client/airbnb-property/super-hosts');
$request->setMethod(HTTP_METH_GET);

$request->setQueryData(array(
  'state' => 'CA',
  'city' => 'San%20Francisco'
));

try {
  $response = $request->send();

  echo json_decode($response->getBody());
} catch (HttpException $ex) {
  echo $ex;
}
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://api.mashvisor.com/v1.1/client/airbnb-property/super-hosts?state=CA&city=San%20Francisco"

  req, _ := http.NewRequest("GET", url, nil)

  req.Header.Add("x-api-key", "YOUR_API_KEY")

    res, _ := http.DefaultClient.Do(req)

    defer res.Body.Close()
    body, _ := ioutil.ReadAll(res.Body)

    fmt.Println(res)
    fmt.Println(string(body))

}

The above command returns JSON structured like this:

{
    "status": "success",
    "content": {
        "items_per_page": 10,
        "page": 1,
        "total_pages": 2,
        "total_items": 17,
        "super_hosts": [
            {
                "first_name": "Marina",
                "has_profile_pic": true,
                "id": 9601940,
                "picture_url": "https://a0.muscache.com/im/pictures/4f72a94e-f421-4183-a90c-9031dbac0ce1.jpg?aki_policy=profile_x_medium",
                "smart_name": "Marina",
                "thumbnail_url": "https://a0.muscache.com/im/pictures/4f72a94e-f421-4183-a90c-9031dbac0ce1.jpg?aki_policy=profile_small",
                "acceptance_rate": "N/A",
                "created_at": "2013-10-23T21:52:46Z",
                "identity_verified": false,
                "is_superhost": true,
                "picture_large_url": "https://a0.muscache.com/im/pictures/4f72a94e-f421-4183-a90c-9031dbac0ce1.jpg?aki_policy=profile_large",
                "recommendation_count": 0,
                "response_rate": "100%",
                "response_time": "within an hour",
                "reviewee_count": 13,
                "thumbnail_medium_url": "https://a0.muscache.com/im/pictures/4f72a94e-f421-4183-a90c-9031dbac0ce1.jpg?aki_policy=profile_medium",
                "neighborhood": null,
                "verification_labels": [
                    "Email address",
                    "Phone number",
                    "Reviewed"
                ],
                "verifications": [
                    "email",
                    "phone",
                    "reviews"
                ],
                "about": "",
                "friends_count": 0,
                "has_available_payout_info": true,
                "identity_mt_verified": false,
                "identity_v2_verified": false,
                "is_generated_user": false,
                "is_trip_host": false,
                "is_marketplace_cohost": false,
                "languages": [
                    "Русский"
                ],
                "listings_count": 1,
                "location": "Los Angeles, CA",
                "recent_recommendation": null,
                "recent_review": {
                    "review": {
                        "comments": "The host canceled this reservation 47 days before arrival. This is an automated posting.",
                        "created_at": "2018-01-21T02:40:09Z",
                        "id": 228670297,
                        "listing_id": 17651828,
                        "reviewee_id": 9601940,
                        "reviewer": {
                            "user": {
                                "first_name": "Karen",
                                "has_profile_pic": true,
                                "id": 165271662,
                                "picture_url": "https://a0.muscache.com/im/pictures/user/0ed80885-6dba-411c-b686-34673a92a34b.jpg?aki_policy=profile_x_medium",
                                "smart_name": "Karen",
                                "thumbnail_url": "https://a0.muscache.com/im/pictures/user/0ed80885-6dba-411c-b686-34673a92a34b.jpg?aki_policy=profile_small"
                            }
                        },
                        "reviewer_id": 165271662,
                        "role": "guest",
                        "user_flag": null,
                        "reviewee": {
                            "user": {
                                "first_name": "Marina",
                                "has_profile_pic": true,
                                "id": 9601940,
                                "picture_url": "https://a0.muscache.com/im/pictures/4f72a94e-f421-4183-a90c-9031dbac0ce1.jpg?aki_policy=profile_x_medium",
                                "smart_name": "Marina",
                                "thumbnail_url": "https://a0.muscache.com/im/pictures/4f72a94e-f421-4183-a90c-9031dbac0ce1.jpg?aki_policy=profile_small"
                            }
                        },
                        "listing": null
                    }
                },
                "school": "California State University, Northridge",
                "show_travel_for_work": false,
                "signup_method": 1,
                "total_listings_count": 2,
                "user_flag": null,
                "work": "Boston Scientific"
            },
            ...
        ]
    }
}

Obtains a list of an area’s airbnb super hosts for a zip code or a city.

HTTP Request

GET https://api.mashvisor.com/v1.1/client/airbnb-property/super-hosts

Request Headers

Parameter Value
x-api-key User Authentication Header

Query Parameters

Parameter Value Default Description
state* String The state should be provided to the api or api will throw error 404.
country String US Country ISO-3166 Alpha-2code, e.g. GB, ES.
city String A specific city you're looking for.
zip_code Integer Any postal zip code.
page Integer 1 page number.

Get Airbnb Top Reviewed Homes

Sample Request

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.mashvisor.com/v1.1/client/airbnb-property/top-reviewed?state=CA&city=San%20Francisco")
  .get()
  .addHeader("x-api-key", "YOUR_API_KEY")
  .build();

Response response = client.newCall(request).execute();
require 'uri'
require 'net/http'

url = URI("https://api.mashvisor.com/v1.1/client/airbnb-property/top-reviewed?state=CA&city=San%20Francisco")

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Get.new(url)
request