Onboard recently launched its BETA version of a Property Search Engine API and Developer Platform. The Property Search Engine API provides easy access to over 150 million property records from local public records data. In addition to property details, the API also provides access to recent home sales, individual property sales history, recent home valuations as well as tax assessment and liabilities information.

As part of our ongoing effort to help developers get ramped up on our API, we wanted to provide a tutorial on how to use the Property Search Engine API and cURL. This post will cover the basics like displaying properties within a particular city, looking at a property’s valuation and displaying recent sale prices within a given neighborhood.

As always, if you have any questions, feel free to email us at product@onboardinformatics.com.

cURL Basics

cURL allows transfer of data across a variety of protocols and is widely used as a way to send data across websites, including things like API interactions. A GET request is the default request method used, and is pretty straightforward. In fact, all of the examples in this guide will be GET requests. Learn more about cURL here.

How to get your API Key

When you sign up for an Onboard account on the platform, you’re are automatically given trial access to our Property Search Engine API.

Log in to your Onboard account from the developer page.

Onboard Developer Platform

Once you’re logged in, click “Applications” from the Account menu.

Developer Dashboard
You’ll find your API Key listed under Registered Apps.

API Key

Accessing Content

Now that you have your API Key, let’s start making some requests.The main endpoint for the property search engine API is: https://search.onboard-apis.com/propertyapi/v1.0.0/RESOURCE/PACKAGE?{parameters}.

All requests require the API Key be passed in the request header.

Let’s look at all of the properties and their estimated values within a particular city. Using cURL, we would execute this command:

curl -X GET --header "Accept: application/json" --header "apikey: YOUR_API_KEY" "https://search.onboard-apis.com/propertyapi/v1.0.0/property/snapshot?cityname=Los%20Angeles"

Notes:

– /property is the resource, /snapshot is the package.
A space character in the query string may be encoded as either “%20” or “+”. You can use either, most people opt for “+” as it’s more human readable and fewer bytes.

Your JSON response should look like  this:

