---
title: Three gaps in Odoo CRM for teams that live on leads
description: Odoo CRM is built around opportunities. Where leads, time-in-stage and stale alerts fall short, and what a custom module can add without forking the standard app.
image: https://orbitalobjectives.com/hubfs/oo-social-share.png
---

[Skip to content](https://orbitalobjectives.com/insights/three-gaps-in-odoo-crm-for-teams-that-live-on-leads#main)

[rbital bjectives](https://orbitalobjectives.com/)

- [Services](https://orbitalobjectives.com/services)
- [Our Work](https://orbitalobjectives.com/work)
- [About](https://orbitalobjectives.com/about)
- [Insights](https://orbitalobjectives.com/insights)

[Discuss Your Project](https://orbitalobjectives.com/contact)

1. [Insights](https://orbitalobjectives.com/insights)
2. Nov 12, 2026, 9:43:00 AM

# Three gaps in Odoo CRM for teams that live on leads

Odoo CRM is built around opportunities. Where leads, time-in-stage and stale alerts fall short, and what a custom module can add without forking the standard app.

By Orbital Objectives

Odoo handles opportunities well out of the box. Teams with a long pre-opportunity phase run into three gaps, usually in this order.

## 1. Leads have no workflow of their own

Stages are designed for opportunities. A lead is either still a lead or converted, with nothing in between to say whether anyone has contacted it, qualified it or parked it. A lead status with its own small workflow fills that gap. Keep leads and opportunities in the same model, and resist the temptation to split leads into a model of their own.

## 2. You cannot see where records linger

Knowing a lead is in a stage is less useful than knowing it has been there for six weeks. Odoo has shipped a duration tracking mixin since version 17 that records the time a record spends in each value of a field. It only works on a many2one field with tracking switched on, so model the lead status as a small table of statuses, not a selection list. With that in place you get time-in-status for every record, and average days to qualify across the funnel.

## 3. Stale alerts ignore planned work

Odoo 19 added a rotting indicator that marks records which have sat too long in a pipeline stage. It is tied to stages, so it does not cover a lead status of your own. And any rule built only on days elapsed punishes the rep who has a call booked for next Tuesday. Useful stale detection checks two things: the threshold for the record’s current status, and whether a future activity is already scheduled. Only records that fail both get flagged and escalated.

## Build it as an inheriting module

All three can be added in a custom module that inherits from the standard CRM models. Nothing in the base app is forked or patched, so upgrades stay possible. One practical note: a scheduled job that ships inactive in the module’s data file may still be switched on in production, so check the live setting before assuming what is running.

[All articles →](https://orbitalobjectives.com/insights)

Next step

## Tell me what is stuck.

A first conversation is 30 minutes with the person who would do the work. You will leave knowing whether I am the right fit and roughly what it would take.

[Discuss Your Project →](https://orbitalobjectives.com/contact)[Explore Our Work](https://orbitalobjectives.com/work)

[rbital bjectives](https://orbitalobjectives.com/)

Everything orbits your objective

Independent Salesforce, HubSpot and Odoo consulting. Massachusetts.

#### Services

- [Consulting & Development](https://orbitalobjectives.com/services#salesforce-consulting-development)
- [CPQ & Revenue Operations](https://orbitalobjectives.com/services#salesforce-cpq-revenue-operations)
- [Service Cloud & Automation](https://orbitalobjectives.com/services#service-cloud-automation)
- [Experience Cloud & Partner Portals](https://orbitalobjectives.com/services#experience-cloud-partner-portals)
- [Integrations & Data Migration](https://orbitalobjectives.com/services#salesforce-integrations-data-migration)
- [All services](https://orbitalobjectives.com/services)

#### Practice

- [Our Work](https://orbitalobjectives.com/work)
- [About](https://orbitalobjectives.com/about)
- [Insights](https://orbitalobjectives.com/insights)
- [Contact](https://orbitalobjectives.com/contact)

#### Contact

- [info@orbitalobjectives.com](mailto:info@orbitalobjectives.com)
- [Discuss Your Project](https://orbitalobjectives.com/contact)

© 2026 Orbital Objectives LLCSalesforce and Odoo are trademarks of their respective owners.

```json
{
  "@context" : "https://schema.org",
  "@type" : "BlogPosting",
  "author" : {
    "@id" : "https://orbitalobjectives.com/#organization"
  },
  "dateModified" : "2026-11-12",
  "datePublished" : "2026-11-12",
  "description" : "Odoo CRM is built around opportunities. Where leads, time-in-stage and stale alerts fall short, and what a custom module can add without forking the standard app.",
  "headline" : "<span id=\"hs_cos_wrapper_name\" class=\"hs_cos_wrapper hs_cos_wrapper_meta_field hs_cos_wrapper_type_text\" style=\"\" data-hs-cos-general-type=\"meta_field\" data-hs-cos-type=\"text\" >Three gaps in Odoo CRM for teams that live on leads</span>",
  "publisher" : {
    "@id" : "https://orbitalobjectives.com/#organization"
  },
  "url" : "https://orbitalobjectives.com/insights/three-gaps-in-odoo-crm-for-teams-that-live-on-leads"
}
```

```json
{
  "@context" : "https://schema.org",
  "@type" : "BreadcrumbList",
  "itemListElement" : [ {
    "@type" : "ListItem",
    "item" : "https://orbitalobjectives.com/",
    "name" : "Home",
    "position" : 1
  }, {
    "@type" : "ListItem",
    "item" : "https://orbitalobjectives.com/insights",
    "name" : "Insights",
    "position" : 2
  }, {
    "@type" : "ListItem",
    "item" : "https://orbitalobjectives.com/insights/three-gaps-in-odoo-crm-for-teams-that-live-on-leads",
    "name" : "<span id=\"hs_cos_wrapper_name\" class=\"hs_cos_wrapper hs_cos_wrapper_meta_field hs_cos_wrapper_type_text\" style=\"\" data-hs-cos-general-type=\"meta_field\" data-hs-cos-type=\"text\" >Three gaps in Odoo CRM for teams that live on leads</span>",
    "position" : 3
  } ]
}
```