Home / Work / Build 02

Build 02 · Step up

First-time buyer lead system, intake to handoff.

Build 01 answers the lead. This build carries them from first touch to a booked pre-approval call and an LO who owns the file, and it stops automating the moment a human should take over.

Demo build. Built and tested in my own demo sub-account using a fictional mortgage team. The structure is meant to be re-used across client sub-accounts through custom values.

Workflows
4, each with one job
Pipeline
8 stages
Nurture
14 days, 7 touches
Acceptance
10-scenario test matrix

Pipeline

The stage is the source of truth.

Automation reads the stage and reacts to it. When a loan officer drags a card, every workflow knows.

New LeadWF-01 creates
Contactedlead replied
BookedWF-03
No-showWF-03 recovery
ApplicationLO owns · exit all
Pre-approvedLO owns
Long-termnurture ended
Lostexit all

Workflow map

Four workflows, each with a written exit.

The most common bug in inherited accounts: a lead gets a "still thinking about it?" text an hour after they booked. That happens when entries are designed and exits aren't.

WF-01 · Intake & speed-to-lead

Answer in under a minute

Build 01, generalised: Meta form, website form or manual tag. Creates the contact and opportunity, alerts the LO, sends the first SMS and email.

IN: form / hot-lead tag
OUT: 5 min, no reply → WF-02
Re-entry: off
WF-02 · 14-day nurture

Follow up until they answer

7 touches over 14 days, SMS and email alternating. Ends by moving the card to Long-term and tagging for a monthly newsletter.

IN: tag wf-nurture
OUT: reply · booking · stage change · day 14
Stop on response: on
WF-03 · Appointment

Get them to show up

Confirmation, reminders at 24 h and 1 h before start, and no-show recovery with a reschedule link and an LO task. Showed → Application.

IN: booked on "Pre-Approval Call" calendar
OUT: showed · no-show handled · cancelled
Re-entry: on (reschedules)
WF-04 · Handoff & hygiene

Get out of the LO's way

On reply, booking, or the card moving to Application or Lost: remove the lead from WF-01/02, clear wf-* tags, create an LO task where needed.

IN: customer replied · stage changed
OUT: immediate
Re-entry: on

WF-02 in detail

Seven touches, then stop.

Each touch has one job. Every touch after day 1 is skipped if the lead has replied, booked, or moved stage, because WF-04 has already pulled them out.

Copy avoids rate quotes and approval language. The NMLS ID sits in every email footer through a custom value.

DayChannelJob
1SMSRe-ask the timeline question, shorter
2EmailWhat a first-time buyer needs for pre-approval
4SMSBooking link, "15 minutes, no credit pull"
6EmailDown-payment assistance exists, and it varies by state
9SMSSocial proof from a past first-time buyer
12EmailCommon myths (20% down, perfect credit)
14SMSPolite close-out: "should I check back in a few months?"

Data model

Fields and tags with a naming rule.

Prefixes make the tag list readable by the next person: src- where the lead came from, wf- which workflow owns them now, plain tags for facts about the lead.

NameTypeUsed by
purchase_timelineField · dropdownLO alert, nurture copy
credit_rangeField · dropdownLO alert
target_stateField · dropdownLicensing check, day 6 email
first_time_buyerField · yes/noRouting
ad_nameField · textReporting by ad
src-meta src-webTagSource reporting
wf-nurture wf-apptTagEntry / exit control
replied noshow needs-manual-callTagSmart lists for the LO
booking_link lo_name nmls_idCustom valueEvery message, per client

Acceptance · test matrix

Ten scenarios, each fired with a test contact.

Pass means the execution logs, the contact record, the pipeline card and the test phone all agree. Waits are shortened to minutes in a test copy of each workflow, then restored.

#ScenarioExpected
1New lead, never repliesAll 7 nurture touches send, card ends in Long-term, wf-nurture removed
2Replies on day 2Exits WF-02, card → Contacted, LO alert + task, no further nurture
3Books on day 4Exits WF-02, card → Booked, confirmation sent, 24 h and 1 h reminders scheduled
4No-showCard → No-show, reschedule SMS, LO task, noshow tag
5Reschedules after no-showCard → Booked, reminders rebuilt for the new time, no duplicate confirmation
6Texts STOPSMS DND on, no further SMS, email continues until unsubscribed
7Submits the form again 2 h laterSame contact, same opportunity, nurture not restarted
8Lead arrives 11:40pmLO alert immediately, first SMS at 8:00am in the lead's timezone
9No valid phoneEmail-only path, needs-manual-call, appears on LO smart list
10LO drags card to ApplicationRemoved from WF-01/02/03 within a minute, no messages after

Decisions

Why it's built this way.

Four, not one or twelve

One giant workflow is hard to test a branch of. Twelve small ones hide how they interact. Four workflows, each with one entry and a written exit, can be disabled and re-tested on their own.

Exits live in one place

WF-04 does all the "stop automating" work. When a lead gets a message they shouldn't, there's one workflow to check, not four.

Custom values over text

LO name, booking link and NMLS ID are custom values. The same build moves to the next client sub-account through a snapshot, and only the values change.

Documented in the account

Every workflow's description holds its entry, exit and last change date. A short handoff doc lists how to re-run the test matrix.

Not built · what I'd propose next

Send "booked" and "showed" events back to Meta through the Conversions API, so ads optimise for leads who take a call rather than anyone who fills out a form. This would be scoped and approved before building.

← Back to all work