Larchmont Builds LLC / Internal build spec / v1
Most contractor marketing plans are written from opinion. This one is written backwards from eight delivery days of real lead data on a contractor in the same county, selling to the same buyer, through the same channel. Every build below exists because a number said so.
00 / Where the evidence comes from
The funnel data behind this document is not Larchmont's. It is Elite Northwest Flooring's: 8 delivery days, $252.42 of Meta spend, 10 leads, 7 booked, 3 estimates run, 3 quotes sent, $0 closed. Snohomish County, homeowner buyer, Facebook lead form.
It transfers because the shape transfers. Same county, same buyer age, same channel, same job size band, same problem of a two person operation trying to answer a phone while standing on a job. It does not transfer as a forecast. Nobody can tell you Larchmont's cost per lead from someone else's account, and this document never tries.
Where a number is borrowed, it says borrowed. Where a number is Larchmont's, it says so. Where a number does not exist yet, it says UNKNOWN and names who has to produce it. There are no invented figures anywhere in here, and none should be added later.
The gap is not traffic and it is not tracking. The gap is that nothing catches the lead in the first sixty seconds and nothing carries it to a signature. That is what this builds.
01 / The finding that pays for the whole system
Not hours. Minutes. The reason is boring and mechanical: the calendar sat on the last step of the form, so the person booked themselves while they were still holding the phone.
The one lead who took 883 minutes to book is also the only booked lead who never got an estimate run. One data point, so treat it as a hint rather than a law, but it points the same direction as everything else.
This is the cheapest finding in the document and the most expensive to ignore. It costs no ad budget. It is a form layout and two automations. Every other build below is downstream of it.
The current site posts a lead to /api/lead, pings a notification, and stops. There is no calendar on the form and no automated call. A lead that arrives at 7pm on a Saturday sits until someone opens a phone. Fix the sixty seconds before spending another dollar on reach.
02 / Do not build these
This section exists because every one of these will be sold to Larchmont by someone, and four of them have hard evidence against them from the reference account itself.
| The thing | Verdict | What the record shows |
|---|---|---|
| AI texting bot as the booking mechanism | Failed | 167 outbound messages, 6 inbound replies at 3.5 percent, zero bookings traceable to it. Meanwhile a human call inside five minutes booked 7 of 10. |
| A tool that scores a video and predicts views | Do not buy | Creative features explain 10 to 25 percent of performance variance, ceiling near 30 percent even with non creative variables. Anything promising a view count is selling an R squared near 0.2. |
| Hashtags for reach | Dead | Head of Instagram on record: not an important thing for reach. |
| Trending audio for distribution | Folklore | No documented mechanism. It survives only as a creative prompt. |
| Best time to post | Folklore | No methodology behind any of it and the vendors contradict each other. |
| Tag a friend giveaway | Never | Trips engagement bait rules and giveaway conditions at once. The demotion lands on the account, not the post, and it is durable. |
| Reels and Stories placements at launch | Off | Took 17 percent of spend across both platforms and produced zero leads. Facebook feed took 77.7 percent and produced 9 of 10. |
| 101 ad variants | No | One ad set took 78 percent of spend and produced 100 percent of leads. A single creative produced 7 of 10. The other 100 were budget that never got a chance. |
| Cutting the radius to kill far leads | Reversed | Cutting it would have removed 94 percent of quoted pipeline. The two biggest quotes were the two furthest leads. |
Spend is not independent of performance here. Meta concentrated budget early, so the winner and the ad Meta fed are confounded. The honest read is not that one creative was brilliant. It is that 101 variants split a small budget so thin that most never got tested at all. Ship five to eight, let them run, then judge.
03 / Evidence to build
Finding
7 of 8 bookings inside 5.2 minutes
Calendar sat on the last form step.
Build
WF-01 Speed to Lead, WF-02 Missed Call Text Back
Calendar on the form, call bridge in sixty seconds.
Finding
7 booked, 3 run, 4 lost between
Cancellations and no shows ate the middle.
Build
WF-03 Show Rate Defense
Confirm, remind, on my way, recover.
Finding
3 quotes sent, nothing moved past sent
No follow up existed after the quote.
Build
WF-05 Quote Ladder
Four touches over 21 days, then close the file.
Finding
Pixel fired only on submit
153 clicks, 10 page views, page views equalled leads.
Build
Section 06 event map and offline conversions
Feed closed revenue back, not form fills.
Finding
Every large quote came from a GC or property manager
Nothing in the ad stack targeted that buyer.
Build
Section 08 commercial lane
Separate pipeline, separate cadence, no paid social.
Finding
GBP category was set to Remodeler
Larchmont's own audit. It made the profile invisible for the money terms.
Build
Section 09 review and profile engine
Category fix first, then review velocity.
04 / The pipeline
| Stage | Enters when | Exits when | Reference drop |
|---|---|---|---|
| 1. New Lead | Form, call, or text arrives | Two way contact made | 10 in |
| 2. Contacted | Lead replies or answers | Appointment on the calendar | 10 to 7 |
| 3. Estimate Booked | Calendar slot held | Eddie is standing in the house | 7 to 3 |
| 4. Estimate Run | Walkthrough done | Written number sent | 3 to 3 |
| 5. Quote Sent | Price delivered | Signed or dead | 3 to 0 |
| 6. Won / Lost | Decision made | Closed out with a reason | 0 won |
Stage 3 and stage 5 are the whole game. Booking is close to solved by speed. Getting the booked person to actually be home, and getting the quoted person to actually sign, is where every dollar of the reference account died. WF-03 and WF-05 exist for exactly those two gaps and nothing else.
Stage 6 does not accept a close without a reason from a fixed list: price, timing, went with another bid, job cancelled, could not reach, out of area, not a fit. Free text loss reasons produce nothing you can act on twelve months later. A fixed list lets you sort a year of losses by reason and see which one is costing the most.
05 / GoHighLevel
Twelve workflows. Each one names its trigger, its exact waits, and its exit. Every SMS line below has been run through the Larchmont copy gate.
A2P 10DLC brand and campaign registration has to be approved before GHL will deliver SMS at volume. Unregistered traffic gets filtered by the carriers, not by GHL, so it fails silently and looks like people are ignoring you. Register the brand, register a campaign per use case, and do not build the SMS steps until the campaign shows approved. Budget a week.
TRIGGER: Form Submitted OR Inbound Webhook from site /api/lead OR Facebook Lead Form
lead-uncaught.Why the call and the text fire together: the text buys credibility for the unknown number that is about to ring. Sending it after the call is a wasted message.
TRIGGER: Call Status is Missed, Voicemail, or Busy on any tracked number
This is the highest return automation on the list for a contractor. Larchmont's own beacon already treats phone taps as leads, which means the call volume is real and currently unmeasured after the ring. Every missed call today is a lead that simply evaporates.
TRIGGER: Appointment Status is Confirmed
Reference drop was 7 booked to 3 run. That is four jobs lost between a yes and a doorstep, on a funnel with 10 leads in it. This workflow is aimed at exactly that number.
TRIGGER: Opportunity stage moves to Estimate Run
The reference account sent a quote for 100 percent of estimates it ran, so this is a guard rail rather than a fix. It exists so the number never becomes the bottleneck once volume rises.
TRIGGER: Opportunity stage moves to Quote Sent
Nothing in the reference account ever moved past Quote Sent. Three live quotes worth $37,550 sat with no sequence behind them. This is the single largest recoverable number in the whole dataset.
TRIGGER: Opportunity stage moves to Won AND job marked complete
No gating, no incentive, no filtering by star rating. Do not route unhappy customers to a private form and happy ones to Google. That is an FTC problem under 16 CFR Part 465 and Larchmont already had one fake proof cleanup. Ask everyone the same way, or do not ask.
TRIGGER: Daily at 07:00
The metric that governs the system gets measured daily and read in five seconds. If this number drifts above five minutes the rest of the stack stops mattering.
TRIGGER: Form Submitted on the commercial page OR contact tagged property-manager, gc, insurance
A property manager who gets a chirpy automated text at 8pm is a relationship you just spent. The residential machine is wrong for this buyer, which is exactly why it gets its own lane.
TRIGGER: Form or call where service is water, flood, or mold
Larchmont is a contractor, not a public adjuster. No claim negotiation, and the customer pays their deductible in full. Nothing in this route may imply otherwise, in copy or in a script.
TRIGGER: Added on loss, no contact, or a cold quote
dormant. Do not text again.This is the only place a language model belongs in the messaging path, and only for drafting the variant, never for holding the conversation. See section 07.
TRIGGER: Stage is Contacted for more than 24 hours with no appointment
TRIGGER: Opportunity stage moves to Won
Step 2 is the one nobody builds. It is also the one that eventually makes the ad account optimize toward jobs instead of form fills.
06 / Measurement
The reference account fired its pixel on submit and nothing else. 153 link clicks produced 10 landing page views, and landing page views equalled leads exactly. That is not a funnel, it is a single event, and Meta optimized against it for eight days.
| Event | Fires when | Carries | Why |
|---|---|---|---|
| PageView | Any page | visitor id, source | Baseline and audience building |
| ViewContent | Service or city page, 15s dwell | service, city | Separates a real reader from a bounce |
| InitiateCheckout | Form started, first field focused | service | The abandonment signal. Nobody tracks this and it is where the form dies |
| Lead | Form submitted | service, city, source | Current only event |
| Schedule | Appointment booked | slot, service | The real top of the money funnel |
| Contact | Phone tap or text tap | page, source | Larchmont's beacon already emits this. Feed it to the pixel too |
| Purchase | Offline, on stage Won | contract value | Sent by WF-12 through CAPI, not the browser |
Adding events mid flight to a campaign that is already learning will reset that learning. Build the full event map before the first dollar, or accept a deliberate reset on a day you choose. Do not discover this halfway through a test.
Larchmont's beacon already produces the harder half: persistent visitor id, first touch source, click ids, per campaign UTM links, and phone and text tap events. The missing links are three:
/api/lead posts to GHL by webhook as well as to the existing store, carrying the beacon's _lv_vid, utm fields and click ids into GHL custom fields.07 / The AI layer
Every one of these processes data that already exists or that the system above starts producing. None of them talk to a customer unsupervised, because the one that did produced zero bookings out of 167 messages.
Every inbound call gets recorded and transcribed, then mined for the objection, the service, the city, and the words the caller actually used. For a contractor the call is the lead, which means the call recording is the only unfiltered voice of customer data in the business. It writes the ad copy, it writes the FAQ, and it tells you which objection is killing stage 5. Feed the top objections into the quote ladder every month.
Not a performance predictor. A mechanical check that runs before anything publishes, because predicting failure is far easier than predicting success. It fails a piece for: no written final line, first cut later than one second, wrong caption font, missing reg number on a paid piece, a claim that is not on the approved facts list, an em dash, or a banned word. It is the existing lint gate pointed at video and static instead of only at print.
A weekly sweep of the Meta Ad Library across the service radius. It records days on air, variant count, offer, and relaunch behaviour. Those three are the only honest proxies that exist, because Meta publishes no cost per lead, spend, impressions or click through rate for commercial advertisers. Any tool claiming a competitor's cost per lead invented it. What the sweep is actually looking for is the lane nobody is running, which is how the open refinish lane got found in the reference market.
Once thirty quotes exist with loss reasons attached, cluster them by service, job size, city, source, and reason. The output is a single sentence each month: this is the job we keep losing and this is why. It cannot run before the data exists, so it is fourth by necessity rather than by importance.
Assisted local discovery moved from roughly 6 percent to roughly 45 percent inside a year. That plausibly outweighs every posting tactic in this document. The monitor asks the major assistants the twenty questions a Snohomish County homeowner would actually ask, records whether Larchmont appears, and logs what got cited instead. Larchmont's AEO pages already exist for this; the monitor tells you whether they are working.
Drafts the WF-10 variants so the every 45 days text is not identical for two years. A human approves the batch monthly. The model never sends, never replies, never holds a thread.
Anything that cannot be answered returns a refusal instead of an estimate, because a plausible number is worse than no number when you act on it. Every output carries where it came from.
08 / The commercial lane
In the reference account every large quote on file came from a general contractor or a property manager, and not one of them came from an ad. The largest was $200,500 against an average residential quote of $12,517. Nothing in the marketing stack targeted that buyer.
Larchmont is a general contractor rather than a flooring sub, so the mirror image applies. The repeat volume buyer is the property manager, the insurance restoration referrer, and the realtor with turns. Larchmont already has a partnership SOP built for exactly this and it is not wired to anything.
| Channel | Mechanism | Paid social role |
|---|---|---|
| Property managers | Named list, quarterly touch, unit turn pricing sheet | None |
| Insurance restoration | Referral relationships, response time is the product | None |
| Realtors, pre list repairs | Fast small jobs, list of what kills an inspection | None |
| General contractors | Prequalification, plan rooms, certificate of insurance on file | None |
Paid social has no role in any row. This lane runs on a named list, a calendar, and WF-08. It is slower to start and it does not decay when the ad budget stops.
09 / Profile and reviews
Larchmont's own GBP audit found the primary category set to Remodeler, which made the profile invisible for the terms that actually carry intent. Category is the one field that moves the most, and it costs nothing to change.
Never publish a review count, a star rating, or a job count that is not verifiable on the day it ships. That was the exact class of claim purged from the site and the SEO property. It does not come back through a side door.
10 / Paid
| Setting | Launch with | Because |
|---|---|---|
| Placements | Manual. Facebook feed only. | Feed produced 9 of 10 leads on 77.7 percent of spend. Reels and Stories produced zero on 17 percent. |
| Creative count | 5 to 8 | 101 variants split a small budget so thin most never got a real test. |
| Age | Do not exclude 55+ | Women 65+ were the cheapest lead in the reference account at $14.03. Men 65+ produced nothing on similar spend. |
| Radius | Wide. Price the drive in. | Cutting distance would have removed 94 percent of quoted pipeline. |
| Objective | Leads, then Purchase once WF-12 feeds | Optimizing on form fills buys form fills. |
| Every ad | Carries LARCHBL744BK | RCW 18.27.100 requires the registration number in contractor advertising. |
At realistic variance for a small account, detecting a 2x effect takes roughly 46 posts, or about 28 with topic matched pairs. A 1.5x effect takes roughly 138. A 1.25x effect is not reachable.
An undersized test does not fail loudly. At fifteen per arm it reports roughly 2x whether the truth is 1.15x or 2x, because only the lucky results clear the bar, and it points the wrong way about one time in nine. That is the machinery behind every confident marketing case study. Run fewer tests, properly powered, and read nothing until the arm closes.
11 / Build order
Week 0 / Gates, nothing sends without these
Week 1 / The sixty seconds
/api/lead webhook into GHL carrying visitor id, UTMs and click ids.Week 2 / The middle of the funnel
Week 3 / Revenue closes the loop
Week 4 and beyond
Beacon with UTM, click id and visitor id capture. Lead store and analytics dashboard. Nightly SEO bot with propose, green light, prebuilt promote. 153 page SEO property and AEO pages. GMB post library. Legal base with the registration published and TCPA consent under every form. None of it needs rebuilding. It needs wiring into the pipeline in section 04.
12 / The numbers you have to supply
Everything above is structural and holds regardless of the figures. What it cannot do is tell you whether to scale or stop. That takes five numbers that only Larchmont has, and none of them are in this document because inventing them would be worse than leaving them blank.
| Input | Value | Who has it |
|---|---|---|
| Average job value, residential | UNKNOWN | Eddie, last 20 invoices |
| Gross margin, blended | UNKNOWN | Eddie |
| Close rate, quote to signed | UNKNOWN | Produced by this system after 30 quotes |
| Current inbound call volume | UNKNOWN | Phone records, this month |
| Verified Google review count | UNKNOWN | GBP, today |
Once the first two exist the governing question stops being cost per lead and becomes a single sentence: how many jobs does one month of spend have to close to pay for itself. In the reference account that answer was one job in seven, and it had nothing to do with the $25.24 cost per lead everyone was staring at.