Cost guide: general contractors

How much does Odoo implementation cost for a general contractor?

It depends on company structure, workflows, data, integrations and construction-specific gaps, not on a price per user. As an illustration, NGYN's planning model for a multi-company general contractor foundation is about 600 hours, or CAD 66,000 at CAD 110 per hour, before tax. That example covers discovery through go-live for three to five related entities and about 25 internal users. It excludes Odoo subscription, hosting, optional construction extensions and post-launch support. It is an example, not a quote. The assumptions are set out below.

On this page

The short answer, with its assumptions

There are three labels in this guide. Official Odoo means a function or price published by Odoo. NGYN estimate means our planning figure. Observation means something we have seen in contractor implementations, described without identifying anyone.

ItemValueType
Example scopeMulti-company general contractor foundationNGYN estimate
Company profileThree to five related legal entities, about 25 internal users, a larger field workforceFictional composite
Implementation effortAbout 600 hoursNGYN estimate, illustrative
RateCAD 110 per hourNGYN fee table
Implementation feeAbout CAD 66,000, before tax600 x 110
IncludedDiscovery, design, data preparation, configuration, pilot, small customization and integration, training, cutover, go-live supportSee phases below
ExcludedOdoo subscription, payroll and field-app subscriptions (Wagepoint, SiteConnect), hosting, tax, optional construction extensions, post-launch support planListed separately below
DateOctober 2026Review date

A single-entity contractor on standard applications is smaller than this. A contractor that needs several construction extensions is larger. Most of this guide helps you place yourself between those points.

Three scope levels

Find your company in one of these before looking at numbers.

LevelWho it describesWhat it is
1. Standard Odoo foundationOne legal entity, standard processes, limited historyConfiguration of standard applications. No construction-specific development
2. Multi-company contractor foundationSeveral related entities sharing vendors, staff or sitesLevel 1 plus company structure, security, inter-company flows and group reporting
3. Construction extensionsEither of the above with specific industry requirementsSelected additions such as holdback, change orders, payroll connection or WIP reporting

Level 3 is not a bigger version of the same project. It is a list of optional items, each decided separately.

What an implementation estimate includes

An estimate is a count of hours across defined work. If a proposal does not show these, ask where they are.

  • Discovery and process mapping. Entities, roles, approval authority, current systems and how work actually moves.
  • Solution design. A fit-gap decision for every requirement, plus company structure, security and integration boundaries.
  • Configuration. Setting up the approved standard applications.
  • Data preparation and migration. Templates, cleanup rules, mapping, sample imports and reconciliation.
  • Integration and development. Only approved gaps, each with acceptance criteria.
  • Testing and user acceptance. Role-based scenarios run by your people.
  • Training. By role, on your data.
  • Cutover and post-launch support. Final migration, reconciliation and a period of close support.

Project management, quality assurance and documentation run through all of them.

The contractor profile used in the examples

The examples use a fictional composite. It is not a client, and no combination of its details describes one.

  • A general contractor group with one to five related legal entities.
  • 10 to 40 internal Odoo users in estimating, project management, purchasing, stores, finance and administration.
  • A larger field workforce that records time, expenses and site safety records. The worked examples use 30 field workers for the single-entity contractor and 60 for the group.
  • Scope: estimating and quotations, projects, purchasing, inventory, expenses, accounting and reporting.
  • Some historical data to bring across, mainly open projects, balances and master records.

What Odoo 19 handles with standard functions

Much of what a contractor needs exists in Odoo 19 without development. Standard does not mean free of effort. Each item still has to be configured, loaded with your data, tested and taught.

NeedOdoo 19 standard functionConfiguration work involved
Leads, bids and quotationsCRM and Sales, with quotation templatesStages, templates, approval rules, document layout
Projects and tasksProject, with tasks, stages and milestonesProject templates, stages, responsibilities
Budgets and profitabilityAnalytic accounts and plans, analytic budgets, project profitabilityCost structure, budget entry, report layout
Time and expensesTimesheets and ExpensesEmployee cost, approval flow, expense categories
PurchasingPurchase orders, receipts and vendor bills with analytic distributionApproval thresholds, vendor data, project allocation
MaterialsInventory, with warehouses, locations and transfersYard and site locations, units, replenishment
BillingDown payments and milestone invoicingProducts set to invoice on milestones, milestone definitions
Several companiesMulti-company, with shared and company-specific records and inter-company transactionsCompany setup, access by company, inter-company rules
Service callsField Service tasks, where suitableTask types, worksheets, scheduling

