59 min readIntelligence & insights

Implementation Guide: Score leads by engagement signals and recommend next-best action for agents

Step-by-step implementation guide for deploying AI to score leads by engagement signals and recommend next-best action for agents for Real Estate clients.

Hardware Procurement

Business Laptop — Agent Workstations

DellDell Latitude 5550 (i5-1345U, 16GB RAM, 256GB SSD)Qty: 10

$850 per unit MSP cost / $1,100 suggested resale

Primary workstation for agents to access Follow Up Boss CRM dashboard, view scored lead lists, and manage next-best-action workflows. Minimum spec for running Chrome with multiple CRM tabs, video calls, and email simultaneously.

Dual Monitor — Secondary Display

DellDell P2425H 24-inch IPS MonitorQty: 10

$220 per unit MSP cost / $300 suggested resale

Second screen allows agents to view CRM lead board on one display and MLS listings or email on the other, reducing context switching during follow-up calls.

Professional USB Headset

Poly (HP)Poly Voyager Focus 2 UC (USB-A)Qty: 10

$180 per unit MSP cost / $250 suggested resale

Active noise-canceling headset for scored-lead follow-up calls. Required for VoIP integration with Follow Up Boss calling features and Structurely AI voice handoffs. USB-A model for universal compatibility.

Business-Grade Wireless Access Point

UbiquitiUniFi U6 Pro (U6-Pro)Qty: 2

$160 per unit MSP cost / $230 suggested resale

Ensures reliable Wi-Fi coverage throughout the office for mobile CRM access and VoIP quality. Two units for redundancy and coverage in typical 2,000–4,000 sq ft real estate office.

Software Procurement

Follow Up Boss Pro

Follow Up Boss (Zillow Group)SaaS — per-plan (up to 10 users)Qty: Pro plan: up to 10 users; Platform plan: up to 30 users

$416/month (Pro plan) or $833/month (Platform plan)

Central CRM hub and integration backbone. Provides website tracking pixel for behavioral scoring, smart lists for lead prioritization, two-way email/text sync, native integrations with 250+ lead sources (Zillow, Realtor.com, Facebook Lead Ads, Google Ads), call tracking, and API access for custom scoring workflows. AI features included at no additional charge.

Revaluate

Revaluate Inc.SaaS — per-contact-tier

$139/month per 2,000 contacts; scale as needed (e.g., $278/mo for 4,000 contacts)

Predictive analytics engine that scores existing CRM contacts for move likelihood using 200+ public and proprietary data signals (social media activity, life events, financial indicators). Assigns a 0–100 Reva Score indicating probability of moving in the next 6–12 months. Enables proactive outreach to sphere-of-influence contacts before they list with a competitor.

Structurely AI ISA

StructurelySaaS — per-lead-volumeQty: $149/month (starter, ~50 leads) to $450/month (250 leads); $0.50–$1.50 per additional lead

$149–$450/month

AI-powered Inside Sales Agent that engages new inbound leads via SMS text and voice within 60 seconds of inquiry, 24/7/365. Qualifies leads by asking budget, timeline, pre-approval status, and property preferences. Hands off qualified leads to the assigned agent with full conversation context. Replaces $3,000–$5,000/month human ISA cost.

Zapier Professional

Zapier Inc.SaaS — usage-based (tasks/month)

$49/month (2,000 tasks) or $69/month (5,000 tasks) — Professional plan

Integration middleware that connects Follow Up Boss, Revaluate, Structurely, email marketing, and custom webhooks. Executes multi-step Zaps for composite lead score calculation, next-best-action routing, Slack/push notifications, and data enrichment workflows.

$14/user/month

Professional email with custom domain for SPF/DKIM/DMARC compliance, Google Sheets for score override tracking, Google Calendar for showing scheduling integration, and Google Chat/Spaces for internal agent notifications.

Slack Pro (Optional)

Salesforce (Slack)per-seat SaaS

$8.75/user/month (annual billing)

Real-time notification channel for hot lead alerts. Zapier sends instant Slack messages when a lead score exceeds threshold, delivering next-best-action cards with one-click CRM deep links. Optional — can substitute with Google Chat or Follow Up Boss native notifications.

Leadflow (Optional Add-On)

LeadflowSaaS — subscription

$99/month (starter)

Optional supplemental predictive scoring that analyzes 250+ data points per property to predict seller likelihood with a 0–1,000 score. Useful for listing-focused teams who want property-level predictions in addition to contact-level Revaluate scores.

Prerequisites

  • Active Realtor® membership with local MLS board for all agents who will use the system
  • Business-grade internet connection: minimum 50 Mbps download / 10 Mbps upload with < 50ms latency
  • Custom domain name owned by the brokerage (e.g., brokerage.com) with DNS management access for CNAME, SPF, DKIM, and DMARC record configuration
  • Google Workspace or Microsoft 365 already provisioned with individual agent email accounts on the brokerage domain
  • Existing lead database exported as CSV with minimum fields: first name, last name, email, phone, lead source, lead date, status/stage. Minimum 500 contacts recommended; 1,000+ preferred for meaningful scoring patterns
  • Current lead source accounts set up and active (e.g., Zillow Premier Agent, Realtor.com, Facebook Business Manager with Lead Ads, Google Ads account)
  • IDX/property search website live and accessible — either existing WordPress + IDX plugin site or willingness to use Follow Up Boss's built-in Pond sites
  • Brokerage managing broker's written authorization for CRM data migration and AI-assisted lead communication (required for TCPA compliance)
  • Signed TCPA-compliant consent language in all web forms, registration pages, and lead capture points — consult real estate attorney before go-live
  • Credit card or ACH payment method authorized for recurring SaaS subscriptions totaling approximately $700–$1,100/month
  • Team organizational chart: list of all agents with roles (team lead, buyer agent, listing agent, ISA), round-robin assignment preferences, and territory/zip code assignments
  • Minimum 2 hours of availability per agent blocked for training sessions during weeks 5–6 of implementation

Installation Steps

...

Step 1: Discovery & Data Audit

Conduct a 90-minute discovery call with the brokerage team lead and managing broker. Document current lead sources and monthly volume, existing CRM (if any), lead routing rules, agent specializations, pain points with current follow-up process, and compliance posture. Export the existing contact database and perform a data quality audit: check for duplicate records, missing email/phone fields, invalid formats, and lead source attribution gaps. Create a data cleanup plan.

1
Export existing CRM data to CSV
CSV cleanup using Python pandas
bash
# checks for missing fields, duplicates, and outputs a cleaned export

pip install pandas
python3 -c "import pandas as pd; df = pd.read_csv('leads_export.csv'); print(f'Total records: {len(df)}'); print(f'Missing emails: {df.email.isna().sum()}'); print(f'Missing phones: {df.phone.isna().sum()}'); print(f'Duplicates: {df.duplicated(subset=["email"]).sum()}'); df.drop_duplicates(subset=['email'], keep='first', inplace=True); df.to_csv('leads_cleaned.csv', index=False); print(f'Cleaned records: {len(df)}')"
Note

If the brokerage has no existing CRM and leads are in spreadsheets or email inboxes, add 1–2 weeks to timeline for manual data collection and structuring. Request the last 12 months of closed transaction data from the transaction management system (Dotloop/SkySlope) to establish baseline conversion metrics.

Step 2: DNS & Email Authentication Configuration

Configure the brokerage domain's DNS records to support Follow Up Boss email sending, Structurely SMS/voice, and marketing email deliverability. Add SPF, DKIM, and DMARC records. Create a CNAME for the Follow Up Boss tracking pixel domain. This prevents emails from landing in spam and ensures lead engagement tracking works correctly.

1
In DNS management panel, edit TXT record to add SPF record for brokerage.com
2
Add DKIM as TXT record: fub._domainkey.brokerage.com → (provided DKIM value — Follow Up Boss will provide a unique DKIM key during onboarding)
3
Create DMARC TXT record at _dmarc.brokerage.com
4
Create CNAME record for FUB tracking pixel: tracking.brokerage.com
5
Verify propagation using dig and nslookup
DNS records: SPF, DMARC, and CNAME for Follow Up Boss tracking pixel
dns
v=spf1 include:_spf.google.com include:followupboss.com include:structurely.com ~all

_dmarc.brokerage.com  TXT  "v=DMARC1; p=quarantine; rua=mailto:dmarc-reports@brokerage.com; pct=100"

tracking.brokerage.com  CNAME  track.followupboss.com
Verify DNS propagation
bash
dig TXT brokerage.com +short
dig CNAME tracking.brokerage.com +short
nslookup -type=txt _dmarc.brokerage.com
Note

