{
"market": "<string>",
"property_id": "<string>",
"address_short": "<string>",
"city": "<string>",
"zip": "<string>",
"position": 0,
"loan_key": "<string>",
"in_both": true,
"lender_id": "<string>",
"lender_id_open": "<string>",
"lender_disagrees": true,
"lender_name_as_recorded": "<string>",
"recording_date": "<string>",
"due_date": "<string>",
"loan_amount": 0,
"amount_outlier": true,
"current_balance": 0,
"balance_outlier": true,
"on_resold_parcel": true,
"interest_rate": 123,
"term_months": 0,
"loan_type": "<string>",
"label_as_recorded": "<string>",
"open_position": 0,
"assigned_lender_name": "<string>",
"blanket_group_id": "<string>",
"blanket_n_parcels": 0,
"county_fips": "<string>",
"property_type_category": "<string>",
"deed": {
"dt": "<string>",
"price": 0,
"loan_to_price": 123
},
"deal": {
"deal_id": "<string>",
"is_purchase_loan": true,
"secondary_loans_n": 0,
"investor_id": "<string>",
"investor_name": "<string>",
"investor_display_name": "<string>",
"bought_on": "<string>",
"bought_price": 0,
"sold_on": "<string>",
"sold_price": 0,
"gross_profit": 0,
"hold_days": 0
},
"months_to_resolution": 123,
"foreclosed": {
"deed_date": "<string>",
"buyer_is_lender": true
},
"investor_id": "<string>",
"co_borrower_investor_ids": [
"<string>"
],
"borrower_keys": [
"<string>"
],
"as_of": "<string>",
"dated": true
}The Lender loan
One loan of a lender: the parcel, the source table, the terms as filed, the purpose, the deal, the outcome and any take-back deed.
GET /v1/lenders/{id}/loans: a recorded instrument with the
parcel it sits on. property_id is the key to
the parcel’s financing block.
Two tables, one instrument
source says where the row comes from. OPEN is an open lien position at the slice date, 1 to 4 per parcel. An open
row carries the estimated balance, rate, term and maturity from the open-lien table. RECORDED is a slot of the
recorded mortgage history, the 5 most recent per parcel. The same instrument is in both tables when the parcel, the
recording date and the amount match. Then in_both is true, loan_key is the same on both rows, and the default
source=both serves the open row alone.
positionis the row’s slot in its own table. On an open row it is the lien position, where 1 is senior. On a recorded row it is the history slot, where 1 is the oldest kept slot and the highest filled slot is the newest.open_positionis the lien position of the instrument on either row. It is null when a recorded row has no open twin.lender_idis the lender of record. When the instrument is in both tables, it is the recorded history’s lender. It equals the path id on this route.lender_id_openis the lender the open table names.lender_disagreesis true when the two differ: the insurer (HUD, the VA) against the servicer, or a spelling the dictionary does not join yet.lender_name_as_recordedis the spelling on this row as the file writes it. It is the spelling the parcel’s financing block serves.lender_classandidentity_basisdescribe that spelling.
What the file states and what is read from it
loan_amount, recording_date, due_date, term_months, interest_rate and loan_type come from the file.
current_balance, and the rate on an open row, are the file’s estimates at the slice date. These fields come
from them:
| Field | Read from |
|---|---|
product | The construction and credit-line flags and loan_type: CONSTRUCTION, HELOC or OTHER. Never from the label. |
term_band | term_months, else the maturity date less the recording date. UNKNOWN when neither is on file, which is most hard-money rows. product_basis says which. |
product_proxy | An inference from the term, named as a proxy. BRIDGE is an OTHER loan of 24 months or less. RENTAL_TERM is a loan of 30 years or more from a hard-money lender. The third value is RETAIL. Null when the term is unknown. |
label | The file’s transaction label, mapped to a closed list. Null on most open rows. A label never decides if a loan financed a purchase. |
balance_outlier | current_balance over $5,000,000. The lender’s open_balance leaves such a row out. |
amount_outlier | loan_amount over $5,000,000: a facility amount the file records on every parcel a commercial facility covers. The row stays, but the lender’s volumes and amount quartiles leave the amount out. n_amount_excluded_24m counts them. |
on_resold_parcel | The deeds show a sale of the parcel more than 30 days after the recording. The loan is probably paid off, so open_balance leaves it out. |
blanket_group_id | The open rows of one loan recorded across 5 or more parcels. blanket_n_parcels counts them. |
What the deeds say about the loan
Since 0.16.0 every row carries a join to the recorded deeds, and four fields read the join. Each is null on a registry built before the deed link, wherepurchase_measured is false on the lender’s profile. That null means not measured.
| Field | Read from |
|---|---|
purpose | The deeds on the parcel, never the label. PURCHASE when a priced deed ($10,000 or more) is dated in the 45 days up to and including the recording date. NOT_PURCHASE when the deed registry covers those days, the parcel has priced deeds and none falls in them. That is a refinance, a second, a HELOC or a construction draw. UNKNOWN when the registry does not cover the window. A purchase-money HELOC is both purpose: PURCHASE and product: HELOC. |
deed | On a PURCHASE row, the deed it financed: dt, price and loan_to_price. The last is the amount over the price, to 4 decimals. Above 1 it is a rehab holdback on top of the price, not an error. Above 3 without a blanket group it is null, because the amount is a facility amount, not a loan on this parcel. Null on every other row. |
deal | The investor deal the loan ties to: a purchase by a registered investor in the 45 days before the recording, link_window: STRICT. LOOSE reaches from 15 days after to 90 days before, and no count includes it. is_purchase_loan marks the deal’s purchase loan: the largest amount in the window, then the earliest. secondary_loans_n on it counts the others, for example a second or a rehab draw. investor_id and investor_name are the buyer’s. bought_on, bought_price, sold_on, sold_price, gross_profit and hold_days are what the deeds show. Null when the loan ties to no deal. |
outcome, months_to_resolution | What became of a loan tied to a deal, read from the deed chain after it. FORECLOSED, since 0.19.0: a take-back deed on the parcel more than 90 days after the loan, before any resale or later mortgage. The foreclosed block below carries it. RESOLVED_BY_RESALE: a priced deed on the parcel after the loan. A distressed deed’s credit-bid price is not a resale. REFINANCED: a later mortgage in either table, with no resale first. OPEN: an open lien position at the slice date and nothing later. UNKNOWN: the chain runs out. months_to_resolution is the months from the recording to the take-back deed, the resale or the refinance, to 1 decimal. It is null otherwise. Both are a performance proxy, never a payment history. Null when deal is null. |
investor_id, co_borrower_investor_ids, borrower_keys, borrower_match | The borrowers as keys, the registered investor they resolve to, and how. A key is 12 hex characters hashed from each folded name, in the file’s order. On an open lien that names no borrower, the key is the owner of record. That applies when the owner held the parcel on the recording date and no sale followed. When several investors match, the registered investor is the one with the most deals, and co_borrower_investor_ids holds the others. borrower_match says how: DEAL, ENTITY_NAME, PERSON_NAME, PARTY, MORTGAGE_ONLY or OWNER_OF_RECORD. The API serves keys and ids, never names, to every key. Null when the row has no borrower source. |
as_of is the slice date, and meta.dated[] on the response names the lenders and financing
blocks.
Foreclosed
foreclosed (since 0.19.0) is on every dated row, tied to a deal or not. It is the earliest take-back deed on the
parcel more than 90 days after the recording. The deed must come before any priced resale and before any later
mortgage from another lender. A trustee’s deed recorded within 90 days of a loan is the buyer’s own auction purchase,
not a foreclosure of it. The block is null when no such deed followed, and null on every row of a registry built
before the take-back join. On a loan tied to a deal, the same deed makes outcome read FORECLOSED.
The block carries the instrument, the deed_date and buyer_is_lender. The instrument is TRUSTEES_DEED,
SHERIFFS_DEED or DEED_IN_LIEU. The flag is true when the grantee is this lender under any of its spellings. It is
false when the grantee is the trustee, the servicer or another lender.
A take-back deed is a deed, read from the county’s records. It says the loan ended at foreclosure, never when the
borrower missed payments. foreclosed=true on the route keeps these rows. The
lender’s takebacks block is the same deeds counted from the grantee’s
side.
Contact data
borrowers[] is the borrowers of a RECORDED row as the recorded history names them. They are the same names the
parcel’s Financing object carries on mortgage_history[].borrowers[] for that
slot. An OPEN row names none, because the open-lien table carries no borrower. The field is a contact field, and
this host does not serve it. The row carries no borrowers key and no contact_redacted flag, as the parcel products
do.
Lender names (lender_name_as_recorded, assigned_lender_name) are business records of the loan. The API serves them
in full on every key, whatever the lender_class.
The CSV representation
WithAccept: text/csv on GET /v1/lenders/{id}/loans, each row is one line
of lender-<id>-loans.csv. The file has one column per field above, in the same order, under a header row. The header
row names these columns, in this order:
- Market, Property id, Address, City, ZIP, Source, Position, Loan key, In both
- Lender id, Lender id (open), Lender disagrees, Lender as recorded, Lender class, Identity basis
- Recording date, Due date, Loan amount, Amount outlier, Current balance, Balance outlier, On resold parcel
- Interest rate, Term months, Term band, Loan type, Label, Label as recorded
- Product, Product proxy, Product basis, Open position, Assigned lender, Blanket group id, Blanket parcels, County FIPS, Property type
- Since 0.16.0: Purpose, Deed date, Deed price, Loan to price, Deal id, Deal kind, Purchase loan, Outcome, Investor id, Borrower keys, Borrower match
- Since 0.19.0: Foreclosed on, Foreclosed instrument, Foreclosed by lender
- As of, Dated
- Borrowers, the last column
;. Dates are YYYY-MM-DD, money is whole dollars, booleans are true / false
and a null is an empty cell. Borrowers joins the names with ; . It is a contact column, absent on this host like the
borrowers key of the JSON row. The file is the whole filtered window in the requested sort, at most 50,000 rows. See
the CSV section of the route.One loan of the lender. The row carries the parcel, which table the row comes from and if the other table has it too, and the lender as recorded. It carries the amount, balance, rate, term and maturity as the file carries them, and the product, term band and label read from them. It says if the loan financed a purchase and which deed, and names the investor deal linked to it and what became of it. It also carries the borrowers as keys and the investor they resolve to.
Market code, for example phx.
The parcel: the key to GET /v1/properties/{property_id} and its financing block.
^prop_[0-9a-f]{32}$Street address without city, for example "7522 E Cholla St". Null when the parcel is not in the parcel table.
City, upper case. Null when the parcel is not in the parcel table.
5-digit ZIP. Null when the parcel is not in the parcel table.
Which table the row comes from. OPEN: an open lien position at the slice date, 1 to 4 per parcel, with the balance, rate, term and maturity the open-lien table carries. RECORDED: a slot of the recorded mortgage history, the 5 newest per parcel, with older ones lost. The same instrument is in both tables when the dates and amounts match, and in_both says so.
OPEN, RECORDED The row's slot in its source table. For OPEN it is the lien position (1 is senior). For RECORDED it is the history slot: 1 is the oldest kept, the highest filled slot is the newest.
-9007199254740991 <= x <= 9007199254740991The instrument's key, 32 hex characters, from the parcel, the recording date and the amount. It is the same on an open row and its recorded twin, so you can join rows across source. Not an id to store across refreshes.
True when the instrument is in both tables. That is an open row and a recorded slot on the same parcel with the same recording date and amount.
The lender of record: the recorded history's lender on an instrument in both tables, the row's own otherwise. Equals the path id on this route.
^len_[0-9a-f]{12}$The lender the open-lien table names for this instrument. It equals lender_id unless the two tables disagree (lender_disagrees). Null on a recorded row with no open twin, and when that lender is below the person gate.
^len_[0-9a-f]{12}$True when the recorded history and the open table name different lenders for this instrument. That is the insurer (HUD, the VA) against the servicer, or a spelling the registry at as_of does not yet join. False when the instrument is in one table only.
The lender name on this row as the file writes it, for example LENDINGHOME FUNDING CORP under Kiavi's id. This is the spelling the parcel's financing block serves. Null when the file left it blank.
How that spelling reads. Null when the name is blank. How the lender name reads. BANK: a bank, credit union or thrift. NONBANK: a mortgage company or other lending business. PRIVATE: a trust, a seller carry-back or another private party, not the hard-money sense of private lender, which the Lender object carries as is_hard_money. INDIVIDUAL: a person's name. GOVERNMENT: an agency or a public body.
BANK, NONBANK, PRIVATE, INDIVIDUAL, GOVERNMENT How the registry tied that spelling to the lender. Null when the name is blank. How the registry ties the spelling to its lender: NAME_FOLD means the folded name alone joins them. The fold uses upper case, drops punctuation and entity suffixes and spells out abbreviations: WELLS FARGO BANK NA and WELLS FARGO BANK N.A. are one. TRUNCATED_PREFIX: the file cut the name at 30 or 40 characters, and the registry joined it to the one longer name that starts with it. ALIAS_DICTIONARY: a hand-kept row joined it, for a rename such as QUICKEN LOANS to ROCKET MORTGAGE, a trade name or a charter form. A row also covers a spelling the same instrument carries both ways. The registry never merges acquisitions.
NAME_FOLD, TRUNCATED_PREFIX, ALIAS_DICTIONARY The recording date, YYYY-MM-DD. Null when the file carries none.
The maturity date, YYYY-MM-DD. Null when the file carries none, as on most hard-money rows.
The original loan amount, whole dollars. Null when the file carries none.
-9007199254740991 <= x <= 9007199254740991True when loan_amount exceeds $5,000,000. Such an amount is a facility amount the file records on every parcel a commercial facility covers. The row keeps it, but the lender's volumes and amount quartiles leave it out, and n_amount_excluded_24m counts the excluded instruments. Null where loan_amount is null.
The estimated current balance at as_of, whole dollars. Open rows only: null on recorded rows and where the file carries none.
-9007199254740991 <= x <= 9007199254740991True when current_balance exceeds $5,000,000. The lender's open_balance leaves such a balance out. Null where current_balance is null.
True when the deeds show a sale of the parcel more than 30 days after this open row's recording. The loan is probably paid off, so open_balance leaves the row out. Null on recorded rows and where the market has no deed table.
The interest rate, percent as the file writes it. On open rows it is an estimate at as_of. On history rows it is the rate at recording. Null when not on file.
The term in months as the file writes it. Null when not on file.
-9007199254740991 <= x <= 9007199254740991The loan term in months, from the file's term where it carries one, else from the maturity date less the recording date. LE_24M: up to 24 months, the bridge and fix-and-flip range. 25_TO_120M: 25 to 120 months. 121_TO_359M: 121 to 359 months. GE_360M: 30 years and longer. UNKNOWN: neither a term nor a maturity on file, which is most hard-money rows.
LE_24M, 25_TO_120M, 121_TO_359M, GE_360M, UNKNOWN The loan type as the file writes it, for example "New Conventional", "FHA" or "Credit Line (Revolving)". Null when blank or "Unknown (DEFAULT)".
Null when the file's label is blank or unmapped, which it is on most open rows. The file's transaction label, mapped to a closed list. REFI_OR_SECOND: refinance loans and second trust deeds, purchase and non-purchase money lumped together. RESALE_PURCHASE_MONEY: a purchase-money loan on a resale. NEW_PURCHASE_MONEY: a purchase-money loan on a new home. HELOC, CONSTRUCTION and NON_RESIDENTIAL: the file's label of that name. The purchase labels stop in January 2022, and a label never decides if a loan financed a purchase.
REFI_OR_SECOND, HELOC, RESALE_PURCHASE_MONEY, NEW_PURCHASE_MONEY, CONSTRUCTION, NON_RESIDENTIAL The file's transaction label as written, for example "Resale purchase money loans". Null when blank.
What the file says the loan is, read from its flags and loan type and never from the label. CONSTRUCTION: the construction flag or a "Building or Construction Loan" type. HELOC: the credit-line flag or a "Credit Line (Revolving)" type. OTHER: everything else, that is a purchase-money or refinance mortgage of any kind.
CONSTRUCTION, HELOC, OTHER Null when term_band is UNKNOWN. An inference from the term, not a fact the file states. BRIDGE: an OTHER product with a term of 24 months or less, a bridge or fix-and-flip loan. RENTAL_TERM: a term of 30 years or more from a hard-money lender, a DSCR rental loan. RETAIL: any other known term. Null when the term band is UNKNOWN.
BRIDGE, RENTAL_TERM, RETAIL Null when term_band is UNKNOWN. Where the term behind term_band and product_proxy comes from. FILE: the file's own term in months. TERM: the registry computed it from the maturity date less the recording date. Null when the term band is UNKNOWN.
FILE, TERM The open lien position of the instrument. On an open row it is the row's own. On a recorded row in both tables it is the open twin's. Null on a recorded row with no open twin.
-9007199254740991 <= x <= 9007199254740991The lender the loan went to by assignment, as the file writes it. Open rows only. Null when the file records none.
32 hex characters that the open rows of one blanket loan share. A blanket loan has the same lender, date and amount on 5 or more parcels. The grouping leaves out credit lines and banks. Null outside a group.
How many parcels the blanket group spans. Null outside a group.
-9007199254740991 <= x <= 9007199254740991The parcel's 5-digit county FIPS, for example 04013. Null when the parcel table carries none.
The parcel's property type category as the assessor feed writes it, for example "Residential". Null when not on file.
Null on a registry built before the deed link. The loan's purpose, that is if it financed a purchase, read from the recorded deeds and never from the file's label. PURCHASE: a priced deed on the parcel, $10,000 or more, is dated in the 45 days up to and including the recording date. A deed after the loan is a later sale, never this loan's purchase. NOT_PURCHASE: the deed registry covers those 45 days, the parcel has priced deeds, and none falls in them. Such a loan is a refinance, a second, a HELOC or a construction draw. UNKNOWN: the deed registry does not cover the window: its deeds or the parcel's deeds start after the loan, or the market has none.
PURCHASE, NOT_PURCHASE, UNKNOWN The purchase deed the loan financed, on a PURCHASE row. Null on every other row.
Show child attributes
Show child attributes
The investor deal linked to the loan. The deal's purchase date is within 45 days before the recording, or under LOOSE from 15 days after to 90 days before. The loan is its purchase loan or a secondary. Null when the loan ties to no deal, and while the market has no deal link.
Show child attributes
Show child attributes
Null when deal is null. What became of a loan tied to a deal: a performance proxy read from the deed chain, never from a delinquency record or payment history. RESOLVED_BY_RESALE is a priced deed on the parcel after the loan, and REFINANCED is a later mortgage on it in either table before any resale. OPEN is an open lien position at the slice date and nothing later, and UNKNOWN is none of these because the chain runs out. FORECLOSED: a take-back deed on the parcel more than 90 days after the loan's recording, before any priced resale and any later mortgage. A take-back deed is a trustee's deed, a sheriff's deed or a deed in lieu, and the foreclosed block on the loan row carries it. A shorter gap is the auction buyer's own deed, not a foreclosure of this loan.
RESOLVED_BY_RESALE, REFINANCED, OPEN, FORECLOSED, UNKNOWN Months from the recording date to the event that resolved the loan, 1 decimal. The event is the resale deed, the refinancing mortgage or the take-back deed. Null unless outcome is RESOLVED_BY_RESALE, REFINANCED or FORECLOSED.
The earliest take-back deed on the parcel more than 90 days after the recording that precedes any resale or later mortgage. A take-back deed is a trustee's deed, a sheriff's deed or a deed in lieu. A shorter gap is the auction buyer's own deed, not a foreclosure of this loan. The flag buyer_is_lender is true when the grantee is this lender under any of its spellings. On a loan tied to a deal it is the FORECLOSED outcome. Null when none, and on a registry built before the take-back join: takebacks_measured false, or a registry built before the place rankings.
Show child attributes
Show child attributes
The registered investor the borrowers resolve to, the key to GET /v1/investors/{id}. When the borrowers resolve to several investors, the field carries the one with the most deals. Null when no borrower resolves to one, and while the market has no borrower match.
^inv_[0-9a-f]{12}$The other registered investors the borrowers resolve to, most deals first. Empty when none. Null with borrower_keys.
Investor id: inv_ followed by 12 hex characters, for example inv_abaf618f44a3. The id is stable across data refreshes within a market. Store it as the investor's identity.
^inv_[0-9a-f]{12}$The borrowers' keys, one per name the recorded mortgage carries, in the file's order. On an open lien that names none, one key for the owner of record. These are the keys to GET /v1/lenders/{id}/borrowers. They are not names, and the API serves them to every key. Null when the row has no borrower source, that is an open lien naming none whose owner does not qualify. Null also on a registry built before the borrower match.
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}$Null with borrower_keys. 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 The slice date, YYYY-MM-DD. The API reads the row 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?