Skip to main content
Early access: while the developer tier is in beta, the API serves this route to Investorlift’s team and trusted partners. Investorlift will restrict the route further before it opens to every key.
One row of GET /v1/lenders. lender is the identity: the id, the display name, the class and the hard-money flag of the Lender object. The API measures the rest over the window period names, by default the 24 months that end on as_of. It measures them market-wide, inside the one ZIP, city or county the request named, or inside the geometry it drew. The same lender seen from the other side, one row per place it ranks in, is the ranking bucket.

Read a row

  • rank is the row’s position in this list, under its sort and filters, and it continues across pages. The default list hides persons and government lenders, so it differs from the profile’s rankings.rank_24m, which counts every lender.
  • n is every instrument of any kind recorded in the window (purchase money, refinance, HELOC, construction), counted once across the open-lien and recorded-history tables. With position=1 it counts first liens alone. With product= it counts the named products alone. A GOVERNMENT row counts the insurance claims and partial-claim seconds recorded under the agency’s name, not originations.
  • share is n over every lender’s instruments in the same window and place. The denominator includes persons below the gate and placeholders. It is null under position=1 or product=, because no per-product denominator exists. It stays the share of the whole market under hard_money=true. The profile’s rankings.share_of_hard_money_24m is the share among hard-money lenders.
  • volume sums the priced instruments. It counts a blanket loan once, that is, one loan recorded across 5 or more parcels. It leaves out amounts above $5,000,000: such an amount is a facility amount the file records on every parcel it covers. n_unpriced counts the unpriced rest. It is null inside a place, because the API does not measure it there.
  • n_open_liens, open_balance, n_parcels and median_amount are market-wide whatever the place: the lender’s book, not the place’s share of it.
  • last_recorded_on is inside the place when the request names one. The API measures recency against recordings_through, which is fourteen days before as_of.
  • n_purchase_money, n_investor and n_deals_financed (since 0.16.0) read the deed link. Of n, the first is the instruments that financed a purchase: a priced deed on the parcel in the 45 days up to the recording. The second is those whose borrower resolves to a registered investor, and both are inside the place when the request names one. The third is market-wide only: the investor deals whose purchase loan is this lender’s in the window, null inside a place. All three are null where the market has no deed link (purchase_measured false on the profile). purpose=purchase makes the first of them n, and sort=purchase_desc orders by it.
  • share_by_volume (since 0.19.0) is the lender’s volume over every lender’s volume in the same window and place. It uses the same amount rule: a blanket loan once, amounts above $5,000,000 left out. It is null under position, product or purpose and under a geometry. It is also null where the place’s volume is 0.
  • n_borrowers (since 0.19.0) is the lender’s borrowers in the window. Market-wide it is the profile’s borrowers.n_borrowers_24m. Inside a place it is the distinct borrower keys on its instruments there. It is null under a geometry, and while the market has no borrower match (borrowers_measured false).
  • in_geometry (since 0.19.0) is null without a geometry. With one it says what the geometry became: res is the resolution, 8. n_cells is the H3 cells whose centre lies inside the geometry, about a third of a square mile each. So the edge is a hex boundary and not the circle. n_cells_lent is how many of them carry this lender in the window.
  • Under a geometry n, volume, the first-lien and product counts, n_purchase_money, n_investor and last_recorded_on are sums and maxima over those cells. share, share_by_volume, n_unpriced, n_deals_financed and n_borrowers are null, because the API does not measure them per geometry.
The history captures about one open loan in five. So a bridge lender, whose loans are short and paid off before the next slice, ranks below its real activity. The bias is the same on every row. So the order among hard-money lenders holds better than a comparison between a hard-money lender and a bank.

One lender in the ranked list: its position, who it is, what it recorded in the window, in the market or in one geography. The row also says how much of that was purchase money and investor lending, and carries its open book and its typical loan.

rank
integer
required

The row's 1-based position in this list under its sort and filters. The position continues across pages. The default list hides persons and GOVERNMENT, so it differs from the profile's rankings.rank_24m, which counts every lender.

Required range: -9007199254740991 <= x <= 9007199254740991
lender
object
required

The lender behind a ranking row: id, display name, class and the hard-money flag.

n
integer
required

Instruments recorded in the 24 months ending on as_of (730 days, inclusive), as of as_of, the slice date, never the clock, counted once across both tables, inside the geography when you name one. The count takes every instrument of any kind: purchase money, refinance, HELOC and construction. For a GOVERNMENT lender it takes insurance claims and partial-claim seconds under the agency's name, not originations. With position=1 or product[] the count takes the matching instruments only.