Three points from Odoo's documentation are worth knowing early.

  • Analytic accounting is how Odoo tracks cost and revenue by project. Analytic plans group analytic accounts, and analytic distribution splits a line across them. Cost codes are usually built on this.
  • Milestone invoicing bills a percentage of the order when a milestone is marked reached. It is standard, and it is not the same as certified progress billing with holdback.
  • Multi-company shares products and contacts by default and keeps documents such as invoices and bills company-specific. Odoo's documentation states that enabling multi-company on a Standard plan triggers a move to the Custom plan.

For how these applications fit together in a contracting business, see Odoo for construction companies.

How the estimate is governed: phases

We quote and govern a project by phase. Each phase ends with a gate, which is a written approval before the next phase starts. This matters for cost because it lets you approve the standard foundation first and decide on optional gaps after you have seen the system run.

  1. Discovery and current-state mappingConfirm entities, roles and approval authority. Map estimate, project, procurement, materials, field time, expenses, billing and reporting. Gate: approve the problems, objectives and assumptions.
  2. Fit-gap analysis and solution blueprintDemonstrate standard flows. Classify every requirement as standard, configuration, integration, development or process change. Gate: approve the standard foundation and defer optional gaps where possible.
  3. Master-data cleanup and migration preparationTemplates, cleanup rules, mapping, sample imports and reconciliation. Gate: approve representative sample data.
  4. Standard configuration and foundation buildCompanies, users, access, taxes, analytic plans, workflows and standard reports. Gate: approve the environment for pilot.
  5. Pilot and gap confirmationRun estimate to project, purchase to bill, field time to cost, billing and reporting with real scenarios. Gate: approve the exact change set.
  6. Small customization and integrationBuild only the approved gaps, with tests, error handling and documentation. Gate: approve the release candidate.
  7. UAT, training and cutover preparationRole-based acceptance testing, training, migration rehearsal and a go or no-go pack. Gate: formal go or no-go.
  8. Go-live and hypercareFinal migration, reconciliation and close support until agreed stability criteria are met.

A cost rule on data. If your team does the cleanup, partner hours fall. The estimate still has to include mapping, validation, sample import, error correction and reconciliation. Those do not disappear.

Scenario A: standard implementation

Profile: one legal entity, 10 to 20 internal users, standard applications and processes, limited historical data, no construction-specific custom modules.

What is in scope: CRM and quotations, projects with budgets and profitability, timesheets and expenses, purchasing, inventory, accounting, and standard reports.

Why it is smaller than the 600-hour example: there is no company structure to design, no inter-company flow, simpler security, fewer integrations and one set of books to reconcile.

How to calculate it:

LineFormulaNote
Implementation feeApproved hours x CAD 110Hours are set after discovery and fit-gap. NGYN has not published a fixed figure for this scenario
Odoo subscriptionInternal users x plan price x 12Standard plan, if no Studio, multi-company or external API is needed
HostingIncluded with Odoo OnlineOfficial Odoo
Support after launchPlan hours x plan priceOptional. See the fee table

Two published reference points bracket this scenario. NGYN's general Odoo ERP pricing guide uses about 300 to 360 hours for a 10-user company with three core applications. The multi-company contractor example below uses about 600 hours. A single-entity contractor uses more applications than the first and has less structure than the second. Where you fall between them is what discovery establishes.

Exclusions: tax, Odoo subscription, third-party software, hardware, travel, and anything classified as a construction extension.

Scenario B: multi-company general contractor

Profile: three to five legal entities or divisions, about 25 internal users, shared vendors, employees and materials where appropriate, separate books and access controls, inter-company flows, and group reporting.

The project remains configuration-first. The scope grows for reasons that have nothing to do with custom code:

  • Each entity needs its own chart of accounts, taxes, sequences and opening balances.
  • Access must be designed by company, so people see only what they should.
  • Shared records need an owner, and company-specific ones need rules.
  • Inter-company transactions have to be defined and tested in both directions.
  • Reports are needed per company and for the group.
  • More roles means more testing and more training.

The 600-hour example, viewed by module

