Manage Follow Up Boss real-estate CRM people, lead events, notes, calls, tasks, appointments, deals and account metadata via the Follow Up Boss API v1.
Follow Up Boss ships in the w6w first-party pack. It declares 26 actions, 2 health checks, and the host runs its code in a sandbox that never sees the credential.
io.w6w.followupbossFollow Up Boss is a CRM built specifically for real-estate teams, and this app lets a workflow act on the same data the sales side works from every day: people (buyer and seller leads), deals with earnest-money and possession dates, and everything logged against them.
Send a lead in as an event so Follow Up Boss actually runs its follow-up machine — de-duplicating against existing contacts, notifying the assigned agent, and applying action plans — rather than creating a bare contact record with none of that. Log calls, add notes, create and update tasks and appointments, and create, update and search deals through the account’s own pipelines and stages.
Look up and search people, check for a duplicate before creating a new one, and read the account’s own custom fields, smart lists and users, so a workflow can work with the exact picklists and stages a given Follow Up Boss account actually has.
Three routes to the same 26 actions. The Workflow tab is generated from Follow Up Boss's own manifest and carries its real ids, so it is copy-pasteable; the Code and CLI examples are the same call for any action on any app, so every app-specific value in them is a blank you fill in.
apply-action-plan Start a named Action Plan for a contact — the on-demand counterpart to the plans that lead events fire automatically. Note that setting a contact's `contacted` flag to true elsewhere will pause the plan. Flagged by Follow Up Boss for eventual deprecation under Automations 2.0, with no date set.
check-duplicate Check whether a contact with this email or phone already exists — account-wide, even for records your API key cannot otherwise see. Reports which field matched and who the contact is assigned to. Use this before creating, not a search: a search scoped to an agent's key returns nothing for a contact owned by someone else.
create-appointment Create an appointment — a showing, listing presentation or closing. To have it sync to the agent's Google or Outlook calendar, the agent's own user must be among the invitees.
create-deal Create a transaction on a pipeline stage, with price, commission split and the real-estate milestone dates. Populate Agent user ids — a deal created without them is invisible to every agent, though admins and owners still see it.
create-event Send a lead or lead activity into Follow Up Boss. This is the correct way to bring leads in from a website, IDX portal or lead provider — it de-duplicates against existing contacts, records the event in contact history, notifies and assigns the agent, and fires action plans. Use Create Person only for administrative adds that should trigger nothing.
create-note Add a note to a contact. Rate-limited harder than anything else in the API — the `notes` context allows only 10 requests per 10-second window, so throttle bulk note-writing.
create-person Add a contact directly. NOT the way to send in a lead — POST /people runs no automations, action plans, agent notifications or lead-flow assignment. Use Create Event for anything arriving from a website, portal or lead provider; use this only for administrative adds.
create-task Create a task against a contact. Supply exactly one of Assigned user id or Assigned to (name) — the API requires one of the pair even though both are individually optional.
delete-person Permanently delete a contact by id. Consider moving them to the `Trash` stage with Update Person instead — that is Follow Up Boss's reversible equivalent, and searches already exclude trashed people by default.
get-identity Return the authenticated user and their Follow Up Boss account — ids, names, email and the account domain. Use `user.id` to assign work to whoever this Connection is, or `account.domain` to assert a workflow is pointed at the right brokerage.
list-action-plans List the account's Action Plans (follow-up drip sequences) to resolve the id that Apply Action Plan needs. Follow Up Boss has flagged this endpoint for eventual deprecation under Automations 2.0, with no date set and no migration path published yet.
list-custom-fields List the account's contact custom fields. Use the `name` from here (e.g. `customClosePrice`) when writing custom values — not the UI `label` (e.g. 'Close price'). Dropdowns report their permitted `choices`. Deal custom fields live elsewhere, under `/dealCustomFields`.
list-pipelines List deal pipelines. Each pipeline includes its stages inline, so this one call supplies both the pipeline ids for Search Deals and the stage ids that Create Deal requires. For the *contact* stages (Lead, Past Client, Trash), use List Stages instead.
list-smart-lists List saved Smart Lists, whose ids drive the Smart list id filter on Search People. Turn on All versions — by default this returns only Smart Lists from the classic UI, which on a modern account is often none of them.
list-stages List the account's contact stages (Lead, Past Client, Trash, …) with their people counts. Stages are per-account and renameable, so resolve them here rather than hard-coding names. For deal pipeline stages, use List Pipelines.
list-users List the account's agents, brokers and lenders — the id lookup for assignment, task ownership, deal visibility and appointment invitees. Note `role` only ever reports Agent, Broker or Lender: an Owner is a Broker with `isOwner` true, an Admin is one without.
log-call Record a call against a contact, with outcome, duration, notes and an optional recording URL.
search-appointments Search appointments by person, user or date window. Returns far less than the full calendar by design: only appointments created by the authenticating user, created inside Follow Up Boss (not synced from Google/Outlook), by a user sharing their calendar. An empty result is usually this scoping, not an empty calendar.
search-deals Search transactions by pipeline, agent, contact or status. The response metadata includes `totalByStageId`, a per-stage count that renders a pipeline board without a second query.
search-events Search lead events — inquiries, property views, registrations — optionally scoped to one person, one or more event types, or a property address. Note some events are visible only in the Follow Up Boss UI and never appear here.
search-people Search contacts by name, email, phone, stage, source, assignment, tags, price range or smart list. Filters combine with AND. Excludes the Trash stage unless you opt in.
search-tasks List tasks, filtered by person, assignee, type, completion or due window. `due` accepts the named ranges today / overdue / upcoming, which is usually easier than computing dates.
update-deal Update a transaction — most often to advance its stage, revise the price or fill in a milestone date. Person and agent id lists REPLACE the existing ones, so send the full set.
update-person Update a contact by id. Careful: `tags`, `phones`, `emails` and `collaborators` REPLACE the existing list rather than adding to it — send the full set, or use Merge tags for tags. `source` and `sourceUrl` cannot be changed after creation and are not offered here.
update-task Update a task — most often to mark it complete, or to reassign it. Due dates and reminders are set at creation only and cannot be changed through this endpoint.
A workflow step names the app and the action, and the editor fills in the
connection when you pick one. This is the Step shape from the
workflow spec, carrying Follow Up Boss's real ids.
{
"manifestVersion": "2",
"name": "followupboss-example",
"steps": [
{
"id": "apply-action-plan",
"uses": {
"app": "io.w6w.followupboss",
"action": "apply-action-plan",
"connection": "conn_YOUR_CONNECTION_ID"
},
"with": {
"personId": "<personId>",
"actionPlanId": "<actionPlanId>"
}
}
]
}apply-action-plan check-duplicate create-appointment create-deal create-event +21 more actions available
Every app-specific value here is a blank you have to fill in. An
app action is reached through the connection that authenticates it, so the
address is a connection id, not the app id — and connections belong to your account,
so a public page cannot know yours. Create one for Follow Up Boss, then fill in
the three blanks: conn_YOUR_CONNECTION_ID, the action key, and the
parameters that action declares. The call itself is real — the shape is transcribed
from the studio's own snippet builder, which prints the same kind of blanks — but
nothing in it is specific to Follow Up Boss. The Workflow tab is where this app's
real ids are.
npm install @w6w/sdkyarn add @w6w/sdkpnpm add @w6w/sdkdeno add npm:@w6w/sdkimport { W6wClient, isActionRun } from "@w6w/sdk";
// Reads W6W_BASE_URL and W6W_TOKEN from the environment when omitted.
const client = new W6wClient();
const envelope = await client.run({
urn: "conn_YOUR_CONNECTION_ID",
action: "create-person",
payload: {
// firstName: "<value>",
// lastName: "<value>",
// emails: "<value>",
// phones: "<value>",
// stage: "<value>",
// source: "<value>",
// sourceUrl: "<value>",
// assignedUserId: "<value>",
// assignedTo: "<value>",
// assignedPondId: "<value>",
// assignedLenderId: "<value>",
// assignedLenderName: "<value>",
// price: "<value>",
// tags: "<value>",
// background: "<value>",
// collaborators: "<value>",
// contacted: "<value>",
// addresses: "<value>",
// timeframeId: "<value>",
// createdAt: "<value>",
// deduplicate: "<value>",
// customFields: "<value>",
},
});
if (isActionRun(envelope)) console.log(envelope.value); npm install -g @w6w/cli w6w run conn_YOUR_CONNECTION_ID --action create-person --payload '{}' Give an AI agent Follow Up Boss — without giving it Follow Up Boss's credentials. One MCP endpoint exposes every app, function and workflow the caller is entitled to, as tools it can discover and run. Access is granted per team while we onboard.
One tool call{
"name": "w6w_invoke",
"arguments": {
"ref": "app:io.w6w.followupboss#apply-action-plan",
"input": {
"personId": "<personId>",
"actionPlanId": "<actionPlanId>"
}
}
}
Every tool names its target with a single ref. The
app: form above doesn't name a connection at all — the
host resolves which of the caller's Follow Up Boss connections to sign
with, and refuses rather than guesses when the answer is ambiguous.
The token is attached host-side, at the moment of the call. It is never a tool argument, never in the model's context, and never in a transcript — so a prompt injection has nothing to exfiltrate.
Tools are derived per end user from what that person has actually connected and is entitled to — not one shared bot identity carrying the union of everyone's access.
Multi-step work runs on the workflow engine and returns a run handle the agent can poll — retries, branching and state survive the conversation that started them.
Follow Up Boss's declared health checks are on the surface too, so an agent can tell "the vendor is down" from "your credential expired" before it burns a retry on either.
The MCP surface is part of the hosted platform. Follow Up Boss itself is MIT, and the runtime that executes it is source-available (FSL).
Follow Up Boss declares its own checks, so its health is a property of the app rather than something the host guesses at.
Atlassian Statuspage for followupboss.statuspage.io. The reported state tracks the **API** component specifically — the only surface this app calls — while the mobile apps, web app and marketing site are reported alongside it for context. Unauthenticated and unsigned.
Reads the `X-RateLimit-*` headers Follow Up Boss documents on every response, via a single `GET /identity`. Reports the `global` bucket — writes to /notes and /events are metered separately and more strictly.