All posts
Integrator7 min read

Configuring the Odoo CRM pipeline: stages, lost reasons, probability, and sales team setup

A well-configured CRM pipeline in Odoo gives sales managers real-time visibility into deal health and accurate revenue forecasting. This guide covers stage configuration, lost reason tracking, probability settings, and how to structure sales teams for effective pipeline reporting.

Pipeline stages#

CRM stages represent the steps in your sales process from first contact to closed deal. In Odoo, stages are shared across sales teams by default but can be scoped to specific teams.

Navigate to CRM → Configuration → Stages to view and edit all stages.

Key stage fields#

  • Stage Name: visible in the pipeline Kanban view
  • Probability: default win probability for opportunities that reach this stage (0–100%)
  • Sales Teams: leave empty to share the stage across all teams, or specify teams to make it exclusive
  • Folded in Pipeline: collapses this stage in the Kanban view - useful for "Won" and "Lost" stages
  • Requirements: free-text field describing what must be true before moving to this stage; visible to salespeople as a tooltip
StageProbabilityNotes
New / Incoming10%Auto-created from website forms or email
Qualified25%Qualification call completed
Proposal Sent50%Written proposal delivered
Negotiation75%Commercial terms being discussed
Won100%Folded, success state

Avoid creating more than 7–8 stages - salespeople stop updating opportunities when the process feels bureaucratic.

Probability and forecasting#

Each opportunity has a Probability field. Odoo uses this for weighted pipeline forecasting:

Expected Revenue = Expected Closing Amount x Probability%

The CRM dashboard and pipeline report aggregate these expected revenues to give a forecast of likely-to-close deals.

AI-assisted probability (Enterprise)#

In Odoo Enterprise 16+, the CRM module includes machine learning-based lead scoring. When enabled (CRM → Configuration → Settings → Predictive Lead Scoring), Odoo analyzes historical won/lost data to set probability automatically based on lead source, country, phone/email presence, and days in current stage.

Lost reasons#

Lost reasons let you analyze why deals fail. Navigate to CRM → Configuration → Lost Reasons to define your list.

Recommended lost reasons:

  • No budget / too expensive
  • Competitor chosen
  • No decision made / project cancelled
  • Poor fit / wrong product
  • Lost contact

When a salesperson marks an opportunity as lost, they must select a reason. This is enforced - you cannot mark as lost without a reason if any lost reasons exist.

Analyzing lost reasons#

CRM → Reporting → Pipeline Analysis → group by Lost Reason to see where deals fail most often. Filter to a date range and specific teams to spot trends.

Stage requirements enforcement#

Stage requirements are informational only - Odoo does not block moves if requirements are not met. For hard enforcement, add a Python constraint to a custom module.

Example: prevent moving to "Proposal Sent" without a phone number on the partner:

python
from odoo import models, api, exceptions

class CrmLead(models.Model):
    _inherit = 'crm.lead'

    @api.constrains('stage_id', 'partner_phone')
    def _check_proposal_stage_phone(self):
        proposal_stage = self.env.ref('crm.stage_lead2')
        for lead in self:
            if lead.stage_id == proposal_stage and not lead.partner_phone:
                raise exceptions.ValidationError(
                    'A phone number is required before moving to Proposal Sent.'
                )

Sales team configuration#

Sales teams (CRM → Configuration → Sales Teams) group salespeople and are the primary reporting dimension in CRM.

Key settings per team#

  • Team Leader: receives notifications for team-level events
  • Email Alias: incoming emails to this address create leads assigned to the team
  • Invoiced Target: monthly revenue target for the team dashboard

Assigning opportunities to teams#

Opportunities can be assigned automatically via:

  1. Email alias: email to sales@yourcompany.com assigns to the team that owns that alias
  2. Lead assignment rules (Enterprise): define rules by country, industry, or other fields
  3. Manual assignment: salesperson changes the team field on the opportunity

Won/lost reporting#

CRM → Reporting → Pipeline Analysis is the primary reporting view. Key filters and groupings:

  • Stage = Won + group by salesperson → individual win rate
  • Active = False (archived/lost) + group by Lost Reason → failure analysis
  • Date: Creation vs Date: Closing - switch between when deals were created vs when they closed
  • Expected Revenue vs Prorated Revenue - prorated applies the probability weighting

Export to spreadsheet for custom analysis or use Odoo's built-in spreadsheet pivot to build a sales performance dashboard.

Try ERPeek on your own Odoo module - ask questions, scaffold tests, and explore your codebase in plain language.

Get started free