Module work packageHoursCAD at 110 per hour
Platform, multi-company, users, security and access10011,000
CRM, Sales, estimating and quotation handoff707,700
Project, job costing, budgets, timesheets and profitability10011,000
Purchase, subcontractor procurement and approvals606,600
Inventory, warehouses, site materials and receipts707,700
Accounting, analytic accounting, billing and reporting10011,000
Expenses, Documents, field workflows and integrations808,800
Project management, QA and documentation202,200
Total60066,000

The same 600 hours, viewed by phase

PhaseHoursCAD at 110 per hour
Discovery and current-state mapping404,400
Fit-gap analysis and solution blueprint707,700
Master-data cleanup and migration preparation727,920
Standard configuration and foundation build13014,300
Pilot, UAT scenarios and remediation10011,000
Small customization and integration9210,120
Training, cutover preparation and launch readiness424,620
Go-live support and hypercare343,740
Project management, QA and documentation202,200
Total60066,000

Do not add the two tables together. They are two views of the same 600 hours. One shows what the work is about. The other shows when it happens and where the approval gates are.

This example is fictional and illustrative. Not every contractor needs every module or every phase at this size. A real estimate follows discovery and fit-gap work.

Odoo 19 construction fit-gap

This is where a contractor's estimate usually moves. Each row is a requirement that standard Odoo covers in part. Do not assume you need all ten. Most contractors need a few.

We have deliberately not published hours for these. Each one is sized as a change set after fit-gap or pilot, because the effort depends on rules that differ from one contractor to the next.

RequirementOdoo 19 starting pointLikely treatmentPreliminary hoursWhy cost varies
Cost codes and cost typesAnalytic plans, accounts and distributionConfigurationSized at fit-gapDepth of the code structure and how many documents must carry it
Estimating and takeoffQuotations and templates. No quantity takeoffKeep an estimating tool and import or integrateSized at fit-gapEstimate detail, tool used, how often estimates change
Change ordersSales order changes and additional ordersConfiguration, or small development for a formal workflowSized after pilotApproval steps, effect on budget and contract value
Progress billing and holdbackDown payments and milestone invoicingDevelopment for holdback and certified progress claimsSized after pilotBilling rules, release conditions, required forms
Subcontract commitments and compliancePurchase orders and vendor recordsConfiguration plus a commitment report and expiry remindersSized at fit-gapNumber of document types, how commitments are reported
WIP and percent-complete reportingProject profitability and analytic reportsCustom reportSized after pilotRevenue recognition method and the accountant's required schedule
Field time and crew entryTimesheets and Field ServiceSiteConnect for field clock-in and timesheets, integrated with OdooSized at fit-gapCrew size, devices, approval steps, cost-code mapping
Canadian payrollNo Canadian payroll localization is listed in Odoo 19's documentationWagepoint for payroll, with approved hours sent from Odoo by export or integrationSized at fit-gapPay rules, union or premium rates, number of companies
Equipment costMaintenance for equipment recordsConfiguration or small development for internal charge ratesSized after pilotWhether equipment time is charged to projects, and how
Site safety records and formsDocuments, tasks and worksheetsSiteConnect for HSE records that support COR: safety checklists, toolbox talks, daily site reports, photosSized at fit-gapNumber of forms, signatures, photos, what the COR audit requires

Two cautions. A small customization is still custom work: it has to be tested, documented and carried through upgrades. And an integration needs an owner, monitoring and error handling for as long as it runs. Our Odoo and n8n integration guide lists what that involves.

How a gap is approved

After fit-gap or pilot, each new gap is presented as a change set with:

  • The business problem.
  • What Odoo 19 does today.
  • The proposed treatment: configuration, integration, module, development or process change.
  • Estimated hours and cost.
  • Acceptance criteria.
  • Data and security impact.
  • Upgrade and support impact.
  • Effect on schedule.
  • Written approval status.

Nothing in level 3 is built without that approval. This is the main protection against a budget that grows quietly.

The stack we recommend for a Canadian contractor

Odoo does not have to do everything. For a Canadian general contractor, two jobs are better handled by dedicated tools connected to Odoo.

