A free-text closed-lost field cannot be reported on
HubSpot ships a free-text closed-lost reason field by default, and most teams never change it. The problem shows up the first time someone tries to build a win rate by competitor report: the field holds dozens of near-duplicate phrasings of the same handful of reasons, typed in a hurry by a rep moving on to the next deal. “Price”, “too expensive”, “budget” and “cost” are the same reason, but a report cannot group them without someone manually cleaning the data first.
The fix is not more discipline from reps. It is a fixed, short list of values a rep can pick in a few seconds, with a required note only on the catch-all option.
The recommended closed-lost reason picklist
Ten values, each with a one-line definition so two reps pick the same reason for the same situation. Copy this into a single-select HubSpot deal property.
Add a competitor property, not a competitor note
The second property that makes win rate by competitor possible is a single-select “Competitor” field, listing the named rivals you actually face. Free text here has the same problem as free-text reasons: “Acme”, “Acme Inc” and “Acme (think)” will not group together in a report. A fixed list also surfaces, by omission, when a new competitor needs adding.
Make both fields required at Closed Lost
A picklist only works if it is actually filled in. In your pipeline settings, set required properties on a stage so a deal cannot move into Closed Lost without a reason and, when relevant, a competitor selected. This is what turns the picklist from a nice-to-have into a field that is actually populated on every lost deal.
How to compute win rate by competitor
For each competitor: wins ÷ (wins + losses), counted only over closed deals where that competitor was present (the competitor property is set, whether the deal was won or lost). A competitor that appears in 20 closed deals, winning 8 and losing 12, has a 40% win rate against them.
Decide upfront how to treat no-decision deals. Most teams exclude them from the win rate calculation entirely and report them as a separate category, since a deal that never closed was not actually lost to the competitor; it just stopped moving.
Data-quality checks worth running monthly
Share of closed deals with no competitor set
If this is high, win rate by competitor is understating real competitive pressure. Chase it down by stage-level required fields, not a one-off cleanup.
Share of closed-lost deals with no reason, or "Other" with no note
Either number creeping up means the required-field setting has drifted or a specific rep or team is bypassing it. Check this before trusting any reason-based report for the period.
Doing this automatically, every night
The IndustryLens HubSpot win/loss sync reads these two properties nightly and turns them into counts, top lost reasons and a win rate by competitor, without a dashboard to maintain. It is read-only and never reads deal amounts, deal names, owners or descriptions. By default it stores counts plus top lost reasons and up to 5 scrubbed sample comments per competitor; counts-only mode stores no reason text at all. See the full IndustryLens HubSpot app for setup, and the interview question bank for the qualitative half of the picture.
Common questions
Why does a free-text closed-lost field fail in HubSpot?
A free-text field gets filled in quickly, after the deal is already lost, by the person with the least time and the least incentive to be precise. The result is dozens of near-duplicate phrasings of "price" and "went quiet" that cannot be grouped or reported on. A single-select picklist with a fixed, small set of values is the only format that can be aggregated into a real win rate report.
What closed-lost reasons should I use?
A short list of 8 to 10 values covering the real patterns: price, lost to a named competitor, a missing feature, timing, no decision, poor fit, procurement or security, internal build, champion left, and an "Other" that requires a note. Keep the list short enough that a rep can pick the right one in a few seconds, or they will default to the first option every time.
Should the competitor field be free text or a picklist?
A single-select picklist of named competitors, not free text. Free text produces "Acme", "acme inc", "Acme Corp" and "Acme (I think)" as four different values, which makes win rate by competitor impossible to compute without manual cleanup. A fixed list also makes it obvious when a new competitor needs to be added.
How do I calculate win rate by competitor in HubSpot?
For each competitor, take closed deals where that competitor was present: wins divided by wins plus losses against that competitor. Decide upfront how no-decision deals are handled: most teams exclude them from the win rate calculation and report them separately, since a deal that never closes was not actually lost to the competitor.
How do I make these fields required at Closed Lost?
In your pipeline settings, HubSpot lets you require specific deal properties before a deal can move into a given stage. Set both the closed-lost reason and the competitor property as required on entry to the Closed Lost stage, so a rep cannot close the deal without filling them in.