AnchorWorks The Briefing Room On the record
AnchorWorks
Executive Brief 017 · July 4, 2026

The Pipeline, By Stage

Prepared by Ethan Tryhubczak AnchorWorks
The Briefing Room · 2026

The executive summary.

The Sales tab already carried one real reading from GoHighLevel — an aggregate count of open and won deals. Useful, but flat: it told you how many, never where. Today it gained depth. Every live opportunity is now placed in its true pipeline stage, named the way it reads inside the CRM, and drawn as a funnel the cockpit updates from live data.

Under that funnel, a second, quieter build: the feed learned to run itself. The manual pull that fetched live deals was rewritten as a scheduled service on the locked stack — the same architecture already chosen for every future data source. It is deployed and confirmed running. One access grant from you flips it from "built" to "refreshing every half hour," with no one touching a keyboard.

The cockpit stopped counting deals and started showing where they stand.

Where it stands: the funnel is live and deployed; the seeded demo board is untouched and the manual pull still works — nothing regressed. The automatic refresh waits only on two owner-level clicks on the database.

What was decided.

  • Show the pipeline by stage, not by total. A count answers "how busy"; a funnel answers "where is everything stuck." The decision the cockpit exists to serve lives in the stages.

    locked
  • Name the stages from the source of truth. Stage labels are read live from GoHighLevel's own pipelines, so the board always speaks the same language your closers do — rename a stage in the CRM and the funnel follows.

    locked
  • Keep real data unmistakably real. The live GHL feed stays in its own isolated table, walled off from the seeded demo, so no real deal ever gets averaged against a placeholder.

    locked
  • Automate on the locked stack — no new machinery. The scheduled refresh was built as a database function on the exact architecture already chosen for every source, not a bolted-on side system.

    locked
  • A zero is a reading, not a bug. Every live deal shows $0 of value because no dollar figure is set on it in the CRM. The board reports that truthfully rather than inventing a number.

    locked
  • Hand the two privileged steps to Chris. Turning on the schedule needs owner-level database access. Rather than force it, the build stops at the boundary and hands over an exact, two-command runbook.

    locked

What was done.

01Named every pipeline stage

The problemThe live feed stored each deal's stage as a cryptic internal code. The board could count deals but could not say which stage any of them sat in — the one thing a sales funnel exists to show.
What was doneResolve those codes to their real, human names by reading GoHighLevel's own pipeline definitions, and attach the name to each deal as it is captured. The snapshot now makes one read-only call to the CRM's pipelines and maps every stage code to its name, pipeline, and order. Five live pipelines were mapped — Conversion (SDR), Demand, LAS HVAC, Revenue (AE), and Sales. None. Read-only against the CRM.
The impactThe pipeline is now legible in plain English and always matches the CRM. Rename a stage there and the board renames itself.

02Put a live funnel on the Sales tab

The problemLeadership could see totals but not the shape of the pipeline — where deals cluster, where they stall.
What was doneDraw a real stage-by-stage funnel beneath the existing live strip, fed entirely by live data, and deploy it. A new database view rolls deals up by stage in pipeline order; the dashboard renders it as an animated funnel. Deployed to the live cockpit and verified through the public key — exactly what a browser sees. Today's live picture: 4 open deals, all sitting at "New Lead" in the Demand pipeline. None. The seeded demo board is untouched.
The impactThe first true read on pipeline shape — thin today, but real, and it will fill in and tell the acquisition story as deals move.

03Built the self-refreshing feed

The problemThe live numbers only updated when someone ran the pull by hand — fine for a demo, useless for a cockpit meant to be trusted at a glance.
What was doneRebuild the pull as a scheduled service on the locked database stack, so it runs on its own every half hour. The pull was ported to a database-hosted function and deployed. It was invoked and confirmed to run end to end. The final two steps — storing the CRM key as a secret and switching on the scheduler — require owner-level access to the database and are handed to Chris as a two-command runbook, committed alongside the code. Chris: set the CRM secret + enable the scheduler (owner-only). Runbook is in the repository.
The impactThe moment those two clicks land, the acquisition feed is hands-free and always current — the pattern every future source (Stripe, ads, GA4) will reuse verbatim.

By the numbers.

5
Live CRM pipelines mapped to real stage names
4
Live deals on the board — all at "New Lead"
30 min
Refresh cadence once the scheduler is switched on
4 / 4
Automated tests passing
2
Commits shipped on the open pull request (#4)
0
Seeded demo numbers touched
100%
Live deals flowing in from the CRM
100%
Pipeline shown by real, named stage
90% · one grant away
Self-refreshing feed (built & deployed)
0% · data entry
Deal values populated in the CRM
0% · next
Cash truth (Stripe) wired in

Decisions still required.

  • Switch on the self-refreshing feed. Two owner-level steps on the database — store the CRM key and enable the scheduler — take the pull from manual to automatic. The exact commands are waiting in the repository.

    “Stop-doing: Brain harvesting, wiki filing, dashboard polish, funnel #5, website commits, hiring conversations.”

  • Set deal values in the CRM. Pipeline dollars will stay at $0 on the board until closers attach a value to each opportunity in GoHighLevel. A process decision, not a code one.
  • Confirm Stripe as the next feed. Cash is the truest number a business has, and it is still seeded. Wiring Stripe is the highest-value source left to connect.

    “Stop-doing: Brain harvesting, wiki filing, dashboard polish, funnel #5, website commits, hiring conversations.”

  • Review and merge the pull request (#4). Both of today's builds sit on one branch, deployed to a live preview, awaiting your merge to land on the mainline.

    “Stop-doing: Brain harvesting, wiki filing, dashboard polish, funnel #5, website commits, hiring conversations.”

What comes next.

  1. 01
    Switch on the scheduled refresh
    Set the CRM secret + enable the scheduler — the acquisition feed goes hands-free.
  2. 02
    Wire Stripe as cash truth
    Connect the truest number in the business — the next and highest-value live source.
  3. 03
    Add appointment data
    Show / no-show from the CRM turns seeded show and close rates into real ones.
  4. 04
    Populate deal values in the CRM
    Attach a dollar figure to each opportunity so pipeline value stops reading $0.
  5. 05
    Map the acquisition→delivery handoff
    Extend the two-track model so Client Success reads live delivery stages too.
Executive Brief · Nº 017 · July 4, 2026 · Canonical