Market
Did the move pay off? Production before vs after moving
For loan officers who moved in the window (default last 24 months), annualized production at the previous employer vs the new one, bucketed by pre-move tier (Low <25, Mid 25–99, High 100+ units/yr). Each side is annualized over the months actually spent there inside a trailing 24-month production window; movers with fewer than windowMonths months on either side are excluded. A move is dated by the loan officer's FIRST record at the new company; a loan officer licensed in several states counts once per company. Location filters use the loan officer's CURRENT NMLS location. Results refresh weekly. A response not ready within 25 s answers 202 (MovementComputing): repeat the same request after retryAfterMs.
Authorization
Query parameters
dateRangestringReporting window. last_N_months = the N most recent COMPLETED calendar months (the current month is excluded); year_to_date = Jan 1 through the end of last month; YYYY (or fy_YYYY) = that calendar year; all_time. Default last_12_months.
statestringTwo-letter state. Matches the loan officer's CURRENT NMLS location, not where they were when they moved.
statesstringComma-separated two-letter states (e.g. a region). ORed; combined with state when both are sent.
citystringExact city name of the loan officer's current NMLS location. Pair with state.
companyCategorystringComma-separated company categories (BANK, CU, OTHER) applied to the company whose roster changed — the destination for arrivals, the company left for departures.
windowMonthsenumMinimum months a mover must have on EACH side of the move inside the 24-month production window (default 3).
3612Responses
200objectOKShow attributesHide attributes
caveatsobjectrequiredShow child attributesHide child attributes
floorMonthsnumberrequiredtotalMoversAnalyzednumberrequiredtotalMoversExcludednumberrequiredtotalMoversInRangenumberrequiredtruncatedbooleanrequiredAlways false: every mover in the window is analyzed. Kept for compatibility.
tiersobject[]requiredShow child attributesHide child attributes
deltaobjectrequiredShow child attributesHide child attributes
unitsChangePctnumberrequiredvolumeChangePctnumberrequiredmoverCountnumberrequiredpostMoveobjectrequiredShow child attributesHide child attributes
meanUnitsnumberrequiredmeanVolumenumberrequiredmedianUnitsnumberrequiredmedianVolumenumberrequiredpreMoveobjectrequiredShow child attributesHide child attributes
meanUnitsnumberrequiredmeanVolumenumberrequiredmedianUnitsnumberrequiredmedianVolumenumberrequiredtierKeyenumrequiredlowmidhightierLabelstringrequiredwindowobjectrequiredThe resolved reporting window (inclusive dates).
Show child attributesHide child attributes
endDatestringrequiredmonthsnumberrequiredstartDatestringrequired202objectStill computing — poll the same request after `retryAfterMs`. See `MovementComputing`.Show attributesHide attributes
retryAfterMsintegerrequiredSuggested wait before repeating the SAME request (also sent as Retry-After, in seconds).
statusenumrequiredcomputing400objectValidation error401objectUnauthorized403objectForbidden (authenticated, but missing required context — e.g. no active organization)404objectNot found413objectResponse payload too large — detail endpoint capped to fit Lambda response limits503objectSearch timed out or the cluster is overloaded — retry after `Retry-After` seconds.