> ## 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.

# Coverage and freshness

> The loaded markets, how far outside one you can ask, and the as-of date behind every number.

Every response carries `meta.coverage[]`, one entry per loaded market. Read it, and do not hard-code the market
list. Then a market you did not know about starts to answer the day it lands.

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

  ```javascript Node.js theme={null}
  const res = await fetch("https://api.investorlift.com/v1/dataset", {
    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/dataset",
      headers={"Authorization": f"Bearer {os.environ['GM_API_KEY']}"},
      timeout=30,
  )
  r.raise_for_status()
  body = r.json()
  ```
</CodeGroup>

The recorded shape of every field is on [Which data is available where](/coverage/markets).
[`GET /v1/coverage`](/api-reference/endpoints/coverage) is the live answer for the host you call.

Production serves three markets, as recorded on 2026-09-17: the **Houston (Harris County)** (`hou`, TX), the **Phoenix metro** (`phx`, AZ) and the **Seattle metro** (`sea`, WA). [Which data is available where](/coverage/markets) lists every dataset per market with its as-of date and parcel count. [Counties, cities and ZIP codes](/coverage/places) lists every place inside them. `meta.coverage[]` on every response lists the markets loaded on the host you call, so a new market works the day it lands.

Each county carries its own `data_end` beside the market's. So you can see when one county runs behind.

## What the counts are computed over

`universe_kind` says how wide the market's own view is, and it is the caveat behind every number in it.

| `universe_kind` | Meaning                                                                                                                                                                                                |
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `metro`         | Whole counties. The Phoenix and Seattle markets.                                                                                                                                                       |
| `county`        | One county. The Houston market is Harris County. The data does not see what an investor did in the neighbouring counties. So every count, price band, scale tier and confidence in Houston is a floor. |
| `zip`           | One or more ZIP codes, and the same caveat more sharply.                                                                                                                                               |

## Ask outside a market

`bbox` is the rectangle that encloses every deal in the market. The API serves a point up to `point_tolerance_miles`
outside it. The tolerance is 20 miles for a metro and 2 miles for a county market. Farther out, the API answers
`422 outside_coverage`. A viewport that intersects no market's rectangle gets the same error.

You get an error, not an empty page, on purpose. "No data here" and "nothing occurred here" are different answers.
Only one of them is a reason for a user to stop looking.

The API checks a place the same way. Before any query runs, it checks `zip` or `city` against the parcels of every
loaded market. This applies to the deals list, the summary, the cells, the investor list, the Investorlift listings
and the short-term rental parcels.

For a ZIP or a city that no market carries, the API answers `422 outside_coverage`.
The error names the place and the loaded markets: `zips_unknown` lists the ZIPs, `city` the folded city. If a list
has one unknown ZIP, the API refuses the whole list and serves nothing for the rest. So you never mistake a page for
the full set.

The city is the parcel's postal city as the county records it, not a short-term rental jurisdiction of
`str.jurisdictions[]`.

One dataset can be narrower than its market. The lender registry covers the counties in `lenders.counties`.
[Counties, cities and ZIP codes](/coverage/places) lists them. For a ZIP, city or county outside them on the
[lender list](/api-reference/endpoints/lenders-list), the API answers `422 outside_coverage` and names the covered
counties. The reason is the same: an empty page there reads as "nobody lends here".

