
Business intelligence · Revenue analytics · Applied AI
Your sales funnel already knows the answer. I build the system that says it out loud.
10+ years in data, analysis and automation, more than half of them inside Revenue Operations. Zero-to-one builds: analytics functions stood up from nothing, the teams hired to run them, the tool stack and vendor contracts owned end to end, and board-level metrics at $300M+ ARR. I make revenue numbers trustworthy, automated, and used in the room where the call gets made.
Start a conversation (opens your email app) Download resume (PDF)
Stage conversion
- Lead to MQL40%
- MQL to SQL44%
- SQL to Opp50%
- Opp to Proposal60%
- Proposal to Won45%
Coverage by segment, against 3.0× target
- Enterprise3.4×
- Mid-market2.7×
- SMB3.9×
Illustrative model, not client data.
Track record
Some of the work I have done. Every figure is one I can walk you through, in as much detail as you want.
- $3Munbilled expansion revenue surfaced by auditing product usage against contracted entitlements
- 80%+of Customer Success adopted an AI renewal-prioritisation agent across 10,000+ accounts
- 40%+fewer ad-hoc requests after a self-service analytics portfolio
- 0 to 1analytics function built from scratch, then an international team hired and managed to run it
The full motion
One funnel. Six stages. Every one of them measured the same way.
Most teams measure each stage in a different tool, with a different definition. That is why the forecast misses. I put the whole motion in one model.
StageVolume · conv · days in stage
- Leads24,800top of funnel
- Marketing qualified9,92040% · 3d
- Sales qualified4,37044% · 6d
- Opportunity2,18050% · 14d
- Proposal1,31060% · 21d
- Closed won59045% · 12d
Won deals gained from five points at one stage
- Lead to MQL+74
- MQL to SQL+67
- SQL to Opp+59
- Opp to Proposal+49
- Proposal to Won+66
Base 590 won. Each bar lifts one stage by five points and holds the rest.
Where it leaks
The biggest drop is rarely the one people talk about. Modelling the whole chain shows which single stage, fixed by five points, moves the annual number most.
-
Lead to MQL, 40%
Usually an SLA problem wearing a scoring costume. Check time to first touch before retraining the model.
-
Opportunity stall, 14d
Deals past the stage median rarely recover. Flag at day nine, and split by segment: the enterprise median is three times the SMB one.
-
Proposal to won, 45%
Discount depth by segment shows where price, not product, loses the deal. It is rarely the segment sales thinks it is.
Days in stage, lead to close56d lead to close
- MQL3d
- SQL6d
- Opp14d
- Proposal21d
- Close12d
What I own, stage by stage
From first touch to net revenue retention: one definition, one source of truth, one place to look.
-
Marketing data
Source, campaign, attribution
Lead source and campaign influence carried through to pipeline, and full-funnel attribution engines that steered multi-million-dollar media budgets, so marketing spend is judged on what it moved.
- Organic 34%
- Paid 26%
- Events 14%
- Partner 12%
- Outbound 14%
Pipeline by lead source, share of total
-
Prospect to lead
The handoff, measured
Prospect to lead measured as one chain across the systems that hold it, so the handoff between marketing and sales is a number rather than an argument.
Prospects to leads, this quarter
-
Demand gen
Know what pipeline is real
Full-funnel attribution that reconciles across channels, so budget follows conversion instead of noise.
Sourced pipeline by week
-
Funnel analytics
Find the leak, price the fix
Stage-by-stage conversion with the drop-offs isolated and the annual cost of ignoring each one made explicit.
Stage-to-stage falloff
-
Product-led
Turn usage into a queue
A product-led funnel is a different motion with different math. Product usage scored against entitlements and account health, written back to the CRM, so a rep reaches the account the moment the product says it is worth a call.
Accounts crossing the activation threshold
-
Retention
See churn before the forecast does
Retention views that separate accounts that compound from accounts that quietly leak, surfaced ahead of renewal.
Net revenue retention by cohort age
-
Forecast and capacity
A number you can defend
Forecasting frameworks built from pipeline mechanics with Sales Ops and Finance, reconciled to the finance number. And the capacity behind them: quota modeling, capacity planning, and whether the territory split is why two reps are missing.
Forecast vs actual, trailing quarters
-
Unit economics and consumption
CAC, LTV, payback, and usage
CAC, LTV and payback, standardised across regions, plus usage audited against contracted entitlements: the audit that found $3M of unbilled expansion.
Months to CAC payback
What I actually build
The four views a revenue leader needs before Monday.
Not a wall of dashboards. Four questions, answered the same way in every operating review, reconciled to the finance number.
-
Question 01
Will we hit the quarter?
Forecast from stage mechanics, tracked by category (commit, best case, pipeline) against actuals, with last quarter’s miss shown beside it.
forecastactual
-
Question 02
Where did ARR come from?
New, expansion, contraction and churn as one bridge, so gross and net retention come from the same table, not four reports.
OpenNewExpConChnEnd
-
Question 03
Which cohorts hold?
Net revenue retention by signup cohort, month by month after close.
M0cohort ageM7
-
Question 04
When does spend pay back?
Cumulative gross margin against CAC, by channel and segment.
M0breakeven M6M8
The data layer
What has to be true underneath
Every chart above is only as good as this. It is the part of the job that never makes the deck and decides whether the deck is right.
-
01
Sources
CRM, ERP, marketing automation, product usage.
SalesforceNetSuitePardotProduct usage
-
02
Ingest
Scheduled, orchestrated, monitored.
AirbyteDagster
-
03
Warehouse
One place. Columnar. Every consumer reads from it.
RedshiftS3
-
04
Models and tests
Staging to marts. Tested in dbt. Quality monitored.
dbtSQLPythondbt tests
-
05
Semantic layer
One definition per metric. Standardised. Owned.
dbt Semantic Layer
-
06
Consumers
BI, the AI layer, the board pack. Same numbers, written back to the CRM.
TableauQuickSightMetabaseHexClaude Code via MCPReverse ETL to Salesforce
Identity resolution
Lead, contact, account and opportunity rarely agree across CRM, product and billing. Resolving them is the hardest problem in GTM data and the one nobody budgets for.
One definition, board to dashboard
Metric definitions standardised across regions with the CRO, CFO and regional VPs, so the board deck and the dashboard read the same table. A Data Quality Council with automated tests and audit-ready documentation keeps it that way.
Reconciled to finance
A contract-level bridge between the CRM and the ERP automated Quote-to-Cash reconciliation at 100% financial data integrity. When the number reaches the CFO it is already reconciled, tested and audit-ready.
The stack
The stack I work in
- Warehouse and pipelines
- AWS RedshiftS3dbt Core and CloudAirbyteDagsterReverse ETL
- Languages
- SQLPython
- BI and semantic
- TableauAWS QuickSightMetabaseHexdbt Semantic LayerConversational BI
- AI
- Claude CodeClaudeMCP serversCursorAWS BedrockAgentic workflowsAI skills and plugins
- GTM systems
- SalesforceNetSuitePardotHighspotSAPOracle
- Engineering practice
- GitHubCI/CDdbt testsJiraAgile
- Familiar with
- SnowflakeBigQueryDatabricksLookerFivetranAirflowMarketoHubSpotGainsightOutreach
Applied AI
AI is the operating model, not a feature.
Most AI in RevOps is a demo bolted onto the old way of working. What I bring is the approach: analytics rebuilt around agents, so one person with the right architecture delivers what a team used to, and the team does what only people can.
-
01
Conversational analytics
The warehouse answers in English. An AI-native semantic layer over governed definitions, so the answer in a chat is the same number as the board deck and a VP gets it without a ticket. Shipped: natural-language querying and AI-generated insight narratives, opened to non-technical stakeholders.
-
02
One input, many outputs
A question in; the query, the chart, the narrative, the CRM write-back and the follow-up out. Agents are the resource that scales, so the next analysis costs compute, not a hire.
-
03
Managing agents, not headcount
Agents get what a new analyst gets: scoped work, reviewed output, measured results. Claude Code, Cursor and MCP servers in the engineering loop, and the human job becomes the evaluation.
-
04
AI-native architecture
The stack rebuilt around it: a semantic layer, MCP servers and agentic workflows in the engineering loop, automation that closes the request instead of routing it. It changes how a company implements BI and analytics, not just how fast the old way runs.
What it has produced
Four in production; two of them carry numbers, adoption on one and delivery on the other. Two are how I would extend them. The part that matters in all six is the evaluation.
-
ShippedRetention
Churn risk, surfaced before renewal
A renewal-prioritisation agent over contract, consumption and account-health signals, each at-risk account with a recommended intervention. 10,000+ renewal accounts, adopted by 80%+ of Customer Success. Health scores written back into Salesforce by reverse ETL, so the signal lives where the rep works.
Health score, at-risk cohort
-
ShippedSelf-serve
Ask the warehouse in English
An AI-native semantic layer with natural-language querying over standardised metric definitions, so "pipeline" means the same thing in a chat as in the board deck. Opened the revenue data estate to non-technical stakeholders.
Questions answered without a ticket
-
ShippedNarrative
Insight narratives from the semantic layer
AI-generated "what changed and why" on top of the semantic layer, alongside conversational BI, so a non-technical reader gets the answer without an analyst in the loop.
Minutes from close of week to first read
-
ShippedEngineering
Claude Code in the analytics workflow
Claude Code, Cursor and MCP servers integrated into the analytics engineering workflow, with agentic workflows and AI skills and plugins. 50+ legacy workflows migrated to dbt in six months with AI-assisted development. This site is the working example: a static build under a hashed CSP, Lighthouse 100 in every category, built with Claude Code.
Workflows migrated, by month
-
ApproachForecasting
A model forecast beside the rep forecast
Train it on stage mechanics and historical conversion. Track it against the rep call and actuals every quarter. It earns weight only when it is more accurate, and loses it when it is not.
Forecast error by quarter: rep vs model
-
ApproachScoring
Propensity, not intuition
Lead and account scoring on usage, firmographics and engagement, calibrated so that 70% means 70%. Route it to reps as a queue with the reason attached, because a score nobody trusts is ignored.
Score distribution with the routing threshold
No model reaches leadership without a backtest, a calibration curve, and a human who owns the number.
Built proof
Proof I hold myself to this: a published data science site, built alone.
- The Fight Algorithm: an MMA data science publication with long-form analysis, fighter and stat pages, a fight simulator and picks for each fight card from a fight-outcome model over 8,000+ bouts and 2,600+ fighters. The scrapers, the database, 120 analysis scripts and the site, built and run alone.
- The model is retrained walk-forward each year and evaluated out of sample, with bootstrap confidence intervals and paired Brier scoring on every experiment.
- Picks go out only at or above a 68% confidence bar: 458 backtested picks at the bar, predicted 73.5%, realised 73.4%. Edge audited against real closing lines.
- Every pick is committed as a SHA-256 hash before the event and revealed after, so any later edit would show.
A revenue forecast is a probability claim too. Same discipline, different domain.
How I work
00
Ambiguity in, a build out
The most valuable thing I do: take an ambiguous ask, work out what it actually needs, and turn it into a clear vision, a scoped build and a number that shows it worked. I am a builder first. Hand me the messy problem.
-
01
Instrument first
Shared definitions and clean tracking before dashboards, so nobody relitigates the numbers mid-meeting.
-
02
One metric, one owner
Every number that reaches the board has a definition, a source of truth and a name attached to it.
-
03
Automate the boring half
Manual weekly reporting is technical debt. It becomes scheduled, tested, versioned pipelines.
-
04
Ship the decision
Work backwards from the call being made, a spend, a hire, a segment, a price, not forwards from the data.

Bring me the messy funnel.
Full-time roles, or a second opinion on the model behind your forecast.
Charts are schematic illustrations of the models described, not client data.
