Model MatchHelp

Agents

Count agents matching filters

postapi.modelmatch.com/v1/agents/count

Return the exact number of agents matching the given filters. Accepts the same request body as listAgents (pagination and sort are ignored). Use this when you only need a total; to get the matching agents themselves, send the same request body to listAgents.

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 real-estate-agent members count; loan officers 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 agents in total — narrow the selection rather than get a silently partial answer.

Show child attributes
listsone ofrequired

Which lists: "any" for every People 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 agents who are a member of the selected list(s). notIn — exclude every agent who is a member of the selected list(s); everyone else passes, including agents on none of your lists.

Options:innotIn
excludeOfficeGroupsenum[]

Drop these brand groups (same gate).

Options:compass_legacyanywherefranchiseothers
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
activeListingsone of | null

Current active listings (not period-scoped). {gte: 1} = has listings.

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
avgMortgagedLoanAmountone of | null

Mean loan size across the agent's financed deals — the price band their buyers actually borrow in.

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
avgSalePriceone 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
buyerUnitsone 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
buyerVolumeone 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

City — matches across ALL of an agent's location signals (listed city, office address, AND transaction/production markets), OR'd together. An agent can match this city while their row's displayed city/state (their primary market) is elsewhere. Cities in several states: write each as "City, ST" (["Springfield, IL", "Austin, TX"]) — each binds to its own state; a bare name plus a state list cross-pairs.

Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
countyone of | null

County, keyed by 5-digit county FIPS code (e.g. 06037 = Los Angeles, CA; 04013 = Maricopa, AZ). By default matches agents who closed transactions in this county (production alone — unlike city/state/zip, which an office address also satisfies); with locationSource: "office" it matches agents whose CURRENT office lies inside the county boundary. A county NAME is REJECTED with a 400 naming the expected format; resolve the name to its FIPS code first (via instantSearch), or use city/state, which do accept names. Location dimensions AND with each other, so county + state returns only agents matching both.

Show child attributes
Option 1string
Option 2string[]

Match any of several counties

currentOfficeone of | null

Brokerage/office name(s), OR'd: each a case-insensitive whole-word phrase ("compass" matches "Compass RE", not "Encompass"); end with * for a prefix ("washington fine*"); names with punctuation ("@properties") match as a substring. {match} is a fuzzy single-name match. Matches only the agent's CURRENT office; office takes the same values and matches ANY office on record.

Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
currentOfficeKeyone of

Office roster: agents whose CURRENT office is this office id (the id from listOffices / instantSearch, raw or encoded). Several ids OR.

Show child attributes
Option 1string
Option 2string[]
dualUnitsone 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
dualVolumeone 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
emailone of | null

Email address, matched EXACTLY (case and surrounding whitespace normalized). Matches the agent's current email OR any email in their contact history, so an agent is found by an address they used on past transactions. An array matches any.

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

Drop agents whose CURRENT office matches these names.

Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
excludeOfficeone of | null

Drop agents with ANY office matching these names (same grammar as office).

Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
firstNameone of | null

Deprecated: the fuzzy name filters can return the wrong agent. Resolve the agent via instantSearch (POST /v1/instant-search) and pass the returned id to the id filter for an exact match.

Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
geoPointobject | null

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
hasEmailboolean

Whether the row's email is populated.

hasPhoneboolean

Whether the row's phone is populated.

idone of | null

Exact agent id — the id returned by instantSearch (same value as modelMatchId). Resolves the agent by its canonical ModelMatch id or any since-merged legacy id. Preferred over the fuzzy name filter.

Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
lastNameone of | null

Deprecated: the fuzzy name filters can return the wrong agent. Resolve the agent via instantSearch (POST /v1/instant-search) and pass the returned id to the id filter for an exact match.

Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
lastTransactionDateone of | null

Date of the agent's newest deal inside the selected period — "recently active". {gte: "2026-07-01"}. Only producing agents carry it.

Show child attributes
Option 1string

