Skip to content

CRM Data Pulls (Follow Up Boss)

When you ask your agent “who are my hot leads right now?” or “what’s on my plate today?”, you don’t want a guess and you don’t want a 30-second round-trip to Follow Up Boss every time. The CRM Data Pulls tool gives your agent a fast, cached read into your CRM — so the third time you ask in five minutes, the answer is instant, and the FUB API key in your account stops getting spammed.

Tool #08 ships five typed read-only pulls from your connected Follow Up Boss CRM:

  • crm_leads_list — search leads by name / email / phone / stage with paging.
  • crm_lead_get — fetch one lead’s full FUB record (stage, source, custom fields, contact info, last activity).
  • crm_lead_activity — pull a lead’s recent FUB events (calls, texts, emails, notes, tasks) with optional event_types filter.
  • crm_tasks_due — pull tasks due today, tomorrow, this week, or overdue, scoped to the connected FUB user by default.
  • crm_morning_briefing — composite call: today + overdue tasks, top hot leads, and the most recent activity per hot lead — pre-rendered to a markdown summary your agent can drop straight into a chat reply.

These are READS only — to create leads / notes / tasks, log calls / texts, or update stage, your agent uses the existing Follow Up Boss CRM tools (fub_lead_create, fub_note_create, fub_task_create, fub_call_log, fub_text_log, …). See Follow Up Boss CRM for the write-side surface.

The simplest flow is chat — your agent picks the right pull automatically when you ask the right question:

  • “Show me my hot leads”crm_leads_list(stage='Hot')
  • “What’s on my plate today?”crm_morning_briefing()
  • “What’s John Doe doing this week?”crm_lead_get + crm_lead_activity
  • “What tasks are overdue?”crm_tasks_due(timeframe='overdue')

You can also drive every pull manually from the dashboard at Real Estate Tools → CRM Data Pulls — pick a pull type, fill in the inputs, click Pull Now. The page also shows your rolling pull history with cache-hit/miss badges, so you can see exactly what your agent has been pulling on your behalf.

Every pull is keyed on (user_id, agent_id, pull_type, canonical_inputs_hash) and stored for 5 minutes by default — lead_activity and tasks_due use a tighter 3-minute TTL because those dimensions change more often.

  • Cache hit: the pull comes back in <50ms from Postgres. Zero FUB calls. The dashboard shows a green check.
  • Cache miss / expired: the pull goes live to FUB, the result is written back into the cache for the next read. The dashboard shows a refresh arrow.

If you’ve just made changes in FUB and need a fresh read, pass force_refresh=true (typed-tool argument) or click Force refresh in the dashboard. That bypasses the cache and burns one FUB API call from your account’s per-account rate limit.

You can also clear the entire cache for an agent (or just one pull-type) from the dashboard’s Clear cache button — useful after a bulk import or reassignment in FUB to avoid serving stale data.

crm_morning_briefing is a composite — it bundles four sub-pulls into one round-trip:

  1. Tasks due today (in your agent’s timezone)
  2. Overdue tasks
  3. Top N hot leads (default 5)
  4. Recent activity for each of the top 3 hot leads

The result includes a pre-rendered summary_markdown field your agent can drop straight into a chat message:

## Morning Briefing
_Timezone: America/New_York_
### Tasks due today (3)
- Follow up with Maria [Call] — lead #4421
- Send comp report to Dani [Email] — lead #4502
- 2pm tour with Smiths [Showing] — lead #4477
### Overdue tasks (1)
- Old call back to Jake [Call] — lead #4319 (was due 2026-04-25)
### Hot leads (5)
- **Maria Lopez** (#4421) — last activity 2026-04-28
- 3 recent event(s): Call, Note, Email
- **Dani Park** (#4502) — last activity 2026-04-29
...

If one sub-pull fails (FUB rate limit, transient hiccup, network blip), the briefing does not fail the whole call — the failed section renders an _(Section unavailable; please retry.)_ placeholder, the response carries partial=true + a degraded list naming what failed, and the rest of the briefing is still useful. You can hit the dashboard’s Force refresh to retry just that section.

A few things deliberately deferred:

  • FUB only. kvCORE, Sierra Interactive, Compass, and Lofty support is on the v2 roadmap; v1 hard-codes Follow Up Boss as the CRM.
  • Time-based cache invalidation only. A FUB-webhook-driven invalidation path is on the v2 roadmap — for now, force_refresh=true is your bypass.
  • Single connected user for tasks_due. Defaults to the connected FUB user (your account). v2 may add team-agent multi-user pulls for shared accounts.
  • Read-only. To create leads / notes / tasks / log calls, use the existing Follow Up Boss CRM tools.

Every pull is scoped per (user_id, agent_id) — your cache rows are never visible to another user, even if their canonical-input hash collides with yours. Your encrypted FUB API key still lives in Tool #05’s per-user storage; this tool only reads through fub_integration and never sees the plaintext.

  • Follow Up Boss CRM — connect your account and use the write-side fub_* tools (lead/note/task create, call/text log).
  • Lead auto-response — auto-draft a first response to new leads pulled from FUB.