Skip to content

Deal loss reasons in HubSpot

Business task

A sales manager needs to understand why the company is losing deals: prospects going to competitors, price objections, product fit issues, or long decision cycles. Analyzing loss reasons helps identify systemic problems (product-market misfit, overpriced offering) as well as situational ones (a specific manager losing deals at the negotiation stage). A breakdown by manager, product, and pipeline stage is required.

Connections

This report requires a HubSpot CRM connection.

  • Connector: hubspot
  • Required permissions: read access to deals, deal properties, and pipelines via the HubSpot API
  • Connection status: active
  • Entities: deals (deal), pipelines (pipeline), stages (stage), users (user)
  • Specifics: HubSpot lets you customize loss reasons through deal properties. Make sure a required "Loss Reason" field is configured in HubSpot with a correct list of values
  • Check: if the "Loss Reason" field isn't filled in by managers, the report will contain many deals with an empty reason — enforce required completion before running the report

Report settings

  • Name: HubSpot deal loss reasons
  • Report type: analytical report with loss categorization
  • Data source: all hubspot connections
  • Date range: last_quarter — a quarterly sample is enough to spot patterns
  • Grouping: by loss reason (lost_reason), manager (responsible_user), pipeline (pipeline_name), and product (product_name)
  • Sorting: by lost deal amount, descending
  • Timezone: Europe/Moscow

Parameters

json
{
  "date_range": "last_quarter",
  "group_by": ["lost_reason", "responsible_user", "pipeline_name", "product_name"],
  "sort": { "field": "lost_amount", "direction": "desc" },
  "timezone": "Europe/Moscow",
  "limit": 2000
}

For a month-by-month view of loss reasons, add grouping by close date — you'll be able to see whether the share of price-related rejections is growing month over month.

Metrics

MetricTypeDescription
lost_deals_countnumberNumber of lost deals
lost_amountcurrencyTotal value of lost deals
avg_lost_deal_amountcurrencyAverage value of a lost deal
days_to_closenumberDeal duration from creation to loss, in days
stage_at_lossstringThe stage at which the deal was lost

Calculated metrics:

json
{
  "calculated_metrics": [
    {
      "name": "lost_share",
      "formula": "IF([total_lost_amount] > 0, ROUND([lost_amount] / [total_lost_amount] * 100, 1), 0)",
      "type": "percent",
      "description": "The reason's share of total losses"
    },
    {
      "name": "preventable_loss",
      "formula": "IF([lost_reason] == \"Price\" OR [lost_reason] == \"Competitors\", 0, [lost_amount])",
      "type": "currency",
      "description": "Preventable losses (excluding price and competitors)"
    }
  ]
}

The preventable_loss metric highlights losses that could theoretically be prevented: poor communication, slow response, a weak presentation, or product-need mismatch. Losses due to price and competitors are considered unavoidable given the current positioning.

Filters

json
{
  "logic": "AND",
  "conditions": [
    {
      "field": "deal_status",
      "operator": "EQUAL",
      "value": "lost"
    },
    {
      "field": "lost_reason",
      "operator": "NOT_EQUAL",
      "value": ""
    },
    {
      "field": "lost_amount",
      "operator": "GREATER_THAN",
      "value": 0
    }
  ]
}
  • deal_status = "lost" — lost deals only
  • lost_reason != "" — excludes deals with no reason specified
  • lost_amount > 0 — deals with a nonzero amount only

To focus on a specific reason: lost_reason EQUAL "Went to a competitor". To analyze preventable losses: lost_reason NOT_IN ["Price", "Competitors", "No budget"].

Write mode

Mode: Replace

Loss reasons are largely static data (once a deal is lost, the reason doesn't normally change retroactively under a healthy business process), but a full rewrite is recommended for consistency across the whole quarter. This also guarantees that corrections in HubSpot (a manager changing the loss reason) are reflected in the report.

If the volume of lost deals is very large (10,000+) and the data truly doesn't change, use AppendDedup for speed.

Schedule

json
{
  "schedule": {
    "enabled": true,
    "interval": "weekly",
    "time": "10:00",
    "timezone": "Europe/Moscow",
    "days_of_week": [1],
    "retry_on_failure": true,
    "max_retries": 3
  }
}

Weekly on Mondays at 10:00 AM. For a monthly report ahead of the sales review meeting, create a copy with interval: "monthly", day_of_month: 1, and time: "08:00".

Expected result

After a successful run:

  • Status: completed
  • Row count: reasons × managers × products × pipelines (typically 40-150 rows)
  • Top reasons: a sorted list of loss reasons with amounts — immediately shows what the main problem is
  • Preventable vs unavoidable: preventable_loss shows how much money is being lost for reasons that could be fixed through process and training
  • By manager: one manager may have 80% of losses attributed to "Went to a competitor," another to "Price too high." Different problems require different solutions
  • By product: if product X is losing on price and product Y on functionality, marketing and product teams have clear work to do

Screenshot

[Screenshot]

[Screenshot]

Maintained by the LightLead Documentation Team · Last verified: 2026-07-26