Short answer: pick the report by the question. Use Forecast to ask “what do we expect to close, month by month?”, Pipeline Analysis to ask “how are wins, losses and speed distributed?”, and the unattended leads view to ask “who has been left waiting?”. Each number comes from a small set of fields on the opportunity, so the reports are only as good as those fields.
Applies to
- Odoo version: 19. I compared the Forecast, Pipeline Analysis, expected revenue and unattended leads pages with the 20.0 documentation. I found no differences.
- Edition: the
crmmodule that holds these reports is in the open-source 19.0 repository. The Dashboards app, mentioned below, is separate, so check your edition before planning around it. - Apps: CRM. Subscriptions adds recurring revenue measures if installed.
Where do the reports live?
Under CRM ‣ Reporting, the 19.0 menu has four entries: Forecast, Pipeline, Leads and Activities. The Leads entry is for the pre-opportunity stage. In the Sales menu you also have My Activities for the individual view.
I treat the reports as three layers. Forecast is for looking forward. Pipeline Analysis is for looking back and slicing. Activities and the unattended leads filter are for spotting neglect.
What does the Forecast report show?
By default it shows your own opportunities expected to close within four months, plus those with no expected closing date, grouped by month in a Kanban view. Dragging a card to another month changes its Expected Closing, and the documentation says the field is set to the last day of the new month.
Each column heading shows prorated revenue. The documented formula is expected revenue times probability. In the 19.0 source, prorated_revenue is a stored computed field depending on exactly those two fields, so it is cheap to filter and group by.
The consequence is simple. A forecast without expected closing dates leaves cards in the “none” column. A forecast with generous probabilities is inflated. Fix the data first.
What can Pipeline Analysis tell me?
Open CRM ‣ Reporting ‣ Pipeline. The default is a stacked bar chart of opportunities created this year. There are graph, pivot, cohort and list views.
The useful part is in the Measures menu: Days to Assign, Days to Close, Exceeded Closing Days, Expected Revenue, Prorated Revenue and Count. The first two map to stored fields, day_open and day_close, which means they can be averaged by salesperson or source without extra work.
Group by Source, Medium or Campaign to see which channels produce leads. Group by Lost Reason to see why deals disappear.
How do I build a win/loss view?
The documentation walks through it. On the Pipeline page, add a custom filter on Won/Lost equal to Won, add a rule for Lost, and then switch on Include archived. That last toggle matters, because lost opportunities are archived. Then group by Stage, Won/Lost and Salesperson.
Using the data model, won_status is a stored field with three values: won, lost and pending. If you prefer the API, filter on it directly rather than rebuilding the won and lost rules.
How do I find neglected leads?
The unattended leads report is a filtered Pipeline Analysis. The documented filters are: an activity with a due date on or before today, a salesperson set, and optionally a sales team. Group by salesperson and switch to list view.
The page is clear about the limit: it only works if the team logs activities on the cards.
When it fits and when it doesn’t
Built-in reports fit a team that wants a weekly review and a monthly look at trends. They are quick to adjust and need no code.
They fit less well when leadership wants a fixed dashboard with agreed definitions or numbers combined from several apps. In that case I would first save the filters as favourites, and only then think about a spreadsheet or a custom report. The expected revenue report page notes that a pivot view offers Insert in Spreadsheet, which adds it to the Dashboards app.
Worked example: a small recruitment agency
The agency owner opens Forecast on Monday and sees a big pile in the “none” column. That tells them expected closing dates are not being set, so they add it to the stage requirements for Proposal. Then they open Pipeline, group by Source, and use the Days to Close measure to compare job boards with referrals.
At the end of the month they run the win/loss view with Include archived switched on, grouped by Lost Reason. When the same reason leads the list for three months in a row, they discuss it with the team.
Common mistakes
- Reading the Forecast without checking that expected revenue is filled in.
- Forgetting Include archived and wondering why losses vanish.
- Mixing leads and opportunities in one chart without noticing.
- Building a new custom report before using the standard ones for a month.
Related
The way probability and won/lost are stored is in how Odoo CRM pipelines work, and predictive lead scoring explains where the probability comes from. For the activities side, see getting your team to use the CRM. There is a plainer version on sajjalbajaj.in.
Official references
- Forecast report
- Pipeline Analysis and win/loss reports
- Expected revenue report
- Unattended leads report
- CRM activities and activity plans
- Odoo 19 CRM documentation
- crm.lead model, 19.0 source
How this article was checked: I read the 19.0 documentation pages above, compared them with 20.0, and checked the report menu entries and stored field names against the 19.0 crm source. I did not run a live database.
If you need reports that match how your team sells, look at my work and get in touch.