# CRM Decision: Richard D. Fowler Lead-Revival Engine

Date: 2026-06-13
Companion to: `richard-d-fowler-web-presence-and-lead-revival-plan.md`

## TL;DR

**Self-host Twenty as the owned engine, run it as a back-office brain (Richard stays on Compass), and build
our own agentic flows on top of a database we fully control.**

- **Architecture (decided):** owned data layer + self-hosted CRM + our agentic loop. We own the Postgres
  DB and can do whatever we want with it, whenever.
- **Engine (recommended):** **Twenty** — best open-source API surface (GraphQL + REST + webhooks), gives us
  a polished CRM UI for free over our own DB, smallest ops footprint of the self-host options, $0 licensing.
- **Operating model (recommended — "Shape 2"):** Twenty + the agent layer is *our* back-office engine.
  Richard does **not** log in or change tools — he keeps Compass for day-to-day. Our system owns the
  normalized contact DB, runs the scoring, picks the daily worklist, and drafts approved call/text/email,
  delivered to him as a simple daily list. This sidesteps adoption risk and the real-estate-native gap.
- **Rejected:** **Follow Up Boss** — its API is likely gated to the ~$833/mo Platform tier, a non-starter
  for Richard. **Compass CRM as the engine** — no open API, broker-locked. **Build from scratch** — no edge.

The project doesn't need a CRM to *store* contacts — it needs a CRM **we** can drive by API and own outright
(pick next contacts by score, draft the touch, log the outcome, schedule follow-up, feed the weekly
dashboard). Owning the engine, not renting per-seat API access, is what makes the agentic loop sustainable.

## What Richard is almost certainly using now

His domain (`richarddfowler.com`) 301-redirects to Compass, and Compass agents get **Compass CRM**
bundled free — it is the former Contactually, which Compass acquired in 2019.

- **Data is portable (good):** Compass signs a data-ownership pledge; agents own their contacts and can
  export to CSV, even on exit. We can seed from it.
- **The engine is not usable for us (bad):** Compass CRM has **no open third-party API** we can drive,
  and the *system itself* goes away if he ever leaves Compass. Fine as his daily UI; unusable as the
  programmable core of the agentic reactivation loop.

