Model MatchHelp

Companies

Search companies with filters

postapi.modelmatch.com/v1/companies

Search and list individual mortgage companies with filters — one row per company. Filter by name, NMLS ID, location (state, county, city, zip), and production metrics (loan volume, units, market share) by period and geography, with sorting and cursor pagination. This is the per-company record search: use it to find specific mortgage lenders/companies or build a filtered company list. (For a single company by ID use the company detail endpoint.) If you only need how many companies match and not the records themselves, send the same request body to countCompanies.

Authorization

x-api-keystringrequired

API key or OAuth token. See Authentication.

Body application/json

advancedFiltersone of
Show child attributes
Option 1object
Show child attributes
childrenone of[]required

Array of filter expressions (AND)

Same shape as its parent.

typeenumrequired
Options:and
Option 2object
Show child attributes
childrenone of[]required

Array of filter expressions (OR)

Same shape as its parent.

typeenumrequired
Options:or
Option 3object
Show child attributes
childone ofrequired

Same shape as its parent.

typeenumrequired
Options:not
Option 4object
Show child attributes
fieldstringrequired
openumrequired

Comparison operator. exists means the field has a REAL value: on fields whose source records an unknown as an in-domain value (e.g. beds, squareFeet, lotSquareFeet, where an unrecorded measurement is stored as 0), those docs count as NOT existing. neq keeps docs with no value — it removes only what is known to equal the value, matching the reading of an exclusion.

Options:eqneqgtgteltltebetweeninmatchgeoDistanceexists
typeenumrequired
Options:filter
valuenull

Comparison value

crmListobject

Scope the result to the caller's CRM. Resolved against the caller's ACTIVE WORKSPACE at query time — list membership is read server-side, so the request never carries member ids. Only company members count; people, branches, offices and manual (unlinked) records on the same list are ignored. mode: "in" with no matching members returns an empty page (not an unfiltered one). Errors: 400 crm_list_requires_workspace when the caller has no active workspace (API-key / OAuth callers must select an organization), 403 / 404 when a named list is not visible to the caller or does not exist, and 400 crm_list_too_large when the selected lists hold more than 50,000 companies in total — narrow the selection rather than get a silently partial answer.

Show child attributes
listsone ofrequired

Which lists: "any" for every Company list the caller can see, or an array of list ids. Membership is the UNION across the selected lists.

Show child attributes
Option 1enum

Every list in the caller's workspace that the caller can see (own, org-wide, or shared with them) and that holds this kind of record — People lists for originators and agents, Company lists for companies.

Options:any
Option 2string[]

Specific CRM list ids (1–50).

modeenumrequired

in — only companies who are a member of the selected list(s). notIn — exclude every company who is a member of the selected list(s); everyone else passes, including companies on none of your lists.

Options:innotIn
excludeBrokerPartnersboolean

true: hide the companies your workspace already partners with — a confidential partner roster your organization supplied to Model Match, attached to the workspace (today: Rocket Pro TPO partners). The roster is never returned; it is applied only as an exclusion. Errors: 400 partner_set_requires_workspace when the request has no active workspace, 403 partner_set_unavailable when the workspace has no partner roster. false or absent: no effect.

filtersone of
Show child attributes
Option 1object
Show child attributes
childrenone of[]required

Array of filter expressions (AND)

Same shape as its parent.

typeenumrequired
Options:and
Option 2object
Show child attributes
childrenone of[]required

Array of filter expressions (OR)

Same shape as its parent.

typeenumrequired
Options:or
Option 3object
Show child attributes
childone ofrequired

Same shape as its parent.

typeenumrequired
Options:not
Option 4object
Show child attributes
fieldstringrequired
openumrequired

Comparison operator. exists means the field has a REAL value: on fields whose source records an unknown as an in-domain value (e.g. beds, squareFeet, lotSquareFeet, where an unrecorded measurement is stored as 0), those docs count as NOT existing. neq keeps docs with no value — it removes only what is known to equal the value, matching the reading of an exclusion.

Options:eqneqgtgteltltebetweeninmatchgeoDistanceexists
typeenumrequired
Options:filter
valuenull

Comparison value

flatFiltersobject
Show child attributes
affordableHousingTractCountone of | null

Number of the entity's loans in qualified affordable-housing tracts. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
affordableHousingTractPctone of | null

Share of the entity's tract-resolved loans in qualified census tracts for affordable-housing programs, 0-100 ({gte:25} = 27,209 originators). Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
avgAsianPctone of | null

Mean Asian (non-Hispanic) share of the population in the tracts the entity lent in, 0-100. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
avgBlackPctone of | null

Mean Black (non-Hispanic) share of the population in the tracts the entity lent in, 0-100. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
avgDenialRateone of | null

Mean share of mortgage applications denied in the tracts the entity lent in, 0-100. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
avgFamilyIncomeone of | null

Mean median family income of the tracts the entity lent in, in whole dollars. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
avgHispanicPctone of | null

