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

# Who lends to flippers in a ZIP?

> The hard-money lenders active in one ZIP over the window, and the ZIPs, cities and cells one lender leads.

<Note>
  **Early access.** The API serves every early-access route and tool to every key at 0 credits during the beta.
  Investorlift can restrict them later. Investorlift aims to give 30 days of email notice before it restricts them
  ([Developer Agreement 12.3](/guides/terms)), and the [changelog](/changelog) records the change.
</Note>

Two more questions follow from a lender's profile. Which lenders fund flippers in one place, and which places one lender
leads. [Who is this lender?](/guides/walkthroughs/lender-profile) states the two limits every number here shares.
The registry is a snapshot as of `meta.coverage[].lenders.as_of`. It covers the counties in
`meta.coverage[].lenders.counties`. The recorded history captures about one open loan in five, so a history count is
a floor.

## Who lends to flippers in 85032

<CodeGroup>
  ```typescript TypeScript theme={null}
  import { GodMode } from "@investorlift/godmode";

  const gm = new GodMode(); // reads GM_API_KEY
  const body = await gm.lenders.list({ market: "phx", zip: "85032", hard_money: "true" });
  ```

  ```bash curl theme={null}
  curl "https://api.investorlift.com/v1/lenders?market=phx&zip=85032&hard_money=true" \
    -H "Authorization: Bearer $GM_API_KEY"
  ```

  ```javascript Node.js theme={null}
  const params = new URLSearchParams({ market: "phx", zip: "85032", hard_money: "true" });
  const res = await fetch(`https://api.investorlift.com/v1/lenders?${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/lenders",
      params={"market": "phx", "zip": "85032", "hard_money": "true"},
      headers={"Authorization": f"Bearer {os.environ['GM_API_KEY']}"},
      timeout=30,
  )
  r.raise_for_status()
  body = r.json()
  ```

  ```bash CLI theme={null}
  investorlift lenders list --market phx --zip 85032 --hard-money true
  ```
</CodeGroup>

The list shows the hard-money lenders active in the ZIP over the window, most loans first. Each row carries `n` (its
loans there), `share` (of every lender's loans there), `n_first_lien`, `volume` and `last_recorded_on`. `rank` is the
position in this list. Without `hard_money=true` the banks and mortgage companies lead the same list. The list hides
persons and government lenders unless you ask for them. A ZIP outside the counties the registry covers answers
[`422 outside_coverage`](/guides/concepts/errors#outside_coverage) and names the covered counties, never an empty page.

The recorded example of this route ranks the hard-money lenders of the whole market, 2 rows. The same row shape
answers for one ZIP:

```json theme={null}
{
  "data": [
    {
      "rank": 1,
      "lender": {
        "id": "len_b959a8d2abef",
        "name": "CAPITAL FUND I LLC",
        "lender_class": "NONBANK",
        "is_hard_money": true
      },
      "n": 816,
      "share": 0.003146,
      "n_first_lien": 515,
      "volume": 436204000,
      "last_recorded_on": "2026-06-11",
      "in_geometry": null,
      "as_of": "2026-06-25",
      "dated": true
    }
  ],
  "page": {
    "next_cursor": "eyJ2IjoxLCJydW4iOiIxNzg5NjM2NDcwIiwicSI6IjExMGJjNjdiMjJhNGY0YzdiZWUzMDM0MTc3YzI5MTc5YzM3YTIxMTg2YmI1ZDQ3MTEwNTUxMjRhYTRiNjIxZjUiLCJrIjpbMzE1LCJsZW5fODZlNjk3ZjdlZmZjIl19",
    "limit": 2,
    "returned": 2
  }
}
```

Since 0.19.0 `period=` picks the window: `12m`, `all`, a year such as `2025`, or a month such as `2026-05`, beside the
default `24m`. So the same call with `period=2026-05` is the ZIP's ranking for one month, and twelve such calls are
its monthly series. A point with `radius_miles` in place of the ZIP ranks the lenders around it. The row's
`in_geometry` says how many hex cells the circle became.

## Which ZIPs does this lender lead

<CodeGroup>
  ```typescript TypeScript theme={null}
  import { GodMode } from "@investorlift/godmode";

  const gm = new GodMode(); // reads GM_API_KEY
  const body = await gm.lenders.rankings("len_d2028f0766fc", { market: "phx", group_by: "zip", min_n: 10 });
  ```

  ```bash curl theme={null}
  curl "https://api.investorlift.com/v1/lenders/len_d2028f0766fc/rankings?market=phx&group_by=zip&min_n=10" \
    -H "Authorization: Bearer $GM_API_KEY"
  ```

  ```javascript Node.js theme={null}
  const params = new URLSearchParams({ market: "phx", group_by: "zip", min_n: "10" });
  const res = await fetch(`https://api.investorlift.com/v1/lenders/len_d2028f0766fc/rankings?${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/lenders/len_d2028f0766fc/rankings",
      params={"market": "phx", "group_by": "zip", "min_n": 10},
      headers={"Authorization": f"Bearer {os.environ['GM_API_KEY']}"},
      timeout=30,
  )
  r.raise_for_status()
  body = r.json()
  ```

  ```bash CLI theme={null}
  investorlift lenders rankings len_d2028f0766fc --market phx --group-by zip --min-n 10
  ```
</CodeGroup>

[`GET /v1/lenders/{id}/rankings`](/api-reference/endpoints/lenders-rankings) (since 0.19.0) is the ZIP list seen
from the lender's side. It returns one [bucket](/api-reference/objects/lender-ranking-bucket) per ZIP where the
lender recorded 10 or more loans over the window, most loans first. Each bucket carries the lender's `n` and `volume`
there. It also carries its `rank` and `share` among every lender of the market in that ZIP, persons and government
included. The buckets with `rank: 1` are the ZIPs the profile's `n_zips_ranked_first_24m` counts.

The recorded answer: the two ZIPs where Kiavi recorded 10 or more loans in the window.

```json theme={null}
{
  "data": [
    {
      "key": "85040",
      "n": 10,
      "volume": 2411950,
      "n_purchase_money": 4,
      "n_investor": 9,
      "rank": 34,
      "share": 0.005966587,
      "partial": false,
      "floor": false,
      "as_of": "2026-06-25",
      "dated": true
    },
    {
      "key": "85254",
      "n": 10,
      "volume": 13894647,
      "n_purchase_money": 7,
      "n_investor": 8,
      "rank": 54,
      "share": 0.00325309,
      "partial": false,
      "floor": false,
      "as_of": "2026-06-25",
      "dated": true
    }
  ],
  "page": {
    "next_cursor": null,
    "limit": 3,
    "returned": 2
  }
}
```

`group_by=city` and `group_by=county` do the same by place. `group_by=cell&res=8` does it by hex cell, for the
profile's map, and [`GET /v1/lenders/{id}/cells`](/api-reference/endpoints/lenders-cells) gives the counts alone.
`group_by=month&period=all` is the lender's 36-month series against the whole market, every month present, the last
`partial`. A registry built before the place rankings answers
[`422 lenders_unavailable`](/guides/concepts/errors#lenders_unavailable) here and serves the three ranked-first
counts as null.

## Where to go next

<CardGroup cols={2}>
  <Card title="When a call fails" icon="triangle-exclamation" href="/guides/walkthroughs/when-it-fails">
    The five failures a developer meets first: the body, the recovery and what to send to support.
  </Card>

  <Card title="GET /v1/lenders" icon="code" href="/api-reference/endpoints/lenders-list">
    Every place form, the window, the filters and every field of a ranking row, generated from the code.
  </Card>
</CardGroup>


## Related topics

- [Who is this lender?](/guides/walkthroughs/lender-profile.md)
- [Rank one lender by place or by month](/api-reference/endpoints/lenders-rankings.md)
- [Rank the lenders of a market or a place](/api-reference/endpoints/lenders-list.md)
- [Walkthroughs](/guides/walkthroughs.md)
- [The ideas you need](/guides/ideas.md)
