Compliance · Fair Housing & security

Fair Housing-trained AI. Code-scanned automations. Disclosure baked in.

Your license isn't one bad outreach away from a complaint.

FUB Marketplace certified · GDPR-aligned · We don't train on your data

Quick answer Last updated

Is Follow Up Ace's AI Fair Housing compliant? Compliance is enforced at two levels. Every AI response — across the embed chat, voice, and the Claude / ChatGPT Connectors — is generated under a Compliance directive trained on 80+ Fair Housing patterns: steering language, demographic descriptors, and coded phrases like "safe area" or "good schools," plus agent licensing-boundary rules. Separately, every automation that fires without an agent in the loop — admin Trigger Rules, Smart Playbook auto-emails, and templated Zillow first-contact messages — passes a code-level scan (scanForComplianceViolations()) before delivery; blocked messages create a Follow Up Boss note plus an admin alert.

Agent-triggered sends and voice output are covered by the trained directive rather than the code-level gate — each path is marked so you can document your AI policy accurately for your MLS or E&O carrier. The Fair Housing Act (42 U.S.C. § 3604) prohibits discrimination based on race, color, religion, sex, national origin, disability, and familial status.

Every AI response is trained on Fair Housing.

Across the embed chat, voice, and the Claude / ChatGPT Connectors, every system prompt Ace builds includes the Compliance directive. The model is told, in structured detail, what to do and what not to do — every single response.

What's in the directive

80+ Fair Housing patterns: demographic descriptors (age, race, gender, religion, national origin, disability, familial status), coded language ("safe area," "good schools," "family-friendly"), steering language, religious references, safety/demographic correlations, disability terms, familial-status language. Plus licensing-boundary rules: no legal advice, no lending advice, no contractor advice from licensed agents.

Reference: chat-app/index.js:5321 — directive injection, plus the underlying ruleset in complianceGuard.js.

Automated sends pass a code-level Fair Housing scan before delivery.

scanForComplianceViolations() runs as a hard gate, in code, on every automation that fires without an agent in the loop:

  • Admin Trigger Rules. The auto_email_contact and auto_sms_contact actions in workflowActionExecutor.js. Blocked messages create a FUB note + admin alert.
  • Smart Playbook auto-sends. Every ai_send_email action in webhookEventWorker.js. Blocked = FUB note + admin alert.
  • Templated Zillow first-contact messages. zillowSpeedToLead.js when called by the composite/webhook endpoints.

Blocked messages don't silently disappear — they always create a FUB note + admin alert. Your compliance officer sees every refusal. Your audit trail is built automatically.

What the code-level scan does not cover.

We're not going to oversell. Here's the line:

Agent-triggered tool sends and voice output are protected by the prompt directive only — not a code-enforced gate.

The AI is trained, but the agent owns the send. When an agent uses send_email_direct / send_sms_direct / Gmail sendEmail through Claude or the embed, those drafts are written by an AI that's trained on Fair Housing rules — but they don't pass a second, code-level scan. The same applies to voice output and to opt-in RANT nurture sends.

This matters because if you're documenting your AI policy for your MLS or your E&O carrier, the line is precise: trained AI on every response; code-enforced scan on automations. We mark each path explicitly so you can describe it accurately.

Code-enforced scan

  • Admin Trigger Rules (auto-email + auto-SMS)
  • Smart Playbook ai_send_email actions
  • Templated Zillow first-contact messages

Prompt-directive only

  • Agent-triggered tool sends (Claude / ChatGPT)
  • Voice output
  • RANT nurture drips Coming soon

Disclosure auto-injected — email, SMS, voice intro.

State requirements vary. Some require explicit AI disclosure on first contact via SMS; some require it for email; some require it for voice. Ace ships with auto-injected disclosure templates per surface, configurable per-state per-account.

  • Email footer. Every email Ace sends without a human in the loop — workflow and playbook auto-sends — carries it, always. Messages you review and send yourself (queue drafts, one-tap sends you personally fire) go out in your own voice: once an agent reviews the message, the agent is the author of record. A per-account setting adds the footer to reviewed sends too, for teams that want it everywhere.
  • SMS footer. Compact form on first message in the thread; suppressed on subsequent replies in the same conversation per TCPA spec.
  • Voice intro. Per-state required disclosure on the first AI voice response in a session.

EHO, CAN-SPAM, opt-out — auto-injected.

Three things every AI-drafted email gets out of the box:

  • Equal Housing Opportunity statement. Required on real estate marketing communications.
  • CAN-SPAM physical address. Pulled from your account profile, attached at send.
  • Opt-out link. One-click unsubscribe (the Daily Brief uses the same shared /unsubscribe handler).

Contact PII is tokenized before the model sees it.

Emails and phone numbers are replaced with opaque tokens — [EMAIL_a1b2c3d4], [PHONE_e5f6g7h8] — before any prompt is sent to the LLM. The mapping lives in your account; the model only sees the tokens.

When the model emits a tool call (e.g. send_email), the resolver swaps the token back to the real value at execution time. Net effect: your contact's email and phone never leave your account in cleartext to a third-party model provider.

What this means in practice

Even on a send_email_direct tool call, the model never types out your contact's actual email address. Ace's resolver does that, in your account, after the model has decided what to send. Same for phone numbers, and for the Twilio / Gmail send path.

Agent permissions inherit from FUB. No password sharing.

Every Pro user signs into Ace with their own FUB email — admin OAuth gets admin tool scope, agent OAuth gets agent scope. There's no shared API key sitting in a Slack DM. Off-board an agent in FUB, their MCP token revokes the same day (or instantly, with a mcpSessionVersion bump).

Where we are on certifications.

FUB Marketplace certified

Active. Listed in Follow Up Boss's official integration directory.

Security posture

Controls designed in line with recognized security frameworks — encryption everywhere, least-privilege access, audit logging. We are not pursuing a certification; we publish what we actually do instead.

GDPR-aligned

Data Subject Access, right-to-delete, 90-day purge on cancellation.

Encryption

256-bit at rest and in transit across all FUB / Firestore / LLM paths.

We don't train on your data.

Your FUB contacts, your conversation history, your notes — none of it trains any model, ours or any provider's. PII is tokenized before it ever touches an LLM. On cancellation: your FUB data stays in FUB, Ace stops processing, we retain your account record for 90 days, then we purge.

Build a defensible AI policy in one week.

Fair Housing-trained AI on every response. Code-scanned automations. AI disclosure, EHO, and CAN-SPAM footers auto-injected. PII tokenized at the LLM boundary. Self-serve, no sales calls.

Get Started Free