Mean Hispanic or Latino share of the population in the tracts the entity lent in, 0-100. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
avgHomeValueone of | null

Mean median home value across the tracts the entity lent in, in whole dollars. A neighborhood statistic — not the entity's average loan size, which is avgLoanAmount. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
avgHomeownershipRateone of | null

Mean owner-occupied share of housing units in the tracts the entity lent in, 0-100. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
avgHouseholdIncomeone of | null

Mean median household income of the tracts the entity lent in, in whole dollars (e.g. {lte:60000}). Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
avgIncomeVsMetroPctone of | null

Mean tract income relative to its metro area, where 100 is parity — {lt:80} is the CRA low/moderate band, and values legitimately exceed 100 (observed up to 412). NOT a 0-100 share. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
avgLoanAmountone of | null

Bound the company's mean loan size for the selected period, derived from TOTAL production across ALL markets — NOT scoped to any geographic filter (city/state/zip/zipCode/geoPoint) in this request. For production INSIDE the geography this request names, read scopedVolume/scopedUnits on the same row, and sort by them to rank companies by it. There are two ways to get production for a geography: POST /companies/{nmlsId}/markets breaks ONE company's production out by market, and POST /loans/analytics/chart with measure: "volume", slice: "loanCompany" and a geographic filter answers the reverse — the companies that actually produced in that geography, each with the volume they produced there.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
avgLowModHouseholdPctone of | null

Mean HUD block-group low/moderate-income HOUSEHOLD share across the tracts the entity lent in, 0-100. A finer-grained measure than lowModIncomeTractPct, which counts whole tracts — not a duplicate of it. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
avgMedianAgeone of | null

Mean median age of the population in the tracts the entity lent in, in years. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
avgMilesToCollegeone of | null

Mean straight-line distance to the nearest college, in miles. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
avgMilesToSchoolone of | null

Mean straight-line distance from the properties the entity lent on to the nearest school, in miles. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
avgMilesToWorshipone of | null

Mean straight-line distance to the nearest place of worship, in miles. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
avgMinorityPctone of | null

Mean non-white share of the population in the tracts the entity lent in, 0-100 ({gte:50} = 63,370 originators). majorityMinorityTractPct is the per-tract-threshold form of the same question. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
avgPopulationone of | null

Mean population of the tracts the entity lent in. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
avgPovertyRateone of | null

Mean share of the population below the poverty line in the tracts the entity lent in, 0-100. Pass whole percents — {gte:0.2} means 0.2%. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
avgTractApplicationsone of | null

Mean number of mortgage applications reported in the tracts the entity lent in, over the year. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
avgTractLoanVolumeone of | null

Mean mortgage dollar volume reported in the tracts the entity lent in, over the year. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
avgTractOriginationsone of | null

Mean number of mortgage originations reported in the tracts the entity lent in, over the year. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
avgWhiteNonHispanicPctone of | null

Mean White (non-Hispanic) share of the population in the tracts the entity lent in, 0-100. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
branchCountone of | null
Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
cityone of | null

Registered business address CITY — where the company is headquartered, NOT where it produced loans. This matches companies whose registered address is in this city; a company headquartered elsewhere is excluded no matter how much it lends here, and a company headquartered here is returned even if it produced nothing here. The row's volume/units/avgLoanAmount remain national totals, so a city filter combined with the default volume sort ranks the largest national producers that happen to be headquartered in this city. For production INSIDE the geography this request names, read scopedVolume/scopedUnits on the same row, and sort by them to rank companies by it. There are two ways to get production for a geography: POST /companies/{nmlsId}/markets breaks ONE company's production out by market, and POST /loans/analytics/chart with measure: "volume", slice: "loanCompany" and a geographic filter answers the reverse — the companies that actually produced in that geography, each with the volume they produced there.

Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
companyTypeone of | null
Show child attributes
Option 1enum

One of (case-insensitive): BANK, CU, OTHER

Options:BANKCUOTHER
Option 2enum[]

Match any of these values

Options:BANKCUOTHER
Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
countyone of | null

Registered business address COUNTY — where the company is headquartered, NOT where it produced loans (same caveats as state; under locationBasis: "production" it selects companies that produced loans in the county instead). Accepts a county name (Travis, with a sibling state when the name exists in several states), a 5-digit FIPS code (48453) or a dictionary county id; an array matches any. The address carries no county of its own, so it matches when the geocoded point of the address lies inside the Census boundary of the county (a company with no geocoded address matches no county). An unrecognized county is a 400. For production INSIDE the geography this request names, read scopedVolume/scopedUnits on the same row, and sort by them to rank companies by it. There are two ways to get production for a geography: POST /companies/{nmlsId}/markets breaks ONE company's production out by market, and POST /loans/analytics/chart with measure: "volume", slice: "loanCompany" and a geographic filter answers the reverse — the companies that actually produced in that geography, each with the volume they produced there.

Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
difficultDevelopmentAreaCountone of | null

Number of the entity's loans in HUD-designated difficult development areas. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
difficultDevelopmentAreaPctone of | null

