BSP Data and Revenue Pipeline Fix
4 Broken Pipes + 2 System Blockers = Why Revenue Is Invisible
Updated: April 19, 2026
Owner: Robert Dove
Apr 19 Β· 6 of 8 fixed

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
0
The Revenue Pipeline

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
1
$0 Invoices (71% of Jobs)

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
2
Kalen's Sales Are Invisible

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
3
Google Campaign Tags Are Generic

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
4
0% Job Completion Rate

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
!
System Blocker: QuickBooks Plaid Connection

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
!
System Blocker: ServiceTitan Platform Gaps

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
T
Fix Timeline: 4 Weeks

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
Already Fixed (April 5-8)
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
Apr 14-19 Sprint Shipments (11 days of fixes)

🔥 Pipe status refresh (live pull Apr 19)

PipeApr 8 statusApr 19 statusΞ”
1 · Lead Source Tagging (ST)BrokenWORKING
2 · Job Invoice Coverage71% zero63% zero (Apr)🟡 improving
3 · QB Batching$0 batchedJan-Mar $573K batched; Apr pending🟡 Stephanie ask still open
4 · GCLID AttributionFixed Apr 5, low volume8 captures/day on port 8509
Blocker 1 · Plaid bank feedNot signed upDev account signed up Apr 19
Blocker 2 · Stephanie 1-clickOpenStill 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

Verification

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:

  1. πŸ”₯ Estimate Recovery Engine (Ashton owns HOT bucket, this week)
  2. πŸ“Š Open Estimate dashboard at Monday standup
  3. πŸŽ–οΈ Membership pilot (277 pre-qualified high-LTV customers)
  4. πŸ“§ Pure-HCP ghost reactivation (247 legacy customers, $401K)
  5. 🎨 Weather landing pages (parallel track, Audrey dep)
  6. πŸ’° Sewer ads hold at $500/day (applied live tonight)
  7. πŸ€– Daniel AI tuning (after #5)
  8. πŸ“‘ 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

Logged via nexus_html_logger.py at 2026-04-14T06:04:37.891648 UTC