I migrated a nationwide field service company off Salesforce and built their entire HubSpot Enterprise portal from the ground up—196 workflows, 50 custom coded JavaScript actions, 6 custom objects, and 5 production integrations. Self-taught. Here’s the work.
I’m Stephen Brown. I’m based in Denver, and I’m the Business Systems Manager at MHD, a nationwide occupational health provider. When I joined, the company was on Salesforce—but the implementation wasn’t working. Low adoption, poor fit for the business, cost that wasn’t justified. I was brought in to fix that.
I migrated the entire company off Salesforce and onto HubSpot Enterprise, then built everything on top of it. I taught myself all of it—HubSpot architecture, JavaScript, API integration, workflow design, data migration. I used AI-assisted development, HubSpot Academy, and a lot of trial and error. I didn’t have a team or a mentor. I had a problem and a deadline.
In under a year, I built the entire system the company runs on. Every deal, every service, every work order, every piece of equipment flows through infrastructure I designed. I think in systems, not features. When I build something, I’m thinking about what happens when it breaks, what happens at 10x scale, and who maintains it after me.
The portal is the credential.
MHD was running on Salesforce, but the implementation didn’t fit the business. Adoption was low, the data model didn’t match how the company actually operated, and the cost wasn’t justified by the value being extracted. For a company deploying safety responders to client sites across the country, the CRM was supposed to be the operational backbone—and it wasn’t.
I led the full platform migration and built the new portal architecture simultaneously. On the migration side: 15,000+ contacts, 10,000+ deals, and 500+ work orders moved from Salesforce to HubSpot with field mapping, data cleanup, and association reconstruction. Salesforce and HubSpot have fundamentally different data models, so nothing was a straight copy—every object and relationship had to be remapped.
On the architecture side: I designed 6 custom objects (Services, Work Orders, Equipment Assets, Equipment Allocations, Time Off, and more) with association labels, property groups, and role-based permission sets. Then I built the automation layer—196 production workflows, 50 of which run custom JavaScript I wrote: property stamping, batch API calls, rate limit handling, multi-object orchestration. The most complex piece was bidirectional sync between Service and Work Order records with date normalization, owner propagation, and infinite loop prevention.
I also architected 5 production integrations—PandaDoc, Zuper, QuickBooks Online, Outlook, and Google Workspace—using Zapier webhooks, n8n orchestration, and native HubSpot connectors.
Even after the Salesforce migration, MHD’s field service data still lived in Zuper—a separate FSM platform with its own data model, its own object structure, and no native integration with HubSpot. Critical service history, work order records, and customer data were siloed. Nobody could see the full picture of a customer relationship in one place.
I built a migration framework, not a one-time import. The challenge wasn’t moving rows—it was mapping Zuper’s data model onto HubSpot’s custom objects while handling duplicates, orphaned records, and mismatched association structures. I wrote deduplication logic to reconcile records across systems, then mapped associations so every Work Order connected to the right Service, Company, and Contact in HubSpot.
MHD’s internal ticket tracking had grown organically—and it showed. Issues were reported inconsistently, routed manually, and resolved without any documented process. There was no visibility into ticket volume, resolution time, or recurring problems. When I ran a root cause analysis, I found that 40–50% of service disruptions traced back to internal operational issues, not field problems. The company didn’t just need a ticketing system—it needed to see where it was breaking itself.
I designed a governed ticket pipeline with structured stages: Intake → Customer Outreach → Update Scheduling & Field Ops → Update Invoice & Records → Closed → Returned to Sales. Each stage transition triggers automated actions—owner reassignment, task creation, notification routing, and property updates. I built categorization logic so every ticket is tagged by root cause, giving leadership data on where operational breakdowns actually happen.
I’m always open to connecting—whether it’s about a role, a project, or just talking shop about HubSpot architecture.