Exact date, or a whole period: YYYY-MM-DD (that day), YYYY-MM (the whole month — "2025-06" = 2025-06-01 through 2025-06-30) or YYYY (the whole year). YYYYMMDD, MM/DD/YYYY, an ISO-8601 datetime and epoch milliseconds are also accepted. An unparseable value is a 400.

Option 2object

Date range. Excludes null/missing-field docs by default; add includeNulls: true to keep them. Bounds accept YYYY, YYYY-MM, YYYY-MM-DD, YYYYMMDD, MM/DD/YYYY, a full ISO datetime or epoch milliseconds; an unparseable bound is a 400. A partial bound denotes the whole period and expands to the edge that preserves the operator: gte/lt take the period START, gt/lte take the period END — so {gte: "2024"} means on/after 2024-01-01 and {lte: "2024"} means through 2024-12-31.

Show child attributes
gtstring
gtestring
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires a bound.

ltstring
ltestring
licenseNumberone of | null

Real-estate license number, matched EXACTLY. Case and surrounding whitespace are normalized, so EB00084246, eb00084246 and " eb00084246 " all behave identically — paste straight from a spreadsheet or PDF. Punctuation is NOT normalized: 52219-90 and 5221990 are treated as different licenses, because separator-insensitive matching merges distinct agents. Matches against EVERY license on the agent's record, not just the one shown as licenseNumber on the response row — an agent licensed in two states is found by either. Fuzzy {match} is rejected with a 400: a near-miss on a license number is a different person, not a typo to forgive. Present on roughly 49% of agents; the rest carry no license at all and cannot be matched by this filter.

Show child attributes
Option 1string
Option 2string[]

Match any of several licenses

licensedSinceDateone of | null

Original issue date of a real-estate license on the record (any license) — "new agents": {gte: "2025-10-01"}. Lifetime, not period-scoped; on ~26% of agents.

Show child attributes
Option 1string

Exact date, or a whole period: YYYY-MM-DD (that day), YYYY-MM (the whole month — "2025-06" = 2025-06-01 through 2025-06-30) or YYYY (the whole year). YYYYMMDD, MM/DD/YYYY, an ISO-8601 datetime and epoch milliseconds are also accepted. An unparseable value is a 400.

Option 2object

Date range. Excludes null/missing-field docs by default; add includeNulls: true to keep them. Bounds accept YYYY, YYYY-MM, YYYY-MM-DD, YYYYMMDD, MM/DD/YYYY, a full ISO datetime or epoch milliseconds; an unparseable bound is a 400. A partial bound denotes the whole period and expands to the edge that preserves the operator: gte/lt take the period START, gt/lte take the period END — so {gte: "2024"} means on/after 2024-01-01 and {lte: "2024"} means through 2024-12-31.

Show child attributes
gtstring
gtestring
includeNullsboolean

Also keep docs where the field is null/missing (a range filter drops them by default). Requires a bound.

ltstring
ltestring
modeenum
Options:andor
modelMatchIdone of | null

Alias of id — the agent's ModelMatch id. Exact match (canonical or since-merged legacy id).

Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
mortgagedBuyerUnitsone of | null

Count of the agent's buyer-side deals that were financed — the sharpest 'how many mortgage introductions can this agent make' number on the record.

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
mortgagedBuyerVolumeone of | null

Dollar volume of the agent's BUYER-side deals that were financed. Measured independently of buyerVolume, not carved out of it, so it is not guaranteed to be smaller.

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
mortgagedDualUnitsone of | null

Count of the agent's dual-agency deals that were financed.

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
mortgagedDualVolumeone of | null

Dollar volume of the agent's dual-agency deals that were financed.

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
mortgagedSellerUnitsone of | null

Count of the agent's seller-side (listing) deals whose buyer financed.

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
mortgagedSellerVolumeone of | null

Dollar volume of the agent's SELLER-side (listing) deals whose buyer financed.

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
nameone of | null

