Route Home-Service Leads in Odoo CRM Without Losing Attribution

Short answer: Routing home-service leads in Odoo CRM without losing attribution means capturing the source on every lead — UTM campaign, website form, phone call — then assigning ownership by territory and team rules, with a response SLA on each step. Odoo’s native CRM records the origin, the owner, and the first-contact time automatically, so attribution survives the handoffs that usually destroy it.

This article walks through an illustrative scenario: a home-service company (an HVAC business with a few dozen technicians serving a metro area) used to show a practical Odoo CRM lead-routing workflow. The company is invented; the workflow pattern — source tracking, territory ownership, CRM teams, response SLAs, and approvals — is the one I implement with real service teams.

Where does attribution actually break in a home-service business?

Attribution rarely breaks in the CRM. It breaks at the handoffs around the CRM. In a typical HVAC or plumbing company, I see the same leaks:

  • The phone call with no source: the dispatcher books the job, nobody asks how the caller found the company — or asks and types “Google” into a free-text note no report can ever use.
  • Website forms that drop their UTMs: the marketing team carefully tags every campaign, but the form-to-CRM integration only passes the name and phone number. The campaign data dies on the website.
  • Technicians creating their own contacts: a tech wins repeat business, creates a duplicate contact on the spot, and the original marketing source is overwritten or orphaned.
  • The weekend black hole: leads sit unassigned in a shared inbox from Friday evening; by Monday morning the customer has called a competitor.
  • Handoff amnesia: marketing generates the lead, the dispatcher qualifies it, the salesperson quotes it, the tech services it. Every handoff is a chance for the source, the owner, and the urgency to get lost.

The workflow below is designed so that none of these handoffs depend on human memory.

What does the lead journey look like in the illustrative company?

Our fictional HVAC company gets leads from three doors: the website quote form, paid search campaigns, and inbound phone calls. The journey we design in Odoo looks like this: a lead is created with its source captured automatically; an assignment rule routes it to the right territory team; the dispatcher confirms and qualifies it within a defined SLA; a salesperson or senior tech owns the quote; the job is won or lost with a mandatory reason. At every stage, the lead record shows where it came from, who owns it, and how long each step took.

The key design principle: Odoo’s native CRM handles the leads themselves — creation, assignment, activities, pipeline — while the planning of territories, SLAs, and approval rules happens up front, which is exactly the kind of workflow design Odoo Pilot helps teams map and configure before go-live.

How do you capture the source on every lead?

Source capture has to be automatic wherever possible and disciplined where it can’t be:

  • Website leads: the Odoo website form builder passes UTM parameters — utm_source, utm_medium, utm_campaign — into the lead’s source and campaign fields. Make the source field read-only for website-originated leads so nobody overwrites it later. This single integration is what connects ad spend to booked jobs.
  • Phone leads: use dedicated tracking numbers per major campaign where the budget justifies it; at minimum, make “Source” a required field with a controlled list on manual lead creation. No free text — free text is where attribution goes to die.
  • Imports and referrals: map the source column on every list import and reject imports that don’t have one. Referral sources get their own values so partner-driven business stays visible.
  • One rule to rule them all: the source is set once, at creation, and never edited by salespeople. Attribution is a marketing asset, not a sales opinion. “Unknown” is a legitimate source value — it’s honest and measurable, and the goal is to shrink it over time, not to let anyone guess.

How should territory ownership and CRM teams work?

Home-service businesses are geographic. The company divides its metro area into territories — North, Central, South, say — each owned by a CRM team in Odoo. The territory map lives in the implementation workbook as a ZIP-code list, and changes to it go through a defined process so leads never fall between teams.

  • Teams own territories: each CRM team has its ZIP codes, its salespeople, and its dispatcher. The lead’s service address determines the team — not whoever happens to be free.
  • Assignment inside the team: Odoo’s automated assignment distributes new leads round-robin (or balanced by workload) across the team’s salespeople. Named exceptions exist for key accounts and existing customers, who route to their assigned owner.
  • Dispatchers triage, salespeople own: the dispatcher qualifies the lead and confirms the appointment; ownership of the commercial relationship sits with the salesperson. Blurring these roles is how leads end up owned by nobody.

What does the routing decision table look like?

This is the heart of the workflow — the table the dispatcher and the system both follow:

