Every loan officer and recruiter has the same problem on Monday morning: a long list of people they could call, and time for a few of them. Predictive Signals reorders that list for you. Each signal looks at the loan officer, company, loan and transaction history Model Match already tracks, and hands back the people to reach first, with the reasons in plain English.
Why Loan Officer A ranks first
Loan officers leaving Example Mortgage Co., by month
24 left in the last 6 monthsabout 20% of the company
Show data
| Month | Left |
|---|---|
| 17 mo ago | 2 |
| 16 mo ago | 1 |
| 15 mo ago | 2 |
| 14 mo ago | 1 |
| 13 mo ago | 2 |
| 12 mo ago | 2 |
| 11 mo ago | 1 |
| 10 mo ago | 2 |
| 9 mo ago | 1 |
| 8 mo ago | 2 |
| 7 mo ago | 1 |
| 6 mo ago | 2 |
| 5 mo ago | 3 |
| 4 mo ago | 4 |
| 3 mo ago | 4 |
| 2 mo ago | 5 |
| 1 mo ago | 4 |
| This month | 4 |
Loan officers in CO, highest recruiting priority first
lo-move- 1
Loan Officer A
Example Mortgage Co. · Denver, CO
99th
percentile
About 20% of their company's loan officers moved to another company in the last 6 months
- 2
Loan Officer B
Sample Home Loans · Boulder, CO
97th
percentile
Joined their current company about 8 months ago
- 3
Loan Officer C
Placeholder Lending · Aurora, CO
95th
percentile
Has changed companies about once every 2 years
Time since each client's last loan with you
Your top-ranked past clients, from their last loan to today
- 100 Example AveFHA · 2021
- 200 Sample StConventional · 2020
- 300 Placeholder RdVA · 2022
Show data
| Past client | Last loan | Year |
|---|---|---|
| 100 Example Ave | FHA | 2021 |
| 200 Sample St | Conventional | 2020 |
| 300 Placeholder Rd | VA | 2022 |
Your past clients, most at risk of going elsewhere first
client-retention- 1
100 Example Ave
Last loan: FHA purchase · 2021
98th
percentile
Their last loan was a home purchase loan, and buyers often refinance elsewhere.
- 2
200 Sample St
Last loan: Conventional · 2020
96th
percentile
It has been 6 years since their last loan with this loan officer.
- 3
300 Placeholder Rd
Last loan: VA · 2022
93th
percentile
This was their first loan with this loan officer.
Why Agent A ranks first
Deals closed together, by month: a steady rhythm, then a gap
4 months without a dealusually one every 2 months
Show data
| Month | Deals |
|---|---|
| 24 mo ago | 1 |
| 22 mo ago | 1 |
| 20 mo ago | 2 |
| 18 mo ago | 1 |
| 16 mo ago | 1 |
| 14 mo ago | 1 |
| 12 mo ago | 2 |
| 10 mo ago | 1 |
| 8 mo ago | 1 |
| 6 mo ago | 1 |
| 4 mo ago | 1 |
Buyer's agents to reconnect with, highest priority first
agent-pulse- 1
Agent A
Example Realty
99th
percentile
You usually close a deal together every 2 months. It has been 4 months since the last one.
- 2
Agent B
Sample Properties
96th
percentile
This is one of your top 3 agents by deals closed together this past year.
- 3
Agent C
Placeholder Homes
92th
percentile
You've closed 3 deals together this past year.
Three signals, three questions
Recruiting Radar
Which loan officers in this state should I talk to about a move?
lo-moveClient Retention Risk
Which past clients should I call before their next loan goes to someone else?
client-retentionRelationship Pulse
Which buyer's agents should I reconnect with for another closed deal?
agent-pulseRecruiting Radar ranks the loan officers active in a state by how strongly their history and their company’s recent movement point to a move to a new company in the next six months. You can also look up one loan officer’s priority.
Client Retention Risk takes one loan officer’s past clients, the properties they financed between six months and ten years ago, and puts first the ones most at risk of taking their next refinance or equity loan to someone else.
Relationship Pulse takes the buyer’s agents a loan officer has closed with and puts first the relationships most worth working toward another closed deal in the next six months.
Scores are recomputed on a regular schedule, so the lists move as the market does.
Why it matters
For recruiters, the best time to start a conversation is before a loan officer is on the market. Recruiting Radar surfaces the people whose situation has changed, such as a short stint at their current company or a wave of departures from their team, so outreach starts with the people most worth a call.
For loan officers, your past clients are some of the best repeat business you have, and that book erodes quietly. Client Retention Risk tells you whose next refinance is most at risk of going elsewhere, so you can call them first. Relationship Pulse does the same for your referral partners: it notices when an agent you usually close with every couple of months has gone quiet.
For everyone, the reasons do the explaining. You don’t have to trust a number. Each row says why it ranks where it does, in sentences you could repeat on the call.
Reading a signal
Every row carries the same three things:
| Field | What it means |
|---|---|
score | A priority score from 0 to 1. Higher means higher priority. Use it to order and to set a cutoff. |
percentile | Where that score sits, from 0 to 100, among everyone scored for this signal nationally. 100 is the highest priority. On the state list it is still the national percentile. |
reasons | Up to three plain-language sentences explaining why this row is a priority, for example “Joined their current company about 8 months ago”. |
Ranked lists also include rank (1 is the highest priority), and every row has scoredAt, the time its score was computed.
A priority, not a promise
Signals rank who to reach out to first. They don’t tell you what anyone will do, so read a high score as “call this person early”, not as a certainty.
Get started
Rolling out now
Predictive Signals are rolling out to the API, the TypeScript SDK and the MCP server. If a signal answers 503 while its first scores land, try again a little later. The endpoints appear in the API reference as they go live.
Get an API key
Create a personal API key under Settings → Security & Access in Model Match. See Authentication for the details. Prefer to skip code? Connect the MCP server to Claude or ChatGPT instead.
Pick a market for recruiting
Call GET /v1/signals/lo-move?state=CO to get the loan officers in a state, highest recruiting priority first. Page through with limit and cursor.
Drill into one loan officer
GET /v1/originators/{nmlsId}/signals/lo-move returns one loan officer’s recruiting priority and reasons. Pair it with the originator profile you already pull.
Work a loan officer's book
/v1/originators/{nmlsId}/signals/client-retention lists their past clients most at risk first. /v1/originators/{nmlsId}/signals/agent-pulse lists the agent relationships to reconnect with.
Recruiting Radar: loan officers to talk to in a state
curl "https://api.modelmatch.com/v1/signals/lo-move?state=CO&limit=25" \
-H "x-api-key: mm_your_key_here"import { createClient } from "@model-match/api";
const client = createClient({ apiKey: process.env.MODEL_MATCH_API_KEY });
const result = await client.signals.listLoMove({
query: { state: "CO", limit: 25 },
});
const rows = result.data.data; // highest recruiting priority firstWith the MCP server connected, ask in plain language:
Which loan officers in Colorado should I prioritize for recruiting right now? Show the top 10 and why.
The assistant uses the predictiveSignals tool.
{
"data": [
{
"nmlsId": "1234567",
"name": "Loan Officer A",
"companyName": "Example Mortgage Co.",
"companyNmlsId": "7654321",
"city": "Denver",
"state": "CO",
"score": 0.42,
"percentile": 99.1,
"reasons": [
"About 20% of their company's loan officers moved to another company in the last 6 months",
"Joined their current company about 8 months ago"
],
"scoredAt": "2026-11-10T00:00:00.000Z"
}
],
"cursor": "eyJleGFtcGxlIjoiY3Vyc29yIn0"
}
For one loan officer, call GET /v1/originators/{nmlsId}/signals/lo-move (client.signals.getOriginatorLoMove({ path: { nmlsId } })). It returns the same row under data.
Client Retention Risk: past clients to call first
curl "https://api.modelmatch.com/v1/originators/1234567/signals/client-retention?limit=25" \
-H "x-api-key: mm_your_key_here"const result = await client.signals.getOriginatorClientRetention({
path: { nmlsId: "1234567" },
query: { limit: 25 },
});
const clients = result.data.data; // most at risk firstWhich of my past clients should I call this week before their next refinance goes to someone else? My NMLS ID is 1234567.
{
"data": [
{
"rank": 1,
"propertyId": "example-property-id",
"address": "100 Example Ave",
"city": "Denver",
"state": "CO",
"zip": "80202",
"lastLoanDate": "2021-06-15",
"lastLoanType": "FHA",
"score": 0.63,
"risk": 0.63,
"percentile": 98.4,
"reasons": [
"Their last loan was a home purchase loan, and buyers often refinance elsewhere.",
"This was their first loan with this loan officer."
],
"scoredAt": "2026-11-10T00:00:00.000Z"
}
],
"cursor": "eyJleGFtcGxlIjoiY3Vyc29yIn0"
}
risk carries the same value as score here: higher means more at risk of going elsewhere.
Relationship Pulse: agents to reconnect with
curl "https://api.modelmatch.com/v1/originators/1234567/signals/agent-pulse?limit=10" \
-H "x-api-key: mm_your_key_here"const result = await client.signals.getOriginatorAgentPulse({
path: { nmlsId: "1234567" },
query: { limit: 10 },
});
const agents = result.data.data; // highest priority first, up to 50Which buyer’s agents should loan officer 1234567 reconnect with first, and why?
{
"data": [
{
"rank": 1,
"agentId": "example-agent-id",
"agentName": "Agent A",
"agentLinked": true,
"score": 0.37,
"percentile": 99.3,
"reasons": [
"You usually close a deal together every 2 months. It has been 4 months since the last one.",
"This is one of your top 3 agents by deals closed together this past year."
],
"scoredAt": "2026-11-10T00:00:00.000Z"
}
]
}
When agentLinked is true, pass agentId to the agent routes to pull the full profile. When it is false, the id only identifies the agent within this list.
Good to know
What does it cost?
One credit per row returned, like the rest of the API. A single loan officer’s Recruiting Radar lookup is one credit.
How many rows can I get?
Recruiting Radar and Client Retention Risk return up to 100 rows per page (25 by default) and page with cursor. Pass the cursor from one response to get the next page; it is absent on the last page. Relationship Pulse returns up to 50 rows in one response.
What if a loan officer isn't scored?
A 404 means the loan officer has no predictive scores at all. A 200 with an empty data list means they are scored, but have nothing on that signal, for example no past clients in scope.
What does a 503 mean?
Signals are temporarily unavailable, for example while a signal’s first scores land. Retry later.