Case study · Data engineering → Decisions
Marketing Intelligence Platform
A cross-platform ETL pipeline and Streamlit application that replaced four disconnected reporting tools with a single source of truth — and became the tool the CEO decides from.
Every marketing team has the same quiet problem: the ad platform reports one number, the CRM reports another, and the meeting is spent arguing about which is right instead of what to do next.
The problem
Four platforms, four versions of the truth
Meta Ads knew about spend and clicks. GoHighLevel knew about leads and appointments. GA4 and Search Console knew about traffic. None of them knew about each other — so nobody could answer what a lead from a given campaign was actually worth once it reached a counsellor.
What I built
One pipeline, one source of truth
A Python ETL layer pulling from the Meta Graph API, the GoHighLevel API, GA4 and Google Search Console on a schedule, reconciling identity across them, and landing everything in a modelled dataset. On top of it, a Streamlit application with seven views — from a one-screen executive summary down to per-campaign and per-counsellor drill-downs.
The result
The CEO's primary strategic decision tool
It tracks 5,200+ leads, 3,300+ appointments and 395 conversions against a USD 10,000/month media budget, and it is where budget reallocation decisions now get made — driving cost-per-lead to USD 7.45 and cost-per-appointment to USD 11.58.
The executive view
The top of the application is deliberately one screen. If a decision-maker has to scroll to find out whether the month is on track, the tool has already failed.
Executive summary — headline metrics
What leadership sees first, with movement against the prior period
Demo figures shown for illustration; live values are commercially sensitive.
Lead volume by source
Daily leads over a 30-day window, stacked by acquisition channel
View as table
| Source | Total over period | Share |
|---|---|---|
| Meta Paid | 709 | 49% |
| Organic / SEO | 349 | 24% |
| Chatbot | 213 | 15% |
| Referral | 164 | 11% |
Demo data reconstructing the shape of the live chart.
Stacking by source is the point. Total lead volume on its own hides the thing that matters — a flat total can be a paid surge covering an organic collapse, and those two situations call for opposite decisions.
Where leads actually go
Unifying the platforms is what made a true end-to-end funnel possible. Before this, Meta could tell you a lead was generated and GoHighLevel could tell you an appointment happened, but nothing connected the two.
Full funnel, ad click to conversion
Each stage as a share of the one before it
View as table
| Stage | Count | Step rate | Of total |
|---|---|---|---|
| Leads | 1,232 | — | 100% |
| Booked | 431 | 35% | 35% |
| Showed | 310 | 71.9% | 25.2% |
| Converted | 97 | 31.3% | 7.9% |
Demo proportions; the real platform reports live counts.
Laid out this way, the biggest single loss is obvious — the lead-to-booking step — and the second is the show rate, which became a project of its own.
Per-counsellor performance
The same data, cut by who handled the lead. This view replaced impressions with evidence in performance conversations, and it is used directly in 1-on-1s.
Conversion rate by counsellor
Of the consultations that were attended
View as table
| Counsellor | Conversion |
|---|---|
| Counsellor A | 41.2% |
| Counsellor B | 39.5% |
| Counsellor C | 35.0% |
| Counsellor D | 26.7% |
| Counsellor E | 25.6% |
| Counsellor F | 17.4% |
Demo names and figures.
The spread is the finding, not any individual row. A 24-point gap between the top and bottom performer on the same lead quality is a coaching opportunity worth more than most budget changes — and quantifying it is what turns "some people are better at this" into a specific, addressable number.
Forecasting and goal pacing
The last view answers the question that actually gets asked in a monthly review: are we going to hit target, and if not, what would it take? A 30-day lead forecast with confidence intervals, translated into the additional spend required to close the projected gap at current cost-per-lead.
Demo pacing figures.
That last row is the whole point of the platform. It turns a forecast into a decision with a price on it — which is the difference between a dashboard people look at and a dashboard people act on.
The seven views
What made it stick
The engineering was the straightforward half. The reason it gets opened every morning is the governance underneath it — a single agreed definition of what counts as a lead, when an appointment is real, and which timestamp wins when two platforms disagree. That work happened in the CRM architecture, and without it this would be four dashboards in a trench coat.
← All projects