Required range: -9007199254740991 <= x <= 9007199254740991
volume
integer
required

Sum of the loan amounts of the priced instruments in the 24 months ending on as_of (730 days, inclusive), as of as_of, the slice date, never the clock, whole dollars, inside the geography when you name one. The sum counts a blanket group once and leaves out amounts above $5,000,000. 0 when none carries a price. Position and product do not narrow it.

Required range: -9007199254740991 <= x <= 9007199254740991
n_unpriced
integer | null
required

Instruments in the window with no amount on file. Null when you name a geography, because the registry does not measure it per geography.

Required range: -9007199254740991 <= x <= 9007199254740991
share
number | null
required

n over every lender's instruments in the window, 0 to 1, in the geography when you name one. The denominator counts every lender, persons below the gate and placeholders included. Null with position=1 or product[], because no per-product denominator exists.

n_first_lien
integer
required

Of the instruments in the 24 months ending on as_of (730 days, inclusive), as of as_of, the slice date, never the clock, in the geography when you name one, those whose open lien position is 1.

Required range: -9007199254740991 <= x <= 9007199254740991
n_heloc
integer
required

Of the same, those with product HELOC.

Required range: -9007199254740991 <= x <= 9007199254740991
n_open_liens
integer
required

Open lien positions at as_of under the lender the open-lien table names, market-wide.

Required range: -9007199254740991 <= x <= 9007199254740991
open_balance
integer
required

The open balance after the profile's exclusions, whole dollars, market-wide. 0 when none.

Required range: -9007199254740991 <= x <= 9007199254740991
n_parcels
integer
required

Distinct parcels carrying any of the lender's instruments, all time, market-wide.

Required range: -9007199254740991 <= x <= 9007199254740991
median_amount
integer | null
required

Median loan amount over the lender's priced instruments, market-wide, whole dollars. This is the profile's terms.amount.p50, over the window its terms block says. Null under 3.

Required range: -9007199254740991 <= x <= 9007199254740991
last_recorded_on
string | null
required

The newest recording date, YYYY-MM-DD, inside the geography when you name one. Null when none is dated.

n_purchase_money
integer | null
required

Of the instruments in the 24 months ending on as_of (730 days, inclusive), as of as_of, the slice date, never the clock, in the geography when you name one, those whose purpose is PURCHASE by the deed link. This is what purpose=purchase narrows n to and what sort=purchase_desc orders by. Null while the market has no deed link (meta.coverage[].lenders.purchase_measured false).

Required range: -9007199254740991 <= x <= 9007199254740991
n_investor
integer | null
required

Of the same, those whose borrower resolves to a registered investor. Null while the market has no borrower match.

Required range: -9007199254740991 <= x <= 9007199254740991
n_deals_financed
integer | null
required

Deals bought in the 24 months ending on as_of (730 days, inclusive), as of as_of, the slice date, never the clock whose purchase loan is this lender's, market-wide. Null when you name a geography, because the registry does not measure it per geography. Null also while the market has no deal link.

Required range: -9007199254740991 <= x <= 9007199254740991
share_by_volume
number | null
required

The lender's loan total over every lender's in the period, 0 to 1, in the geography when you name one. Both totals follow the amount rule: a blanket group once, amounts above $5,000,000 left out. 0 when the lender's total is 0 and the market's is not. Null inside a place whose volume is 0, where no instrument carries a price. Null with position, product or purpose, because no per-product denominator exists. Null under a geometry, because the registry does not measure it per geometry, and on a registry built before the place rankings.

n_borrowers
integer | null
required

Distinct borrowers (by key) behind the lender's instruments in the period. Market-wide this is the profile's n_borrowers_24m. Inside a ZIP, city or county it is the geography's own count. Null under a geometry, because the registry does not measure it per geometry, and while the market has no borrower match. The count inside a place is also null on a registry built before the place rankings. Market-wide the count reads the borrower match, and the API serves it from 0.16.0.

Required range: -9007199254740991 <= x <= 9007199254740991
in_geometry
object | null
required

What the geometry resolved to and how many of its cells carry this lender. Null without a geometry.

as_of
string
required

The slice date, YYYY-MM-DD. The API measures the counts at it. Dated: see meta.dated[].

dated
boolean
required

True while the datasets are not in the current delivery, so the row is a snapshot at as_of.