{
  "status": {
    "version": "1.0.0",
    "code": 0,
    "msg": "SuccessWithResult",
    "total": 10000,
    "page": 1,
    "pagesize": 10
  },
  "property": [
    {
      "identifier": {
        "obPropId": 1112184206037,
        "fips": "06037",
        "apn": "6148001075"
      },
      "lot": {
        "lotSize1": 0.1386
      },
      "address": {
        "country": "US",
        "countrySubd": "CA",
        "line1": "11650 ANTWERP AVE",
        "line2": "LOS ANGELES, CA 90059",
        "locality": "Los Angeles",
        "matchCode": "ExaStr",
        "oneLine": "11650 ANTWERP AVE, LOS ANGELES, CA 90059",
        "postal1": "90059",
        "postal2": "1821",
        "postal3": "C042"
      },
      "location": {
        "accuracy": "Street",
        "elevation": 0,
        "latitude": "33.927618",
        "longitude": "-118.248153",
        "distance": 0,
        "geoid": "NH00000852,NH00065164,PL0685614,SD66753,SS149938,SS150076"
      },
      "summary": {
        "propclass": "Condominium (residential)",
        "proptype": "CONDOMINIUM",
        "yearbuilt": 2001,
        "propLandUse": "CONDOMINIUM"
      },
      "building": {
        "size": {
          "universalsize": 1562
        },
        "rooms": {
          "bathstotal": 2,
          "beds": 3
        }
      },
      "vintage": {
        "lastModified": "2015-4-3",
        "pubDate": "2015-5-9"
      }
    },

Next, we may want to see the most recent property valuation for a specific property. There is an additional parameter in the request, the mailing address for the property. “line1” and “line2” are pulled from “address” in the previous response example. In cURL it will look like this:

curl -X GET --header "Accept: application/json" --header "apikey: YOUR_API_KEY" "https://search.onboard-apis.com/propertyapi/v1.0.0/avm/detail?address1=11650+ANTWERP+AVE&address2=LOS+ANGELES+CA"

Upon success, you’ll receive a JSON response that should look like this:

{
  "status": {
    "version": "1.0.0",
    "code": 0,
    "msg": "SuccessWithResult",
    "total": 1,
    "page": 1,
    "pagesize": 10
  },
  "property": [
    {
      "identifier": {
        "obPropId": 1112184206037,
        "fips": "06037",
        "apn": "6148001075"
      },
      "lot": {
        "depth": 0,
        "frontage": 0,
        "lotnum": "1",
        "lotsize1": 0.1386,
        "lotsize2": 6039
      },
      "area": {
        "countrysecsubd": "Los Angeles County",
        "countyuse1": "010C",
        "subdname": "PINES",
        "taxcodearea": "9753"
      },
      "address": {
        "country": "US",
        "countrySubd": "CA",
        "line1": "11650 ANTWERP AVE",
        "line2": "LOS ANGELES, CA 90059",
        "locality": "Los Angeles",
        "matchCode": "ExaStr",
        "oneLine": "11650 ANTWERP AVE, LOS ANGELES, CA 90059",
        "postal1": "90059",
        "postal2": "1821",
        "postal3": "C042"
      },
      "location": {
        "accuracy": "Street",
        "elevation": 0,
        "latitude": "33.927618",
        "longitude": "-118.248153",
        "distance": 0,
        "geoid": "NH00000852,NH00065164,PL0685614,SD66753,SS149938,SS150076"
      },
      "summary": {
        "absenteeInd": "OWNER OCCUPIED",
        "propclass": "Condominium (residential)",
        "proptype": "CONDOMINIUM",
        "yearbuilt": 2001,
        "propLandUse": "CONDOMINIUM"
      },
      "utilities": {
        "heatingtype": "CENTRAL"
      },
      "building": {
        "size": {
          "bldgsize": 0,
          "grosssize": 0,
          "grosssizeadjusted": 0,
          "groundfloorsize": 0,
          "livingsize": 1562,
          "sizeInd": "LIVING SQFT ",
          "universalsize": 1562
        },
        "rooms": {
          "bathfixtures": 0,
          "baths1qtr": 0,
          "baths3qtr": 0,
          "bathscalc": 2,
          "bathsfull": 2,
          "bathshalf": 0,
          "bathstotal": 2,
          "beds": 3,
          "roomsTotal": 0
        },
        "interior": {
          "bsmtsize": 0,
          "fplccount": 0
        },
        "construction": {},
        "parking": {
          "prkgSize": 0,
          "prkgSpaces": "0"
        },
        "summary": {
          "bldgsNum": 1,
          "levels": 0,
          "unitsCount": "1",
          "yearbuilteffective": 2001
        }
      },
      "vintage": {
        "lastModified": "2015-7-3",
        "pubDate": "2015-8-19"
      },
      "avm": {
        "eventDate": "2015-7-3",
        "amount": {
          "scr": 64,
          "value": 177193,
          "high": 225035,
          "low": 129351,
          "valueRange": 95684
        },
        "calculations": {
          "perSizeUnit": 11343.98,
          "ratioTaxAmt": 58.83,
          "ratioTaxValue": 0.78,
          "monthlyChgPct": 12.35,
          "monthlyChgValue": 19471,
          "rangePctOfValue": 54
        }
      }
    }
  ]
}

Since we now have a “geoid” available, let’s try looking at all of the properties and their last sale price within the neighborhood. This is accomplished through a simple GET request to the /sale resource:

curl -X GET --header "Accept: application/json" --header "apikey: YOUR_API_KEY" --header "accept: application/json" "https://search.onboard-apis.com/propertyapi/v1.0.0/sale/snapshot?geoid=NH00000852"

Note: You can find more information about the resources and packages available through the API here.

The response to this request will include additional details about the sale like; sale amount, type of sale, sale record date and document numbers.

{
  "status": {
    "version": "1.0.0",
    "code": 0,
    "msg": "SuccessWithResult",
    "total": 4867,
    "page": 1,
    "pagesize": 10
  },
"property": [
    {
"identifier": {
        "obPropId": 1332260706037,
        "fips": "06037",
        "apn": "6070002015",
        "apnOrig": "6070  002   015"
      },
      "lot": {
        "lotSize1": 0.2648
      },
      "sale": {
        "salesearchdate": "2015-6-18",
        "saleTransDate": "2015-6-18",
        "amount": {
          "saleamt": 525000,
          "salerecdate": "2015-6-26",
          "saledisclosuretype": 0,
          "saledoctype": "Arms Length Transaction",
          "saledocnum": "769449",
          "saletranstype": "Resale"
        },
        "calculation": {
          "priceperbed": 105000,
          "pricepersizeunit": 614
        }
      }
    },

Learn More

That’s just the beginning of what you can do with the Property Search Engine API. Check out the full documentation to find out about all of the other features of the API.

About The Author

Product Manager

Creative problem solver, data-enthusiast with a curiosity that never quits. When I'm not working you might find me drinking or talking about coffee, trying to cook something interesting or playing with my pup, Oliver.

Leave a Reply

Your email address will not be published.