SystemWhat it doesWhy not Odoo alonePrice used in this guide
OdooSystem of record for estimates, projects, purchasing, inventory, job cost and financeIt is the coreOdoo plan price per internal user
WagepointCanadian payroll: pay runs, deductions, remittances and year-end slipsOdoo 19's documentation lists no Canadian payroll localizationAbout CAD 2 per employee per month
SiteConnectField clock-in and timesheets, plus health, safety and environment (HSE) recordsCrews need a simple mobile tool, and field staff in Odoo count as paying usersCAD 7 per field worker per month

How the three connect. Odoo owns employees, projects and cost codes. SiteConnect captures who worked, where and on what, with supervisor approval. Approved hours post to the right project and cost code in Odoo for job costing, and go to Wagepoint for payroll. Each record has one owner, which is what keeps the three consistent.

Why SiteConnect matters for COR. The Certificate of Recognition (COR) is a health and safety audit program that many Canadian owners and general contractors expect. An audit needs evidence: completed safety checklists, toolbox talks, daily site reports and photos, dated and attributable. SiteConnect is NGYN's field app for collecting those records where the work happens, alongside the timesheet. It supports the evidence a COR audit asks for. It does not replace your safety program or guarantee certification.

The formulas:

  • Wagepoint = all paid employees x CAD 2 x 12.
  • SiteConnect = field workers x CAD 7 x 12.

These are planning prices in Canadian dollars as of October 2026, before tax. Confirm Wagepoint's current plan with Wagepoint. SiteConnect is an NGYN product and its pricing may change.

Software cost: internal users and field users

Software is a separate line from implementation. Odoo sets the price.

Official Odoo prices, per user per month, yearly billing: Standard CAD 35.20* (regular CAD 44.00). Custom CAD 57.90* (regular CAD 73.00). Odoo also lists a light user at CAD 12.90, quoted through an Odoo advisor.

* Price reference as of 3 October 2026, from odoo.com/pricing, in Canadian dollars. The lower price is Odoo's discount, valid for 12 months for initial users ordered. Odoo.sh hosting is not included.

The formula: internal users x plan price x 12, plus any light users x light-user price x 12.

For a contractor, the important question is who counts as a user. Odoo's pricing page gives "an employee who reports their expenses or timesheet" as an example of a paying user, and describes the light-user category as covering functions such as time off, expenses, attendances and field services. Customers and suppliers using the portal are not paying users.

That makes the field workforce a real cost decision. There are two legitimate designs.

DesignSoftware costOther cost
Field staff use Odoo directlyFull or light users for field staff. At the listed light-user price, 60 field workers x CAD 12.90 x 12 is CAD 9,288 a year. Confirm the category with OdooLess integration. Crews use the ERP's interface. No HSE record capture as standard
Field staff use SiteConnectOdoo users for office staff only. 60 field workers x CAD 7 x 12 is CAD 5,040 a yearAn integration to set up, monitor and support. Timesheets and HSE records in one app

For most contractors we work with, the second design is the one we recommend: it costs less per field worker and it collects the safety records as well as the hours. Count your field staff and compare both over three years.

Community versus Enterprise for a general contractor

Odoo Community and Odoo Enterprise are separate editions. They cannot be mixed within one database. A database is one or the other.

CostCommunityEnterprise
LicenceNo licence fee. Open sourceSubscription per user
HostingYou arrange and pay for itIncluded on Odoo Online. Odoo.sh or self-hosting cost extra
Backups, monitoring, security patchingYour responsibility, or your partner's, at costHandled by Odoo on Odoo Online
UpgradesA project each time, partner-ledOfficial upgrade path
SupportYour partner or the communityOdoo support included, plus your partner
Enterprise-only applicationsReplaced by other modules, development or doing withoutIncluded

For a contractor, the applications that matter in this decision include full accounting features, Studio, Field Service, Documents and multi-company consolidation. If you need them on Community, each becomes a replacement decision with its own cost. Our Odoo Community vs Enterprise guide covers the editions in general.

The separate-system option

Some groups run high-headcount, simple work on a Community database and finance on an Enterprise database, connected by an integration. That is legitimate, and it is two databases, not one mixed database. Its cost is the connector: design, build, monitoring and maintenance, plus the risk of two systems of record.

The payback formula

