> ## Documentation Index
> Fetch the complete documentation index at: https://developers.investorlift.com/llms.txt
> Use this file to discover all available pages before exploring further.

# What's going on around this address?

> The calls behind a map: the header stats, the cells, and the list that draws the neighbourhood.

A map needs two calls: the stats for the header, and the cells. The deals list draws the neighbourhood view. All of
them take the same geometry and the same filters, so their numbers always agree. The geometry can also be a ZIP that a
loaded market carries. Send `zip=<zip>` in place of the point and radius on each call. Keep `lat` and `lng` beside it
as the reference point for distances.

## 1. The header stats

<CodeGroup>
  ```bash curl theme={null}
  curl "https://api.investorlift.com/v1/deals/summary?lat=33.476917&lng=-111.920385&radius_miles=2" \
    -H "Authorization: Bearer $GM_API_KEY"
  ```

  ```javascript Node.js theme={null}
  const params = new URLSearchParams({ lat: "33.476917", lng: "-111.920385", radius_miles: "2" });
  const res = await fetch(`https://api.investorlift.com/v1/deals/summary?${params}`, {
    headers: { Authorization: `Bearer ${process.env.GM_API_KEY}` },
  });
  if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
  const body = await res.json();
  ```

  ```python Python theme={null}
  import os

  import requests

  r = requests.get(
      "https://api.investorlift.com/v1/deals/summary",
      params={"lat": 33.476917, "lng": -111.920385, "radius_miles": 2},
      headers={"Authorization": f"Bearer {os.environ['GM_API_KEY']}"},
      timeout=30,
  )
  r.raise_for_status()
  body = r.json()
  ```
</CodeGroup>

```json theme={null}
{
  "data": {
    "n_deals": 10980,
    "by_kind": { "flip": 1582, "wholesale": 570, "hold": 6321, "long_hold": 1717, "other": 657, "build": 133 },
    "n_investors": 5833, "n_parcels": 8596, "n_unpriced": 1969, "n_undated": 27,
    "median_bought_price": 295000, "median_sold_price": 405000, "total_volume": 10840233470,
    "median_hold_days": 353, "median_gross_profit": 108000,
    "by_year": [{ "year": 2026, "n": 288, "flip": 14, "wholesale": 27, "hold": 241, "long_hold": 0, "other": 6, "build": 0 }],
    "by_scale": [{ "scale": "large", "n": 1126 }, { "scale": null, "n": 282 }],
    "by_investor_kind": [{ "kind": "LANDLORD", "n": 9817 }, { "kind": null, "n": 282 }]
  }
}
```

<ResponseField name="by_year, by_scale" type="array">
  Each sums to `n_deals`. `by_year` goes by purchase year, with undated deals in a `year: null` row at the end.
</ResponseField>

<ResponseField name="by_investor_kind" type="array">
  Does **not** sum to `n_deals`: a deal counts under every kind its investor carries. The `null` rows in both are
  buyers with no investor id.
</ResponseField>

## 2. The cells

<CodeGroup>
  ```bash curl theme={null}
  curl "https://api.investorlift.com/v1/deals/cells?lat=33.476917&lng=-111.920385&radius_miles=20&res=8" \
    -H "Authorization: Bearer $GM_API_KEY"
  ```

  ```javascript Node.js theme={null}
  const params = new URLSearchParams({ lat: "33.476917", lng: "-111.920385", radius_miles: "20", res: "8" });
  const res = await fetch(`https://api.investorlift.com/v1/deals/cells?${params}`, {
    headers: { Authorization: `Bearer ${process.env.GM_API_KEY}` },
  });
  if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
  const body = await res.json();
  ```

  ```python Python theme={null}
  import os

  import requests

  r = requests.get(
      "https://api.investorlift.com/v1/deals/cells",
      params={"lat": 33.476917, "lng": -111.920385, "radius_miles": 20, "res": "8"},
      headers={"Authorization": f"Bearer {os.environ['GM_API_KEY']}"},
      timeout=30,
  )
  r.raise_for_status()
  body = r.json()
  ```
</CodeGroup>

Counts per hexagon, to draw as a heat layer. `res=8` suits a city or county view, and `res=7` suits a whole metro. At
neighbourhood zoom, the list below, sorted by distance, is the layer: every row carries the parcel's coordinates.

## Then the drill-down

When the user clicks a row, get the card with its id:

<CodeGroup>
  ```bash curl theme={null}
  curl "https://api.investorlift.com/v1/deals/deal_07d65b04d1c2f156e2b7137e91b6db31" \
    -H "Authorization: Bearer $GM_API_KEY"
  ```

  ```javascript Node.js theme={null}
  const res = await fetch("https://api.investorlift.com/v1/deals/deal_07d65b04d1c2f156e2b7137e91b6db31", {
    headers: { Authorization: `Bearer ${process.env.GM_API_KEY}` },
  });
  if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
  const body = await res.json();
  ```

  ```python Python theme={null}
  import os

  import requests

  r = requests.get(
      "https://api.investorlift.com/v1/deals/deal_07d65b04d1c2f156e2b7137e91b6db31",
      headers={"Authorization": f"Bearer {os.environ['GM_API_KEY']}"},
      timeout=30,
  )
  r.raise_for_status()
  body = r.json()
  ```
</CodeGroup>

For the table under the map, page the list:

<CodeGroup>
  ```bash curl theme={null}
  curl "https://api.investorlift.com/v1/deals?lat=33.476917&lng=-111.920385&radius_miles=2&sort=distance&limit=100" \
    -H "Authorization: Bearer $GM_API_KEY"
  ```

  ```javascript Node.js theme={null}
  const params = new URLSearchParams({
    lat: "33.476917",
    lng: "-111.920385",
    radius_miles: "2",
    sort: "distance",
    limit: "100",
  });
  const res = await fetch(`https://api.investorlift.com/v1/deals?${params}`, {
    headers: { Authorization: `Bearer ${process.env.GM_API_KEY}` },
  });
  if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
  const body = await res.json();
  ```

  ```python Python theme={null}
  import os

  import requests

  r = requests.get(
      "https://api.investorlift.com/v1/deals",
      params={
          "lat": 33.476917,
          "lng": -111.920385,
          "radius_miles": 2,
          "sort": "distance",
          "limit": 100,
      },
      headers={"Authorization": f"Bearer {os.environ['GM_API_KEY']}"},
      timeout=30,
  )
  r.raise_for_status()
  body = r.json()
  ```
</CodeGroup>

Then follow `page.next_cursor`. See [Pagination](/guides/concepts/pagination).


## Related topics

- [List Investorlift listings around a location with what the deeds show](/api-reference/wholesale/list-investorlift-listings-around-a-location-with-what-the-deeds-show.md)
- [List deals around a location](/api-reference/endpoints/deals-list.md)
- [List investor deals around a location](/api-reference/deals/list-investor-deals-around-a-location.md)
- [Read the comparable sales around a parcel](/api-reference/properties/read-the-comparable-sales-around-a-parcel.md)
- [Search parcels](/api-reference/endpoints/properties-search.md)
