Work Wear Safety
GTM EngineeringData foundation

From one free-text field to a revenue engine you can forecast on.

A $40M distributor ran its entire commercial model (approved products, who pays, what discount applies) as prose in one NetSuite notes field. I rebuilt it into a governed data model and gave the company the first accurate view of its own revenue in 12 years. Here's what moved.

Inventory on hand
120days
down from 150: 30 days of capital freed
Inventory turns
6x
up from 4x: 50% more product moved
Booked revenue
First accurate view
in the company's history
Client
$40M B2B safety-footwear & PPE distributor
Industry
Industrial distribution
GTM team
30 (22 reps)
Scale
45,000 accounts · 3,000 programs
Timeline
6 months
Stack
NetSuite · HubSpot · Snowflake · Looker
Built
Governed data model, ERP→CRM migration, warehouse, BI
Delivered
Solo, orchestrating 3 partners
01

The problem

The product was never a boot. It was a managed PPE program, governed by which gear a worker is approved for, who pays, and what discount applies. All three lived as unstructured prose in one NetSuite notes field.

Twenty-two reps appended to it and overwrote it, each in their own shorthand. Store and field staff opened that same field to decide what to physically hand a worker standing in front of them. There was no CRM at all: pipeline, forecast, and territory ran out of the ERP and out of people's heads.

An unstructured field doesn't fail where it's written. It fails three departments away. Quietly, and forever.

Wrong SKU

Wrong gear shipped. Store staff misread an appended note and issued product the employer hadn't approved.

At the till

Margin leaked. Pricing terms buried in prose got missed or misread at the point of sale.

150 days

Stock planned on gut. Nobody could aggregate what 3,000 active programs were entitled to draw, so purchasing carried 150 days of inventory to cover a demand signal it couldn't see.

Estimates

The quarter couldn't close. With entitlements unreadable by any system, booked revenue couldn't be computed. Leadership ran a $40M business on historical trend estimates.

02

The diagnosis

I was hired to clean up the data. That was the wrong job.

The notes field wasn't dirty. It was load-bearing, carrying three distinct commercial contracts with no structure to hold them apart. Cleaning it would have produced tidier prose that rotted again within a quarter. It was a schema problem, and everything followed from getting that right.

01

It survived 12 years because it worked. At human scale

A rep could read the note and understand the account. It only broke when a system had to read it. Because it broke silently and downstream, no single team owned it. To find your version, ask the people who have to act on what the CRM says.

02

Structure first, warehouse second, not the reverse

Underneath the cleanup ask was visibility: forecasting, BI, a warehouse. But you cannot build a warehouse on top of prose. Reordering the project so structure came before infrastructure was the decision it all turned on.

03

Make the CRM the system of record, or it happens again

Giving each contract its own object solves it once. Pushing configuration to the ERP automatically on closed-won stops a rep recreating it. Cleanup is a project; governance is what makes it hold.

03

What I built

01

A schema, where there had been a sentence

The notes field decomposed into three governed objects (product, commercial, and discount configuration) modelled in both NetSuite and HubSpot. On closed-won, configuration now pushes CRM → ERP automatically, ending the double entry that caused the drift.

02

The migration

~16,000 legacy notes records parsed, cleaned, and converted into structured objects using AI agents, human-in-the-loop on every ambiguous record. 45,000 accounts and 120,000 contacts migrated ERP → CRM with historical context preserved.

03

A warehouse that could finally be built

Snowflake, unifying NetSuite, HubSpot, finance, and warehouse data, producing the company's first accurate quarterly booked-revenue and realization view, and making forecasting possible at all.

04

Field operations, rebuilt on the new spine

Territories redesigned into value-balanced account maps across 22 reps. The mobile fitting store (previously scheduled by rep calendar and phone) became a CRM object with a live calendar.

05

Adoption, not just deployment

Looker dashboards across booked revenue, forecast, pipeline, coverage, and inventory, plus training and certification for all 30 GTM users.

04

The outcome

01
150 → 120
Days of inventory on hand

Purchasing could finally see what 3,000 programs were entitled to draw. Thirty days of inventory came off the books: working capital that had been hedging against bad data.

02
4x → 6x
Inventory turns per year

The same warehouse now moves 50% more product a year. Backorder rate fell alongside it: fewer stockouts and less overstock at the same time.

03
In-quarter
Booked revenue, with realization

For twelve years the company estimated its performance from historical trends. It can now close a quarter on actuals: the outcome with no 'before' number, because there was nothing to measure.

Supporting detail
Commercial terms
1 fieldto3 objects
Rep time on ERP lookups
~8 hrs/wkto≈ 4 FTE back
CRM daily active use
No CRMto98%
Data completeness
Unmeasurableto86%
Duplicate rate
Unmeasurableto2% / 4%
Mobile-store scheduling
3 daysto1 day

Six-month engagement. Metrics measured at handover.

For twelve years we ran the business out of one notes field and called it tribal knowledge. He replaced it with something a system could finally read, and the first time we closed a quarter on real numbers, it changed how we make decisions.

Shawn Stauffer · CTO, Work Wear Safety
05

What this engagement didn't solve

A quoting system for the managed-PPE programs was in scope and didn't reach production. The quoting logic in this business is genuinely bespoke (closer to configuring a contract than pricing a product) and it needs its own engagement, not a workstream inside a data rebuild. I'd scope it separately now.

And this engagement stayed deliberately technical: no business-review cadence was put in place. The systems are right, but nobody inside the company owns the operating rhythm that keeps them right. That's the real risk to these numbers holding, and it's the difference between a project and an embedded operator.

06

Why this matters for you

This is your problem if:

Your commercial terms (pricing, entitlements, contract specifics) live in a notes field, a spreadsheet, or a rep's head, and you've been calling it a 'data quality' issue

You've bought a warehouse or a BI tool and the project has mysteriously stalled

You run a distribution, manufacturing, or services business where what the customer is entitled to is more complicated than an SKU

You can't close a quarter on actuals and have quietly normalized estimating your own revenue

A free-text field is a schema problem

Cleaning the field buys you exactly one quarter. Ask what the field is doing, not how dirty it is.

Find the failure downstream, not upstream

Unstructured data never breaks where it's created. It breaks in the warehouse, at the till, in the close, which is why it survives for decades.

You cannot forecast on top of prose

Every warehouse and BI project that stalls, stalls here. Without structure, Snowflake is an expensive place to store paragraphs.