What I help with
Different words for the same job.
Every request lands a little differently. Audit our HubSpot. Rebuild our pipeline. Design our custom objects. Make our two systems agree. Migrate us without losing anything. Our reporting is wrong. Underneath, they're the same job nobody finished when the platform went in: making HubSpot run the business, not just store it.
So whatever brought you here — an RFP, a stalled project, a system your team quietly works around — you'll find it below, close to the words you'd use. One job with a lot of front doors.
The foundation
Everything below stands on one thing.
Before I fix a report or build an app, I get the foundation right — because nothing downstream holds without it.
Document how your business actually runs.
Current state, and where it needs to go. The real path your deals, customers and work take through the business — written down, so we build against reality, not assumptions.
Build the unified customer view underneath it.
One coherent data model where every record means one thing and the whole customer is visible in one place, instead of scattered across systems and spreadsheets.
Get your people running on it.
Aligned on why it matters and bought in enough to actually use it. A foundation the team routes around is no foundation at all.
That's the groundwork — and it's what makes the next thing possible. A clean, well-modeled foundation is the only thing the context layer and agentic automation can actually run on. AI pointed at a broken model just produces confident garbage, faster. Get the foundation right, and everything downstream — the reports, the integrations, the automation, the AI — finally has something true to stand on.
Everything below is what gets built on it.
Audit our HubSpot. Is this fixable, or do we start over?
We've spent months patching stages, statuses and workflows built for a business we've outgrown. We're not sure anymore — patch it, or rebuild? And we don't know what it should cost.
Audit our HubSpot. Is this fixable, or do we start over?
We've spent months patching stages, statuses and workflows built for a business we've outgrown. We're not sure anymore — patch it, or rebuild? And we don't know what it should cost.
I audit the real thing — portal, pipelines, workflows, and the seams where HubSpot meets your other systems — and tell you straight where it works and where it doesn't, against how your business actually runs, not a generic checklist.
You leave with a documented foundation, the quick wins worth doing now, and a scoped, priced path for anything bigger — so "not sure what it costs" becomes a real number, and the answer's usually keep what works and build on it, not start over.
Proof
A luxury club developer couldn't answer "what's the health of the pipeline?" — we handed their architect a four-part blueprint (current state, target data model, the views each role needs, a sequenced roadmap), every claim traced to their own portal, not slideware.
A used-vehicle marketplace was drowning in ~1,400 dead fields — we audited every one against real usage and designed the ten per team that mattered.
Design our data model — custom objects, schema, the architecture.
We need custom objects and a schema that fit how we operate. Right now it's duplicates, dormant records, and imports that keep making the mess worse — cleanup that never ends. We want the model built right this time.
Design our data model — custom objects, schema, the architecture.
We need custom objects and a schema that fit how we operate. Right now it's duplicates, dormant records, and imports that keep making the mess worse — cleanup that never ends. We want the model built right this time.
The endless cleanup is the tell — duplicates and dormant records pile up because the model underneath was never designed for how you actually work, so I fix that, not just scrub it once.
I model your business as it really works, then build it native-first — exhausting HubSpot's own objects before reaching for a custom one, and treating your object limits like the finite resource they are.
A field device or repair charge earns a purpose-built record; a multi-location vendor — or several brands and entities under one roof — becomes a clean parent/child structure, not a custom object; blended records (company, branch, person and rule crammed into one) get untangled so each means one thing. On Enterprise I build the full custom-object schema, permissions, views and reporting the rest of the system stands on.
Proof
We taught a sales CRM to run a physical repair floor — every device its own record with serial, grade, cost and history — native objects wherever they fit, a purpose-built record only where the platform had no home for the concept (live in production).
We untangled an 800-record vendor list that was secretly four things — company, branch, person, routing rule — into records that each mean one thing.
Fix our lifecycle stages, pipelines, statuses and workflows.
Our lifecycle stages and statuses don't mean anything anymore. We need pipeline logic that reflects reality, deal stages with real exit criteria, and workflows that don't fight the team.
Fix our lifecycle stages, pipelines, statuses and workflows.
Our lifecycle stages and statuses don't mean anything anymore. We need pipeline logic that reflects reality, deal stages with real exit criteria, and workflows that don't fight the team.
First I make the decisions underneath the pipeline explicit — what qualifies at each stage, how an opportunity is defined — because a pipeline is only as honest as the definitions beneath it.
Then I rebuild it around how the work really moves: stages a record can move up and down, exit criteria that are real gates not suggestions, and pipelines on any object with a genuine lifecycle, not a lonely dropdown.
Where business rules matter, I bake them in as enforceable gates — the process physically can't skip the step that keeps it safe, checked as you work and on the server.
Proof
A used-vehicle marketplace ran a 16-stage pipeline modeling every activity a buyer might do — thorough on paper, noise in practice. We rebuilt it around six clear levels of intent, the way buying actually works.
We ran a repair operation on real pipelines sitting on the repair record itself, not a deal — with a quality gate a repair can't cross into billing without passing (live in production).
Our two systems don't agree. The integration failed.
We run the lead in one system and the work in another, and they don't talk. The integration meant to connect them got switched off for causing data issues — we need them synced, no duplicates or overwrites, and a clean line about which system owns what.
Our two systems don't agree. The integration failed.
We run the lead in one system and the work in another, and they don't talk. The integration meant to connect them got switched off for causing data issues — we need them synced, no duplicates or overwrites, and a clean line about which system owns what.
That integration didn't fail on the wrong tool — it was built before anyone decided what syncs which way and what must never overwrite. So I start there: map the two systems, set a direction for every flow, join on stable IDs so a renamed company can't drift them apart, draw the system-of-record line on purpose, and prove it on a test instance before a record touches production.
Proof
We connected an ERP and a customer platform for an equipment company so the team stopped hopping screens to answer one question — orders as the revenue source of truth, one-way reads where the ERP owns the data, joined on IDs. (Architecture settled; first flow proven into a test environment, full flow in build.)
We made an operational CRM and a financial ERP share one truth for a repair operation — CRM the operational system of record, ERP the backbone for cost and inventory, reached through exactly one path and never edited by hand.
Build the custom software configuration can't reach.
We've hit the ceiling of settings and workflows. We need real functionality built on HubSpot — custom apps, document automation, native/middleware integrations — and a builder who works cleanly from a brief.
Build the custom software configuration can't reach.
We've hit the ceiling of settings and workflows. We need real functionality built on HubSpot — custom apps, document automation, native/middleware integrations — and a builder who works cleanly from a brief.
When config runs out of road, I build the software that doesn't — HubSpot UI extensions running natively on the records your team already uses, backed by middleware that holds the credentials and does every privileged read and write behind a thin, safe card.
Done right, that's not a card here and there — it's the single, curated surface your team actually works from: the whole operating picture in one place, on top of HubSpot, instead of ten tabs and a spreadsheet.
That's the pattern behind a field app that runs an operative's whole day, a PO that reads itself into a populated deal (with a human confirm step that stays, by design), a quoting engine where price falls out of planning the job, and a signing layer where a signature is bound to the exact thing it signed.
I also build white-label inside someone else's architecture — clear briefs in, clean builds out, invisible to your end client if that's the arrangement.
Proof
We built a card where a PO PDF drops in and comes back as structured fields to confirm — nothing written until confirm — on an app-and-middleware foundation already shipped and running.
We put a whole field workforce on a guided mobile app — no per-seat CRM cost, built for sites where signal is patchy, every action writing back to the same records the office works from. (Shipped with the platform, which is live.)
Migrate us — or rebuild us — without losing anything.
This is a big move — a full rebuild, maybe a white-label Enterprise portal across marketing, sales and customer success. And we can't just shut the old system off — campaigns are running, deals are mid-flow. Our fear is the switch: data loss, a broken go-live, a big-bang gamble that takes the business down with it.
Migrate us — or rebuild us — without losing anything.
This is a big move — a full rebuild, maybe a white-label Enterprise portal across marketing, sales and customer success. And we can't just shut the old system off — campaigns are running, deals are mid-flow. Our fear is the switch: data loss, a broken go-live, a big-bang gamble that takes the business down with it.
I don't bet your business on a single switch. The old system keeps running your live work — campaigns firing, deals progressing — as the operational master right up to cutover; the new platform is proven job-by-job in acceptance first; the migration runs guard-railed — dry-run first, every record moved by a verified map, counts checked after, rollback preserved.
Every write is read back independently to catch the silent failures that report success but quietly wrote the wrong thing; and when a legacy system's source is lost, I reverse-engineer the domain from the old code rather than guessing from meetings.
The whole job is to make go-live day boring.
Proof
We moved a live pipeline onto a rebuilt model with zero records lost — a new pipeline stood up beside the old one for rollback, a dry-run-first migration by a verified map, counts checked after.
For a field-services firm whose business-critical mobile app had lost its source code, we reverse-engineered the domain from a read-only copy and rebuilt it on ground the business can own — a staged cutover, not a gamble. (Cutover done; the platform is live and stable.)
Our reporting is wrong. We need numbers we can trust.
The dashboards don't match reality — a metric says something the business knows isn't true, attribution shifts under our feet, and reports we should be able to run per-customer or per-channel just… can't. We need reporting we can act on.
Our reporting is wrong. We need numbers we can trust.
The dashboards don't match reality — a metric says something the business knows isn't true, attribution shifts under our feet, and reports we should be able to run per-customer or per-channel just… can't. We need reporting we can act on.
When a number's wrong, I fix the model feeding it — not the number on the screen. That's the difference between a dashboard that's precise-and-wrong (worse than none, because people trust it) and one that stays true after I've gone: I re-anchor metrics to the real event they're meant to measure, build multi-object join reports that filter exactly where the business looks, and freeze point-in-time facts — like where a deal came from — as recorded values that can't drift, not calculated ones that recompute months after close.
And I make attribution survive staff turnover, so the roster changing doesn't break the reporting.
Proof
A distributor's response-time metric was anchored to the wrong starting line — the date a record was created rather than the first real outreach — so it reported a figure nobody in the business believed. We re-anchored it to the real first-touch event, live on the call, so it finally measured the thing it was named after. (The re-anchor shipped on the call; the deeper report rebuild was designed with them.)
A marketplace's deal "source" kept changing after the deal was done — we stamped the true source on at creation and froze it, so the same report run twice returns the same answer.
Tell my team who to work first — and why.
We have more relationships than we can work and no honest way to rank them. We want scoring the team actually trusts — not a black-box number, and not a benchmark that has nothing to do with our business.
Tell my team who to work first — and why.
We have more relationships than we can work and no honest way to rank them. We want scoring the team actually trusts — not a black-box number, and not a benchmark that has nothing to do with our business.
I build scoring from your own history, not an industry average, so the weights mean something to your team. Usually that's more than one score — "who's worth the time" and "who's about to buy" are different questions: how a relationship came in (often the strongest predictor of who closes), a fit read, and an engagement signal that decays, so a warm signal this week outweighs a cold one from last year.
I make the model tell the truth even when it's inconvenient — a wealthy contact from a channel that never converts still grades low, because a score that flatters is one the team stops reading.
Then I turn it operational: a live, self-maintaining queue of who to work, ranked by readiness, that fills and drains as behavior changes.
Proof
We turned six years of a luxury developer's closed history into a scoring model built around how relationships actually arrive there — a Fit read, an engagement signal, and a combined grade — rather than a digital-engagement score that would have systematically buried a referral-led population. (Live; the grade and thresholds set deliberately with the client, not guessed, and the configuration re-verified against the live portal before any further edit.)
We built a "Ready to Buy" queue that surfaces the highest-intent buyers before a deposit — split by readiness, maintaining itself as buyers heat up, cool off, or cross into a deal.
Will my team actually use this — or route around it and leave us locked in?
This is the fear under every rebuild — the system gets built, the team quietly goes back to spreadsheets, and now you're locked into a consultant you can't fire.
Will my team actually use this — or route around it and leave us locked in?
This is the fear under every rebuild — the system gets built, the team quietly goes back to spreadsheets, and now you're locked into a consultant you can't fire.
I build it around how your team already works, so using it is the path of least resistance — then I hand you the keys. Your people learn to deploy, debug, and extend what we built, and I leave a tailored AI-operations toolkit so the next improvement doesn't wait on me. I'd rather hand you something you own than something you rent back.
There's a name for what you're afraid of, and the consultancy world runs on it. The Value-First crowd I work with calls it the Managed Services Trap — when dependency becomes the business model, transformation becomes impossible. I build the other way on purpose.
And if you're wondering what happens if I'm unavailable — that's the right question to ask anyone, so here's my structural answer rather than a reassuring one. The code lives in your repos. Your team learns to deploy and debug it. No credential is held only by me. And there's a named bench behind me — the team I deliver with and the practitioner network I'm a founding member of. Now ask the retainer shop what happens to your operation if you lose them.
Proof
We built a multi-location repair operation's custom apps as HubSpot UI extensions, then walked their own developer through the whole chain — command line to debugging a real failure live — until they could ship it themselves, and left a tailored AI-operations pack (live in production).
Move our quotes, contracts, renewals and billing onto Revenue Hub.
Our commercial truth is scattered — quotes in one tool, renewals reconstructed by hand every quarter, invoices re-keyed into accounting. HubSpot keeps announcing Revenue Hub and we don't know how to get from here to there without breaking the running business.
Move our quotes, contracts, renewals and billing onto Revenue Hub.
Our commercial truth is scattered — quotes in one tool, renewals reconstructed by hand every quarter, invoices re-keyed into accounting. HubSpot keeps announcing Revenue Hub and we don't know how to get from here to there without breaking the running business.
This is where I'm doing my deepest work right now. Getting onto Revenue Hub isn't a feature toggle — it's deciding where your commercial truth actually lives, then moving it there while the business keeps running. I extract what you have — subscriptions, deals, line items — transform it into clean contract records, and prove the whole flow working, template to signature to resulting contract, before anything touches production.
And when the native surfaces can't express your commercial reality — multi-year change quotes, per-year economics, ERP write-back — I build the modules that can, running on the platform, reading the real records.
Proof
For a sports-technology manufacturer we moved about four hundred quarterly renewal contracts from production subscription data onto the Contracts object, stood up the renewal pipeline, and deployed custom quote modules — behind a NetSuite money spine that posts payments correctly and refuses to act where it can't be sure (live in production).
I sat down with the HubSpot product manager who owns Contracts and billing and unboxed Revenue Hub on camera — the conversation is public, and it's the same architecture I build from.
Our AI initiative can't get traction.
We're paying for AI — copilots, agents, a pilot that demoed well — and none of it is sticking. The data isn't ready, nobody fully trusts what it writes, and every promising use case dies in review.
Our AI initiative can't get traction.
We're paying for AI — copilots, agents, a pilot that demoed well — and none of it is sticking. The data isn't ready, nobody fully trusts what it writes, and every promising use case dies in review.
Most AI initiatives that stall aren't AI problems. They're a data foundation that can't support the ambition, and no governed path for an agent to touch the systems that matter — 97% of companies have AI initiatives; only about 5% have data ready to support them. Closing that gap is operating-model work, not model selection.
So I start underneath: records that mean one thing, the business's real rules put where software can hold them, and one validated path for AI to write through — so what it does can be trusted, checked, and rolled back. The use cases stop dying in review, because the review finally has something solid to approve.
Proof
The billing integration in "AI, governed" on the home page — every payment posted correctly, with the system refusing to act where it couldn't be sure — runs on exactly this pattern: governed writes, every action linked back to its record.
A device-repair operation left our engagement with a tailored AI-operations starter pack their own team runs — the next improvement doesn't wait on a vendor (live in production).
Responding to an RFP?
If you're holding an RFP, you'll recognize this list.
Most HubSpot RFPs ask for the same handful of things in different order and different words. Here's the map — the ask on the left, where it lives on this page on the right. If yours isn't here, it's usually a blend of two that are.
- "Audit our portal / assess current state / tell us if it's salvageable"
- Audit & diagnosis (01)
- "Design custom objects / a schema / the data architecture"
- Data model & architecture (02)
- "Clean up lifecycle stages, statuses, pipelines, deal stages, workflows"
- Pipeline & lifecycle redesign (03)
- "Integrate HubSpot with our ERP / field system / accounting / the tool the integration keeps breaking"
- System integration (04)
- "Build custom apps / UI extensions / document automation / DocuSign & Jira-type integrations"
- Custom apps on the dev platform (05)
- "White-label Enterprise rebuild / migrate us / no data loss / big-bang is not an option"
- Safe migration & full rebuilds (06)
- "Fix our reporting / attribution / dashboards nobody trusts"
- Reporting & attribution integrity (07)
- "Lead scoring / prioritization / tell reps who to work"
- Scoring & prioritization (08)
- "Build from our architecture, work from briefs, stay invisible to our client"
- White-label build mode — see (05) and (06)
- "Quote-to-cash / contracts and renewals / billing / move us onto Revenue Hub"
- Revenue Hub & quote-to-cash (10)
- "Make our AI actually work / get the data AI-ready / agents we can trust"
- The AI door (11)
Send me the RFP. I'll tell you which of these it actually is, what I'd do first, and — the question most responses dodge — what it should honestly cost, once the current state is mapped. Nobody prices a rebuild responsibly before that; the scoping is what produces the number.
How to start
Start with a conversation. Keep what comes out of it.
No contract before we've talked, and no black box.
Start free
A 30-minute conversation where I read your situation and tell you straight what I see. It's transcribed, processed, and shared back to you — so you walk away with a real read on where you stand and what I'd do first, whether or not we work together. That's what value-first means when it's not a slogan: you get the value before there's an invoice.
The Handoff Audit — the paid step, when it's worth it
Two weeks inside your deal-to-cash handoff: I follow one real closed deal from signature to first paid invoice, from both ends — what Sales thinks happens, what Finance actually does, and what a fix would take. Fixed fee, scoped up front, and the findings memo is yours to keep. If your handoff turns out to be fine, that's the finding — I'll say so. And when the fix is real build work, I'm not guessing at feasibility: I've already built a working self-service contract flow on HubSpot's new contracts and quotes APIs — a customer adjusts their own contract, signs, and the change applies to the record.
Either way, the rule holds: you own what we produce, and success is your team running it without me.
The thing under all of it
One more thing the RFP usually doesn't say.
The nine things above are what gets asked for. What actually determines whether any of it works is the thing an RFP rarely spells out: whether your team runs on the result, or quietly routes around it like they did the last system. Getting people to genuinely change how they work — making the system the place the business actually happens — is the work I care about most: value first, theirs before the system's, because it's the part software alone was never going to do for you.
The software was never the problem. Nobody made it run your business. Whichever door you came in through, that's the job — and it's the one I do.