About The Lot

Developer reference

About The Lot REST API

One endpoint. Any U.S. address. 100+ property risk checks returned as structured JSON — ready to embed in your app, CRM, or workflow.

Overview

The About The Lot API returns a full property risk report for any U.S. address. Each response includes a structured risks array with 100+ individual checks covering natural hazards, environmental risk, neighborhood quality, schools, broadband, commute, noise, and more.

Authentication is done via an API key sent in the x-api-key request header. Keys are provisioned through a paid subscription — get an API key →

Endpoint

GET /api/report?address=<url-encoded-address>

The address query parameter must be a URL-encoded U.S. street address including city and state. Full addresses (with ZIP) return the most accurate results.

Response shape

A successful 200 OK response is a JSON object:

{
  "address": {
    "input":      "123 Main St, Austin TX 78701",
    "formatted":  "123 Main Street, Austin, TX 78701",
    "lat":        30.2672,
    "lng":        -97.7431
  },
  "risks": [
    {
      "id":        "flood_zone",
      "label":     "Flood Zone",
      "level":     "low",
      "headline":  "Outside the 100-year flood plain",
      "detail":    "FEMA designates this parcel Zone X — minimal flood hazard.",
      "source":    "FEMA National Flood Hazard Layer",
      "sourceUrl": "https://msc.fema.gov/"
    }
    // ... 86+ more checks
  ]
}

RiskResult fields

FieldTypeDescription
idstringStable machine-readable identifier for the check
labelstringHuman-readable check name
level"low" | "moderate" | "high" | "unknown"Risk severity
headlinestringOne-sentence summary suitable for display
detailstringFull explanation with supporting data
sourcestringName of the authoritative data source
sourceUrlstring?URL of the source (optional)

Rate limits

Each API key has a monthly report limit based on its subscription tier. Limits reset on the first of each calendar month. Unused reports do not roll over.

PlanPriceReports / month
Solo$29/mo100
Team$99/mo500
Office$249/mo2,000
EnterpriseCustomUnlimited

Error responses

All errors return JSON with a error string field. The HTTP status code indicates the error category.

401 Unauthorized Missing or invalid API key.

{ "error": "Invalid or missing API key." }

422 Unprocessable Entity The address could not be geocoded or was not recognized.

{ "error": "Address could not be resolved. Provide a full U.S. street address." }

429 Too Many Requests Monthly report limit for your plan has been reached.

{ "error": "Monthly report limit reached. Upgrade your plan or wait for the limit to reset." }

500 Internal Server Error An unexpected server-side error occurred.

{ "error": "An unexpected error occurred. Please try again." }

Code examples

JavaScript (fetch)

const address = "123 Main St, Austin TX 78701";
const res = await fetch(
  `https://aboutthelot.com/api/report?address=${encodeURIComponent(address)}`,
  {
    headers: {
      "x-api-key": "atl_your_key_here",
    },
  }
);

if (!res.ok) {
  const { error } = await res.json();
  throw new Error(error);
}

const { address: resolved, risks } = await res.json();
console.log(resolved.formatted);
console.log(risks.length, "checks returned");

curl

curl -G "https://aboutthelot.com/api/report" \
  --data-urlencode "address=123 Main St, Austin TX 78701" \
  -H "x-api-key: atl_your_key_here"

Python

import requests
from urllib.parse import urlencode

address = "123 Main St, Austin TX 78701"
url = "https://aboutthelot.com/api/report?" + urlencode({"address": address})

res = requests.get(url, headers={"x-api-key": "atl_your_key_here"})
res.raise_for_status()

data = res.json()
print(data["address"]["formatted"])
print(len(data["risks"]), "checks returned")

PHP

<?php
$address = "123 Main St, Austin TX 78701";
$url = "https://aboutthelot.com/api/report?" . http_build_query(["address" => $address]);

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["x-api-key: atl_your_key_here"]);

$response = curl_exec($ch);
curl_close($ch);

$data = json_decode($response, true);
echo $data["address"]["formatted"] . "\n";
echo count($data["risks"]) . " checks returned\n";

Ruby

require "net/http"
require "json"
require "uri"

address = "123 Main St, Austin TX 78701"
uri = URI("https://aboutthelot.com/api/report")
uri.query = URI.encode_www_form(address: address)

req = Net::HTTP::Get.new(uri)
req["x-api-key"] = "atl_your_key_here"

res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |h| h.request(req) }
data = JSON.parse(res.body)

puts data["address"]["formatted"]
puts "#{data['risks'].length} checks returned"

Go

package main

import (
    "encoding/json"
    "fmt"
    "net/http"
    "net/url"
)

func main() {
    address := "123 Main St, Austin TX 78701"
    endpoint := "https://aboutthelot.com/api/report?address=" + url.QueryEscape(address)

    req, _ := http.NewRequest("GET", endpoint, nil)
    req.Header.Set("x-api-key", "atl_your_key_here")

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

    var data map[string]any
    json.NewDecoder(res.Body).Decode(&data)

    addr := data["address"].(map[string]any)
    risks := data["risks"].([]any)
    fmt.Println(addr["formatted"])
    fmt.Println(len(risks), "checks returned")
}

Get an API key

Subscribe to any paid plan on the realtors page. Your API key is shown on the confirmation page immediately after checkout — copy it somewhere safe. Keys are prefixed atl_. Need to rotate your key? Contact us.

View plans and subscribe →

Questions? Contact us →