Fleet Workshop Analytics
Know whether your workshop really makes money — per order, branch and mechanic
Add-on for Fleet Workshop App, which is required and sold separately.
Try it live
Use the Live Preview button of this page — user demo, password demo. One full year of activity of a 3-branch workshop, reset every 24 hours. Open Workshop, then the Analytics menu.
Real profitability
- Parts cost frozen at consumption, labor cost per mechanic hour
- Gross margin per order, branch, vehicle type, brand and customer
- Parts margin vs. labor margin; orders with negative margin one click away
Bottlenecks and SLA
- Every stay in every stage is recorded with its real duration
- SLA compliance per stage and number of breaches
- Average hours per stage: see where vehicles get stuck
Mechanics and quality
- Quoted vs. actual hours, efficiency and billed labor per mechanic
- Comebacks: the same vehicle back within a configurable window
- Quotation approval rate and time to approval
For management
- Analytics dashboard with period and branch filters
- Pivot and graph analyses ready to export
- Weekly KPI digest e-mailed to workshop managers
Mechanics productivity, revenue by brand and top customers

Revenue and gross margin by branch, month by month

Bottlenecks: time spent in every stage

Quoted vs. actual hours and billed labor per mechanic

Margin and stage history on every work order

Getting started
The Documentation tab of this page is the basic configuration manual: how to enter the costs, what every indicator means and where its numbers come from, roles and troubleshooting.
- Activate the add-on (remove the Apps filter to find it).
- Enter the hourly cost of your mechanics and check the cost of your spare parts.
- Run Workshop > Analytics > Recompute Costs of Past Orders once, so the orders finished before the installation get their costs.
- Ask the mechanics to use the timer of their labor lines.
- Open Workshop > Analytics.
Requires Fleet Workshop App · Odoo 18, 19 and 20 · Community & Enterprise · Multi-company · Multi-branch
By Sapientia SpA — contacto@sapientia.cl
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Fleet (fleet)
• Inventory (stock) • Repairs (repair) • Sales (sale_management) • Discuss (mail) • Invoicing (account) |
| Community Apps Dependencies | Show |
| Lines of code | 7175 |
| Technical Name |
sapi_fleet_workshop_analytics |
| License | OPL-1 |
| Website | https://www.sapientia.cl |
Fleet Workshop Analytics
Basic configuration manual for Odoo 20.0. Profitability, bottlenecks, mechanics productivity and comebacks for the workshops that use Fleet Workshop App. This manual explains how to configure the costs and what every indicator means and where its numbers come from. Menu paths, buttons and field names are written as they appear in Odoo 20.0 with the English interface.
Requirements
- Odoo 20.0, with Fleet Workshop App (sapi_fleet_workshop) version 1.0.1 or later installed and configured. This add-on is sold separately and does not work without that app.
- No other app is required.
- Role: the menus and reports of this add-on are only visible to the workshop role Manager / Administrator.
- An outgoing mail server, only if you want the weekly KPI e-mail.
Installation
- Copy the folder sapi_fleet_workshop_analytics into the addons path of your Odoo server, next to sapi_fleet_workshop, and restart the Odoo service.
- Activate the developer mode, open Apps and click Update Apps List, then Update.
- In Apps, remove the Apps filter from the search bar, search for Fleet Workshop Analytics and click Activate.
The add-on adds the menu Analytics to the Workshop app, a tab Profitability on the work order, a section Analytics in the workshop settings and a field Mechanic Hourly Cost on the user.
Orders that existed before the installation are included: their costs are calculated at once, and their stage history starts at the moment they entered their current stage (earlier stages were not recorded). For the orders that were already finished, see step 4 of the initial configuration.
Initial configuration
The margin is only as good as the costs you enter. Do these three steps before reading the reports.
1. Cost of the mechanics
- Open Workshop > Configuration > Settings (Odoo administrator), section Analytics, and set Mechanic hourly cost: what one hour of a mechanic costs the workshop (salary and charges). It is used for every mechanic without an own cost.
- For a mechanic with a different cost, open Settings > Users & Companies > Users, open the user and, in the tab Workshop, set Mechanic Hourly Cost. This field is only visible to workshop managers.
2. Cost of the parts
Check the field Cost of every spare part (Workshop > Configuration > Labor & Parts). A part with a cost of 0 shows a margin of 100 %.
3. Comeback window and weekly e-mail
In the same section Analytics of the settings:
- Comeback window: 30 days by default. A vehicle received again within this number of days after a delivery counts as a comeback. 0 disables the detection.
- Weekly KPI digest (enabled by default): once a week, the workshop managers of the company who have an e-mail address receive the indicators of the last 30 days.
Also make sure that every labor line of the work orders has the right Mechanic: the cost and the productivity are calculated per mechanic. A labor line typed by a receptionist or a manager has no mechanic until one is chosen or until a mechanic starts its timer; a line added by a mechanic is his own. Lines without mechanic use the Mechanic hourly cost of the settings and are shown as "Unassigned".
4. Orders finished before the installation
The costs of an order are normally frozen when its repair is finished. The orders that were already finished when you installed the add-on were never frozen: until you do this step they are estimates recalculated every day.
After entering the costs (steps 1 and 2), open Workshop > Analytics > Recompute Costs of Past Orders. The costs of those orders are computed with the current product and mechanic costs and frozen, and the orders are marked Estimated Costs, because the costs are those of today and not those of the day the parts were consumed. A message tells how many orders were recomputed.
You can run the action again after correcting a cost: it recomputes the orders marked Estimated Costs. Orders frozen when their repair was finished are never changed by it.
How the numbers are calculated
All the figures are in the currency of the company and before taxes.
On each work order
The tab Profitability of the work order (managers only) shows:
- Revenue: the untaxed total of the quotation (sales order) of the work order, converted to the currency of the company at the date of the quotation. If the order has no quotation, or its quotation was cancelled, the Estimated Total of the order is used (parts at their sales price plus quoted labor).
- Parts Cost: for every part added to the order, the Cost of the product multiplied by the quantity.
- Labor Cost: for every labor line, the hours multiplied by the hourly cost of its mechanic. The hours are the Actual Hours of the line (timer); if no time was logged, the Quoted Hours. The hourly cost is the Mechanic Hourly Cost of the user, or else the Mechanic hourly cost of the settings.
- Total Cost: parts cost plus labor cost.
- Gross Margin: revenue minus total cost. Margin %: gross margin divided by revenue.
- Costs Frozen: ticked when the repair was finished (the order reached the stage Ready for Delivery and its parts were consumed). From that moment a later change of the product cost or of the mechanic cost no longer changes the order. Before that, the costs are an estimate that is refreshed once a day.
- Estimated Costs: shown on the orders whose costs were frozen later with Recompute Costs of Past Orders.
- Recompute costs: recalculates the costs of the order now, for example after correcting hours or a product cost.
- Hours to Approval: time between the moment the order entered the stage Quotation / Approval and the approval of the customer.
- Comeback and Previous Repair: ticked when the same vehicle was delivered by the workshop within the comeback window before this reception.
- Stage History: one line per stay of the order in a stage, with Date In, Date Out, Duration (h), SLA (h), SLA Breached and Moved By.
On the workshop board, the filters Comebacks and Negative Margin find those orders, and a comeback shows a "Comeback" badge on its card.
Analytics dashboard
Open Workshop > Analytics > Analytics Dashboard. Choose the period (Last 30 days, Last 90 days or Last 12 months) and the branch.
The dashboard counts the work orders received in the period (by reception date), whatever their stage, except the cancelled ones.
- Revenue (untaxed): sum of the Revenue of those orders, and their number.
- Gross margin: sum of their Gross Margin, and its percentage of the revenue. "On target" from 35 %, "Watch" from 20 %, "Below target" under 20 %.
- Parts / labor margin: for the parts, (parts amount minus parts cost) divided by the parts amount; for the labor, (labor amount minus labor cost) divided by the labor amount. The amounts are the Parts Amount and the Labor Amount of the orders.
- Mechanics efficiency: quoted hours divided by actual hours, counting only the labor lines with logged time. Above 100 % the work took less than quoted. "On target" from 90 %, "Watch" from 75 %.
- Quotation approval rate: approved orders divided by approved plus rejected orders. Orders still waiting are shown but not counted. "On target" from 80 %, "Watch" from 60 %.
- Average time to approval: average Hours to Approval of the approved orders.
- SLA compliance: among the stage stays that are finished and have an SLA, the share that lasted no more than the SLA. "On target" from 90 %, "Watch" from 75 %.
- Comeback rate: among the work orders received in the period, the share that are comebacks (orders marked Comeback, divided by all the orders received in the period). Numerator and denominator are the same set of orders, so the rate is between 0 and 100 %. "On target" up to 3 %, "Watch" up to 6 %, "Above target" over 6 %.
- Revenue and gross margin per month: the same orders grouped by the month of their reception.
- Bottlenecks: average hours per stage: average duration of the stays in each stage (finished stays, plus the current ones counted until now), next to the SLA of the stage and the number of breaches.
- Mechanics productivity: per mechanic, the number of orders, the quoted and actual hours, the efficiency and the labor billed (quoted hours multiplied by the hourly rate of the line). Labor lines without a mechanic are grouped in the row "Unassigned".
- Revenue by brand: the seven brands with the most revenue; the rest is grouped as "Other".
- Top customers: the ten customers with the most revenue, with their gross margin.
Reports
- Workshop > Analytics > Profitability: pivot of Revenue and Gross Margin by branch and month, with graph and list views. Group by Branch, Vehicle Type, Brand, Customer, Lead Technician or Month; filters Negative Margin, Comebacks and SLA Breached. It also offers the parts and labor costs, the lead time, the hours to approval and the hours spent in each stage as measures.
- Workshop > Analytics > Bottlenecks: average Duration (h) per stage, with the filter Closed Stays applied by default. Group by Stage, Branch, Lead Technician or Month.
- Workshop > Analytics > Mechanics Productivity: Quoted Hours, Actual Hours and Billed Labor per mechanic and month; the filter Over Quoted Hours finds the tasks that took longer than quoted.
Every pivot can be exported to a spreadsheet with the standard download button.
Weekly KPI digest
The scheduled action "Workshop Analytics: weekly KPI digest" e-mails, once a week and per company, the indicators of the last 30 days and the average hours per stage. It is sent to the internal users with the role Manager / Administrator who belong to the company and have an e-mail address. Disable it with Weekly KPI digest in the settings.
A second scheduled action, "Workshop Analytics: estimate costs of open orders", refreshes once a day the estimated costs of the orders that are not finished yet.
First use
- Enter the costs (see "Initial configuration").
- Work as usual with the work orders. Ask the mechanics to use the timer of their labor lines: without logged time the labor cost uses the quoted hours and the efficiency is not measured.
- Open a delivered order, tab Profitability, and check its revenue, costs and margin.
- Open Workshop > Analytics > Analytics Dashboard and choose Last 90 days.
Roles and permissions
- The menu Analytics, the tab Profitability, the filter Negative Margin, the field Mechanic Hourly Cost and the cost and margin figures of the orders are reserved to the workshop role Manager / Administrator. Other users cannot read them.
- Technicians and receptionists keep working on the orders as before, including Ready for Delivery: the costs are frozen in the background without showing them, and the stage history is recorded whoever moves the order.
- Recompute costs and Recompute Costs of Past Orders are reserved to managers.
- Changing the settings requires an Odoo administrator (user form, tab Access Rights, section Roles, field Role: Administrator).
Multi-company
- The dashboard and the reports show the orders of the companies selected in the company switcher. Amounts are in the currency of each company: select one company at a time if your companies use different currencies.
- Mechanic hourly cost, Comeback window and Weekly KPI digest are saved per company.
- The weekly e-mail is sent per company, to the managers who belong to it.
Troubleshooting and FAQ
- The margin of an order is 100 %.
- The parts have no Cost and the mechanic has no hourly cost. Enter them and click Recompute costs on the order.
- I corrected a cost but a delivered order did not change.
- Its costs are frozen. Click Recompute costs on the order to apply the current costs.
- The revenue differs from the invoices.
- The revenue is the untaxed amount of the quotation, not of the invoices. The quoted and invoiced amounts are compared in the Executive Dashboard of Fleet Workshop App.
- Mechanics efficiency shows "No data".
- No labor line of the period has logged time. The mechanics must use the timer, or the actual hours must be typed on the labor lines.
- A row "Unassigned" appears in the productivity table.
- Some labor lines have no Mechanic. Choose the mechanic on the lines of the order, or ask the mechanics to start the timer of their tasks.
- The orders finished before the installation show no cost or an old cost.
- Enter the costs and run Workshop > Analytics > Recompute Costs of Past Orders (step 4 of the initial configuration).
- "Only workshop managers can access the costs and margins of the work orders."
- The dashboard and the cost actions are reserved to the role Manager / Administrator.
- The stage history of old orders is incomplete.
- Stays are recorded from the installation of the add-on. Orders that existed before only have their current stage.
- Nobody receives the weekly e-mail.
- The workshop managers of the company need an e-mail address on their user, Weekly KPI digest must be enabled and an outgoing mail server must be configured.
Support and scope
Support: contacto@sapientia.cl (Sapientia SpA). Please include your Odoo version, the installed version of the add-on and the steps that lead to the problem.
Included: the add-on for your Odoo series and the fixes of its defects on a standard Odoo installation.
Not included: Fleet Workshop App itself (sold separately), installation, training and customizations. The add-on is a management report: it is not an accounting margin. It does not include overheads, taxes, discounts given on the invoice, or the purchase price actually paid for each part.
Odoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please log in to comment on this module