DNS propagation can take up to 48 hours. Configure DNS early in the project to avoid delays. If using Microsoft 365 instead of Google Workspace, replace _spf.google.com with spf.protection.outlook.com in the SPF record. Use MXToolbox (https://mxtoolbox.com) to verify all records after propagation.

Step 3: Follow Up Boss Pro Account Setup & Configuration

Create the Follow Up Boss Pro account, configure the team structure, import cleaned leads, set up lead source tracking, and configure the website tracking pixel. This is the foundational CRM layer that all other components integrate into.

1
Sign up at https://www.followupboss.com — select Pro plan
2
In Admin > Team: Add all agents with roles: - Team Lead: full access + reporting - Buyer Agents: own leads + shared pool access - Listing Agents: own leads + seller pipeline
3
Configure Lead Routing (Admin > Lead Flow): - Round Robin: equal distribution among buyer agents - First-to-Claim: for high-value Zillow leads - Direct Assignment: listing leads to listing specialists
4
Install tracking pixel on IDX website — add to <head> of all pages
5
Import cleaned leads: Admin > Import > Upload leads_cleaned.csv — Map fields: first_name, last_name, email, phone, source, created_date, stage
6
Configure Smart Lists (Leads > Smart Lists > New): - 'Hot Leads': last_activity < 24h AND page_views > 3 - 'Re-engaged': no_activity_30d AND activity_today = true - 'Nurture Pool': last_activity > 30d AND score < 30 - 'Ready to Convert': score >= 70 AND has_phone = true
Follow Up Boss tracking pixel
html
<!-- add to <head> of all pages on IDX website (WordPress example) -->

<!-- Follow Up Boss Tracking Pixel -->
<script>
  (function(d,u,h,s){h=d.getElementsByTagName('head')[0];
  s=d.createElement('script');s.async=1;s.src=u;
  h.appendChild(s);})(document,
  'https://tracking.brokerage.com/fub.js?id=YOUR_FUB_ACCOUNT_ID');
</script>
Note

Follow Up Boss offers a free 14-day trial. Start the trial during Week 1 so configuration happens within the trial period — convert to paid only after confirming the platform fits. Request a dedicated onboarding specialist from FUB (included in Pro plan) to assist with initial setup. The tracking pixel must be on EVERY page of the IDX site, including individual listing pages, for accurate behavioral scoring.

Step 4: Connect Lead Sources to Follow Up Boss

Integrate all active lead generation channels so that new leads flow automatically into Follow Up Boss with source attribution. Each source must be connected via native integration or API webhook to ensure real-time lead delivery and proper scoring context.

Zillow Premier Agent Integration

1
In FUB: Admin > Integrations > Zillow
2
Enter Zillow account credentials → authorize connection
3
Leads auto-route with 'Zillow' source tag

Realtor.com Integration

1
In FUB: Admin > Integrations > Realtor.com
2
Configure email forwarding: forward Realtor.com lead emails to your-unique-code@followupboss.com

Facebook Lead Ads Integration

1
In FUB: Admin > Integrations > Facebook
2
Authorize Facebook Business Manager → select Lead Ad forms
3
Alternatively use Zapier: FB Lead Ads → Follow Up Boss (Create/Update Person)
1
Install FUB pixel on landing pages (same as Step 3)
2
Configure form webhook: POST to the FUB events API endpoint
Google Ads webhook POST request to Follow Up Boss events API
http
POST https://api.followupboss.com/v1/events
Authorization: Basic base64(API_KEY:)

{"source": "Google Ads", "type": "Registration", ...}

Website IDX Registration

  • Already handled by tracking pixel from Step 3
  • Registrations auto-create leads in FUB with full browsing history

Manual / Referral Leads

1
Create Action Plan: Admin > Action Plans > 'New Referral Lead'
2
Trigger: new lead with source = 'Referral'
Note

Test each integration by submitting a test lead from each source and verifying it appears in FUB within 60 seconds with correct source attribution. Zillow leads are extremely time-sensitive — FUB should trigger Structurely AI ISA within 30 seconds of receipt (configured in Step 6). Document all integration connection IDs for future troubleshooting.

Step 5: Revaluate Integration for Sphere-of-Influence Scoring

Connect Revaluate to the existing contact database to score all sphere-of-influence (SOI) contacts for move likelihood. Revaluate analyzes 200+ social and public data signals to predict which contacts are likely to move in the next 6–12 months. These scores supplement the behavioral engagement scores from Follow Up Boss.

1
Sign up at https://app.revaluate.com — select plan based on database size. 2,000 contacts = $139/mo; 4,000 = $278/mo; etc.
2
Connect CRM: Revaluate Settings > Integrations > Follow Up Boss. Enter FUB API key (found in FUB Admin > API). Select sync direction: bidirectional.
3
If no native FUB integration, use Zapier: Trigger: Revaluate > Score Updated. Action: Follow Up Boss > Update Person. Map fields: reva_score -> Custom Field 'Reva Score' (number 0-100), reva_reason -> Custom Field 'Move Likelihood Reason' (text).
4
Import SOI contacts: Export sphere contacts from phone, email, past client list. Upload CSV to Revaluate for initial scoring. Initial scoring batch takes 24–72 hours to complete.
5
Create FUB Smart List for high Reva Score contacts: 'SOI - Likely Movers': custom_field_reva_score >= 70. 'SOI - Watch List': custom_field_reva_score 40-69.
Zapier mapping for Revaluate score sync to Follow Up Boss
zapier
Trigger: Revaluate > Score Updated
Action: Follow Up Boss > Update Person
Map fields:
  - reva_score -> Custom Field 'Reva Score' (number 0-100)
  - reva_reason -> Custom Field 'Move Likelihood Reason' (text)
Note

Revaluate scores are updated monthly as new data signals are detected. The initial batch scoring of an existing database takes 24–72 hours. Not all contacts will receive scores — Revaluate needs sufficient public data signals. Expect 60–70% of contacts to receive usable scores. Remaining contacts should be flagged for manual assessment.

Step 6: Structurely AI ISA Setup & Configuration

Deploy Structurely as the automated AI Inside Sales Agent that handles initial lead qualification for all new inbound leads. Configure conversation scripts, qualification criteria, handoff rules, and integration with Follow Up Boss for seamless agent handoff when a lead is qualified.

1
Sign up at https://app.structurely.com — Select plan based on monthly lead volume. Provide brokerage details for local presence phone numbers.
2
Configure AI Conversation Settings: Settings > Conversation Templates > Real Estate Buyer. Customize qualification questions: Q1: 'Are you currently working with a real estate agent?' Q2: 'What is your ideal timeline to purchase?' Q3: 'Have you been pre-approved for a mortgage?' Q4: 'What areas/neighborhoods are you most interested in?' Q5: 'What is your price range?' | Settings > Conversation Templates > Real Estate Seller: Q1: 'Are you currently listed with an agent?' Q2: 'What is your timeline to sell?' Q3: 'Have you had a recent home valuation?'
3
Connect to Follow Up Boss: Structurely > Integrations > Follow Up Boss. Enter FUB API key. Configure lead routing: New lead in FUB → Structurely engages within 60 seconds | Qualified lead → Structurely adds 'Qualified by AI' tag in FUB | Qualified lead → Structurely creates FUB task: 'Call qualified lead ASAP' | Unqualified/Not Ready → Structurely adds to 'AI Nurture' action plan.
4
Configure Handoff Rules: Hot transfer — If lead says 'I want to see a house today' → Structurely texts agent + creates urgent task. Warm transfer — Lead qualified on all criteria → Structurely sends summary to agent, schedules callback. Nurture — Lead not ready (6+ months out) → Structurely continues monthly check-in texts.
5
Set TCPA-compliant opt-in confirmation: First message must include: 'Reply STOP to opt out at any time.' Configure DNC list scrubbing in Structurely settings.
Critical

CRITICAL COMPLIANCE: Ensure all web forms that generate leads include TCPA-compliant consent language: 'By submitting this form, you consent to receive automated text messages and phone calls from [Brokerage Name] at the number provided. Message frequency varies. Reply STOP to unsubscribe.' Have the brokerage's real estate attorney review all consent language before go-live. Structurely uses local presence phone numbers to increase contact rates — verify these numbers are registered with the carrier registries (10DLC) to avoid SMS filtering.

Step 7: Build Composite Lead Score Engine via Zapier

Create a multi-step Zapier workflow that calculates a composite lead score by combining Follow Up Boss behavioral signals, Revaluate move-likelihood scores, and Structurely qualification status. The composite score is written back to Follow Up Boss as a custom field and triggers next-best-action notifications.

  • Zapier Workflow: 'Composite Lead Score Calculator'
  • Trigger option A: Schedule (every 2 hours) — Zapier Schedule trigger
  • Trigger option B: Follow Up Boss > Person Updated (when activity fields change)
1
Follow Up Boss > Find Person (lookup by ID)
2
Code by Zapier (Python) — Calculate composite score (see code below)
3
Follow Up Boss > Update Person — set Custom Field 'Composite Score' = composite_score, Custom Field 'Lead Tier' = tier, Custom Field 'Behavioral Score' = behavioral_score
4
Filter — Only continue if tier = 'A - Hot'
5
Slack > Send Channel Message (or Google Chat webhook) to #hot-leads: '🔥 HOT LEAD: {name} — Score: {composite_score} | Next Action: {next_best_action} — View in FUB: {fub_link}'
Code by Zapier (Python)
python
# Composite Lead Score calculation for Step 2 of the Zap

behavioral_score = 0

# Email engagement (from FUB fields)
emails_opened = input_data.get('emails_opened', 0)
emails_clicked = input_data.get('emails_clicked', 0)
behavioral_score += min(int(emails_opened or 0) * 2, 20)
behavioral_score += min(int(emails_clicked or 0) * 3, 15)

# Website activity
page_views = input_data.get('page_views', 0)
behavioral_score += min(int(page_views or 0) * 2, 20)

# Property alert engagement
alerts_opened = input_data.get('alerts_opened', 0)
behavioral_score += min(int(alerts_opened or 0) * 3, 15)

# Recency bonus
last_activity_days = int(input_data.get('days_since_last_activity', 999))
if last_activity_days <= 1:
    behavioral_score += 15
elif last_activity_days <= 7:
    behavioral_score += 10
elif last_activity_days <= 30:
    behavioral_score += 5

# Call/text responsiveness
calls_answered = input_data.get('calls_answered', 0)
texts_replied = input_data.get('texts_replied', 0)
behavioral_score += min(int(calls_answered or 0) * 5, 15)
behavioral_score += min(int(texts_replied or 0) * 3, 10)

# Reva score (0-100 from Revaluate)
reva_score = int(input_data.get('reva_score', 0) or 0)

# Structurely qualification
ai_qualified = input_data.get('ai_qualification_status', 'none')
qualification_bonus = 0
if ai_qualified == 'qualified':
    qualification_bonus = 20
elif ai_qualified == 'nurture':
    qualification_bonus = 5

# Composite calculation (weighted)
composite = round(
    (behavioral_score * 0.45) +
    (reva_score * 0.30) +
    (qualification_bonus * 0.25) +
    (min(behavioral_score, 100) * 0.00)  # placeholder for future signals
    , 0)
composite = min(int(composite), 100)

# Determine tier
if composite >= 75:
    tier = 'A - Hot'
elif composite >= 50:
    tier = 'B - Warm'
elif composite >= 25:
    tier = 'C - Nurture'
else:
    tier = 'D - Cold'

output = {'composite_score': composite, 'tier': tier, 'behavioral_score': behavioral_score}
Note

Zapier Professional plan supports multi-step Zaps and the Code by Zapier step (Python/JavaScript). The scoring weights (45% behavioral, 30% Revaluate, 25% AI qualification) should be tuned after 90 days of data. Start with these defaults and adjust based on which signals best predict actual closings. Zapier has a 10-second timeout for Code steps — this calculation completes well within that limit.

Step 8: Build Next-Best-Action Recommendation Engine

Create a Zapier workflow that evaluates each lead's current score, engagement pattern, and pipeline stage to generate a specific next-best-action recommendation. The recommendation is stored in Follow Up Boss and pushed to agents via Slack/notification.

Zapier Workflow 2: 'Next-Best-Action Router' — Trigger: Follow Up Boss > Person Updated (when Composite Score changes)

1
Code by Zapier (Python) — Determine next best action
2
Follow Up Boss > Update Person: Custom Field 'Next Best Action' = next_best_action, Custom Field 'NBA Priority' = priority, Custom Field 'NBA Channel' = channel
3
Filter — Only continue if priority = 'urgent' OR 'high'
4
Slack > Send Direct Message to assigned agent with lead name, score, tier, next best action, phone, email, and FUB link
5
Follow Up Boss > Create Task: Assigned to lead owner agent, Due today (urgent) or tomorrow (high), Description = next_best_action
Code by Zapier (Python)
python
# Next-Best-Action logic for NBA Router workflow

score = int(input_data.get('composite_score', 0))
tier = input_data.get('tier', 'D - Cold')
days_since_activity = int(input_data.get('days_since_last_activity', 999))
page_views_today = int(input_data.get('page_views_today', 0))
ai_status = input_data.get('ai_qualification_status', 'none')
has_phone = input_data.get('has_phone', 'false') == 'true'
reva_score = int(input_data.get('reva_score', 0) or 0)
stage = input_data.get('stage', 'New')
last_action = input_data.get('last_nba', '')

nba = ''
priority = 'normal'
channel = 'email'

# Hot leads with real-time browsing activity
if page_views_today >= 3 and has_phone:
    nba = 'CALL NOW — Lead viewed {0} properties today. Ask about specific listings they browsed.'.format(page_views_today)
    priority = 'urgent'
    channel = 'phone'
elif score >= 75 and ai_status == 'qualified' and has_phone:
    nba = 'CALL — AI-qualified hot lead. Review Structurely conversation notes, then call within 5 minutes.'
    priority = 'urgent'
    channel = 'phone'
elif score >= 75 and ai_status == 'qualified' and not has_phone:
    nba = 'TEXT/EMAIL — AI-qualified but no phone. Send personalized property matches with a call-to-action to schedule a call.'
    priority = 'high'
    channel = 'text'
elif score >= 50 and reva_score >= 70:
    nba = 'SEND CMA — High move likelihood detected by Revaluate. Send a complimentary Comparative Market Analysis for their current home.'
    priority = 'high'
    channel = 'email'
elif score >= 50 and days_since_activity <= 7:
    nba = 'SEND LISTINGS — Active engagement this week. Send 3 curated property matches based on their search criteria.'
    priority = 'normal'
    channel = 'email'
elif score >= 25 and days_since_activity > 30:
    nba = 'RE-ENGAGE — Dormant warm lead. Send market update email with neighborhood stats for their preferred area.'
    priority = 'normal'
    channel = 'email'
elif score >= 25:
    nba = 'NURTURE — Add to monthly market newsletter and quarterly check-in call rotation.'
    priority = 'low'
    channel = 'email'
elif reva_score >= 50 and score < 25:
    nba = 'SOI OUTREACH — Low engagement but moderate move signal. Send personal check-in message (not automated).'
    priority = 'normal'
    channel = 'text'
else:
    nba = 'AI NURTURE — Keep in Structurely automated drip. No manual action needed.'
    priority = 'low'
    channel = 'auto'

output = {'next_best_action': nba, 'priority': priority, 'channel': channel}
Slack Direct Message template sent to assigned agent (Step 4)
text
📋 ACTION REQUIRED for {lead_name}
Score: {composite_score} | Tier: {tier}
➡️ {next_best_action}
📱 {phone} | ✉️ {email}
🔗 Open in FUB: https://app.followupboss.com/people/{fub_id}
Note

The next-best-action logic should be reviewed and tuned quarterly. Track which NBA recommendations lead to actual conversations and closings. After 6 months of data, consider upgrading to a machine learning model trained on actual conversion outcomes. For now, this rule-based system is transparent, explainable, and easy for agents to trust.

Step 9: Configure Follow Up Boss Smart Lists & Dashboard Views

Set up agent-facing Smart Lists in Follow Up Boss that organize leads by composite score tier and next-best-action priority. These lists become the agent's daily work queue — replacing manual lead list management.

1
In Follow Up Boss, navigate to Leads > Smart Lists > Create New
2
Smart List 1: 'My Hot Leads (Score 75+)' — Filters: Assigned To = [current user], Custom Field 'Lead Tier' = 'A - Hot', Sort by: Custom Field 'Composite Score' descending
3
Smart List 2: 'Call Queue — Urgent NBAs' — Filters: Assigned To = [current user], Custom Field 'NBA Priority' = 'urgent', Has phone number = yes, Sort by: Last activity date descending
4
Smart List 3: 'Warm Leads — Follow Up Today' — Filters: Assigned To = [current user], Custom Field 'Lead Tier' = 'B - Warm', Custom Field 'NBA Priority' in ('high', 'normal'), Sort by: Custom Field 'Composite Score' descending
5
Smart List 4: 'SOI Movers — Revaluate Alerts' — Filters: Custom Field 'Reva Score' >= 60, Tag does not contain 'Contacted - Reva', Sort by: Custom Field 'Reva Score' descending
6
Smart List 5: 'AI Nurture — No Action Needed' — Filters: Custom Field 'Lead Tier' in ('C - Nurture', 'D - Cold'), Custom Field 'NBA Priority' = 'low'
7
Team Lead Dashboard List: 'All Hot Leads (Team)' — Filters: Custom Field 'Lead Tier' = 'A - Hot', No assigned-to filter (sees all agents' leads), Sort by: Composite Score descending
Note

Train agents to START their day by opening the 'Call Queue — Urgent NBAs' smart list, then work through 'My Hot Leads,' then 'Warm Leads.' This replaces the old model of scrolling through an unsorted lead list or relying on memory. Pin these smart lists to the FUB sidebar for one-click access.

Step 10: Action Plans & Automated Drip Sequences

Configure Follow Up Boss Action Plans that trigger automatically based on lead tier and next-best-action recommendations. These ensure that even when agents are busy, leads receive timely follow-up.

Action Plan 1: 'Hot Lead — Speed to Lead'

Trigger: New lead + source = Zillow or Realtor.com

1
Day 0, Minute 0: Structurely AI ISA sends initial text (via integration)
2
Day 0, Minute 5: Task → Agent: 'Review AI conversation & call if qualified'
3
Day 0, Minute 30: If no agent action → Email: 'Thanks for your interest...'
4
Day 1: Task → Agent: 'Follow up call attempt #2'
5
Day 2: Text → Lead: 'Did you have questions about properties in [area]?'
6
Day 3: Task → Agent: 'Final call attempt'
7
Day 7: Email → Market update for preferred area

Action Plan 2: 'Warm Nurture — Engagement Drip'

Trigger: Lead Tier changes to 'B - Warm'

1
Day 0: Email → '5 Things to Know About Buying in [City] in 2025'
2
Day 7: Email → 'New Listings Alert: [Preferred Area]'
3
Day 14: Task → Agent: 'Personal check-in call'
4
Day 21: Email → 'Mortgage Rate Update + Calculator Link'
5
Day 30: Task → Agent: 'Review score and adjust plan'

Action Plan 3: 'SOI Reactivation — Move Likely'

Trigger: Reva Score >= 70 (via Zapier updating FUB tag)

1
Day 0: Task → Agent: 'Revaluate flagged as likely mover. Send personal message.'
2
Day 3: Email → 'What's Your Home Worth? Free CMA Offer'
3
Day 7: Task → Agent: 'Follow up on CMA offer'
4
Day 14: Email → 'Market Trends in Your Neighborhood'

Configure Action Plans in FUB

1
Navigate to Admin > Action Plans > New
2
Set triggers, timing, and content for each plan

Use merge fields in email and text content:

Available FUB merge fields for Action Plan templates
text
{{first_name}}, {{assigned_agent_name}}, {{preferred_area}}
Note

Action Plans are Follow Up Boss's built-in automation — no Zapier needed for these. Keep email content short and personal-sounding; avoid heavy HTML templates. FUB tracks open rates and click rates per Action Plan step, feeding data back into the behavioral scoring. Review Action Plan performance monthly and A/B test subject lines and send times.

Step 11: Mobile App Configuration & Push Notifications

Configure the Follow Up Boss mobile app on all agent devices to receive real-time push notifications for hot lead alerts and next-best-action prompts. Agents in the field need immediate awareness of high-priority leads.

1
Install Follow Up Boss mobile app: iOS: https://apps.apple.com/app/follow-up-boss/id955246757 Android: https://play.google.com/store/apps/details?id=com.followupboss.android
2
Agent login with FUB credentials
3
Configure push notification settings (per agent): App > Settings > Notifications: - New Lead Assigned: ON - Task Due: ON - Lead Activity Alert: ON (triggers when lead visits website) - Email/Text Received: ON
4
Configure Slack mobile app (if using Slack for hot lead alerts): Install Slack on agent phones Join #hot-leads channel Enable push notifications for #hot-leads channel mentions
5
Test notifications: Create a test lead in FUB assigned to each agent Verify push notification received within 30 seconds Test Slack hot lead alert via Zapier test run
Note

Many real estate agents are in the field 60%+ of the time. Mobile notifications are not optional — they are the primary way agents receive hot lead alerts. During training, physically verify each agent has notifications working on their device. Disable notification grouping/summarizing on iOS to ensure each alert is seen immediately.

Step 12: Compliance Configuration & TCPA Safeguards

Implement compliance guardrails for Fair Housing, TCPA, CAN-SPAM, and state privacy laws. This is a critical step — non-compliance can result in $500–$1,500 per violation fines under TCPA and Fair Housing enforcement actions.

Add checkbox (pre-unchecked) with the following consent text:

TCPA consent language for lead capture forms
text
By providing your phone number, you consent to receive calls and text
messages, including by automated means, from [Brokerage Name] regarding
real estate services. Message frequency varies. Message and data rates
may apply. Reply STOP to opt out. View our Privacy Policy [link].

2. Follow Up Boss DNC Configuration

1
Navigate to Admin > Settings > Compliance
2
Enable 'Do Not Contact' field sync
3
Import National DNC Registry list for operating zip codes
National DNC Registry download URL
text
https://www.donotcall.gov/

3. CAN-SPAM Compliance for Action Plans

Every automated email must include:

  • Brokerage physical address in footer
  • Unsubscribe link (FUB includes automatically)
  • Accurate 'From' name and email address

4. Fair Housing Scoring Audit

Document that composite scoring uses ONLY the following permitted criteria, and never uses prohibited criteria:

Critical

NEVER use the following in scoring — these are prohibited criteria under Fair Housing law: • Race, color, religion, sex, familial status, national origin, disability (protected classes) • Neighborhood demographic composition • School district ratings as a proxy for demographics

5. State Privacy Law Compliance

Add a privacy policy page to the brokerage website including the following elements. For CA brokerages, also include CCPA-specific disclosures.

  • Categories of personal data collected
  • Purpose of collection (lead scoring disclosed)
  • Data sharing practices
  • Consumer rights (access, deletion, opt-out)
  • Contact method for privacy requests
  • CCPA-specific disclosures (California brokerages only)

6. Create Compliance Documentation Binder

1
Document all scoring criteria, data sources, and consent mechanisms
2
Store in shared Google Drive accessible to the managing broker
Critical

MANDATORY: Have the brokerage's real estate attorney review all consent language, privacy policy updates, and scoring criteria documentation BEFORE go-live. The MSP should not provide legal advice — provide the technical implementation and configuration, but defer legal review to counsel. Schedule a quarterly compliance review as part of the managed services agreement. TCPA penalties are $500–$1,500 PER VIOLATION — a single non-compliant mass text to 500 leads could cost $250,000–$750,000.

Step 13: System Integration Testing & Score Calibration

Conduct end-to-end testing of the complete lead scoring pipeline: from initial lead capture through composite scoring, next-best-action generation, and agent notification. Calibrate scoring weights using historical conversion data.

Test Sequence 1: New Zillow Lead (Full Pipeline)

1
Submit test lead via Zillow test form → verify appears in FUB < 60 seconds
2
Verify Structurely sends initial text within 60 seconds
3
Respond to Structurely as a qualified buyer → verify 'Qualified by AI' tag in FUB
4
Check composite score calculation: should be ~45-55 (new qualified lead)
5
Verify next-best-action: should be 'CALL — AI-qualified hot lead'
6
Verify agent receives Slack notification and FUB task

Test Sequence 2: Website Browsing Behavior

1
Visit IDX site with known tracking cookie (use test lead email)
2
View 5+ property listings within 10 minutes
3
Click on a listing from email alert
4
Verify behavioral score updates within 2 hours (Zapier schedule)
5
Check that Smart List 'My Hot Leads' now includes this lead

Test Sequence 3: Revaluate Score Integration

1
Check test contacts in Revaluate dashboard for scores
2
Verify Reva Score appears in FUB custom field
3
Confirm 'SOI - Likely Movers' Smart List populates correctly
4
Verify SOI Action Plan triggers for high Reva Score contacts

Test Sequence 4: Score Calibration

1
Export last 12 months of closed transactions
2
Cross-reference with current lead scores
3
Calculate: What composite score did actual closings have at time of first contact?
4
Adjust tier thresholds: If closings averaged score 60 at first contact → lower 'Hot' threshold to 60; If closings averaged score 80 → raise threshold to 80

Test Sequence 5: Compliance Verification

1
Submit lead WITHOUT consent checkbox → verify no AI text sent
2
Reply STOP to Structurely → verify all automated comms cease
3
Check all Action Plan emails for physical address and unsubscribe link
4
Verify scoring criteria document contains no protected class references
Note

Allow 1–2 full weeks for testing. Run all test sequences with at least 3 different test leads each. Involve 2–3 agents in User Acceptance Testing (UAT) to catch UX issues. Document all test results in a formal test log for the client handoff package. Score calibration is the most important tuning activity — the default weights work for most brokerages, but actual conversion data always improves accuracy.

Custom AI Components

Composite Lead Score Calculator

Type: workflow A Zapier multi-step workflow that combines behavioral engagement data from Follow Up Boss, predictive move-likelihood scores from Revaluate, and AI qualification status from Structurely into a single composite lead score (0–100). The score is calculated using weighted factors: 45% behavioral engagement, 30% Revaluate move likelihood, and 25% AI qualification status. Scores are categorized into tiers: A-Hot (75+), B-Warm (50–74), C-Nurture (25–49), D-Cold (0–24). The composite score is written back to Follow Up Boss custom fields and triggers downstream next-best-action workflows.

Implementation

Trigger

  • App: Schedule by Zapier
  • Event: Every 2 Hours
  • Alternative Trigger: Follow Up Boss > Updated Person (for real-time on activity change)

Step 1: Follow Up Boss — Find Person

  • Search by: Iterate through all persons updated in last 2 hours
  • Use Zapier Looping or trigger on individual person updates

Step 2: Code by Zapier (Python)

Composite Lead Score
python
# input data mappings and calculation logic

# Input Data mappings from Step 1:
# input_data['emails_opened'] = FUB field: Emails Opened (lifetime)
# input_data['emails_clicked'] = FUB field: Emails Clicked (lifetime)
# input_data['page_views'] = FUB field: Page Views (last 30 days)
# input_data['alerts_opened'] = FUB field: Alerts Opened (last 30 days)
# input_data['days_since_last_activity'] = calculated from FUB Last Activity date
# input_data['calls_answered'] = FUB field: Calls Answered
# input_data['texts_replied'] = FUB field: Texts Replied
# input_data['reva_score'] = FUB Custom Field: Reva Score
# input_data['ai_qualification_status'] = FUB Tag: qualified|nurture|none
# input_data['showing_requests'] = FUB Custom Field: Showing Requests Count

behavioral_score = 0

# --- EMAIL ENGAGEMENT (max 35 pts) ---
emails_opened = int(input_data.get('emails_opened', 0) or 0)
emails_clicked = int(input_data.get('emails_clicked', 0) or 0)
behavioral_score += min(emails_opened * 2, 20)  # 2 pts per open, max 20
behavioral_score += min(emails_clicked * 3, 15)  # 3 pts per click, max 15

# --- WEBSITE ACTIVITY (max 30 pts) ---
page_views = int(input_data.get('page_views', 0) or 0)
behavioral_score += min(page_views * 2, 20)  # 2 pts per view, max 20
showing_requests = int(input_data.get('showing_requests', 0) or 0)
behavioral_score += min(showing_requests * 10, 10)  # 10 pts per showing, max 10

# --- ALERT ENGAGEMENT (max 15 pts) ---
alerts_opened = int(input_data.get('alerts_opened', 0) or 0)
behavioral_score += min(alerts_opened * 3, 15)  # 3 pts per alert, max 15

# --- RECENCY BONUS (max 15 pts) ---
last_activity_days = int(input_data.get('days_since_last_activity', 999) or 999)
if last_activity_days <= 1:
    behavioral_score += 15
elif last_activity_days <= 3:
    behavioral_score += 12
elif last_activity_days <= 7:
    behavioral_score += 10
elif last_activity_days <= 14:
    behavioral_score += 7
elif last_activity_days <= 30:
    behavioral_score += 5

# --- RESPONSIVENESS (max 25 pts) ---
calls_answered = int(input_data.get('calls_answered', 0) or 0)
texts_replied = int(input_data.get('texts_replied', 0) or 0)
behavioral_score += min(calls_answered * 5, 15)  # 5 pts per call, max 15
behavioral_score += min(texts_replied * 3, 10)   # 3 pts per text, max 10

# Cap behavioral at 100
behavioral_score = min(behavioral_score, 100)

# --- REVALUATE MOVE LIKELIHOOD (0-100 scale) ---
reva_score = int(input_data.get('reva_score', 0) or 0)

# --- AI QUALIFICATION BONUS (0-100 scale) ---
ai_status = str(input_data.get('ai_qualification_status', 'none')).lower()
if 'qualified' in ai_status:
    qualification_score = 100
elif 'nurture' in ai_status:
    qualification_score = 25
elif 'attempted' in ai_status:
    qualification_score = 10
else:
    qualification_score = 0

# --- COMPOSITE CALCULATION ---
# Weights: behavioral 45%, revaluate 30%, qualification 25%
composite = round(
    (behavioral_score * 0.45) +
    (reva_score * 0.30) +
    (qualification_score * 0.25)
)
composite = max(0, min(composite, 100))

# --- TIER ASSIGNMENT ---
if composite >= 75:
    tier = 'A - Hot'
elif composite >= 50:
    tier = 'B - Warm'
elif composite >= 25:
    tier = 'C - Nurture'
else:
    tier = 'D - Cold'

# --- TREND DETECTION ---
previous_score = int(input_data.get('previous_composite_score', 0) or 0)
score_change = composite - previous_score
if score_change >= 15:
    trend = 'Rising Fast'
elif score_change >= 5:
    trend = 'Rising'
elif score_change <= -15:
    trend = 'Dropping Fast'
elif score_change <= -5:
    trend = 'Dropping'
else:
    trend = 'Stable'

output = {
    'composite_score': str(composite),
    'tier': tier,
    'behavioral_score': str(behavioral_score),
    'reva_component': str(round(reva_score * 0.30)),
    'qual_component': str(round(qualification_score * 0.25)),
    'trend': trend,
    'score_change': str(score_change)
}

Step 3: Follow Up Boss — Update Person

  • Custom Field 'Composite Score' = {{composite_score}}
  • Custom Field 'Lead Tier' = {{tier}}
  • Custom Field 'Behavioral Score' = {{behavioral_score}}
  • Custom Field 'Score Trend' = {{trend}}
  • Custom Field 'Previous Composite Score' = (copy current before update)

Step 4: Filter

  • Only continue if tier = 'A - Hot' AND trend in ('Rising Fast', 'Rising')

Step 5: Paths (Zapier Paths)

  • Path A: If score_change >= 15 → Slack urgent notification
  • Path B: If tier changed to 'A - Hot' → Create urgent FUB task

Custom Fields Required in Follow Up Boss

1
Composite Score (Number)
2
Lead Tier (Dropdown: A - Hot, B - Warm, C - Nurture, D - Cold)
3
Behavioral Score (Number)
4
Reva Score (Number)
5
Score Trend (Text)
6
Previous Composite Score (Number)
7
Next Best Action (Text)
8
NBA Priority (Dropdown: urgent, high, normal, low)
9
NBA Channel (Dropdown: phone, text, email, auto)
10
Showing Requests Count (Number)
11
AI Qualification Status (Text)

Next-Best-Action Recommendation Engine

Type: workflow A rule-based decision engine implemented as a Zapier Code step that evaluates a lead's composite score, engagement pattern, pipeline stage, channel preferences, and time-of-day to generate specific, actionable recommendations for the assigned agent. Each recommendation includes the action type (call, text, email, in-person), the specific content to deliver, and the urgency level. Recommendations are personalized based on the lead's browsing history and stated preferences.

Implementation

Zapier Workflow: Next-Best-Action Router

Trigger

  • App: Follow Up Boss
  • Event: Person Updated (when Composite Score field changes)

Step 1: Follow Up Boss — Get Person Details

  • Retrieve full person record including all custom fields, tags, notes

Step 2: Code by Zapier (Python)

Next-Best-Action decision engine
python
# evaluates score, trend, activity, channel, and lead type to output a
# prioritized recommendation

import json
from datetime import datetime

# --- INPUT DATA ---
score = int(input_data.get('composite_score', 0) or 0)
tier = str(input_data.get('tier', 'D - Cold'))
trend = str(input_data.get('trend', 'Stable'))
days_inactive = int(input_data.get('days_since_last_activity', 999) or 999)
page_views_today = int(input_data.get('page_views_today', 0) or 0)
page_views_7d = int(input_data.get('page_views_7d', 0) or 0)
ai_status = str(input_data.get('ai_qualification_status', 'none')).lower()
has_phone = str(input_data.get('has_phone', 'false')).lower() == 'true'
has_email = str(input_data.get('has_email', 'false')).lower() == 'true'
reva_score = int(input_data.get('reva_score', 0) or 0)
stage = str(input_data.get('stage', 'New'))
lead_type = str(input_data.get('lead_type', 'buyer')).lower()  # buyer or seller
preferred_area = str(input_data.get('preferred_area', 'your preferred area'))
price_range = str(input_data.get('price_range', ''))
last_nba = str(input_data.get('last_nba', ''))
previous_calls = int(input_data.get('call_attempts', 0) or 0)
texts_sent = int(input_data.get('texts_sent', 0) or 0)

# --- DECISION LOGIC ---
nba = ''
priority = 'normal'
channel = 'email'
action_detail = ''

# Priority 1: Real-time browsing activity (highest urgency)
if page_views_today >= 4 and has_phone:
    nba = f'CALL NOW — Lead viewed {page_views_today} properties in the last few hours'
    action_detail = f'Reference specific listings they viewed. Ask: "I noticed you were looking at homes in {preferred_area} — would you like to schedule a showing?"'
    priority = 'urgent'
    channel = 'phone'

elif page_views_today >= 4 and not has_phone:
    nba = f'TEXT/CHAT NOW — Lead viewed {page_views_today} properties today but no phone on file'
    action_detail = f'Send via text or FUB chat: "Hi {{first_name}}, I see you\'re exploring {preferred_area}! I\'d love to help you find the perfect home. When is a good time to chat?"'
    priority = 'urgent'
    channel = 'text'

# Priority 2: AI-qualified hot leads
elif 'qualified' in ai_status and score >= 70 and has_phone:
    nba = 'CALL — AI-qualified hot lead ready for agent conversation'
    action_detail = 'Review Structurely conversation transcript in FUB notes. Lead has confirmed timeline, budget, and area. Open with: "Hi {{first_name}}, I\'m following up on your conversation — I have some great options that match what you described."'
    priority = 'urgent'
    channel = 'phone'

elif 'qualified' in ai_status and score >= 70 and not has_phone:
    nba = 'EMAIL — AI-qualified hot lead, phone number missing'
    action_detail = f'Send personalized email with 3 property matches in {preferred_area}. Include CTA: "Reply with your phone number and I\'ll send you details with photos and virtual tours."'
    priority = 'high'
    channel = 'email'

# Priority 3: Rising score / re-engagement
elif trend == 'Rising Fast' and score >= 50:
    nba = 'CALL — Score rising rapidly, lead is re-engaging'
    action_detail = f'Lead score jumped significantly. Ask: "I have some new listings in {preferred_area} that just hit the market — would any of these interest you?"'
    priority = 'high'
    channel = 'phone' if has_phone else 'email'

# Priority 4: High Revaluate score (likely mover from SOI)
elif reva_score >= 70 and lead_type == 'seller':
    nba = 'SEND CMA — Revaluate signals high move likelihood for seller lead'
    action_detail = 'Prepare a Comparative Market Analysis for their current property. Call with: "I was doing some market research in your area and thought you might like to know what your home is worth in today\'s market."'
    priority = 'high'
    channel = 'phone' if has_phone else 'email'

elif reva_score >= 70 and lead_type != 'seller':
    nba = 'PERSONAL OUTREACH — SOI contact showing move signals'
    action_detail = 'Send a personal (non-automated) text or call. Do NOT mention Revaluate or data monitoring. Try: "Hey {{first_name}}, just thinking of you — how are things going? Let me know if you ever need anything real estate related!"'
    priority = 'high'
    channel = 'phone' if has_phone else 'text'

# Priority 5: Warm leads with recent activity
elif score >= 50 and days_inactive <= 7 and page_views_7d >= 3:
    nba = f'SEND CURATED LISTINGS — Active browsing this week ({page_views_7d} views)'
    action_detail = f'Send 3-5 handpicked listings in {preferred_area} within {price_range if price_range else "their price range"}. Add personal note: "These just came on the market and I thought of you."'
    priority = 'normal'
    channel = 'email'

elif score >= 50 and days_inactive <= 14:
    nba = 'SEND MARKET REPORT — Warm lead, keep engagement momentum'
    action_detail = f'Send neighborhood market report for {preferred_area} with recent sales, average prices, and days-on-market data. Position as helpful information, not sales push.'
    priority = 'normal'
    channel = 'email'

# Priority 6: Dormant warm leads (re-engagement needed)
elif score >= 30 and days_inactive > 30 and days_inactive <= 90:
    nba = 'RE-ENGAGE — Dormant warm lead needs a touchpoint'
    action_detail = f'Send "checking in" message: "Hi {{first_name}}, I know the market has been busy — are you still thinking about {"selling" if lead_type == "seller" else "buying"}? The market in {preferred_area} has had some interesting changes."'
    priority = 'normal'
    channel = 'text' if has_phone and texts_sent < 3 else 'email'

# Priority 7: Cold re-engagement attempt
elif score >= 15 and days_inactive > 90:
    nba = 'LONG-TERM NURTURE — Add to quarterly newsletter'
    action_detail = 'No manual action needed. Ensure lead is on quarterly market newsletter list and annual holiday card list. Set reminder to personally review in 6 months.'
    priority = 'low'
    channel = 'auto'

# Priority 8: Default — AI nurture
else:
    nba = 'AI NURTURE — Structurely handles ongoing engagement'
    action_detail = 'Lead is in automated AI nurture via Structurely. No manual action required unless status changes. Structurely will re-engage monthly and notify if lead becomes responsive.'
    priority = 'low'
    channel = 'auto'

# --- AVOID REPETITIVE ACTIONS ---
if nba == last_nba and priority != 'urgent':
    nba = f'MAINTAIN CURRENT PLAN — Previous action still relevant ({channel})'
    action_detail = 'Same recommendation as last cycle. Continue current approach unless lead engagement changes.'
    priority = 'low'

output = {
    'next_best_action': nba,
    'action_detail': action_detail,
    'priority': priority,
    'channel': channel,
    'timestamp': datetime.utcnow().isoformat()
}

Step 3: Follow Up Boss — Update Person

  • Custom Field 'Next Best Action' = {{next_best_action}}
  • Custom Field 'Action Detail' = {{action_detail}}
  • Custom Field 'NBA Priority' = {{priority}}
  • Custom Field 'NBA Channel' = {{channel}}

Step 4: Paths

  • Path A (Urgent): priority = 'urgent' → Slack DM to assigned agent: 🔥 emoji + lead name + NBA + deep link; FUB Task: Due today, description = action_detail; If agent has no Slack: Send SMS via Twilio to agent's phone
  • Path B (High): priority = 'high' → Slack channel #daily-actions: lead name + NBA; FUB Task: Due tomorrow, description = action_detail
  • Path C (Normal): priority = 'normal' → FUB Task only: Due in 2 days, description = action_detail
  • Path D (Low): priority = 'low' → No notification. Update fields only.

Hot Lead Real-Time Alert System

Type: integration A Zapier workflow that monitors Follow Up Boss for real-time website visitor activity. When a known lead visits 3+ property pages within a 15-minute window, the system immediately calculates an urgency score and sends a push notification to the assigned agent via Slack with specific listing URLs the lead viewed, suggested talking points, and a one-click call button.

Zapier Workflow: Real-Time Hot Lead Alert

Trigger Option A: Follow Up Boss Webhook

  • Follow Up Boss sends a webhook when a tracked visitor views a property page
  • Configure in FUB: Admin > API & Webhooks > New Webhook
  • Event: visits.created
  • URL: Zapier Webhook catch URL

Trigger Option B: Zapier Schedule (if webhooks unavailable)

  • Schedule every 15 minutes
  • FUB API call: GET /v1/people?sort=last_visited&limit=20&last_visited_after={15_min_ago}

Step 1: Zapier Webhook (Catch Raw Hook)

  • Receives payload: {person_id, page_url, timestamp, visit_count_today}

Step 2: Follow Up Boss — Get Person

  • Lookup by person_id from webhook
  • Retrieve: name, phone, email, assigned_agent, composite_score, preferred_area

Step 3: Filter

  • Continue only if: page_views_today >= 3
  • OR (page_views_today >= 2 AND composite_score >= 50)
  • AND assigned_agent is not empty

Step 4: Code by Zapier (JavaScript)

Zapier Code step
javascript
// calculates urgency score and formats Slack message

const leadName = inputData.lead_name || 'Unknown Lead';
const score = parseInt(inputData.composite_score) || 0;
const phone = inputData.phone || 'No phone on file';
const email = inputData.email || '';
const pageViews = parseInt(inputData.page_views_today) || 0;
const lastPageUrl = inputData.last_page_url || '';
const agentName = inputData.assigned_agent || 'Unassigned';
const fubId = inputData.fub_person_id || '';
const fubLink = `https://app.followupboss.com/people/${fubId}`;

// Extract property address from URL if possible
const propertyMatch = lastPageUrl.match(/\/property\/(.+?)(?:\?|$)/);
const propertyRef = propertyMatch ? decodeURIComponent(propertyMatch[1]).replace(/-/g, ' ') : 'multiple listings';

let urgencyEmoji = '🟡';
if (score >= 75 && pageViews >= 4) urgencyEmoji = '🔴';
else if (score >= 50 || pageViews >= 4) urgencyEmoji = '🟠';

const message = `${urgencyEmoji} *ACTIVE NOW: ${leadName}*\n` +
  `📊 Score: ${score} | 👀 Pages today: ${pageViews}\n` +
  `🏠 Last viewed: ${propertyRef}\n` +
  `📱 Phone: ${phone}\n` +
  `\n💡 *Suggested action:* Call now and reference the ${propertyRef} listing. Ask if they'd like to see it in person.\n` +
  `\n🔗 <${fubLink}|Open in Follow Up Boss>`;

output = [{message: message, agent_name: agentName, urgency: urgencyEmoji}];

Step 5: Slack — Send Direct Message

  • Find user by: agent email (mapped from FUB assigned agent)
  • Message: {{message}} from Step 4
  • Include: Link button to FUB person record

Step 6: Follow Up Boss — Create Task

  • Person: {{fub_person_id}}
  • Assigned to: {{assigned_agent}}
  • Due: Today
  • Description: 'Lead is actively browsing right now. Call immediately.'
  • Priority: High

Webhook Configuration in FUB

FUB webhook configuration
http
# POST endpoint and required headers

POST https://hooks.zapier.com/hooks/catch/XXXXX/YYYYY/
Content-Type: application/json
Events: visits.created

Weekly Score Digest Report

Type: workflow An automated weekly report generated every Monday morning that summarizes lead scoring activity for the team lead and managing broker. Includes: total leads scored, tier distribution changes, top 10 hottest leads, leads with biggest score increases, conversion funnel metrics, and AI ISA qualification rates. Delivered via email and posted to a Slack channel.

Implementation:

Zapier Workflow: Weekly Score Digest

Trigger

  • App: Schedule by Zapier
  • Event: Every Week (Monday at 8:00 AM local time)

Step 1: Follow Up Boss — API Request (Custom)

  • Method: GET
  • URL: https://api.followupboss.com/v1/people?sort=-custom_composite_score&limit=200&fields=id,name,custom_composite_score,custom_lead_tier,custom_score_trend,custom_reva_score,custom_ai_qualification_status,assignedTo,lastActivity,stage
  • Headers: Authorization: Basic {base64(API_KEY:)}

Step 2: Code by Zapier (Python)

Code by Zapier
python
# Python script to calculate tier distribution, top leads, risers, and AI
# ISA stats, then build the weekly digest report string

import json
from collections import Counter

people = json.loads(input_data.get('people_json', '[]'))

# Tier distribution
tiers = Counter(p.get('custom_lead_tier', 'Unknown') for p in people)

# Top 10 hottest
top_10 = sorted(people, key=lambda x: int(x.get('custom_composite_score', 0) or 0), reverse=True)[:10]

# Biggest risers (score_trend = 'Rising Fast')
risers = [p for p in people if p.get('custom_score_trend') == 'Rising Fast'][:10]

# AI qualification stats
ai_qualified = sum(1 for p in people if 'qualified' in str(p.get('custom_ai_qualification_status', '')).lower())
ai_nurture = sum(1 for p in people if 'nurture' in str(p.get('custom_ai_qualification_status', '')).lower())

# Build report
report = f"""📊 WEEKLY LEAD SCORE DIGEST — {input_data.get('date', 'This Week')}

📈 TIER DISTRIBUTION:
  🔴 A - Hot: {tiers.get('A - Hot', 0)} leads
  🟠 B - Warm: {tiers.get('B - Warm', 0)} leads
  🟡 C - Nurture: {tiers.get('C - Nurture', 0)} leads
  ⚪ D - Cold: {tiers.get('D - Cold', 0)} leads
  Total scored: {len(people)}

🏆 TOP 10 HOTTEST LEADS:
"""

for i, p in enumerate(top_10, 1):
    report += f"  {i}. {p.get('name', 'Unknown')} — Score: {p.get('custom_composite_score', 0)} ({p.get('custom_score_trend', 'Stable')}) — Assigned: {p.get('assignedTo', 'Unassigned')}\n"

report += f"""
🚀 FASTEST RISING LEADS:
"""
for p in risers[:5]:
    report += f"  ⬆️ {p.get('name', 'Unknown')} — Score: {p.get('custom_composite_score', 0)} (Rising Fast)\n"

report += f"""
🤖 AI ISA PERFORMANCE:
  Qualified by AI: {ai_qualified}
  In AI Nurture: {ai_nurture}
  Total AI-touched: {ai_qualified + ai_nurture}

💡 RECOMMENDATION:
"""
if tiers.get('A - Hot', 0) > 20:
    report += "  High volume of hot leads — consider adding an agent or redistributing round-robin."
elif tiers.get('A - Hot', 0) < 5:
    report += "  Low hot lead count — review lead sources and marketing spend. Consider increasing ad budget."
else:
    report += "  Lead volume is healthy. Focus on conversion rate from A-tier to appointment."

output = {'report': report}

Step 3: Gmail — Send Email

  • To: team_lead@brokerage.com, managing_broker@brokerage.com
  • Subject: 📊 Weekly Lead Score Digest — {{date}}
  • Body: {{report}}

Step 4: Slack — Post to Channel

  • Channel: #lead-reports
  • Message: {{report}}

Fair Housing Scoring Bias Audit Tool

Type: prompt A quarterly audit checklist and automated report that analyzes the lead scoring system for potential Fair Housing Act violations. Verifies that no protected class proxies have been introduced into scoring criteria, checks for disparate impact patterns in score distribution, and generates a compliance documentation report for the brokerage's records.

Implementation

Fair Housing Scoring Audit — Quarterly Checklist & Report Template

Step 1: Export Score Data

Export all scored leads from Follow Up Boss via API or CSV export:

  • Fields: composite_score, lead_tier, lead_source, zip_code, price_range, property_type, stage, assigned_agent, created_date
  • DO NOT export or analyze: name (can indicate ethnicity), address (can indicate neighborhood demographics)

Step 2: Statistical Distribution Check

Using Google Sheets or Python:

Statistical distribution analysis for lead scoring bias detection
python
import pandas as pd

df = pd.read_csv('scored_leads_export.csv')

# Check 1: Score distribution by lead source
print('=== Score Distribution by Lead Source ===')
print(df.groupby('lead_source')['composite_score'].describe())

# Check 2: Score distribution by zip code (potential geographic bias)
print('\n=== Score Distribution by Zip Code ===')
zip_scores = df.groupby('zip_code')['composite_score'].agg(['mean', 'count'])
print(zip_scores[zip_scores['count'] >= 10].sort_values('mean'))

# Flag: If certain zip codes consistently score lower, investigate whether
# the scoring algorithm inadvertently penalizes leads from certain areas

# Check 3: Tier distribution by price range
print('\n=== Tier Distribution by Price Range ===')
print(pd.crosstab(df['price_range_bucket'], df['lead_tier'], normalize='index'))

# Check 4: Agent assignment equity (are hot leads distributed fairly?)
print('\n=== Hot Lead Distribution by Agent ===')
hot = df[df['lead_tier'] == 'A - Hot']
print(hot['assigned_agent'].value_counts())

Step 3: Criteria Verification Checklist

Step 4: Generate Compliance Report

Fair Housing Scoring Compliance Report template
text
FAIR HOUSING SCORING COMPLIANCE REPORT
Brokerage: [Name]
Date: [Audit Date]
Auditor: [MSP Technician Name]
Period Covered: [Quarter]

SCORING CRITERIA REVIEWED:
- Behavioral engagement signals: [COMPLIANT/NON-COMPLIANT]
- Predictive move likelihood (Revaluate): [COMPLIANT/NON-COMPLIANT]
- AI qualification (Structurely): [COMPLIANT/NON-COMPLIANT]

STATISTICAL ANALYSIS:
- Geographic score distribution: [EVEN/FLAGGED]
- Price range score distribution: [EVEN/FLAGGED]
- Lead source score distribution: [EVEN/FLAGGED]

FINDINGS: [Describe any issues found]
REMEDIATION: [Describe corrective actions taken]

CERTIFICATION:
I certify that the lead scoring system has been reviewed and contains
no criteria that discriminate based on race, color, religion, sex,
familial status, national origin, or disability.

Signed: _______________________ Date: _______________
Note

Frequency: Quarterly (January, April, July, October). Retain reports for 5 years minimum.

Testing & Validation

  • TEST 1 — Lead Source Integration: Submit a test lead from each connected source (Zillow, Realtor.com, Facebook Lead Ad, website registration, manual entry). Verify each lead appears in Follow Up Boss within 60 seconds with correct source attribution, assigned agent, and triggered Action Plan.
  • TEST 2 — Structurely AI ISA Response Time: Submit a test lead with a valid phone number. Time the interval from lead creation in FUB to first Structurely text message. Must be under 120 seconds. Respond as a qualified buyer and verify the 'Qualified by AI' tag appears in FUB within 5 minutes.
  • TEST 3 — Structurely STOP Compliance: Reply 'STOP' to a Structurely conversation. Verify all automated messages cease immediately. Verify the lead's record in FUB is updated with a 'Do Not Contact' or 'Opted Out' tag. Attempt to manually trigger an Action Plan email — verify it is blocked.
  • TEST 4 — Composite Score Calculation: Create a test lead with known engagement data (5 email opens, 3 clicks, 10 page views, Reva Score 60, AI qualified). Run the Zapier composite score workflow manually. Verify the calculated composite score matches expected output: (min(5*2,20) + min(3*3,15) + min(10*2,20) + 15 recency + 0 calls + 0 texts) * 0.45 = (10+9+20+15)*0.45 = 24.3 behavioral; 60*0.30 = 18 reva; 100*0.25 = 25 qual; total = 67 → Tier B-Warm.
  • TEST 5 — Next-Best-Action Generation: For the test lead with composite score 67 and recent activity within 7 days, verify NBA generates: 'SEND CURATED LISTINGS' recommendation with 'normal' priority and 'email' channel. Change page_views_today to 5 and re-run — verify NBA changes to 'CALL NOW' with 'urgent' priority.
  • TEST 6 — Smart List Population: After scoring 20+ test leads with varied scores, verify Follow Up Boss Smart Lists correctly filter: 'My Hot Leads' shows only Tier A leads assigned to the logged-in agent; 'Call Queue — Urgent NBAs' shows only leads with NBA Priority = urgent and phone on file; 'SOI — Likely Movers' shows only leads with Reva Score >= 60.
  • TEST 7 — Real-Time Alert Pipeline: Visit the IDX website as a tracked test lead and view 4+ property pages within 10 minutes. Verify the assigned agent receives a Slack direct message within 5 minutes containing the lead's name, score, page view count, and FUB deep link. Verify a 'Call immediately' task is created in FUB.
  • TEST 8 — Revaluate Score Sync: Verify that at least 60% of imported SOI contacts have received a Reva Score within 72 hours of initial upload. Verify scores appear correctly in the FUB custom field 'Reva Score' and that the 'SOI - Likely Movers' Smart List populates with contacts scoring >= 70.
  • TEST 9 — Action Plan Execution: Trigger the 'Hot Lead — Speed to Lead' Action Plan for a test lead. Verify Day 0 Structurely text fires, Day 0 agent task is created, Day 1 follow-up task appears on schedule. Fast-forward to Day 7 and verify market update email is sent with correct merge fields, unsubscribe link, and physical address.
  • TEST 10 — Mobile Push Notification: Assign a hot lead to each agent's FUB account. Verify each agent receives a push notification on their mobile device within 60 seconds. Have each agent click the notification and confirm it opens the correct lead record in the FUB mobile app.
  • TEST 11 — Weekly Digest Report: Manually trigger the Weekly Score Digest Zapier workflow. Verify the email arrives at the team lead and managing broker addresses with correct tier distribution counts, top 10 list, and AI ISA statistics. Verify the Slack post appears in #lead-reports channel.
  • TEST 12 — DNS and Email Deliverability: Send a test Action Plan email to a Gmail address, an Outlook address, and a Yahoo address. Verify all three land in the primary inbox (not spam/junk). Check email headers for proper SPF pass, DKIM pass, and DMARC alignment using Google Admin Toolbox (https://toolbox.googleapps.com/apps/messageheader/).
  • TEST 13 — Fair Housing Compliance Spot Check: Review the composite score calculation code and verify zero references to demographic data, neighborhood composition, school district rankings, or any protected class characteristic. Review Structurely conversation scripts and verify no questions about family status, religion, national origin, or disability.
  • TEST 14 — End-to-End Conversion Tracking: Create 5 test leads representing different scenarios (new Zillow buyer, re-engaged website visitor, high Reva Score SOI, AI-qualified renter, cold unresponsive). Process each through the full pipeline and verify appropriate scores, tiers, NBAs, and Action Plans are assigned to each persona correctly and distinctly.

Client Handoff

Client Handoff Agenda (2-Hour Session with Team Lead + All Agents)

Part 1: System Overview (30 min)

  • Explain what lead scoring is and why it matters (data shows scored leads convert 2–3x better than unscored)
  • Walk through the scoring methodology: behavioral signals (45%), Revaluate move likelihood (30%), AI qualification (25%)
  • Demonstrate the tier system: A-Hot, B-Warm, C-Nurture, D-Cold
  • Show a real lead's score breakdown so agents understand what drives scores up/down

Part 2: Daily Workflow Training (45 min)

  • Live demonstration of the agent's daily workflow: 1. Open FUB → 'Call Queue — Urgent NBAs' (handle urgent first) 2. Work through 'My Hot Leads' list 3. Process 'Warm Leads — Follow Up Today' 4. Check 'SOI — Likely Movers' weekly
  • Practice reading and acting on Next-Best-Action recommendations
  • Practice using the mobile app: receiving push notifications, viewing lead details, logging call outcomes
  • Role-play exercise: agent receives hot lead alert, opens FUB, reads NBA, makes simulated call

Part 3: AI ISA Understanding (15 min)

  • Explain how Structurely works: what it says, when it hands off, how to read transcripts
  • Show agents where to find AI conversation transcripts in FUB notes
  • Demonstrate the qualified vs. nurture handoff difference
  • Emphasize: agents should NOT duplicate Structurely's questions when calling qualified leads

Part 4: Compliance Training (15 min)

  • Review TCPA requirements: only contact leads with documented consent
  • Review Fair Housing: scoring is behavioral only, never demographic
  • Show agents how to mark a lead as 'Do Not Contact' if requested
  • Review STOP/unsubscribe handling procedures

Part 5: Q&A + Success Criteria Review (15 min)

  • Answer questions from agents
  • Review success criteria with team lead:

Documentation Package to Leave Behind:

1
Agent Quick Reference Card (laminated, desk-ready): Daily workflow steps, Smart List descriptions, NBA action codes
2
System Architecture Diagram: Visual showing how FUB, Revaluate, Structurely, and Zapier connect
3
Scoring Methodology Document: Detailed breakdown of all scoring factors and weights
4
Compliance Guide: TCPA consent requirements, Fair Housing scoring policy, STOP handling procedure
5
Troubleshooting FAQ: Common issues (lead not scoring, notification not received, Structurely not engaging) with resolution steps
6
MSP Contact Card: Escalation phone number, email, and SLA response time commitments
7
Login Credentials Sheet (sealed envelope to managing broker): All platform admin credentials, API keys, Zapier account access
8
90-Day Optimization Roadmap: Scheduled score calibration at Day 30, 60, 90; quarterly compliance audit dates

Maintenance

Ongoing MSP Maintenance Responsibilities

Weekly Tasks (30 minutes/week)

  • Review Zapier task usage and error logs — resolve any failed Zaps within 24 hours
  • Verify Structurely is engaging new leads (check conversation volume in Structurely dashboard)
  • Monitor Follow Up Boss webhook health and API connectivity
  • Review the Weekly Score Digest report for anomalies (sudden score drops, zero hot leads, etc.)

Monthly Tasks (2 hours/month)

Quarterly Tasks (4 hours/quarter)

  • Score Calibration: Export last 90 days of closed transactions, cross-reference with composite scores at time of first contact, adjust tier thresholds and scoring weights if needed. Document changes.
  • Fair Housing Compliance Audit: Run the full bias audit checklist (custom component above). Generate and file compliance report.
  • Structurely Script Review: Review AI conversation logs for accuracy, professionalism, and compliance. Update qualification questions if market conditions change (e.g., interest rate shifts affecting pre-approval questions).
  • Integration Health Check: Test each lead source integration end-to-end. Verify tracking pixel is still installed on all website pages. Check for any platform API changes or deprecations.
  • Client Strategy Meeting: 1-hour call with team lead to review KPIs, discuss score calibration changes, and plan next-quarter optimizations.

Semi-Annual Tasks (2 hours/6 months)

  • Review Revaluate contract and contact volume — adjust tier if database has grown
  • Evaluate new AI tools/features released by FUB, Structurely, or Revaluate — recommend upgrades
  • Review Zapier workflow efficiency — consolidate or optimize Zaps that have grown complex
  • Update compliance documentation for any new state privacy laws enacted

Annual Tasks (4 hours/year)

  • Full platform audit: review all custom fields, Smart Lists, Action Plans, Zapier workflows for relevance
  • Negotiate software renewal pricing — leverage MSP partner status for discounts
  • Present annual ROI report to managing broker: leads scored, conversion rate changes, AI ISA savings vs. human ISA cost, revenue attributed to scored-lead follow-up
  • Recommend technology stack updates for the coming year

SLA Commitments

  • Critical (system down, leads not flowing): 1-hour response, 4-hour resolution
  • High (scoring not updating, AI ISA not engaging): 4-hour response, 24-hour resolution
  • Normal (Smart List configuration, report tweaks): 24-hour response, 72-hour resolution
  • Low (training requests, feature questions): 48-hour response, 1-week resolution

Escalation Path

1
Tier 1 — MSP Help Desk: Basic troubleshooting (login issues, notification settings, Smart List filters)
2
Tier 2 — MSP Implementation Engineer: Zapier workflow errors, API connectivity issues, score calibration
3
Tier 3 — Vendor Support: Follow Up Boss support (support@followupboss.com), Structurely support, Revaluate support, Zapier support
4
Tier 4 — MSP Solutions Architect: Fundamental system redesign, new integration requirements, compliance concerns requiring legal review

Model Retraining Triggers

The rule-based scoring system does not require ML model retraining, but scoring weights should be recalibrated when:

  • Conversion rate from A-tier leads drops below 5% (thresholds too low)
  • More than 30% of closed deals came from B-tier or lower leads (thresholds too high)
  • A new lead source is added that behaves differently from existing sources
  • Market conditions shift significantly (e.g., buyer's market → seller's market)
  • Agent count changes by more than 25% (routing and distribution changes needed)

Alternatives

All-in-One Platform: BoldTrail/kvCORE

Replace the three-tool stack (Follow Up Boss + Revaluate + Structurely) with BoldTrail by Inside Real Estate, which includes built-in AI behavioral scoring, automated action plans, IDX website, CRM, and smart follow-up in a single platform. BoldTrail serves 250,000+ agents and provides a complete ecosystem without third-party integrations.

Premium Platform: BoomTown

Deploy BoomTown's predictive CRM with its 'Opportunity Wall' that surfaces the most likely-to-convert leads using proprietary AI. BoomTown includes lead generation (PPC management), IDX website, CRM, and predictive scoring in one platform. Research shows BoomTown produces 2x more leads and 33% more commission income in head-to-head testing.

Enterprise CRM: HubSpot Sales Hub + Custom Scoring

Deploy HubSpot Sales Hub Professional ($90/seat/month) with its built-in AI predictive lead scoring. Build custom scoring properties and workflows using HubSpot's native automation. Add Revaluate integration via Zapier for move-likelihood data. This approach gives the brokerage a world-class CRM that can grow beyond real estate if the business diversifies.

Budget Option: Lofty (formerly Chime) Standalone

Deploy Lofty's all-in-one platform which includes dynamic lead scoring that adjusts based on contact validity, online behavior, property info, and more. Lofty Core starts at $449/month and includes CRM, IDX website, AI assistant, and lead scoring — the lowest-cost all-in-one option with dynamic scoring.

DIY Scoring: ActiveCampaign + Custom Automation

Use ActiveCampaign ($79/month Pro plan) as the CRM and marketing automation platform with its built-in point-based lead scoring. Configure detailed scoring rules for every engagement signal. Add Structurely for AI ISA and Revaluate for move-likelihood. This gives the MSP maximum control over scoring logic without custom code.

Want early access to the full toolkit?