Share of the entity's tract-resolved loans in HUD-designated difficult development areas, 0-100 ({gte:25} = 93,397 originators). Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
distressedTractCountone of | null

Number of the entity's loans in distressed-or-underserved tracts. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
distressedTractPctone of | null

Share of the entity's tract-resolved loans in distressed-or-underserved nonmetropolitan middle-income tracts, 0-100 ({gte:25} = 11,773 originators). Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
floodHazardTractCountone of | null

Number of the entity's loans in a FEMA special flood hazard area. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
floodHazardTractPctone of | null

Share of the entity's tract-resolved loans in a FEMA special flood hazard area, 0-100 ({gte:25} = 5,212 originators). predominantFloodZone gives the specific zone code. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
geoPointobject

Radius search — { lat, lon, radius } (e.g. radius "15mi" or "24km") — around any office on the agent's record; with locationSource office the CURRENT office, production their transactions.

Show child attributes
latnumberrequired
lonnumberrequired
radiusstringrequired
isBrokerboolean

true: broker shops — non-bank companies that send more of the period's volume to OTHER lenders than they fund themselves. false: everyone else. Computed per period from each company's lender mix. Cannot be combined with mode: "or".

loCountone of | null
Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
loanTypeone of | null
Show child attributes
Option 1enum

One of (case-insensitive): conventional, fha, va, he, heloc, building, commercial, stand_alone_refi, closed_end, reverse, usda, stand_alone_second, aggregate, seller_take_back, sba_participation_trust_deed, balloon, opened_end, assumption, negative_amortization, land_contract, trade, modification, unknown

Options:conventionalfhavahehelocbuildingcommercialstand_alone_reficlosed_endreverseusdastand_alone_secondaggregateseller_take_backsba_participation_trust_deedballoonopened_endassumptionnegative_amortizationland_contracttrademodificationunknown
Option 2enum[]

Match any of these values

Options:conventionalfhavahehelocbuildingcommercialstand_alone_reficlosed_endreverseusdastand_alone_secondaggregateseller_take_backsba_participation_trust_deedballoonopened_endassumptionnegative_amortizationland_contracttrademodificationunknown
Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
loansWithCommunityDataone of | null

How many of the entity's loans in the selected period resolved to a neighborhood — the DENOMINATOR every Community Lending share is taken over. Pair it with a share filter ({gte:25}, 60,399 originators) so a 100% share off two loans does not read as a 100% share off two hundred. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
lowModIncomeTractCountone of | null

Number of the entity's loans that landed in a low- or moderate-income tract, as a count rather than a share. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
lowModIncomeTractPctone of | null

Share of the entity's tract-resolved loans that landed in a low- or moderate-income tract under the Community Reinvestment Act, 0-100. {gte:50} = 'at least half their book is LMI' (36,977 originators, 655 companies, 648 branches). Pass whole percents — {gte:0.5} means half of one percent and matches nearly everyone. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
majorityMinorityTractCountone of | null

Number of the entity's loans in majority-minority tracts. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
majorityMinorityTractPctone of | null

Share of the entity's tract-resolved loans in majority-minority tracts, 0-100 ({gte:50} = 65,654 originators). Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
modeenum
Options:andor
msaone of | null