Use your own numbers. Do not accept a comparison that only shows the licence line.

  • Annual Enterprise cost = users x plan price x 12.
  • Annual Community ownership cost = hosting + backups and monitoring + security patching + upgrade effort averaged per year + support.
  • Annual difference = annual Enterprise cost minus annual Community ownership cost.
  • Extra one-time Community cost = hours to replace Enterprise-only functions x rate.
  • Payback in years = extra one-time Community cost divided by the annual difference.

If the annual difference is small or negative, Community does not pay back. If it is large, check that the replaced functions will survive the next upgrade before relying on the saving.

Worked total-cost scenarios

All figures are in Canadian dollars and exclude tax. Software lines use Odoo's prices as referenced on 3 October 2026. Year 1 uses the discounted price and Year 2 onward uses the regular price. Support lines use NGYN's fee table plans, 26 bi-weekly periods a year. Payroll and field-app lines use about CAD 2 per employee per month for Wagepoint and CAD 7 per field worker per month for SiteConnect.

Enterprise, standard contractor

Assumptions: one entity, 15 internal users and 30 field workers (45 employees), Standard plan, Odoo Online, no extensions.

LineYear 1Year 2 and after
ImplementationApproved hours x CAD 110None
Odoo subscription, 15 usersCAD 6,336CAD 7,920 a year
Wagepoint payroll, 45 employeesCAD 1,080CAD 1,080 a year
SiteConnect, 30 field workersCAD 2,520CAD 2,520 a year
HostingIncludedIncluded
Support plan, optionalNot includedCAD 11,960 a year on the 5-hour bi-weekly plan
TotalCAD 9,936 plus implementationCAD 11,520 to 23,480 a year

Enterprise, multi-company contractor with selected extensions

Assumptions: three to five entities, 25 internal users and 60 field workers (85 employees), Custom plan because multi-company is required, Odoo Online, the 600-hour foundation, extensions approved as change sets.

LineYear 1Year 2 and after
Implementation, foundationCAD 66,000None
Construction extensionsApproved change sets x CAD 110Maintenance of custom work at upgrades
Odoo subscription, 25 usersCAD 17,370CAD 21,900 a year
Wagepoint payroll, 85 employeesCAD 2,040CAD 2,040 a year
SiteConnect, 60 field workersCAD 5,040CAD 5,040 a year
HostingIncluded on Odoo OnlineIncluded
Support plan, optionalNot includedCAD 11,960 to 21,970 a year on the 5-hour or 10-hour bi-weekly plan
TotalCAD 90,450 plus extensionsCAD 28,980 to 50,950 a year

Community deployment with equivalent ownership costs

Assumptions: the same contractor, Community edition, self-managed hosting. NGYN has not published standard figures for these lines, so they are shown as formulas to complete with your quotes.

LineYear 1Year 2 and after
Implementation, foundationApproved hours x CAD 110None
Replacing Enterprise-only functionsReplacement hours x CAD 110Maintenance at each upgrade
LicenceCAD 0CAD 0
HostingMonthly hosting x 12Monthly hosting x 12
Backups, monitoring, security patchingMonthly hours x CAD 110 x 12Same
UpgradesNone in Year 1Upgrade hours x CAD 110, averaged per year
SupportPlan hours x plan pricePlan hours x plan price
TotalSum of the aboveSum of the above

Compare the three on the same assumptions and over at least three years. A lower Year 1 does not mean a lower total.

What makes the estimate move up or down

DriverMoves the estimate upMoves it down
EntitiesEach additional company, and inter-company flowsOne entity
Internal usersMore roles to configure, test and trainFewer roles
Field experienceCrew entry, kiosks, offline use, a field app to integrateSupervisors enter time directly
Data quality and historyDuplicates, many open projects, years of historyClean masters, opening balances only
PayrollIntegration with a provider, complex pay rulesSimple export
IntegrationsEach system connectedFewer retained systems
Reporting and formsCustom reports, client-specific formsStandard reports
Change orders and billing rulesHoldback, certified progress claims, complex approvalsMilestone or time-and-materials billing
Training and rolloutMany sites, all companies at onceOne division first
Custom code and upgradesEach custom item adds upgrade workStandard and configuration only

In our contractor work, the two that surprise people are data and field adoption. Neither is software. Both decide whether the schedule holds. The construction ERP case study describes how one group handled them.