The API does not clip a point on the lender list or on a lender's loans to the circle. It resolves the geometry to
the H3 res-8 cells whose centre lies inside the circle. Each cell is about a third of a square mile. So the edge of
the geometry is a hex boundary, not the circle. The ranking row's `in_geometry` says how many cells the geometry became
and how many carry the lender ([the ranking row](/api-reference/objects/lender-ranking#read-a-row)). For a point
outside every loaded market's tolerance, the API answers `422 outside_coverage` there too.

## As-of dates

This data has no "today". The API measures every window, every "days since" and every recency score from the
market's own as-of date.

| Field                           | What it dates                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `data_end`                      | The last deed in the data. The clock for every "days since" number.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| `listings_data_end`             | The MLS listing feed. Later than `data_end`: deeds and listings arrive in one delivery, each with its own end.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| `agents_data_end`               | The listing set the agent registry comes from. Equal to `listings_data_end` when current.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| `wholesale_as_of`               | The Investorlift export the wholesale transactions come from.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| `str_as_of`                     | The oldest short-term rental snapshot among the market's served cities. Each city's own date is in `str.jurisdictions[].snapshot_date`.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| `auction_counted`               | A flag, not a date. `true` when the market's registry build included the foreclosure-auction and REO purchase counts. Then every investor row carries `auction`, every deal row `bought_auction_kind`, and the deals summary `by_channel.auction`. `false` when the registry predates them. It turns true at the market's next registry build, which also rolls `dataset_version`.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| `parcel_as_of`                  | The deed data end behind the parcel products. The parcel products are [parcel search](/api-reference/endpoints/properties-search) and the financing, permit and history routes. The `parcel` block beside it carries the dates of their own sources. `parcel.financing.as_of` is the date of the dated snapshot. See [dated data](/guides/concepts/dated-data). `parcel.permits.as_of` is the date of the permit roll. `parcel.history.zips` lists the ZIP codes the history lake covers.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| `address_as_of`                 | The deed data end the address table comes from. That table holds the parcels [resolve by address](/api-reference/endpoints/properties-resolve) finds. Null for a market with no published address table. While no market carries it, the address lookup answers [`422 addresses_unavailable`](/guides/concepts/errors#addresses_unavailable).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| `parcel.sale_mortgage_measured` | A flag inside the `parcel` block. `true` when the delivery records a purchase mortgage on at least one priced last sale in five of the market. Then `cash_sale_proxy`, the `sale.cash_sale` filter and the `cash-buyer` quicklist are measured. `false` below that bar, and the 2026 deliveries carry the column empty. Then `cash_sale_proxy` is null on every parcel, and the filter and the quicklist answer 422 `cash_sale_unavailable`.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| `lenders`                       | The lender registry. Null for a market with no published registry. `lenders.as_of` is the financing slice the registry comes from, equal to `parcel.financing.as_of`. `lenders.recordings_through` is the newest recording in that slice, fourteen days before it. `lenders.counties` lists the counties the registry covers inside the market. `lenders.history_capture_share` says how much of the open table the recorded history sees, about one loan in five. `lenders.n_lender_ids` counts the lender ids served there. `parcel.financing.n_lenders` counts raw spellings, several per id. See [Who is this lender?](/guides/walkthroughs/profile-a-lender). The `*_measured` flags say what the registry build included: `purchase_measured`, `investor_lending_measured`, `flips_measured` and `borrowers_measured`. Since 0.19.0 two more flags exist. `takebacks_measured` covers the take-back deeds behind the profile's `takebacks` block and the loan row's `foreclosed`. `counties_measured` means the registry includes a second county, and it is the flag behind `n_counties_ranked_first_24m`. A block whose flag is false is null, never zero. |

**A null as-of date is an answer.** It means the market has no published copy of that dataset. The matching blocks on
every row are null. The routes and filters that need the dataset answer a 422 that says so: `listings_unavailable`,
`agents_unavailable`, `wholesale_unavailable`, `str_unavailable`, `parcels_unavailable`, `lenders_unavailable`, or
`cash_sale_unavailable` for `parcel.sale_mortgage_measured: false`. A null never means "nothing found".

`auction_counted: false` works the same way. The `auction` blocks and `by_channel.auction` on the deals summary are
null. `buys_at_auction`, `buys_reo` and `bought_auction_kind` answer `auction_unavailable`.

The history lake is the one dataset published for part of a market. A parcel outside `parcel.history.zips` answers
`history_unavailable`, and the error names the ZIPs the lake does cover.

## dataset\_version

`dataset_version` is an integer per market. It changes at each rebuild of the market's tables, and only then. A
listing, wholesale or short-term rental refresh rolls it too.

Put it in your cache key, and your cache invalidates itself at the next refresh. Keep a cached answer for at most 30
days. Drop it within a business day of a version change. Check the current version at least once a business day with
`GET /v1/dataset` (not metered) or with the `X-Dataset-Version` header. The [cache window](/guides/terms) is the
rule. An example cache key:

```
buyers:{dataset_version}:{lat},{lng}:{radius}:{subject}
```

The API also binds a [pagination cursor](/guides/concepts/pagination) to it. So a page request across a refresh
answers `400 invalid_cursor`, not a quietly wrong second page. `build_run_id`, `registry_run` and
`registry_version` sit beside it for support questions. Do not cache on those.

[`GET /v1/dataset`](/api-reference/endpoints/dataset) returns the same coverage block without a query. The API
does not meter it, so you read the block without a real call.
[`GET /v1/coverage`](/api-reference/endpoints/coverage) answers the same question for one place.


## Related topics

- [Which data is available where](/coverage/markets.md)
- [Read which data is available where](/api-reference/endpoints/coverage.md)
- [Read the dataset version](/api-reference/endpoints/dataset.md)
- [Find a parcel](/api-reference/endpoints/properties-resolve.md)
- [The Property object](/api-reference/objects/property.md)