Deprecated: the fuzzy name filters can return the wrong agent. Resolve the agent via instantSearch (POST /v1/instant-search) and pass the returned id to the id filter for an exact match.

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 ("jen ro" → Jennifer Rodriguez). No fuzzy/nickname matching; relevance-ranked unless sort is set. Max 100 chars / 6 words (emails, URLs, phones ignored), else 400.

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

Match any value

Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
percentUnitsMortgagedone of | null

Share of the agent's TRANSACTIONS that were financed with a mortgage, as a 0–100 percent — the by-count twin of percentVolumeMortgaged, and the better one when deal size varies wildly. Same 0–100 clamp.

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
percentVolumeMortgagedone of | null

Share of the agent's sale volume that was financed with a mortgage, as a 0–100 percent. {gte:80} = 'almost everything they sell is financed' (211,079 agents over the last 12 months); {lte:20} finds cash-heavy books. Values are clamped at 100 — a small number of records carry a computed percent above 100, and they are treated as fully financed rather than silently kept or dropped. Bounds outside 0–100 are rejected.

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
phoneone of | null

US phone number, any formatting ((512) 555-0100, 512.555.0100, +1 5125550100) — reduced to its 10 digits. Matches the agent's current direct phone OR any phone in their contact history; office/brokerage lines are not searched. Anything that is not a 10-digit US number is a 400. An array matches any.

Show child attributes
Option 1string
Option 2string[]
producersOnlyboolean | null
sellerUnitsone 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
sellerVolumeone 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
stateone of | null

State — matches across ALL of an agent's location signals (listed state, office address, AND transaction/production markets), OR'd together. So an agent whose office is in another state still matches if they closed transactions here.

Show child attributes
Option 1string
Option 2string[]

Match any value

Option 3object

Fuzzy text match

Show child attributes
matchstringrequired
totalCompaniesWorkedWithone of | null

How many distinct mortgage COMPANIES financed this agent's deals in the selected period.

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
totalLendersWorkedWithone of | null

How many distinct LENDERS financed this agent's deals in the selected period.

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
totalOriginatorsWorkedWithone of | null

How many DISTINCT loan officers financed this agent's deals in the selected period. {lte:1} finds agents with a single LO relationship — the displacement target; {gte:5} finds agents who spread their referrals around. Same number shown on the response row.

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
unitsone 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
volumeone 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
zipone of | null

ZIP — matches across ALL of an agent's location signals, OR'd together: an office postal code, OR a ZIP they actually closed transactions in (their production market). So an agent whose office is elsewhere still matches if they sold here, and the zip shown on their row (their primary market) can differ from the one you searched. Supply the 5-digit form; ZIP+4 input is reduced to its 5-digit prefix. Canonical key; zipCode is an accepted alias.

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. Kept so the zipCode spelling used by loans/sales works here too.

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 financing relationship and the metric bounds that must hold INSIDE it — {lender:'<id>', volume:{gte:10000000}} means '$10M of their sales were financed by that lender', not '$10M of sales and one deal with them'. Several entries AND together. Geographic market filters are not available here: use POST /v1/agents/{id}/markets (live-aggregated) for an agent'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 agents — it is inferred from a lender key, so you rarely pass this. Name it to ask the ANY-lender question ({dimension:'lender', volume:{gte:10000000}} = 'some single lender financed $10M of their sales'). A geographic dimension is a 400 naming the per-agent markets endpoint, which live-aggregates that answer.

Options:zipcitycountystatelender
lenderone of

Financing 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 agents with NO lender relationship matching it.

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.

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 agents — it is inferred from a lender key, so you rarely pass this. Name it to ask the ANY-lender question ({dimension:'lender', volume:{gte:10000000}} = 'some single lender financed $10M of their sales'). A geographic dimension is a 400 naming the per-agent markets endpoint, which live-aggregates that answer.

Options:zipcitycountystatelender
lenderone of

Financing 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 agents with NO lender relationship matching it.

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.

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
includeenum[]

Opt-in row blocks.

Options:contactsofficesloanMix
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
locationSourceenum