> Confirm with Richard (don't block): What CRM do you use today? Is Compass CRM the only one? Anything in
> Wise Agent / Mailchimp / a spreadsheet? Team-shared or solo? (Meeting question #1 in the main plan.)

## Build vs. buy vs. self-host

Building from scratch is the wrong move — solved problem, no edge, and against the repo rule "if we don't
need to build we shouldn't." The real choice is which existing engine we adopt and put a thin agentic
layer on top of.

| Option | Type | API for our agent | Real-estate native | Cost | Ops burden on us | Portability |
|---|---|---|---|---|---|---|
| **Follow Up Boss** | Commercial RE CRM | Mature REST + webhooks (CRUD contacts/deals/comms; 2 webhooks/event, 8h retry) | Yes — MLS, dialer, email/text, 250+ lead sources | Grow ~$58/mo annual; **API may require Platform ~$833/mo — VERIFY** | None (hosted) | Full CSV export |
| **Twenty** (self-host) | OSS, modern | GraphQL + REST + webhooks; Claude.md/Cursor rules; MCP ambiguous | No — wire Twilio/Sendgrid yourself | $0 + hosting | We own it (Docker arm64, backups, deliverability) | Total — we hold the DB |
| **Compass CRM** | Broker-locked | No open API | Yes | $0 (included) | None | Data yes, system no |
| EspoCRM / SuiteCRM | OSS, traditional | Espo decent; Suite "limited"; no AI infra | No | $0 + hosting | High | Yes |

Note on Twenty + MCP: a vendor blog claimed Twenty ships a native MCP server; the more reputable Jan 2026
marmelab benchmark says it **lacks** one but has GraphQL + REST + webhooks. Treat MCP as nice-to-have, not
decisive — REST/webhooks is enough for an agent to drive, and we own the Postgres DB so we can wrap our own
MCP (or hit the DB directly) however we want.

## Recommendation

**Self-host Twenty as the owned engine; run it as a back-office brain; build our own agentic flows on it.**

Two of Richard's/our constraints settle the architecture cleanly:
- **The ~$833/mo Platform tier is a non-starter for Richard.** That removes Follow Up Boss as the engine —
  its API is, per multiple 2026 sources, gated to that tier (see Verification Findings).
- **We want to own the DB and build whatever agentic flows we want, whenever.** That points to a
  self-hosted, owned-data architecture, not a rented per-seat API.

**Why Twenty wins the owned-engine slot** (a justified pick, not a default):
- Best API surface of the open-source set — GraphQL + REST + webhooks. EspoCRM is close; SuiteCRM is weak.
- Gives a polished CRM **UI for free** over our own Postgres, so we own the DB *and* don't have to build a
  front-end. That's the sweet spot vs. going fully raw (Postgres + custom UI) — more flexibility than we
  need and more to maintain.
- Smallest ops footprint of the self-host options (one-line Docker, low resources) — fits the M1/M4 arm64 +
  launchd + Tailscale pattern already running in this monorepo.
- $0 licensing, total data sovereignty, zero vendor lock.

**Operating model — Shape 2 (recommended): back-office brain, Richard stays on Compass.**

The one genuinely live decision is *who logs into Twenty*. Two shapes:
1. **Twenty is Richard's CRM** (he logs in daily). The real-estate-native gap bites hard — no dialer, no MLS,
   no native texting — plus adoption risk that he won't switch off Compass. Heavy path. Not recommended.
2. **Twenty + agent layer is *our* back-office engine; Richard never logs in.** He keeps Compass for
   day-to-day. Our system is the intelligence: owns the normalized contact DB, runs the scoring, picks the
   daily worklist, drafts approved call/text/email, and hands him a simple daily list (email/SMS/Notion —
   whatever's frictionless). **Recommended.**

Why Shape 2: it plays directly to "build agentic flows + own the DB," eliminates adoption risk (Richard
changes no habits), and dodges most of the real-estate-native gap (no dialer to rebuild if he still dials
from his phone/Compass). Twenty is the system of record + UI **for us**, not a tool forced on him.

Downstream consequences of Shape 2 (these stop being open questions):
- **Messaging/deliverability is deferred.** Start with Richard sending approved drafts through his existing
  tools (manual send). That also **defers the A2P 10DLC / TCPA load** until we deliberately automate
  outbound. Only when we automate sends do we stand up Twilio + 10DLC + a sending domain.
- **Real-estate-native gap is mostly moot** for v1 — we don't reimplement MLS/dialer; Compass covers his UX.

**Verify before we productize (not blocking for one client):** Twenty's current license terms for
multi-tenant / reusable-template use. Fine for a single client; confirm before turning this into something
we deploy across many.

## Plan (maps to the 3-tier agentic framing in CLAUDE.md)

1. **Confirm reality with Richard** (don't block the build) — What CRM does he use today? Compass only?
   Anything in Wise Agent / Mailchimp / a spreadsheet? Team-shared or solo? (Meeting question #1.)
2. **Own the data layer first.** Export contacts + transactions from Compass CRM (CSV) into the normalized
   schema from the plan's Next Deliverable #1, held in **our** Postgres. This schema is the system of record;
   Twenty is the UI/CRM shell over it. This is what preserves flexibility regardless of any later tool swap.
3. **Tier 1 — simple automation:** Stand up self-hosted Twenty (Docker, arm64, on the M-series box behind
   Tailscale), import the seed, apply the lead-scoring model (Deliverable #2) as fields/views. We generate a
   prioritized daily worklist; Richard works the 4-week sprint by calling/texting from his own tools.
4. **Tier 2 — semi-agentic:** Our code (on the M-series box) drives Twenty via API/DB — pulls next-best
   contacts by score, drafts the call note / text / email (human-approved per the guardrail: never auto-send
   messages that pretend to be personally written), writes the weekly dashboard from logged activity.
5. **Tier 3 — fully agentic:** Loop runs on cadence, moves contacts between nurture tiers on response
   signals, flags stale/missing data, reports against the objective metric — **qualified relationship
   opportunities/week** — with the plan's existing stopping condition and unsubscribe/complaint circuit
   breaker. If/when we automate outbound sends, the compliance stack below becomes active. All five
   preconditions are already named in the main plan; our owned DB + Twenty supply the measurement + action
   surfaces.

## Verification Findings — Follow Up Boss API (why it's rejected) (2026-06-13)

> Bottom line: FUB's API is capable, but the likely **Platform-tier (~$833/mo) gate** makes it a
> non-starter for Richard. Retained here as the rejection rationale and as a fallback reference if the
> self-host path ever stalls.

**API capability (confirmed, healthy — but moot if tier-gated):**
- Rate limits — sliding 10-second window: global **250 req/10s** (125 if system unregistered),
  **POST `/v1/events` unlimited**, GET `/events` 20/10s, PUT `/people` 25/10s, notes 10/10s. Ample for a
  reactivation loop over hundreds of contacts.
- Webhooks — `peopleCreated/Updated/Deleted`, `peopleTagsCreated/Deleted`, `notesCreated/Updated/Deleted`;
  registered via `/webhooks`, 2 per event, JSON POST. The `/events` endpoint logs communications/activity —
  this is the spine of the weekly "qualified relationship opportunities" metric.
- TODO before build: confirm the exact webhook/event types for **inbound** replies (text/email/call) so the
  metric can count replies, meetings, and referral mentions automatically.

**Pricing correction + open risk (decision-flipping — VERIFY WITH FUB SALES):**
- Tiers: **Grow $69/mo (~$58 annual) · Pro $499/mo (~$416 annual, ≤10 users) · Platform $1,000/mo
  (~$833 annual, ≤30 users).** My earlier "$58" was the Grow tier, not Pro.
- **API access tier is ambiguous.** Official API docs mention *no* tier requirement (historically every
  account got an API key); multiple 2026 secondary sources claim API access is now **Platform-exclusive**.
  If true, the agentic layer needs the ~$833/mo tier, which materially strengthens the case for
  self-hosting **Twenty** (free). **Do not treat the low price as settled — confirm with FUB sales first.**

## Compliance Landmines — Outreach Loop (2026-06-13)

The plan's headline target ("past clients from 7–13 years ago") is exactly the cohort where the easy legal
cover has lapsed. These are **preconditions**, not polish — they sharpen the plan's guardrail/rollback tier:

- **A2P 10DLC registration is mandatory.** Since Feb 1, 2025 carriers **block 100%** of unregistered
  business SMS (not throttle — block). Any texting (FUB-native or Twilio) requires registration via The
  Campaign Registry before sending.
- **TCPA — EBR exemption is blown for this cohort.** Telemarketing's "established business relationship"
  exemption covers a purchase within **18 months**; 7–13-year-old clients are far past it. Calls/texts that
  constitute *solicitation* to anyone on the National DNC list need **prior express written consent**.
  Damages **$500–$1,500 per message**. The plan's instinct (reconnect first, don't lead with buy/sell)
  helps — genuine non-solicitation relationship outreach is a different category — but the line is thin.
- **CAN-SPAM (email):** accurate headers, honest subject, physical postal address, working opt-out honored
  within 10 business days.
- **TREC §535.155 (TX advertising):** every advertisement, including mass email/text/social, must carry the
  **broker's name (Compass)** plus a designation identifying him as agent/broker/REALTOR®. Misleading ads
  can cost the license. Bake this into every template.
- **Compass internal compliance:** he advertises under Compass's broker license, so Compass will likely
  need to approve outreach templates and testimonial usage.

**Concrete guardrail checklist for the agentic loop:** consent capture · National + internal DNC scrubbing ·
A2P 10DLC registration · STOP/opt-out auto-handling · broker name + REALTOR® designation in every template ·
Compass template pre-approval · human review before any "personally written" message is sent.

## Sources

- Compass One launch / Compass AI CRM: https://www.compass.com/newsroom/press-releases/6rnUy5QFL9thn6uW7bQSiG/
- Why Compass bought Contactually (now Compass CRM) — Inman: https://www.inman.com/2020/06/03/heres-why-compass-chose-to-buy-contactually-over-other-crms/
- Exporting client data from Contactually/Compass — RealOffice360: https://realoffice360.com/crm-blog-for-realtors/how-to-export-from-contactually-for-non-compass-agents-protect-your-data
- Best real-estate CRM 2026 (FUB vs BoldTrail vs Wise Agent) — Luxury Presence: https://www.luxurypresence.com/blogs/the-best-real-estate-crm-software/
- Follow Up Boss API integration guide: https://followupace.com/blog/follow-up-boss-api-integration-guide
- Follow Up Boss webhooks setup: https://keetechnology.com/blog/webhooks-follow-up-boss-integration/
- Open-source CRM benchmark 2026 (Twenty/EspoCRM/SuiteCRM) — marmelab: https://marmelab.com/blog/2026/01/09/open-source-crm-benchmark-2026.html
- 9 best open-source CRMs 2026 — Nutshell: https://www.nutshell.com/blog/best-open-source-crms
- Follow Up Boss API rate limiting (official docs): https://docs.followupboss.com/reference/rate-limiting
- Follow Up Boss pricing tiers 2026 — Kee Technology: https://keetechnology.com/blog/follow-up-boss-pricing
- Follow Up Boss pricing / API tier — CloudTalk: https://www.cloudtalk.io/blog/follow-up-boss-pricing/
- A2P 10DLC compliance 2026 — Apten: https://www.apten.ai/blog/a2p-dlc-compliance-2026
- TCPA SMS compliance 2026 — Infobip: https://www.infobip.com/blog/tcpa-compliance-sms
- Real estate SMS compliance (TCPA/10DLC) — Textdrip: https://textdrip.com/blog/sms-compliance-real-estate-agent
- TREC advertising rules §535.155 — Bertolino LLP: https://www.belolaw.com/blog/advertising-rules-texas-realtors/
- TREC advertising FAQ (official): https://www.trec.texas.gov/taxonomy/faq-category/advertising
