AI & Automation Services
Automate workflows, integrate systems, and unlock AI-driven efficiency.



Odoo ERP holds some of the richest operational data in a business: every sale, every purchase, every stock movement, every customer interaction, every invoice. Machine learning changes the relationship with that data from reactive to predictive - instead of reviewing last quarter's sales to make a purchase order decision, the system predicts next quarter's demand and suggests the purchase order before the stockout happens. Demand forecasting on Odoo data reduces stockout events by 30-40 per cent after eight weeks of model calibration.
Odoo ERP holds some of the richest operational data in a business: every sale, every purchase, every stock movement, every customer interaction, every invoice. That data is typically used for reporting and manual decision-making. Machine learning changes the relationship with that data from reactive to predictive: instead of reviewing last quarter's sales to make a purchase order decision, the system predicts next quarter's demand and suggests the purchase order before the stockout happens.
There are three categories of machine learning capability that Softomate builds directly into Odoo deployments for UK businesses.
Demand forecasting. A gradient boosting model trains on 18 months of stock.move records, which contain every inventory movement timestamped with product, quantity, source location, destination location and responsible user. That dataset gives a demand signal accurate enough to train a model achieving 85-92 per cent accuracy on stable product lines. Predictions generate draft purchase orders or manufacturing orders automatically within Odoo, subject to user review and approval. A nightly ir.cron job executes at 2am, retrains the incremental model on the latest 30 days of data, and updates reorder rules on all products where the forecast differs from the current rule by more than 15 per cent. For a UK distributor or wholesaler managing hundreds of SKUs, stockout events fall by 30-40 per cent in the eight weeks following model calibration, and excess stock value reduces as the model identifies slow-moving items before the overstock accumulates.
Lead scoring. A classification model trains on the fields, activity patterns and conversion outcomes of historical crm.lead records, which contain source, campaign, industry, company size, assigned salesperson and activity history for every opportunity in the pipeline. Models trained on six months of won and lost data from these fields achieve 78-85 per cent accuracy in predicting deal outcome. The model scores every active lead in the pipeline with a conversion probability, updated in real time as new activity is logged. Sales teams prioritising high-score leads see 15-25 per cent improvement in conversion rates by concentrating effort on leads the model has identified as genuinely close to converting.
Document classification and field extraction. A natural language processing model reads incoming account.move vendor bill documents in Odoo and classifies them by vendor category, expense type, VAT treatment and cost centre. On a well-tagged dataset of 1,000 or more historical bills, the classification model achieves 93-97 per cent accuracy. Extracted field data pre-populates the corresponding Odoo record for review, reducing invoice processing time from the industry average of 12 minutes per invoice to under 90 seconds. For a business processing 50 invoices per day, that is roughly nine hours of accounts payable time recovered every working day.
Additional ML capabilities Softomate builds include: churn prediction (identifying accounts in res.partner showing behavioural patterns associated with cancellation), anomaly detection on account.move.line for finance teams identifying unusual transactions before month-end, and predictive maintenance scheduling for businesses running Odoo Maintenance with IoT-connected equipment.
All these capabilities are built as native Odoo custom modules using the Odoo inheritance system. They appear inside Odoo's standard interface, write predictions back to standard or custom fields on existing models, and can trigger Odoo's native automated actions and server actions. There is no separate tool to log in to: the ML predictions are part of the Odoo workflow.
Gradient boosting models trained on Odoo stock.move history achieve 85-92 per cent accuracy on stable product lines after eight weeks of post-deployment calibration - accuracy drops to 70-80 per cent on new products or seasonal items without historical seasonality data. Understanding the mechanics helps businesses assess whether their data is ready and what operational change the system requires.
Data sources. The model trains on three Odoo tables: stock.move (every inbound and outbound stock event, including transfers and adjustments, timestamped with product, quantity, source location, destination location and responsible user), sale.order.line (historical demand by product and customer), and purchase.order.line (supplier lead times and pricing history). Together these three tables provide the complete demand signal dataset. The minimum recommended history for a reliable forecast is 12 months, enough to capture at least one complete seasonal cycle. Two to three years of clean history produces significantly tighter predictions.
Feature engineering. The Softomate implementation extracts rolling 4-week, 8-week and 13-week average demand per SKU from stock.move; month-of-year and week-of-year seasonality indices; product age (time since first sale); supplier lead time variability from purchase.order.line receipt data; and promotional uplift flags from sale.order.line discount fields. These features capture the patterns that drive demand variation without requiring manual seasonal calendars.
Model selection. For most UK distributors and wholesalers with 100-10,000 SKUs, Softomate uses XGBoost or LightGBM gradient boosting models. These produce accurate predictions with moderate training data, train quickly, and are interpretable: the feature importance output tells the business which variables are actually driving demand predictions. For businesses with very large SKU catalogues (10,000+), LSTM recurrent networks are more appropriate for capturing long-range temporal patterns.
Output and Odoo integration. The nightly ir.cron job at 2am reruns the batch: retraining the incremental model on the latest 30 days of stock.move data and updating reorder rules on all products where the forecast differs from the current rule by more than 15 per cent. Predictions also populate a custom forecast field on stock.warehouse.orderpoint, visible on a custom Odoo dashboard. The purchasing team reviews the AI-generated draft purchase orders, amends quantities where they have market information the model cannot see, and confirms.
Calibration period. The model requires approximately eight weeks of live production data after deployment to calibrate against real-world ordering patterns. During this period, stockout reduction is partial. After the eight-week calibration, the 30-40 per cent stockout reduction figure is typically achieved and maintained.
Example - UK food distributor with 800 SKUs. A Softomate client managing 800 SKUs from a single Birmingham distribution centre had a 14 per cent stockout rate across their range. After Odoo ML demand forecasting implementation, the stockout rate dropped to 8 per cent within 10 weeks, a 43 per cent reduction. The purchasing team reduced the time spent generating purchase orders from approximately six hours per week (manually reviewing reorder reports and checking supplier lead times) to under 90 minutes per week (reviewing and approving AI-generated draft purchase orders). Excess stock value fell by 11 per cent as the model identified 38 lines where the team was systematically over-ordering relative to actual demand.
For businesses evaluating readiness for Odoo demand forecasting, the most important question is data quality in stock.move. Odoo deployments where stock adjustments are entered as bulk corrections rather than individual movement records produce noisy training data. Softomate's standard engagement includes a data readiness assessment as the first phase, before any model development begins. Visit the Odoo AI integration London page for more on the assessment process.
ML models trained on six months of crm.lead won/lost data achieve 78-85 per cent accuracy in predicting deal outcome - making lead scoring one of the highest-ROI ML applications available to any UK business already running Odoo CRM. The system assigns each active lead a conversion probability score and updates it in real time as new activity is logged, triggering automated Odoo actions based on score thresholds.
Training data: the crm.lead model. Odoo's CRM module stores every lead and opportunity in the crm.lead table. The crm.lead records used for training contain: source (how the lead came in), campaign, industry, company size, geographic region, initial response time (minutes between lead creation and first activity log), number of activities logged in the first seven days, average sales stage duration, discount requested on any linked sale order draft, and the assigned sales representative. The final label is binary: won (1) or lost (0). Historical won and lost opportunities are the labelled training data.
Minimum training data requirement. A reliable lead scoring model requires a minimum of 300 labelled historical opportunities to train on. Most UK businesses that have been running Odoo CRM for more than 12 months have sufficient historical data.
Score output and display. The Softomate ML module adds a predicted score field to the Odoo crm.lead form view: a percentage between 0 and 100 representing conversion probability. The Odoo Kanban pipeline view shows score badges on opportunity cards, allowing the sales team to see high-probability opportunities (above a configurable threshold, typically 65 per cent) highlighted. The score updates automatically when new activity is logged against the opportunity.
Automated actions triggered by score. Odoo's native automated action system can be configured to trigger based on lead score field changes. When score rises above 70 per cent, a follow-up activity is created for the sales rep with a 24-hour deadline. When score falls below 20 per cent and the lead has been in the pipeline for more than 60 days, the lead moves to a re-engagement nurture sequence. When score exceeds 80 per cent, the sales manager receives a notification for priority attention. These automations require configuration of Odoo Server Actions and Automated Actions: no custom code beyond the scoring module itself.
Conversion rate improvement. The 15-25 per cent improvement in sales conversion is achieved through prioritisation, not through changing the leads or the sales process. The same call volume, email volume and proposal volume, redistributed toward high-score leads, produces measurably better conversion outcomes. The upper end of the improvement range (25 per cent) occurs in businesses where, before ML implementation, the sales team was systematically misallocating time toward low-probability leads. The lower end (15 per cent) occurs in businesses where the sales team was already using reasonable judgement-based prioritisation.
Softomate builds the lead scoring module as a custom Odoo module using the Odoo inheritance architecture, and integrates it with the Odoo ERP implementation London engagement for clients implementing Odoo CRM for the first time and wanting ML-enhanced pipeline management from day one.
The quality of ML predictions is determined directly by the quality and completeness of the Odoo data used to train the model. The data preparation and cleaning phase is where the majority of implementation risk lives: the technical model development is straightforward once the training data is sound. Understanding the data requirements before an engagement begins avoids discovering data quality problems mid-project.
Demand forecasting data requirements.
stock.move: Minimum 12 months of records - ideally 18 months for gradient boosting accuracy of 85-92 per cent - with complete product, quantity, source location, destination location, date and movement type fields. Every inventory movement in Odoo is timestamped with this data. The most common data quality issue is bulk stock adjustment entries: a single stock.move record representing a weekly manual count correction rather than individual movement records. This produces gaps in the time series that the model interprets as demand dips. Softomate's data preparation phase identifies and flags these before training begins.sale.order.line: Minimum 12 months of confirmed order lines with product, quantity and order date. sale.order.line contains historical demand by product and customer: this is the primary demand signal. Cancelled orders are excluded from training data because they represent demand that did not complete.purchase.order.line: Historical purchase order lines with supplier, product, ordered quantity, ordered date and received date. purchase.order.line contains supplier lead times and pricing history: the gap between ordered date and received date is the supplier lead time, which the model uses to set safety stock levels and predict the correct reorder point that accounts for lead time variability.Lead scoring data requirements.
crm.lead: Minimum 300 historical opportunities with a clear won/lost outcome. Six months of crm.lead data with consistent outcomes produces meaningful scores; 12 months produces the 78-85 per cent accuracy range. The most common data quality issue is a large number of leads in a perpetual open state: opportunities that were never closed as won or lost because the sales team uses Odoo CRM inconsistently. These orphaned leads cannot be used as training labels. Softomate's data preparation phase identifies orphaned leads and works with the business to classify them before training begins.Document classification data requirements.
account.move: Minimum 500 historical validated vendor invoices. The model achieves 93-97 per cent accuracy on a well-tagged dataset of 1,000+ historical bills. Businesses with a concentrated supplier base (fewer than 20 suppliers representing the majority of invoice volume) achieve higher field extraction accuracy than businesses with a highly fragmented supplier base, because the model sees sufficient examples of each vendor's invoice layout to learn the patterns reliably.Data sensitivity and hosting considerations. For most UK businesses, Odoo ML training uses data held within their own Odoo database: it never leaves their own server. The trained model artefacts (serialised .pkl or .onnx files) are stored within the Odoo custom module on the same server. No customer data is sent to third-party cloud ML services during training or inference unless the business explicitly requests cloud model hosting. For businesses with data sensitivity requirements in healthcare, legal or financial services, the on-premise training and inference architecture meets GDPR requirements for data minimisation and storage limitation.
Odoo machine learning development pricing reflects the three phases of every ML engagement: data assessment and preparation, model development and training, and Odoo integration and deployment. UK pricing varies significantly based on the number of ML modules being built, the volume of data to be processed, and whether the business needs cloud or on-premise model hosting.
Single ML module - from £6,000. A single ML capability (demand forecasting only, lead scoring only, or document classification only) starts from £6,000 for a UK business with clean, reasonably structured Odoo data. This covers the data assessment phase, model development and training, Odoo custom module development (adding the prediction output to the Odoo interface, triggering automated actions via the nightly ir.cron job), and one round of post-deployment tuning after the eight-week calibration period. The £6,000 figure assumes Odoo 16 or 17 Community or Enterprise, Python 3.10+ environment, and data quality that does not require extensive manual cleaning. Poor data quality adds £1,500 to £3,000 to the data preparation phase.
Multi-module ML suite - £12,000 to £25,000. Businesses implementing two or three ML capabilities simultaneously (for example, demand forecasting plus lead scoring, or all three modules) pay £12,000 to £25,000. The upper end applies when all three modules are being implemented, when the data requires significant cleaning before training, when on-premise model hosting with a dedicated model serving layer is required, or when the business needs a custom ML dashboard with multiple visualisation panels.
Ongoing model maintenance - from £400 per month. ML models require periodic retraining as new Odoo data accumulates and business patterns shift. Softomate provides ongoing model maintenance retainers covering monthly retraining runs, performance monitoring, and model updates when significant distribution shift is detected. The retainer also covers Odoo version compatibility as the business upgrades Odoo.
What is not in scope at the quoted prices. The quoted prices cover the ML module development and Odoo integration. They do not include: Odoo ERP implementation (see Odoo ERP implementation London for pricing); data warehouse or ETL infrastructure if the business needs training data from sources outside Odoo; or cloud GPU compute costs if the business selects cloud-based neural network training for large-scale NLP models (typically £50 to £300 one-off for a training run on AWS or Google Cloud).
Comparison - build versus buy. Cloud ML services like Google Vertex AI and AWS SageMaker offer demand forecasting APIs that can theoretically be connected to Odoo data. At typical UK SME data volumes (100 to 1,000 SKUs, 50 to 500 leads per month), API costs are £100 to £500 per month, but the integration work to extract Odoo data, push it to the cloud service in the correct format, and write predictions back to Odoo is not materially cheaper than building the model in-house. The additional risk is data residency: training data containing commercial purchase patterns from purchase.order.line, customer data from crm.lead and financial transactions from account.move is processed on the cloud provider's servers rather than on-premise. For UK businesses in regulated sectors or with strong data sovereignty requirements, on-premise model development is the correct choice regardless of cost comparison.
All Odoo ML development engagements are scoped with a fixed-price proposal following the data assessment. Variable-cost surprises mid-project are avoided by completing the data assessment before any model development begins.
Odoo machine learning implementation takes 8-12 weeks from project start to production deployment for a single ML module, and 12-18 weeks for a multi-module suite. The timeline is driven primarily by data preparation and model validation, not by module development speed.
Phase 1: Data assessment - 1 to 2 weeks. Softomate accesses the Odoo instance and runs the data assessment: query analysis of stock.move, sale.order.line, purchase.order.line, crm.lead or account.move depending on the ML modules in scope; identification of data quality issues (null fields, orphaned records, bulk correction entries, inconsistent category mapping); assessment of training set size after cleaning; and confirmation of Python environment version on the Odoo server. The phase produces a data readiness report and a fixed-price proposal for the remaining phases.
Phase 2: Data preparation - 1 to 3 weeks. The data preparation phase cleans and structures the training dataset: filtering out invalid records (null quantities, future-dated movements, cancelled transactions); resolving product category mapping inconsistencies; constructing the feature matrix (extracting rolling averages from stock.move, demand history from sale.order.line, lead time calculations from purchase.order.line); and splitting the dataset into training, validation and test sets using a time-series-aware split. For datasets with significant quality issues, this phase takes the full three weeks.
Phase 3: Model development and training - 2 to 3 weeks. Feature engineering validation, model selection and hyperparameter tuning using cross-validation, training the final gradient boosting model on the full training set, and validation against the held-out test set. The validation output shows predicted versus actual demand on data the model has not seen during training. A model achieving 85-92 per cent accuracy on the validation set is ready for production; models below this threshold require data pipeline review before deployment.
Phase 4: Odoo module development - 2 to 3 weeks. The trained model is wrapped in a custom Odoo Python module using the Odoo inheritance system. The module schedules model inference via the nightly ir.cron job (executes at 2am, retrains on the latest 30 days, updates reorder rules where forecast differs by more than 15 per cent), writes prediction outputs to Odoo fields, adds UI elements to the relevant Odoo views, and registers automated actions triggered by prediction thresholds. The module is developed against the business's specific Odoo version and tested in a staging environment before production deployment.
Phase 5: Deployment and calibration - 2 weeks. Deployment to the production Odoo instance, staff training (typically a 90-minute session for the purchasing team or sales team), and the eight-week calibration monitoring period begins. During calibration, Softomate monitors prediction quality against actual outcomes: actual stock movements versus forecasted demand; actual lead conversion versus predicted score. The system is live and functional from deployment day one; the calibration period refines the model further based on real production data.
Timeline summary.
Softomate's standard implementation methodology includes a project plan with weekly milestones and a Slack channel for project communication. Fixed-price engagements eliminate cost escalation risk: if the model takes longer to train due to data complexity, that is absorbed within the quoted scope. For more detail on how Softomate structures Odoo AI and ML engagements, visit the Odoo AI integration London service page.
A minimum of 12 months of clean stock.move and sale.order.line history is recommended for demand forecasting, to capture at least one seasonal cycle. Gradient boosting models on 18 months of data achieve 85-92 per cent accuracy on stable product lines. Lead scoring requires a minimum of 300 labelled won or lost crm.lead opportunities, achievable from six months of active CRM use. Document classification of account.move vendor bills requires a minimum of 500 historical validated invoices for reliable results. Softomate's data assessment phase confirms your actual training set size before any model development begins.
Odoo machine learning development by Softomate works on both Odoo Community and Enterprise editions from Odoo 16 onwards. The ML modules are custom Python modules built using the Odoo inheritance system: they do not rely on any Enterprise-only features. The only requirement is Python 3.10 or higher on the server hosting Odoo, which is needed for scikit-learn 1.3+ and modern NLP libraries. Odoo 15 and below use Python 3.8, which limits the available ML libraries. Upgrade to Odoo 16 or 17 is recommended before beginning an ML engagement.
Softomate integrates an existing pre-trained model into Odoo if the business has one. The integration work wraps the existing model in an Odoo custom module and connects its inputs and outputs to the correct Odoo fields and events. For most UK SMEs, no pre-trained model exists and Softomate builds from the Odoo data directly, producing models specifically calibrated to that business's stock.move, sale.order.line and crm.lead patterns rather than a generic baseline.
Data quality issues are addressed during the data preparation phase before training begins. Missing fields are handled using imputation strategies appropriate to the feature: median imputation for continuous numerical features, mode imputation for categorical features, and forward-fill for time series gaps in stock.move. Records with critical missing values (null product ID, null transaction date) are excluded from the training set. Inconsistently entered fields, for example a company size field where some crm.lead records say "SME" and others say "Small", are standardised during data cleaning. The data assessment report documents all identified issues and the handling strategy before any model development begins.
New products added to Odoo after the model is trained have no stock.move or sale.order.line history and fall into the cold-start problem. Softomate handles this with a rule-based fallback that uses the average demand of similar products in the same category as the initial forecast for new SKUs, and a monthly retraining schedule (under the maintenance retainer) that incorporates accumulating data for new products as they build history. New market segments are handled similarly: the model is retrained periodically as new crm.lead data accumulates, progressively improving predictions for new additions.
Yes. ML prediction fields written to Odoo models (lead score on crm.lead, forecast quantity on product.product, classification result on account.move) are standard Odoo fields that can be used as conditions in Odoo's native Automated Actions. For example: when lead score exceeds 70, create a follow-up activity with a 24-hour deadline; when predicted demand for a SKU exceeds current stock by more than 1.5x, create a draft purchase order. These automations are configured using Odoo's standard Server Action and Automated Action interface: no additional custom development beyond the scoring module is required.
Softomate's ML module logs prediction outcomes to a custom ml.prediction.log model in Odoo, recording the prediction, the timestamp and the eventual actual outcome (actual demand from stock.move, actual lead conversion from crm.lead). Monthly model performance reports compare prediction accuracy against the previous month using MAPE for demand forecasting (target: 8-15 per cent) and Area Under the ROC Curve for lead scoring (target: above 0.75, matching the 78-85 per cent accuracy range). A model that is degrading triggers a retraining run outside the standard monthly schedule.
Odoo ML processing using on-premise model training and inference complies with UK GDPR data minimisation and storage limitation requirements: customer and commercial data used for training never leaves the business's own Odoo server. The processing activity is documented in the business's GDPR processing register as automated decision support (not fully automated decision-making, since ML predictions from crm.lead scoring and account.move classification feed into human-reviewed workflows rather than making binding decisions). For businesses in regulated sectors, Softomate documents the specific lawful basis for ML processing and the safeguards in place. Cloud model hosting options involve data transfer to UK or EU cloud regions with appropriate Data Processing Agreements in place.
Odoo machine learning transforms Odoo ERP from a reporting system into a predictive operational tool. Gradient boosting models trained on stock.move and sale.order.line history achieve 85-92 per cent demand forecasting accuracy on stable product lines, reducing stockout events by 30-40 per cent within eight weeks of model calibration. Lead scoring models trained on six months of crm.lead won/lost data achieve 78-85 per cent accuracy in predicting deal outcome, improving sales conversion by 15-25 per cent within one quarter. Document classification on a well-tagged dataset of 1,000+ account.move vendor bills achieves 93-97 per cent accuracy on vendor category, expense type, VAT treatment and cost centre. Implementations start from £6,000 for a single ML module and take 8-12 weeks including data preparation, model training, Odoo integration and calibration, with Odoo 16 or higher as the platform prerequisite.
Softomate Solutions builds ML modules directly inside Odoo using native inheritance architecture, producing predictions that appear in the standard Odoo interface and trigger existing Odoo automated actions. Contact the Softomate team for a data readiness assessment and fixed-price ML implementation proposal.
Sources:
Written by Deen Dayal Yadav. Deen Dayal Yadav is the founder of Softomate Solutions, a London AI automation agency in Stanmore. He has delivered over 200 AI automation and Odoo integration projects for UK businesses.
Let us help
Talk to our London-based team about how we can build the AI software, automation, or bespoke development tailored to your needs.
Deen Dayal Yadav
Online