Business requirement Odoo module / feature Notes
Customer initiates a return from the website Website / eCommerce • Helpdesk (optional) Return portal form or ticket; decide whether returns are self-service or agent-driven.
Return merchandise authorization (RMA) number Inventory: Returns on delivery orders Decide the RMA numbering sequence and who can approve an RMA.
In-store return of a web order Point of Sales: refund / return flow POS needs access to the original order; settle whether refunds hit the original payment or the cash drawer.
Exchange: return one item, take another POS (in store) or Sales + Inventory (online) Exchanges are a return plus a new sale — scope both legs, including price differences.
Quality inspection of returned goods Inventory: dedicated QC location + internal transfers Define inspection criteria and who signs off; quarantined stock must not be sellable.
Return to vendor for defective batches Purchase: returns on receipts Separate flow from customer returns; affects vendor bills and landed costs.
Refund to original payment method Invoicing: credit notes + payment acquirer Confirm the acquirer’s refund API; manual refunds need a documented fallback.
Store credit instead of refund POS loyalty / gift cards or Sales coupons Define expiry and whether credit is transferable; accounting treatment must be agreed.
Return shipping labels Delivery carrier integration (website returns) Scope which carrier generates labels and how tracking numbers land on the RMA.
Restocking fees or return shipping deductions Invoicing / POS price adjustments Business rule first — then map it to a fee product or a discount line.
Manager approval for high-value returns Studio / automated actions or Approvals app Set the threshold; anything above it routes to a manager before the refund.
Return reasons reporting Inventory reporting + custom fields on returns Agree the reason code list in presale — it drives every later analysis.

Every row answers three questions a dispatcher actually asks: where does this go, who owns it, and how fast. If a condition isn’t in the table, it gets added to the table — not improvised.

How do response SLAs and approvals fit in?

SLAs in Odoo are activities with teeth. When a lead arrives, an automated action creates a “Call” activity due in 15 minutes (or per the table). If the activity goes overdue, it escalates: first to the team leader’s inbox, then to a reassignment rule. The point isn’t surveillance — it’s that a lead without a next step is a lead being lost, and the system should say so out loud.

Approvals cover the commercial edge cases: discounts beyond the standard band, credit terms, and after-hours emergency pricing all need a manager’s sign-off before the quote goes out. Defining these rules in the workflow protects margin and consistency without custom development in most cases.

How do you audit time-to-first-contact?

This is the KPI that ties the whole workflow together: time-to-first-contact, measured from lead creation to the first logged activity or call. Odoo timestamps both ends, so the metric is automatic once the workflow is followed.

The audit has two layers: an operational dashboard per team (median time-to-first-contact, SLA breaches) and a strategic view per source (which campaigns produce leads that get contacted and convert). That second view is the attribution payoff — marketing optimizes for cost per contacted, qualified lead, not just cost per lead.

A weekly 20-minute review — dispatcher, sales lead, marketing — going through the breaches and the source report is what keeps the workflow honest. Systems don’t enforce SLAs; people looking at the numbers do.

Frequently asked questions

Does Odoo’s native CRM handle all of this, or do we need Odoo Pilot?
Odoo’s native CRM handles the leads themselves — creation, assignment rules, activities, pipeline stages, and reporting. Odoo Pilot is where you plan and configure the workflow: mapping territories, defining SLAs, and setting approval rules before go-live, so the CRM is configured around your process.

What if a lead’s source is genuinely unknown?
Then “Unknown” is the source. It’s honest, it’s measurable, and watching its share shrink month over month is a real KPI. What’s not acceptable is a salesperson guessing — a guessed source is worse than an unknown one because it corrupts the data silently.

Round-robin or named owners — which is better?
Both, for different lead types. Round-robin gives you inbound velocity and fairness across the team; named owners give key accounts and existing customers continuity. The routing table above shows how to mix them without ambiguity.

How do we stop technicians from creating duplicate contacts?
Combine Odoo’s duplicate-detection rules on phone and email with a merge discipline: suspected duplicates route to a review step instead of creating a new record. Most duplicates happen because searching was slower than creating — so make existing contacts fast to find on mobile.

Map your lead-routing workflow before the leads arrive

Home-service companies don’t lose attribution in their CRM — they lose it in the gaps between the phone, the dispatcher, the salesperson, and the tech. A routing workflow that captures the source automatically, assigns by territory, enforces response SLAs, and audits time-to-first-contact closes every one of those gaps.

If your leads are leaking attribution somewhere between the first ring and the booked job, map your own lead-routing workflow in Odoo Pilot — designing the territories, SLAs, and approval rules up front is what turns Odoo’s native CRM from a contact list into a revenue machine.