{
"market": "<string>",
"lender_id": "<string>",
"borrower_key": "<string>",
"name": "<string>",
"investor": {
"id": "<string>",
"name": "<string>",
"display_name": "<string>",
"kinds": [],
"institutional": true,
"n_deals": 0,
"last_bought_on": "<string>"
},
"is_entity": true,
"is_person": true,
"n_loans": 0,
"n_loans_12m": 0,
"n_loans_24m": 0,
"volume_24m": 0,
"first_loan_on": "<string>",
"last_loan_on": "<string>",
"n_lenders_used_24m": 0,
"other_lender_ids": [
"<string>"
],
"other_lenders": [
{
"id": "<string>",
"name": "<string>",
"is_hard_money": true
}
],
"churned": true,
"churn_measured": true,
"moved_to_lender_id": "<string>",
"n_deals_financed": 0,
"as_of": "<string>",
"dated": true
}The Lender borrower
One borrower of a lender: the key, a company’s name, the investor behind it, the loans from this lender, other lenders used, and churn.
GET /v1/lenders/{id}/borrowers: one borrower of one lender,
counted over every instrument of the lender that names the borrower.
A borrower is a key
borrower_key is 12 hex characters, hashed from the borrower’s folded name with the dataset’s salt. It is the same key
on every lender’s rows and in every market. It is never a name, it is not reversible, and it is stable across data
refreshes. You compare borrowers across lenders with this key: other_lender_ids[] and, since 0.19.0, other_lenders[]
on this row, and competing_lenders on the profile. The loan row carries the same
value in borrower_keys[].
Where the borrower comes from: the names a recorded mortgage carries. On an open lien that names none, the borrower is
the parcel’s owner of record (borrower_match: OWNER_OF_RECORD). That applies when the owner held the parcel on the
recording date and no sale followed. borrower_match says how the registry resolved the key:
DEAL: the deed link ties the loan to a deal whose investor has a member with the key.ENTITY_NAMEorPERSON_NAME: a company or a person that is a member of exactly one registered investor.PARTY: a name on a recorded deed that belongs to no investor.MORTGAGE_ONLY: a name on no deed.OWNER_OF_RECORD: the parcel’s owner of record, as above.
investor is the registered investor the key belongs to, as a stub. The stub carries the id, the registry name, the
kinds, the scale and the size. Its id opens the investor profile. The profile’s
financing block lists every lender the investor borrows from.
What the counts are
n_loans,n_loans_12mandn_loans_24mcount the lender’s instruments that carry the key, once per instrument across the open-lien and recorded-history tables.volume_24msums the priced ones of the window, with amounts above $5,000,000 left out. The recorded history names borrowers and sees about one open loan in five. The open-lien table names none. So a borrower is known on a minority of the book, and every count here is a floor.borrowers.borrower_measured_shareon the profile says how much of the book.first_loan_onandlast_loan_onare the oldest and newest recording. The first is a floor of a history that keeps five slots per parcel.n_lenders_used_24mandother_lender_ids[]are the lenders the borrower took a loan from in the window. The count includes this lender, and the list excludes it. The list has most loans first, at most ten.other_lenders[](since 0.19.0) is the same list with each lender as a stub (id,name,lender_class,is_hard_money), in the same order. The API reads the stubs from the registry at request time. An id the registry no longer serves stays in the id array and is absent here.- On a registry built before the borrower match, the route itself answers
422 lenders_unavailable. So the API serves neither array there. n_deals_financedcounts the registered investor’s purchases whose purchase loan was this lender’s and named this borrower.
Churn is a lower bound
churned is true when three conditions hold. The borrower’s last loan here is 12 to 36 months before as_of. A later
loan from another lender is in the recorded history. This lender holds no open lien recorded after it on any parcel of
the borrower’s investor group. moved_to_lender_id is the lender of the first later loan elsewhere.
On a feed that sees one loan in five, that is a lower bound of leaving and an upper bound of nothing. A borrower who
stayed reads as gone only when this lender’s later loan is in neither table. A borrower who left can read as one who
stayed.
churn_measured is false when the group holds open lien positions the history does not carry. An example is a bridge
borrower whose later loans the history cannot see. Then the history cannot show churn, and churned is never true there.
Every row is dated: as_of is the registry’s slice date, and meta.dated[] on the response names the lenders and
financing blocks.
Contact data
name is the borrower’s name as the recorded mortgages write it: upper case, the most frequent spelling. When the
borrower is a company (is_entity), the name is a business name on a recorded instrument, and the API serves it to
every key. When the borrower is a person (is_person) or a trust, this host does not serve the name. This host also
does not serve party_key, the folded name the registry keys people by. Both are null, with contact_redacted: true.
The API serves the investor’s registry name in investor.name as the registry serves it on every deal row. A person’s
name is never on a list result over MCP.One borrower of the lender: the key, the name, the registered investor behind it, the loans from this lender by window, the other lenders used. This host serves a company's name. It does not serve a person's name. The row also says if the borrower moved on, as a lower bound. Over MCP a person's name is never on a list.
Market code, for example phx.
The lender: equals the path id on this route.
^len_[0-9a-f]{12}$Borrower key: 12 hex characters hashed from the borrower's folded name with the dataset salt. The same key appears on every lender's rows and in every market. It is not a name and not reversible, and it is stable across data refreshes. Use the key to compare borrowers across lenders.
^[0-9a-f]{12}$The borrower's name as the recorded mortgages write it, upper case, the most frequent spelling. For a person it is SURNAME GIVEN, the recorder's order the deeds use, for example "RIVERA DANA". For a company it is the name as recorded, for example "SAGUARO HOLDINGS LLC". When the borrower is a company (is_entity), this is a business name on a recorded instrument, and the API serves it to every key. When the borrower is a person (is_person) or a trust, the name is null on this host. Null when the file names none.
The registered investor the borrower belongs to. The API serves it to every key. Null when the key resolves to none.
Show child attributes
Show child attributes
True when the name reads as a company: an LLC, a corporation, a partnership or a similar entity. The API then serves the name to every key. A trust is neither this nor a person.
True when the name reads as a person's: the name is then null on this host.
How the registry resolved the borrower, by the first rule that applied. DEAL: the loan has a deal whose investor has a member with the borrower's key, or the deal's investor when no key matched. ENTITY_NAME: the key is an entity member of exactly one investor, and PERSON_NAME means a person member of exactly one investor. PARTY: the key is on a recorded deed but belongs to no investor, while MORTGAGE_ONLY means the key is on no deed. OWNER_OF_RECORD: an open lien that names no borrower resolves to the parcel's owner of record. The registry takes the owner only when the owner held the parcel on the recording date and no sale followed.
DEAL, ENTITY_NAME, PERSON_NAME, PARTY, MORTGAGE_ONLY, OWNER_OF_RECORD Loans from this lender carrying this borrower, all time, counted once per instrument.
-9007199254740991 <= x <= 9007199254740991The same over the 12 months ending on as_of (365 days, inclusive), as of as_of, the slice date, never the clock.
-9007199254740991 <= x <= 9007199254740991The same over the 24 months ending on as_of (730 days, inclusive), as of as_of, the slice date, never the clock: what period=24m counts and sorts by.
-9007199254740991 <= x <= 9007199254740991Sum of the loan amounts of those in the 24 months ending on as_of (730 days, inclusive), as of as_of, the slice date, never the clock, whole dollars, with amounts above $5,000,000 left out. 0 when none carries a price.
-9007199254740991 <= x <= 9007199254740991The recording date of the borrower's oldest loan from this lender, YYYY-MM-DD. A floor, because the history keeps 5 slots per parcel. Null when none is dated.
The recording date of the borrower's newest loan from this lender, YYYY-MM-DD. Null when none is dated.
Distinct lenders, this one included, the borrower took a loan from in the 24 months ending on as_of (730 days, inclusive), as of as_of, the slice date, never the clock.
-9007199254740991 <= x <= 9007199254740991The other lenders the borrower took a loan from in the 24 months ending on as_of (730 days, inclusive), as of as_of, the slice date, never the clock, most loans first, at most 10. Empty when none. Each is the key to GET /v1/lenders/{id}.
Lender id: len_ followed by 12 hex characters, for example len_3f9a1c27b4e0. The registry mints the id from the lender's folded name, so the same lender carries the same id in every market, stable across data refreshes. A hand-kept dictionary row can merge two spellings into one lender. The API then follows the old id from the earlier registry run to that lender and lists it in meta.resolved_from. A retired id with no successor answers 410 gone. Store the whole id, prefix included, as the identity.
^len_[0-9a-f]{12}$The same lenders as other_lender_ids, in the same order, each with its display name, class and hard-money flag. The API reads them from the registry at request time and leaves out a lender the market no longer serves. Empty when none.
Show child attributes
Show child attributes
True when the borrower's last loan here is 12 to 36 months before as_of and the recorded history holds a later loan from another lender. A third condition: this lender holds no open lien recorded after that later loan on any parcel of the borrower's investor group. A lower bound of leaving, because the history sees one loan in five. A borrower who stayed can read as gone only when this lender's later loan is in neither table. A borrower who left can read as staying. Never true when churn_measured is false.
False when the borrower's investor group holds open lien positions the recorded history does not carry. That is a bridge borrower whose loans the history misses: the registry cannot read churn, and churned is false. True otherwise.
When churned is true, the lender of the borrower's first later loan elsewhere. Null otherwise.
^len_[0-9a-f]{12}$Deals (purchases by a registered investor) whose purchase loan is this lender's and names this borrower, all time.
-9007199254740991 <= x <= 9007199254740991The slice date, YYYY-MM-DD. The API measures the counts at it. Dated: see meta.dated[].
True while the datasets are not in the current delivery, so the row is a snapshot at as_of.
Was this page helpful?