Questions to ask before accepting a quote

  • Which requirements are standard, configured, integrated and developed?
  • Which data is included, and how far back?
  • Who owns data cleanup, and who signs off on it?
  • Who runs testing, and who approves the results?
  • Are training and cutover included?
  • How are custom modules maintained during upgrades, and at what cost?
  • Which recurring costs are excluded?
  • What happens, in writing, when scope changes?
  • Who will we work with after the proposal is signed?
  • What support is included after go-live, and how are requests prioritized?

On the last point, NGYN's Service Level Agreement shows how we classify and respond to requests. If you are deciding how much to do in-house, when you need an Odoo consultant explains which applications are safe to configure yourself. Multi-company, accounting and inventory are not among them.

Frequently asked questions

Is there a typical Odoo implementation cost for a construction company?

There is no single figure. NGYN's illustrative model for a multi-company general contractor foundation is about 600 hours, or CAD 66,000 at CAD 110 per hour before tax, excluding software and extensions. A single-entity contractor is smaller. Extensions add to either.

Why is a contractor implementation more than a general small-business one?

Because of what is in scope. Job costing touches purchasing, time, expenses and accounting at once. Several legal entities add structure, security and reporting. Field labour adds capture and approval. None of that is price per user.

Does Odoo 19 handle holdback and progress billing?

Odoo 19 provides down payments and milestone invoicing as standard. Holdback, also called retainage, and certified progress claims are not covered by those functions and are treated as a development gap, sized after pilot.

Can Odoo run Canadian payroll for a contractor?

Odoo 19's documentation does not list a Canadian payroll localization. We recommend Wagepoint for Canadian payroll, at about CAD 2 per employee per month, with approved hours sent from Odoo by export or integration.

Do field workers need Odoo licences?

Odoo's pricing page treats an employee who reports timesheets or expenses as a paying user, and lists a light-user category at CAD 12.90. With SiteConnect, field workers record time and safety records in the app at CAD 7 per field worker per month, and only office staff need Odoo users.

How do we collect safety records for COR?

Through SiteConnect, NGYN's field app. Crews complete safety checklists, toolbox talks, daily site reports and photos on site, next to their timesheets. That gives you dated, attributable records for a COR audit. It supports the audit evidence. It does not replace your safety program.

Is Community cheaper for a contractor?

Only if the full ownership cost is lower. Community has no licence fee, but hosting, security, upgrades and replacing Enterprise-only functions are yours to fund. Use the payback formula above with real quotes.

Can we run Community for field staff and Enterprise for finance?

Not in one database. The two editions are separate. Two connected databases are possible, with the cost and risk of the integration between them.

How accurate is an estimate before discovery?

It is a planning range. It becomes an estimate you can hold someone to after discovery and fit-gap, when requirements are classified and assumptions are written down.

Next step

Bring your company count, user roles, workflows, data sources, integrations and required reports to a free 30-minute ERP fit call. We will place you in a scope level, tell you which extensions you are likely to need, and outline what a scoped estimate would cover. For how automation fits once the foundation is live, see the Odoo automation and practical AI hub.

Sources and review

  • NGYN's fee table for the hourly rate and support plans. NGYN's cost model for the phase and module allocation. The 600-hour example is fictional and illustrative.
  • Odoo pricing, Odoo S.A., for plan prices, the paying-user definition and the light-user category. Price reference as of 3 October 2026, in Canadian dollars.
  • Odoo 19 multi-company documentation, for shared records, inter-company transactions and the plan note.
  • Odoo 19 analytic accounting and milestone invoicing documentation.
  • Odoo 19 payroll localizations, which does not list Canada. Checked 3 October 2026.
  • Wagepoint and SiteConnect prices are NGYN planning figures as of October 2026. SiteConnect is an NGYN product described on the fee table. Confirm Wagepoint's current pricing with Wagepoint.
  • NGYN's published construction ERP case study for implementation observations. The contractor profile in this guide is a fictional composite and does not describe any client.

Published October 2026. Last reviewed October 2026 by NGYN Solutions Inc.. Product capabilities change between Odoo versions, so confirm version-specific details against the linked documentation before relying on them.

Want a number for your company?

Bring your structure. Leave with a scoped estimate.

Bring your company count, user roles, workflows, data sources, integrations and the reports you need. We will tell you which scope level you are in and what a first phase would cost.

Book a free 30-minute ERP fit call