Registered business address METRO AREA (MSA / CBSA) — companies headquartered in ANY county of the metro (the address point inside the boundary of a member county, as for county); under locationBasis: "production", companies that produced loans in it. 5-digit CBSA code (12420) or metro name (Austin Metro); an array matches any. Member counties per the OMB July-2023 delineation (Connecticut's pre-2022 counties included; 41860 San Francisco Bay Area is the nine-county Bay Area). Unknown/ambiguous names are a 400 naming candidates.

Show child attributes
Option 1string
Option 2string[]
nameone of | null

DEPRECATED — fuzzy name matching is unreliable (name pollution silently returns unrelated companies). Resolve via instantSearch and filter by nmlsId (exact NMLS id) instead. Still functional for now.

Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
namePrefixstring

Prefix name search: every word must start a word of the name ("rock mort" → Rocket Mortgage). No fuzzy/nickname matching; relevance-ranked unless sort is set. Max 100 chars / 6 words (emails, URLs, phones ignored), else 400.

nmlsIdone of | null
Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
opportunityZoneCountone of | null

Number of the entity's loans in Opportunity Zone tracts. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
opportunityZonePctone of | null

Share of the entity's tract-resolved loans in federally designated Opportunity Zone tracts, 0-100 ({gte:10} = 33,520 originators — this is a small-share filter, a 50% floor finds almost nobody). Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
predominantFloodZoneone of | null
Show child attributes
Option 1enum

One of (case-insensitive): A, AE, AH, AO, A99, V, VE

Options:AAEAHAOA99VVE
Option 2enum[]

Match any of these values

Options:AAEAHAOA99VVE
Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
predominantIncomeLevelone of | null
Show child attributes
Option 1enum

One of (case-insensitive): low, moderate, middle, upper

Options:lowmoderatemiddleupper
Option 2enum[]

Match any of these values

Options:lowmoderatemiddleupper
Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
producersOnlyboolean | null
regionone of | null

Registered business address CENSUS REGION / DIVISION (<region>-division-<n>, Census numbering 1–9) — companies headquartered in ANY state of it; under locationBasis: "production", companies that produced loans in it. An array matches any.

Show child attributes
Option 1enum
Options:northeastnortheast-division-1northeast-division-2midwestmidwest-division-3midwest-division-4southsouth-division-5south-division-6south-division-7westwest-division-8west-division-9
Option 2enum[]
Options:northeastnortheast-division-1northeast-division-2midwestmidwest-division-3midwest-division-4southsouth-division-5south-division-6south-division-7westwest-division-8west-division-9
rosterJoinedone of | null

Bound the number of loan officers who joined the company during the selected period — individuals whose sponsorship with the company began inside the window. IMPORTANT — this counts LICENSING EVENTS, not confirmed employer moves. A loan officer holds a separate license record for every state they are sponsored in, and this counts each individual whose sponsorship began or ended inside the window, so a single added or lapsed state license registers as an arrival or a departure even when the person's employment did not change. Measured on large lenders: 13-24% of a 12-month rosterLeft are still sponsored by the same employer today, and 33-50% of a 12-month rosterJoined were already sponsored by it before the window began. Treat both as directional indicators of movement, not as headcounts. rosterJoined and rosterLeft are measured from the same source on the same window basis, so unlike the retired loLoss — which had no arrivals figure computed the same way — the two can legitimately be combined into a churn rate. Both also grow with the window, so a longer period reports more than a shorter one and the periods are comparable in that direction.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
rosterLeftone of | null

Bound the number of loan officers who left the company during the selected period — individuals whose sponsorship with the company ended inside the window. IMPORTANT — this counts LICENSING EVENTS, not confirmed employer moves. A loan officer holds a separate license record for every state they are sponsored in, and this counts each individual whose sponsorship began or ended inside the window, so a single added or lapsed state license registers as an arrival or a departure even when the person's employment did not change. Measured on large lenders: 13-24% of a 12-month rosterLeft are still sponsored by the same employer today, and 33-50% of a 12-month rosterJoined were already sponsored by it before the window began. Treat both as directional indicators of movement, not as headcounts. rosterJoined and rosterLeft are measured from the same source on the same window basis, so unlike the retired loLoss — which had no arrivals figure computed the same way — the two can legitimately be combined into a churn rate. Both also grow with the window, so a longer period reports more than a shorter one and the periods are comparable in that direction.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
ruralGradientone of | null

Mean remoteness of the tracts the entity lent in, on an ORDINAL 1-10 scale (1 = metropolitan core, 10 = most remote). This is a code, not a percent — {gte:7} selects the deepest-rural books (8,886 originators). Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
ruralTractCountone of | null

Number of the entity's loans in rural tracts. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
ruralTractPctone of | null

Share of the entity's tract-resolved loans in rural tracts, 0-100 ({gte:50} = 24,006 originators). ruralGradient is the finer, ordinal form. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
stateone of | null

Registered business address STATE — where the company is headquartered, NOT where it produced loans. This matches companies whose registered address is in this state; a company headquartered elsewhere is excluded no matter how much it lends here, and a company headquartered here is returned even if it produced nothing here. The row's volume/units/avgLoanAmount remain national totals, so a state filter combined with the default volume sort ranks the largest national producers that happen to be headquartered in this state — not the largest producers in it. For production INSIDE the geography this request names, read scopedVolume/scopedUnits on the same row, and sort by them to rank companies by it. There are two ways to get production for a geography: POST /companies/{nmlsId}/markets breaks ONE company's production out by market, and POST /loans/analytics/chart with measure: "volume", slice: "loanCompany" and a geographic filter answers the reverse — the companies that actually produced in that geography, each with the volume they produced there.

Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
teamSizeone of | null
Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
transactionTypeone of | null
Show child attributes
Option 1enum

One of (case-insensitive): purchase, refinance, construction, equity, UNKNOWN

Options:purchaserefinanceconstructionequityUNKNOWN
Option 2enum[]

Match any of these values

Options:purchaserefinanceconstructionequityUNKNOWN
Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
unitsone of | null

Bound the company's TOTAL loan count for the selected period across ALL markets — the same national total the response units returns, NOT scoped to any geographic filter (city/state/zip/zipCode/geoPoint) in this request, exactly as described on the volume filter. For production INSIDE the geography this request names, read scopedVolume/scopedUnits on the same row, and sort by them to rank companies by it. There are two ways to get production for a geography: POST /companies/{nmlsId}/markets breaks ONE company's production out by market, and POST /loans/analytics/chart with measure: "volume", slice: "loanCompany" and a geographic filter answers the reverse — the companies that actually produced in that geography, each with the volume they produced there.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
usdaEligibleTractCountone of | null

Number of the entity's loans in USDA-eligible tracts. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
usdaEligibleTractPctone of | null

Share of the entity's tract-resolved loans in tracts eligible for USDA rural housing programs, 0-100 ({gte:50} = 90,392 originators). Broader than ruralTractPct — eligibility reaches well past what is classified rural. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
volumeone of | null

Bound the company's TOTAL dollar production for the selected period across ALL markets — this is the same national total the response volume returns, and it is NOT scoped to any geographic filter (city/state/zip/zipCode/geoPoint) in this request. Combined with one of those filters it means 'national volume at least this large, AND headquartered in that place' — not 'produced this much there'. For production INSIDE the geography this request names, read scopedVolume/scopedUnits on the same row, and sort by them to rank companies by it. There are two ways to get production for a geography: POST /companies/{nmlsId}/markets breaks ONE company's production out by market, and POST /loans/analytics/chart with measure: "volume", slice: "loanCompany" and a geographic filter answers the reverse — the companies that actually produced in that geography, each with the volume they produced there.

Show child attributes
Option 1number
Option 2number[]

Match any value

Option 3object

Numeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.

Show child attributes
gtnumber
gtenumber
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.

ltnumber
ltenumber
zipone of | null

Registered business address ZIP code — where the company is headquartered, NOT where it produced loans, with the same caveats as state and city: a company headquartered elsewhere is excluded however much it lends in this ZIP, and the row's volume/units/avgLoanAmount remain national totals. Canonical key (matches the response DTO); zipCode is an alias kept for cross-entity consistency with loans/sales. For production INSIDE the geography this request names, read scopedVolume/scopedUnits on the same row, and sort by them to rank companies by it. There are two ways to get production for a geography: POST /companies/{nmlsId}/markets breaks ONE company's production out by market, and POST /loans/analytics/chart with measure: "volume", slice: "loanCompany" and a geographic filter answers the reverse — the companies that actually produced in that geography, each with the volume they produced there.

Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
zipCodeone of | null

Alias of zip, identical behavior — the registered business address ZIP code, i.e. where the company is headquartered, NOT where it produced loans. The row's volume/units/avgLoanAmount remain national totals. For production INSIDE the geography this request names, read scopedVolume/scopedUnits on the same row, and sort by them to rank companies by it. There are two ways to get production for a geography: POST /companies/{nmlsId}/markets breaks ONE company's production out by market, and POST /loans/analytics/chart with measure: "volume", slice: "loanCompany" and a geographic filter answers the reverse — the companies that actually produced in that geography, each with the volume they produced there.

Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
footprintone of

Scoped lender filter(s). Each entry names ONE lender relationship and the metric bounds that must hold INSIDE it — {lender:'<id>', volume:{gte:50000000}} means '$50M funded by that lender', not '$50M somewhere and one loan with them'. Several entries AND together. Geographic market filters are not available on companies: that rollup is not written for these records, so use POST /companies/{nmlsId}/markets (live-aggregated) for a company's geography.

Show child attributes
Option 1object
Show child attributes
avgLoanAmountobject

Dollar volume of the agent's sales financed BY this lender during the selected period — evaluated inside that lender's own bucket, not against the agent's total.

Show child attributes
gtnumber
gtenumber
ltnumber
ltenumber
dimensionenum

Which footprint to address. Only lender is available for companies — it is inferred from a lender key, so you rarely pass this. Name it to ask the ANY-lender question ({dimension:'lender', volume:{gte:50000000}} = 'some single lender they sent $50M to'). A geographic dimension is a 400 naming the per-company markets endpoint, which live-aggregates that answer.

Options:zipcitycountystatelender
lenderone of

Funding lender, as an id from listLenders or instantSearch. Lender names are stored in a normalized dictionary form, so a typed name does not match — resolve it first. Several values UNION.

Show child attributes
Option 1string
Option 2string[]
notboolean

Invert the whole entry: match companies with NO lender relationship matching it (e.g. 'does not send loans to this lender').

productobject

Correlate a product INSIDE this lender relationship — 'FHA business through this lender'.

Show child attributes
avgLoanAmountobject

Dollar volume of the agent's sales financed BY this lender during the selected period — evaluated inside that lender's own bucket, not against the agent's total.

keyone of

Product key(s), lowercase — e.g. fha, conventional, va for loanType; purchase, refinance for transactionType.

mixenum

Which product breakdown inside the market — loan type (fha, conventional, va, …) or transaction type (purchase, refinance, …).

Options:loanTypetransactionType
shareOfUnitsobject

Dollar volume of the agent's sales financed BY this lender during the selected period — evaluated inside that lender's own bucket, not against the agent's total.

shareOfVolumeobject

Dollar volume of the agent's sales financed BY this lender during the selected period — evaluated inside that lender's own bucket, not against the agent's total.

unitsobject

Dollar volume of the agent's sales financed BY this lender during the selected period — evaluated inside that lender's own bucket, not against the agent's total.

volumeobject

Dollar volume of the agent's sales financed BY this lender during the selected period — evaluated inside that lender's own bucket, not against the agent's total.

shareOfVolumeobject

Dollar volume of the agent's sales financed BY this lender during the selected period — evaluated inside that lender's own bucket, not against the agent's total.

Show child attributes
gtnumber
gtenumber
ltnumber
ltenumber
unitsobject

Dollar volume of the agent's sales financed BY this lender during the selected period — evaluated inside that lender's own bucket, not against the agent's total.

Show child attributes
gtnumber
gtenumber
ltnumber
ltenumber
volumeobject

Dollar volume of the agent's sales financed BY this lender during the selected period — evaluated inside that lender's own bucket, not against the agent's total.

Show child attributes
gtnumber
gtenumber
ltnumber
ltenumber
Option 2object[]
Show child attributes
avgLoanAmountobject

Dollar volume of the agent's sales financed BY this lender during the selected period — evaluated inside that lender's own bucket, not against the agent's total.

Show child attributes
gtnumber
gtenumber
ltnumber
ltenumber
dimensionenum

Which footprint to address. Only lender is available for companies — it is inferred from a lender key, so you rarely pass this. Name it to ask the ANY-lender question ({dimension:'lender', volume:{gte:50000000}} = 'some single lender they sent $50M to'). A geographic dimension is a 400 naming the per-company markets endpoint, which live-aggregates that answer.

Options:zipcitycountystatelender
lenderone of

Funding lender, as an id from listLenders or instantSearch. Lender names are stored in a normalized dictionary form, so a typed name does not match — resolve it first. Several values UNION.

Show child attributes
Option 1string
Option 2string[]
notboolean

Invert the whole entry: match companies with NO lender relationship matching it (e.g. 'does not send loans to this lender').

productobject

Correlate a product INSIDE this lender relationship — 'FHA business through this lender'.

Show child attributes
avgLoanAmountobject

Dollar volume of the agent's sales financed BY this lender during the selected period — evaluated inside that lender's own bucket, not against the agent's total.

keyone of

Product key(s), lowercase — e.g. fha, conventional, va for loanType; purchase, refinance for transactionType.

mixenum

Which product breakdown inside the market — loan type (fha, conventional, va, …) or transaction type (purchase, refinance, …).

Options:loanTypetransactionType
shareOfUnitsobject

Dollar volume of the agent's sales financed BY this lender during the selected period — evaluated inside that lender's own bucket, not against the agent's total.

shareOfVolumeobject

Dollar volume of the agent's sales financed BY this lender during the selected period — evaluated inside that lender's own bucket, not against the agent's total.

unitsobject

Dollar volume of the agent's sales financed BY this lender during the selected period — evaluated inside that lender's own bucket, not against the agent's total.

volumeobject

Dollar volume of the agent's sales financed BY this lender during the selected period — evaluated inside that lender's own bucket, not against the agent's total.

shareOfVolumeobject

Dollar volume of the agent's sales financed BY this lender during the selected period — evaluated inside that lender's own bucket, not against the agent's total.

Show child attributes
gtnumber
gtenumber
ltnumber
ltenumber
unitsobject

Dollar volume of the agent's sales financed BY this lender during the selected period — evaluated inside that lender's own bucket, not against the agent's total.

Show child attributes
gtnumber
gtenumber
ltnumber
ltenumber
volumeobject

Dollar volume of the agent's sales financed BY this lender during the selected period — evaluated inside that lender's own bucket, not against the agent's total.

Show child attributes
gtnumber
gtenumber
ltnumber
ltenumber
lenderFiltersobject[]
Show child attributes
canonicalstring

Canonical lender name (the value from lender autocomplete). Resolved to a lender id server-side; pass id instead when you have one.

displayNamestringrequired

Label / typed search string

idstring

Lender-dictionary id — the id from instantSearch / listLenders (e.g. "mortgage_rocket" or "mortgage rocket"), and the same value the lender filter takes. PREFERRED: matched directly against the stored lender key with no name resolution. canonical is still accepted and resolved server-side.

modeenum
Options:includeexclude
percentMinnumber

Minimum percent_of_volume (0–100); 0/undefined = > 0%

typeenum
Options:canonicalfreetext
lenderMatchModeenum
Options:andor
locationBasisenum

What the geographic filters (city/county/msa/region/state/zip/zipCode/geoPoint) select. registeredAddress (the default) matches companies whose REGISTERED BUSINESS ADDRESS is in the place — a company registered elsewhere is excluded no matter how much it lends there. production matches companies that PRODUCED loans in the place, whatever address they are registered at, which is usually what a geographic search means. It changes only WHICH companies are returned: every non-geographic filter applies identically either way, scopedVolume/scopedUnits report in-geography production under both, and countCompanies honors this field, so a count and a list built from the same body always describe the same set. Measured on an 8-state Southeast search: under registeredAddress the largest actual producer in the region is absent at any depth, because it is registered in Michigan.

Options:registeredAddressproduction
paginationobject
Show child attributes
cursorstring

Opaque cursor from previous response for next page

sizeinteger

Page size (1-100, default 25)

periodenum

Pre-aggregated period block. Rolling windows (last30Days, last60Days, last90Days, previousMonth, currentMonth) are NOT accepted here and return 400; they are supported on the loans, sales and market endpoints (list, count, breakdowns, analytics summary / time-series / chart) (see DatedPeriod).

Options:2017201820192020202120222023202420252026last3Monthslast6Monthslast12Monthslast14Monthslast16Monthslast18Monthslast24MonthsyearToDateallTime
productMixobject[]

Loan-product share / volume bands for the selected period, ANDed: [{product:"fha", minShare:30}] = FHA is at least 30% of the company's period volume; [{product:"va", volume:{gte:5000000}}] = at least $5M of VA. products lets ANY of several types satisfy one entry. Whole-book figures across all markets.

Show child attributes
basisenum

volume (default) or units (loan count).

Options:volumeunits
maxSharenumber

Upper bound, 0–100 percent. No bucket = 0% (passes).

minSharenumber

Lower bound, 0–100 percent of the period book.

productenum

The loan product. Send this OR products, not both.

Options:conventionalfhavahehelocbuildingcommercialstand_alone_reficlosed_endreverseusdastand_alone_secondaggregateseller_take_backsba_participation_trust_deedballoonopened_endassumptionnegative_amortizationland_contracttrademodificationunknown
productsenum[]

Several products, ANY of which may satisfy the bounds on its own (each type's share is read separately, never summed): {products:["fha","va","usda"], minShare:30} = FHA, VA or USDA is on its own at least 30% of the book. Send this OR product.

Options:conventionalfhavahehelocbuildingcommercialstand_alone_reficlosed_endreverseusdastand_alone_secondaggregateseller_take_backsba_participation_trust_deedballoonopened_endassumptionnegative_amortizationland_contracttrademodificationunknown
volumeobject

Dollar volume of THIS type in the period, {gte, lte} — e.g. {gte: 5000000} = at least $5M of FHA. Evaluated inside the same type bucket as the share bounds; a company with no loans of the type does not match.

Show child attributes
gtenumber
ltenumber
sortobject[]
Show child attributes
fieldenumrequired
Options:namenmlsIdcompanyTypecitystatezipvolumeunitsavgLoanAmountbranchCountscopedVolumescopedUnitsteamSizeloCountrosterJoinedrosterLeftproducersOnlypurchaseSharerefinanceShare
orderenum
Options:ascdesc
transactionMixobject[]

Transaction-type share bands for the selected period, ANDed: [{transactionType:"purchase", minShare:60}] = purchases are at least 60% of the company's period volume.

Show child attributes
basisenum

volume (default) or units (loan count).

Options:volumeunits
maxSharenumber

Upper bound, 0–100 percent. No bucket = 0% (passes).

minSharenumber

Lower bound, 0–100 percent of the period book.

transactionTypeenumrequired
Options:purchaserefinanceconstructionequityUNKNOWN
volumeobject

Dollar volume of THIS type in the period, {gte, lte} — e.g. {gte: 5000000} = at least $5M of FHA. Evaluated inside the same type bucket as the share bounds; a company with no loans of the type does not match.

Show child attributes
gtenumber
ltenumber

Responses

200objectPaginated list of companies
Show attributes
cursorstring
dataobject[]required
Show child attributes
avgLoanAmountnumber | null

Mean loan size for the selected period, derived from the TOTAL volume and units across ALL markets — NOT scoped to any geographic filter (city/state/zip/zipCode/geoPoint) in this request. For production INSIDE the geography this request names, read scopedVolume/scopedUnits on the same row, and sort by them to rank companies by it. There are two ways to get production for a geography: POST /companies/{nmlsId}/markets breaks ONE company's production out by market, and POST /loans/analytics/chart with measure: "volume", slice: "loanCompany" and a geographic filter answers the reverse — the companies that actually produced in that geography, each with the volume they produced there.

citystring | null
companyTypestring | null
idstringrequired

Document ID

loCountnumber | null
namestring | null
nmlsIdstring | null
purchaseSharenumber | null

Purchase loans as a 0–100 percent of the company's period loan COUNT — the value sort: [{field: "purchaseShare"}] orders by. null when it made no purchase loans in the period (sorts as 0).

refinanceSharenumber | null

Refinance loans as a 0–100 percent of the company's period loan COUNT — the value sort: [{field: "refinanceShare"}] orders by. null when none (sorts as 0).

rosterJoinednumber | null

Loan officers who joined the company during the selected period — individuals whose sponsorship with the company began inside the window. IMPORTANT — this counts LICENSING EVENTS, not confirmed employer moves. A loan officer holds a separate license record for every state they are sponsored in, and this counts each individual whose sponsorship began or ended inside the window, so a single added or lapsed state license registers as an arrival or a departure even when the person's employment did not change. Measured on large lenders: 13-24% of a 12-month rosterLeft are still sponsored by the same employer today, and 33-50% of a 12-month rosterJoined were already sponsored by it before the window began. Treat both as directional indicators of movement, not as headcounts. rosterJoined and rosterLeft are measured from the same source on the same window basis, so unlike the retired loLoss — which had no arrivals figure computed the same way — the two can legitimately be combined into a churn rate. Both also grow with the window, so a longer period reports more than a shorter one and the periods are comparable in that direction.

rosterLeftnumber | null

Loan officers who left the company during the selected period — individuals whose sponsorship with the company ended inside the window. IMPORTANT — this counts LICENSING EVENTS, not confirmed employer moves. A loan officer holds a separate license record for every state they are sponsored in, and this counts each individual whose sponsorship began or ended inside the window, so a single added or lapsed state license registers as an arrival or a departure even when the person's employment did not change. Measured on large lenders: 13-24% of a 12-month rosterLeft are still sponsored by the same employer today, and 33-50% of a 12-month rosterJoined were already sponsored by it before the window began. Treat both as directional indicators of movement, not as headcounts. rosterJoined and rosterLeft are measured from the same source on the same window basis, so unlike the retired loLoss — which had no arrivals figure computed the same way — the two can legitimately be combined into a churn rate. Both also grow with the window, so a longer period reports more than a shorter one and the periods are comparable in that direction.

scopedUnitsnumber | null

The company's loan count INSIDE the geography this request names, on the same basis as scopedVolume. Sortable. When the request names no geography — or names one only inside an or group or a negation — the scope is everywhere, and this is identical to the unscoped figure beside it. Reconciles with POST /companies/{nmlsId}/markets for the same geography and period: both are computed from the same recorded transactions and neither excludes transactions with no identified loan officer.

scopedVolumenumber | null

The company's dollar production INSIDE the geography this request names — what a city/state/zip/zipCode/geoPoint filter was almost certainly asking for, and what the sibling volume is not. Sort by scopedVolume to rank companies by it. When the request names no geography — or names one only inside an or group or a negation — the scope is everywhere, and this is identical to the unscoped figure beside it. Reconciles with POST /companies/{nmlsId}/markets for the same geography and period: both are computed from the same recorded transactions and neither excludes transactions with no identified loan officer.

statestring | null
teamSizenumber | null
unitsnumber | null

The company's TOTAL loan count for the selected period across ALL markets — NOT scoped to any geographic filter (city/state/zip/zipCode/geoPoint) in this request, exactly as described on volume. For production INSIDE the geography this request names, read scopedVolume/scopedUnits on the same row, and sort by them to rank companies by it. There are two ways to get production for a geography: POST /companies/{nmlsId}/markets breaks ONE company's production out by market, and POST /loans/analytics/chart with measure: "volume", slice: "loanCompany" and a geographic filter answers the reverse — the companies that actually produced in that geography, each with the volume they produced there.

volumenumber | null

The company's TOTAL dollar production for the selected period across ALL markets — NOT scoped to any geographic filter (city/state/zip/zipCode/geoPoint) in this request. Those filters select WHICH companies are returned, by registered business address, and never change WHAT is summed here. Since the list sorts by volume descending by default, a geo-filtered search ranks companies by NATIONAL production, so the top row can be many times larger than that company's production inside the filtered area. For production INSIDE the geography this request names, read scopedVolume/scopedUnits on the same row, and sort by them to rank companies by it. There are two ways to get production for a geography: POST /companies/{nmlsId}/markets breaks ONE company's production out by market, and POST /loans/analytics/chart with measure: "volume", slice: "loanCompany" and a geographic filter answers the reverse — the companies that actually produced in that geography, each with the volume they produced there.

zipstring | null
locationNormalizationsobject[]

How each location filter value resolved. Present when a city/county/state/zip filter was supplied.

Show child attributes
candidatesstring[]

Location ids matching an ambiguous name, ranked. Use instantSearch or suggestLocations to pick one.

confidenceenumrequired

"exact" — matched a dictionary entry as written. "normalized" — resolved to a different spelling or merged several candidates. "fallback" — NOT resolved; the raw value was passed through, so a zero result means the name was not recognized rather than empty.

Options:exactnormalizedfallback
displayNamestringrequired
fieldstringrequired

The filter key this applies to

idstring

Resolved location id — pass this back for an exact filter

normalizedstringrequired
originalstringrequired
variantsstring[]

Spellings actually queried against the index

totalnumberrequired
400objectValidation error. Includes unresolvable location filters: a `city`/`county`/`state`/`zip` value that does not match a recognized location returns 400 rather than an empty result set. Resolve the name with `instantSearch` (use an id from its `results.locations[]`) or `suggestLocations` (use the `id` of a `source: "dictionary"` result), then pass that id back as the filter value.
401objectUnauthorized
403objectForbidden (authenticated, but missing required context — e.g. no active organization)
404objectNot found
413objectResponse payload too large — detail endpoint capped to fit Lambda response limits
503objectSearch timed out or the cluster is overloaded — retry after `Retry-After` seconds.