Case study · CRM → Data governance
GoHighLevel CRM Architecture
Workflows, pipelines, calendars and platform integrations — rebuilt so that the CRM stopped being a contact list and started being the single source of truth.
Nobody puts "cleaned up the custom fields" on a highlight reel. But every number in the other three case studies exists because this work happened first.
The problem
A CRM that recorded activity, not outcomes
Leads arrived from half a dozen places and were worked in half a dozen ways. Custom fields meant different things to different people, pipeline stages were skipped, and outcomes often were not recorded at all — so the CRM could tell you what happened to a contact but not what any of it was worth.
What I built
The CRM as the single source of truth
A full architecture rebuild in GoHighLevel: a normalised custom-field schema, one canonical pipeline with enforced stage progression, calendars wired to the right teams, automations covering the whole lead lifecycle, and every acquisition platform integrated so a lead arrives already attributed.
The result
Everything downstream became possible
This is the unglamorous project that made the visible ones work. Reliable outcome capture is what let show rate be measured and then lifted, and consistent source attribution is what let the intelligence platform report on channel performance at all.
Platforms integrated
The goal of every integration was the same: a lead should arrive already knowing where it came from, so that attribution is a property of the record rather than a reconciliation job someone does later.
Meta Ads
Lead-gen forms and campaign attribution flow in via the Graph API, so paid leads arrive tagged with campaign, ad set and creative.
GA4
Session and behaviour data joined on the contact record, connecting on-site behaviour to what happened after the form submit.
Google Search Console
Query and ranking data feeding the organic side of attribution and content prioritisation.
Website & chatbot
All web enquiry paths land in one intake, normalised to the same schema as every other source.
Calendars
Counsellor availability per team and location, so booking and outcome events are captured against the right owner.
Streamlit platform
The CRM is the upstream source for the reporting layer — one schema in, one set of numbers out.
The lifecycle automations
Four workflow groups cover a lead from first touch to reconciled revenue. Each one exists to remove a place where data used to go missing.
One pipeline, enforced
The single most valuable governance decision was collapsing several ad-hoc pipelines into one canonical set of stages that cannot be skipped. Stage progression became trustworthy, which is the precondition for every drop-off number the business now reports.
Canonical pipeline stages
Each stage as a share of the one before it
View as table
| Stage | Count | Step rate | Of total |
|---|---|---|---|
| New lead | 1,232 | — | 100% |
| Booked | 431 | 35% | 35% |
| Attended | 310 | 71.9% | 25.2% |
| Initial requirements | 198 | 63.9% | 16.1% |
| Paid | 97 | 49% | 7.9% |
Demo counts illustrating the stage structure.
Before this, "Attended" and "Initial requirements" were often the same click, so the stage where the most qualified leads were actually being lost did not exist as a measurable step at all.
What governance actually bought
Data governance sounds like overhead until you price what it unlocks. Three concrete examples from this build:
Record completeness, before and after the rebuild
Share of contact records with the field populated correctly
View as table
| Field | Complete |
|---|---|
| Source attributed | 96% |
| Outcome recorded | 100% |
| Owner assigned | 99% |
| Stage progression valid | 94% |
Illustrative figures showing the direction and scale of the change.
- Show rate became measurable. Forcing outcome capture at close is the entire reason the 68% → 82% story could be told — you cannot lift a number you cannot see.
- Attribution became a property, not a project. Because source is stamped at intake, the intelligence platform reports channel performance without any manual reconciliation.
- The model had honest features. A clean schema is what made it possible to audit which fields were leaking — you can only ask "when does this get written?" if the answer is consistent.
That is the argument for doing this work first. It produces no chart of its own, and then it produces every other chart.
← All projects