The techs are doing the work. The money is being collected. But our systems do not reflect it because four data pipes are broken between the field and QuickBooks. Jobs get completed but never marked "Complete" in ServiceTitan. Invoices show $0 because nobody closes the billing. Kalen's sales show under the wrong tech or not at all. And Google Ads leads cannot be traced to revenue because the campaign tags are generic.
On top of that, two system blockers prevent us from fixing the reporting automatically: QuickBooks is not connected via Plaid (so revenue data must be pulled manually), and ServiceTitan has platform limitations that Kassidy confirmed on April 7. Until these are resolved, every number we report requires manual verification.
Estimated total fix time: 4 hours of Ashton's time + 45 minutes of Kassidy's time + 1 click from Stephanie (Plaid authorization).
$1,723,515
Revenue completed but invisible in the system right now
Every dollar follows this path from ad click to bank account. The pipeline breaks at three points, which means revenue is real but unreported.
Google Ads
$200/day
→
Call Comes In
364 calls
→
Job Created
624 jobs
→
Invoice
71% = $0
→
Completed
0% marked
→
QuickBooks
$0 batched
Critical Jobs completed with no invoice
When a tech finishes a job but the invoice is never finalized in ServiceTitan, the revenue shows as $0. This is not missing money. The customer paid. The tech got commission. But the system does not know it happened. Ashton has been catching these manually, but it should not require manual checking.
Ashton
Daily 4 PM closeout: open ST job list, filter for Done/Working, finalize each invoice
15 min/day
Ashton
Backfill March jobs with missing invoices (one-time)
2-3 hours
Critical sold_by_id not set correctly
Kalen cannot log into ServiceTitan himself. Ashton creates his estimates. As a result, Kalen's sales show under Ashton's name or under no tech at all. This makes it impossible to measure Kalen's actual close rate, revenue per job, or sales performance. The fix is a configuration change in ST, not a workflow change.
Kassidy
Verify Kalen is set as Active technician with "can be assigned jobs" = Yes
5 min
Robert
SoldBy auto-filler API patch (confirmed working, needs deployment)
Built
High Cannot tell which ad produced which job
Every Google Ads lead comes in tagged as just "Google" in ServiceTitan. There is no distinction between paid search, LSA, organic, or Google Maps. This means we cannot calculate true ROAS or know which campaigns to scale and which to cut. Without this, ad budget decisions are guesswork.
Kassidy
Create 3 campaign tags: "Google Ads (PPC)", "Google LSA", "Google Organic"
10 min
Robert
Lead source tagger + GCLID bridge (built, bridge fixed Apr 5)
Built
Critical Jobs stay "In Progress" forever
When a job is finished in the field but never marked "Complete" in ServiceTitan, it sits in limbo. It does not flow to invoicing, does not sync to QuickBooks, and does not count as revenue. Right now there are 200+ jobs stuck in this state. 103 are still "Scheduled" and roughly 100 are "In Progress" with no completion date.
Ashton
Daily closeout: every job must be Complete or Canceled by end of day. No gray.
15 min/day
Why This Matters Right Now
QuickBooks is the only source of truth for revenue. ServiceTitan's numbers are unreliable (phantom revenue, $0 invoices, stuck jobs). But right now I cannot pull QB data automatically because the Plaid connection is not authorized.
Without Plaid, every revenue number I report has to be manually pulled from QB P&L. That means reporting is slow, error-prone, and always lagging behind reality. With Plaid, revenue data flows automatically and I can build real-time dashboards that show actual collected revenue, not ST estimates.
This is the single biggest blocker to accurate reporting. It requires one authorization click from Stephanie.
Stephanie
Authorize QuickBooks Plaid connection (1 click in QB settings)
1 min
Confirmed by Kassidy Nielsen (ST Rep) on April 7
A 1-hour call with our ServiceTitan representative confirmed four platform limitations that affect our reporting:
ST Limit
200 stuck jobs found. 103 scheduled + ~100 in-progress. 11 holding real revenue ($34K largest).
Known
ST Limit
$144K in sold estimates not converting. 29 sold estimates where items were not booked into install jobs.
Known
ST Limit
4 platform limitations confirmed. Cannot bulk-update job status. Cannot auto-close stale jobs. Limited API write access.
Known
ST Limit
Contract ends May/June 2026. 6-8 weeks to decide on renewal terms or alternative.
Decision
This is not a 6-month project. It is 4 weeks of focused cleanup. The first week is already in progress. The accountant meeting in Week 2 is the key milestone for revenue reconciliation.
Week 1: Apr 7-11
- Ashton daily closeout starts
- Ashton backfills March jobs
- Kassidy creates campaign tags
- Target: $100K+ unlocked
In Progress
Week 2: Apr 14-18
- Accountant meeting
- Bad debt setup
- Plaid authorization
- Revenue reconciliation
Upcoming
Week 3: Apr 21-25
- Sold tab cleanup
- Estimate booking fix
- Campaign tag verification
- Attribution pipeline test
Upcoming
Week 4: Apr 28-May 2
- Tech training on closeout
- Debrief rollout
- Full pipeline verification
- ST contract decision prep
Upcoming
Robert
GCLID Bridge Fixed. Was restart-looping 1,111 times. Now runs stable. Connects Google Ads clicks to ST jobs.
Apr 5
Robert
Ramp COGS Engine. 932 transactions synced. 93.6% job attribution. $84K tech spending tracked per-tech.
Apr 5
Robert
Slack Job Alerts. Multi-channel alerts for stuck jobs, zero-invoices, and missed completions.
Apr 5
Robert
Phone routing diagnosed. Kalen ext 101 forwarding to personal cell instead of Daniel AI. Fix identified.
Apr 8
Robert
Landing pages in build. Sewer camera page in progress. 15 service pages in design with Audrey.
Apr 8
🔥 Pipe status refresh (live pull Apr 19)
| Pipe | Apr 8 status | Apr 19 status | Ξ |
| 1 · Lead Source Tagging (ST) | Broken | WORKING | ✅ |
| 2 · Job Invoice Coverage | 71% zero | 63% zero (Apr) | 🟡 improving |
| 3 · QB Batching | $0 batched | Jan-Mar $573K batched; Apr pending | 🟡 Stephanie ask still open |
| 4 · GCLID Attribution | Fixed Apr 5, low volume | 8 captures/day on port 8509 | ✅ |
| Blocker 1 · Plaid bank feed | Not signed up | Dev account signed up Apr 19 | ✅ |
| Blocker 2 · Stephanie 1-click | Open | Still open (QB Apr batch) | 🔴 |
🚚 11 days of shipments that affect these pipes
Apr 14
Estimate sync fixed — 1,749 open estimates / $4.88M surfaced. HOT bucket (0-7d, $553K) handed to Ashton. 37 estimates for this week callbacks.
Apr 14
Apr 14
45 jobs backfilled from Appointments API (ST has no scheduledOn field). Output Verifier deployed — 7 acceptance contract checks gate every sync. 6/7 PASS, 1 WARN.
Apr 14
Apr 14
HCP x ST cross-match — 5,712 unique customers, 247 Pure-HCP ($401K LTV), 3 reactivation segments built. Verification Gate wired into CLAUDE.md.
Apr 14
Apr 15
100Y HCP live — 275 customers, 120 jobs, $210,587 invoiced. Nick Chernioglo 92 jobs / $212K. $11,653 Nick material gap RESOLVED via cross-entity accounting (was attribution, not leakage).
Apr 15
Apr 17
Vapi monitoring weaponized for Daniel AI (Technical + Infrastructure monitors active). Daniel 60 calls/7d, 206 total, 29.5% ST match rate = $22,764 matched revenue 30d. FB experiment #89 corrected CRITICAL→VALIDATED (5 real leads at $71 CPL).
Apr 17
Apr 18
9 playbook suite shipped (285KB: Reviews v2.1 + About + FAQ + Contact + Financing + Coupons + Careers + Blog Master + Gap Fills Supplement). Each with Bricks AI Studio prompt library. Audrey Phase 1 capped at 5 items.
Apr 18
Apr 19
Pricebook UI access GRANTED to Robert. GCLID custom field unblocked. API + UI bridge closeable.
Apr 19
Apr 19
Plaid dev account signed up. Credentials being configured. Nexus Plaid Link flow replaces manual QB click-through.
Apr 19
Apr 19
metrics_registry.yaml + cross_source_reconciler.py live — canonical revenue math across Big Sale, QB, ST, GSC, GA4, FB Graph, 3CX, Vapi. Monday Standup section in Sacred v2 reconciled.
Apr 19
Apr 19
4-Layer Autonomous Living Docs stack online: doc refresh (daily 6AM CT) + standup autobuild (Sun 11PM CT) + delivery tracker (daily 7AM CT) + Bricks Orchestrator (hourly).
Apr 19
Apr 19
Experiment evaluator verdicts live — 379 total / 8 SCALE / 71 HOLD / 0 KILL / 82 UNMEASURED / 218 RUNNING. 22% measurement coverage. Health 51/100 Grade C.
Apr 19
⚠️ Still broken (2 pipes + 1 blocker)
Pipe 2
Invoice coverage — Apr 36.8% billed (39/106 completed). Feb/Mar improved but not at target. Monday C3 fix: widen invoice_sync 7d→30d + ST webhook on invoice.updated. Per MH Apr 17 chronic-invoice-coverage-gap: pipe is broken, not late-fill.
Monday
Pipe 3
QB Apr batching — Stephanie + Ashton action. April not batched yet. Blocks full weekly revenue truth until Apr invoices post to QB.
Stephanie
Blocker 2
Stephanie 1-click — final QB Apr batch approval (once Ashton reconciles). Everything else in this plan is flipped green.
Mon Apr 21
Bottom line (Apr 19 refresh): 11 days after this plan was drafted, 6 of 8 items are flipped GREEN. 2 pipes + 1 blocker remain. Big Sale ssot shows $226K wk Apr 11-17 (live via metrics_registry). QB YTD $573K batched. ST captured YTD $402K across 242 completions (should be ~$1.04M at 95% invoice coverage). Remaining invisible revenue gap: ~$640K YTD (the Apr invoice pipeline fix + QB batch closes it). Time to close: Monday C3 (4-8 hrs) + Stephanie 1-click.
π¨ UPDATE β $4.88M Open Estimates Found (Apr 14)
NEW DISCOVERY β 2026-04-14. During the zeus_st_module_sync.py repair tonight, the sync pipeline shift from the /estimates/export endpoint (archival, stopped Jun 2025) to the live /estimates endpoint with modifiedOnOrAfter filter revealed 1,749 Open estimates worth $4,887,216 sitting untouched in ServiceTitan.
What This Means For the Pipe-Fix Effort
Up to now this battle plan focused on customer acquisition β finding more opportunities and filling the top of the pipe. That framing is incomplete. The pipe has a hole at the close, not at the top. 1,749 prospects already invited a Bright Side tech, received a quote, and never closed. The sales job is done. Only the follow-up is missing.
Immediate Implications For This Plan
- Priority shifts: estimate recovery should be the #1 play for the next 2 weeks, not acquisition. Known audience, known price points, zero ad spend to close.
- 37 estimates in the hot 0-7 day window ($553K) β close rate decays daily, needs action THIS WEEK.
- Historical close rate 39.2% vs industry 55-65% = a 15-25 pt structural gap worth quantifying and attacking.
- Full breakdown and decision request in the dedicated Stephanie-style report: BSP_Open_Estimate_Recovery_Report.html
Verification
- Produced: Cross-reference section injecting the $4.88M finding into this battle plan. Full backup in the dedicated report.
- Correct: Counts reconcile to titan.estimates_full queries in Master History bsp-apr14-sweep-3-sync-estimates-permanent.
- Changed real data? This HTML file gains this section; the primary report exists as its own file at BSP_Open_Estimate_Recovery_Report.html.
Logged via nexus_html_logger.py at 2026-04-14T05:33:48.330379 UTC
π§ POST-APR-14 β The Pipe We Missed (Sales-Close) + Roadmap Reorder
Post-Apr-14 context (reorders this entire plan). Tonight we discovered $4.88M in Open estimates that were invisible because the data pipeline had been returning archival data for 9 months. The Fix-the-Pipes framing expands.
π§ The Pipe We Missed
This plan has focused on operational pipes β plumbing ops, communication chains, data flows. Tonight revealed a sales-close pipe nobody was watching: 1,749 quotes sitting at Open, worth $4,887,216, with nothing in ServiceTitan flagging them for follow-up. Of those, $553K is in the hot 0-7 day window right now.
πΊοΈ Roadmap Reorder
Before tonight, this plan prioritized acquisition: weather landing pages, Google Ads volume increase, Daniel tuning. After tonight, recovery comes first:
- π₯ Estimate Recovery Engine (Ashton owns HOT bucket, this week)
- π Open Estimate dashboard at Monday standup
- ποΈ Membership pilot (277 pre-qualified high-LTV customers)
- π§ Pure-HCP ghost reactivation (247 legacy customers, $401K)
- π¨ Weather landing pages (parallel track, Audrey dep)
- π° Sewer ads hold at $500/day (applied live tonight)
- π€ Daniel AI tuning (after #5)
- π‘ ServiceTitan webhook registration audit (Smart Bidding unblock)
π οΈ Config Audit Scope (Decision #4 in the capstone)
Ashton + Kalen, 2 hours: configure ServiceTitan so every new estimate creates an auto-follow-up task at day 3, day 7, day 14. This is the structural fix preventing future quotes from going dark. Goes into the Pipe-Fix plan as an operational discipline, not a one-off.
π The Canonical Strategic View
This plan is an operational document. For the full Stephanie-facing strategic view including all four pain points, the nine decisions, and supporting documents, see: BSP_Strategic_Synthesis_Apr14.html (the Apr 14 session capstone).
Verification
- Produced: Post-Apr-14 reorder section in this Battle Plan with explicit link to the strategic capstone + the 8 reordered priorities + the 2-hour ST config audit scope.
- Correct: Every number traces to tonights Master History sections (bsp-apr14-sweep-1, sweep-3, fix-1, fix-3). Reorder sequence matches capstone.
- Changed real data? This HTML gets the new section with byte delta reported by the logger.
Logged via nexus_html_logger.py at 2026-04-14T06:04:37.891648 UTC