All posts
Integrator8 min read

CRM Revenue Forecasting and Pipeline Reporting in Odoo

Use Odoo CRM forecasting tools to predict monthly revenue from your pipeline - configure expected revenue, probability, forecast amounts, and use the Forecast view, pipeline analysis, and dashboard KPIs to drive sales decisions.

CRM Revenue Forecasting and Pipeline Reporting in Odoo#

Core Forecasting Concepts#

Odoo CRM uses three revenue fields per opportunity:

FieldDescription
Expected RevenueThe full deal value if won
Prorated RevenueExpected Revenue × Probability (auto-calculated)
Recurring RevenueMonthly recurring amount (for subscription deals)

Forecast reports aggregate Prorated Revenue across the pipeline to give a realistic revenue prediction.

Setting Up Probability#

CRM → Configuration → Stages:

Each stage has a default probability that new opportunities inherit:

StageSuggested Probability
New10%
Qualified25%
Proposition50%
Won100%
Lost0%

Enabling AI Probability (Predictive Lead Scoring):

CRM → Configuration → Settings → Predictive Lead Scoring

Odoo analyzes historical win/loss data and adjusts probability automatically based on partner country, industry, campaign source, and time-to-close patterns.

Forecast View#

CRM → Forecast (Gantt-style view)

The Forecast view groups opportunities by month based on Expected Closing Date. Each bar shows the prorated revenue contribution. Drag opportunities between months to adjust the expected close date.

Switching to Forecast view: CRM menu → switch from Kanban/List to the calendar-style Forecast icon.

Pipeline Analysis Report#

CRM → Reporting → Pipeline Analysis

Key metrics available:

  • Count - number of opportunities per stage or salesperson
  • Expected Revenue - sum of full deal value
  • Prorated Revenue - probability-weighted forecast
  • Days to Close - average time from creation to expected close

Filtering the report:

Filters:
  - Salesperson = [yourself or team]
  - Expected Closing = [this month / next month / this quarter]
  - Stage = [exclude Won and Lost]

Group By:
  - Salesperson → compare team members
  - Stage → see funnel distribution
  - Month (Expected Closing) → monthly forecast

Win Rate Analysis#

CRM → Reporting → Pipeline Analysis → Group by Stage

Check the ratio of Won opportunities to total closed (Won + Lost):

Win Rate = Won Count / (Won Count + Lost Count) × 100

Filter by Closed Date this quarter to get a relevant win rate. Compare by salesperson to identify coaching needs.

Dashboard KPIs#

CRM → Dashboard shows per-salesperson metrics:

  • New Opportunities (this month)
  • Opportunities Won (this month)
  • Expected Revenue (pipeline)
  • Average Deal Size

Adding to the home dashboard: Click the star icon on any CRM report to add it to the home screen.

Forecast by Salesperson#

CRM → Reporting → Pipeline Analysis → Group by Salesperson

Switch the measure to Prorated Revenue and filter to open opportunities closing this quarter. This gives each salesperson's weighted forecast contribution.

Lost Reason Analysis#

CRM → Reporting → Pipeline Analysis → Filters: Lost → Group by Lost Reason

Configure lost reasons at CRM → Configuration → Lost Reasons. Use this report to identify the most common deal killers (e.g., Price, Competition, No Budget) and feed them into product/pricing decisions.

Automating Forecast Reporting#

Send a weekly forecast email using a scheduled action:

Settings → Technical → Automation → Automated Actions:

python
# Action to run every Monday
records = env['crm.lead'].search([
    ('type', '=', 'opportunity'),
    ('stage_id.probability', '!=', 0),
    ('stage_id.probability', '!=', 100),
])
total_forecast = sum(r.prorated_revenue for r in records)
# Send summary email to sales manager
template = env.ref('crm.email_template_forecast_weekly')
template.with_context(forecast=total_forecast).send_mail(records[0].id)

Recurring Revenue Tracking (MRR)#

For SaaS or subscription opportunities:

Opportunity form → Recurring Revenue → set monthly MRR

CRM → Reporting → Pipeline Analysis → Measure: Recurring Revenue

This gives your monthly recurring revenue forecast weighted by probability.

Common Mistakes#

  • Expected Closing Date not set - opportunities without a closing date don't appear in the Forecast view; enforce a required close date policy
  • Probability stuck at default - salespeople leaving probability at the stage default (not adjusting for deal-specific factors) makes forecasts unreliable
  • Forecast includes dead opportunities - archive or mark as Lost any opportunity that hasn't progressed in 90+ days to keep forecast clean
  • Not using lost reasons - without structured lost reasons, you can't measure why deals are lost or identify patterns
  • Confusing Expected Revenue and Prorated Revenue - forecast reports should always use Prorated Revenue (probability-weighted), not Expected Revenue

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

Get started free