Which location signal city/state/zip/county, geoPoint and near match. any (default) = an office OR a market they transacted in (geoPoint: any office on record); office = their CURRENT office (a bare state also matches the state on their member record; county = the office inside the county boundary); production = transaction markets only.

Options:anyofficeproduction
losOnMyTeamobject

Relationship with loan officers at the CALLER's company, resolved server-side from the caller's profile NMLS id and that LO's current employer; the caller's own deals never count. 400 los_on_my_team_requires_company when the caller has no NMLS id on their profile or it resolves to no company.

Show child attributes
minUnitsinteger

Buyer-side deals with ONE colleague that count as a relationship (default 1). Under doesNotWorkWith, agents below it still pass.

relationshipenumrequired

worksWith — the agent's buyers were financed by loan officers at the caller's company; doesNotWorkWith — no such relationship (prospects).

Options:worksWithdoesNotWorkWith
nearobject[]

Radius search, entries OR'd, on the locationSource points (current office / transactions / either). With city+state an entry also matches addresses in that city beyond the radius.

Show child attributes
citystring
latnumberrequired
lonnumberrequired
radiusstringrequired
statestring
officeGroupsenum[]

Current office in any of these brand groups. Needs the rocket-filter entitlement (else 403).

Options:compass_legacyanywherefranchiseothers
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[]

Agents whose buyers financed with these loan products in the selected period, ANDed: [{product: "fha"}, {product: "va", minShare: 10}]. Not a whole-book share — the index stores product mix per mortgage company only.

Show child attributes
minSharenumber

Minimum financed volume of this product through ONE mortgage company, as a percent of the agent's period sale volume. Omit for 'any deal financed with this product'.

productenumrequired

Loan product (case-insensitive). government = FHA, VA or USDA.

Options:conventionalfhavausdagovernmentheheloccommercialbuildingreverse
sideDominanceenum[]

Which side the agent mostly represents in the selected period, OR'd: buyer = more buyer-side than seller-side deals, seller = the reverse (a tie is neither), dual = at least one dual-agency deal.

Options:buyersellerdual
sortobject[]

city, state, zip and office order by the agent's CURRENT office — the same office each row shows. Agents with no current-office address sort last in both directions, including agents whose state comes only from their license record. The city/state/zip FILTERS are broader: they match any office or any sale location.

Show child attributes
fieldenumrequired
Options:officecitystatezipvolumeunitsavgSalePricebuyerVolumebuyerUnitssellerVolumesellerUnitsdualVolumedualUnitsnamefirstNamelastNameemailproducersOnlymortgagedBuyerVolumemortgagedBuyerUnitsmortgagedSellerVolumemortgagedSellerUnitsmortgagedDualVolumemortgagedDualUnits+4 more
orderenum
Options:ascdesc

Responses

200objectExact count of matching agents
Show attributes
lenderNormalizationsobject[]

How each lenderName value resolved against the lender dictionary. Present when a lenderName filter was supplied.

Show child attributes
aliasCountintegerrequired

Stored lender-name variants this id expands to

displayNamestring | nullrequired
idstring | nullrequired

Canonical lender-dictionary id, or null

matchedViaenumrequired

id = the value already WAS a canonical key; alias = a stored lender name; name = matched the display/canonical name; unresolved = fell back to raw text match; degraded = the dictionary could not be consulted.

Options:idaliasnameunresolveddegraded
originalstringrequired

The value the caller sent

totalDocumentsintegerrequired

Loans the dictionary attributes to this id. A small number next to a well-known lender name means the name matched a minor entry.

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

totalintegerrequired

Exact count of records matching the filters

400objectValidation error
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
503objectLocation dictionary temporarily unavailable. Only returned for a NEGATED location filter (`neq`, or `not`), which cannot be honoured without resolving the excluded value — answering anyway would return the records you asked to exclude. Positive location filters are unaffected. Retry shortly; the filter value itself was not rejected. Also returned, as `SearchUnavailable` (`error`: `search_timeout` / `search_overloaded`, `retryable: true`, `Retry-After`), when the search ran out of time or the cluster shed it.