Who we are

About IT Horizon

A boutique technology house engineering enterprise systems with the precision of a luxury maison.

Our story
Odoo Partner

Comprehensive Odoo

End-to-end Odoo 20 Enterprise, implemented, customized, integrated and supported by our own senior team.

Become a client
Odoo apps

Every app, configured for the Gulf

Finance, sales, supply chain, HR, marketing and services apps implemented with the local tax, payroll and language rules each country needs.

All Odoo apps
What we do

Beyond ERP

Strategy, product engineering and customer-experience work that turns systems into advantage.

Talk to us
Sectors

Industry depth

Domain fluency across the sectors that define the GCC economy, and the regulations behind them.

Discuss your sector
Learn · grow · succeed

Insights

Real-world ideas, case studies and sessions to help your business work smarter with Odoo.

Browse the blog
Contact usالعربيةBook a consultation
Home/Blog/Odoo in Kuwait · Guide
Odoo in Kuwait · Guide · 8 min read

Odoo for contracting and construction companies in Kuwait

Odoo covers most of what a contracting company in Kuwait needs with standard apps: projects with budgets, subcontractor orders, progress billing, materials to site, equipment and labour cost. Retention and work in progress need configuration or a small custom module. This guide maps each need to the Odoo app that handles it and says which parts are standard.

Odoo can run a contracting company in Kuwait with standard apps for most of the work: Project for the jobs, Purchase for suppliers and subcontractors, Inventory for materials going to site, Fleet and Maintenance for vehicles and equipment, Timesheets for labour cost, and Accounting for the books and the project budgets. Two things are not standard: retention on progress claims, and moving project cost into a work-in-progress account. Both are handled with configuration or a small custom module. The rest is setting the apps up around how you price, buy and bill a job.

Projects, budgets and cost control

Each project in Odoo carries an analytic account, and every cost and revenue linked to the project lands on it: supplier and subcontractor bills, timesheets, materials sent to site, expenses and customer invoices. The project’s profitability panel shows revenue against cost by type, from the same entries finance posts, so the site and the accounts read the same numbers.

The budget sits in Accounting as an analytic budget, by project and, if you split the analytic plans that way, by cost type: materials, subcontract, labour, equipment. Once the budget is open, each line shows the budgeted amount, the achieved amount from posted entries, and the committed amount, which adds confirmed purchase orders not yet billed. When a buyer enters a purchase order that would take a project over its budget, Odoo highlights the line in red. Budgets need Enterprise, because they are part of the Accounting app.

Subcontractors

A subcontract is a purchase order to the subcontractor, with the scope as service lines and the order linked to the project. Set those services to bill on received quantities: the site engineer records the work done against each line, and the subcontractor’s bill is matched to what was recorded. Every purchase order and bill appears on the project, and its cost lands on the project’s analytic account.

Purchase can require a second approval for orders above an amount you set. Approval chains that depend on the project, the cost type or the budget left need configuration or a module.

Billing the client: progress claims, advances and retention

Enter the contract as a sales order linked to the project, with the bill of quantities as order lines grouped in sections. Each line is invoiced in one of two ways. By milestone: each milestone in the project carries a percentage of the line, and when the engineer marks it reached, that share can be invoiced. By measured quantity: the quantity done is entered on the order line, and each claim invoices what was added since the last one.

An advance payment is a down payment invoice, as a percentage or a fixed amount, deducted on later invoices. Odoo deducts it on the next regular invoice. If your contracts recover the advance as a share of each claim, the accountant adjusts the deduction on each draft invoice, or a small module calculates it.

Retention is not a standard field in Odoo, and there are two ways to handle it. The light one is a payment term that splits each invoice into installments, with the retained share due at the end of the defects liability period. The fuller one is a small custom module that posts retention to its own receivable and payable accounts, shows it on the claim, and releases it at handover. The same choice applies to retention you hold back from subcontractors.

Materials, equipment and labour

Materials to site. Since Odoo 18, a delivery from your store can be linked to a project. With analytic costs switched on for that operation type, validating the delivery posts the material cost to the project. Materials bought straight to site go on purchase orders linked to the project, so their bills land there too.

Vehicles and equipment. Fleet keeps each vehicle’s contracts, services, repairs and odometer readings, with a cost report by vehicle or driver. Maintenance tracks equipment such as generators, mixers and scaffolding, with preventive and corrective maintenance requests. Charging an excavator’s hours to the project it worked on is not standard: it needs a small module, or a monthly allocation entry to each project’s analytic account.

Labour. Timesheets record hours against the project and its tasks, and Odoo values them at each employee’s hourly cost on the project’s analytic account. Site workers do not need their own login: a foreman or site engineer with the right access enters and validates the crew’s hours. Set the hourly cost to include more than salary, such as housing, transport and residency fees, or the project margin will look better than it is.

Work in progress in the accounts

Standard Odoo posts project costs to expense accounts and tags them with the project’s analytic account. Contractors often also need the balance sheet to show work in progress: cost incurred on jobs not yet billed, or revenue recognized by stage of completion. Odoo does not ship a construction work-in-progress entry. It is done either with a month-end journal entry per project, prepared from the project’s analytic balance, or with a custom module that calculates and posts it. Agree the method with your auditor before go-live, because it decides how the project reports are built.

Which Odoo apps, and what needs a custom module

NeedOdoo appStandard or custom
Project budgets and cost controlProject, AccountingStandard (budgets need Enterprise)
Subcontractor orders and billsPurchase, ProjectStandard
Progress claims to the clientSales, Project milestonesStandard
Advance paymentSales down paymentsStandard; recovery per claim is a manual step or a small module
RetentionAccounting payment termsConfiguration, or a custom module
Materials to siteInventory, ProjectStandard from Odoo 18
Vehicles and equipmentFleet, MaintenanceStandard; equipment cost per project is custom
Labour costTimesheets, Employees, PayrollStandard; Kuwaiti payroll rules are configured
Work in progressAccountingMonth-end entries or a custom module
Progress claim document in ArabicAccountingCustom report

Project, Purchase, Inventory, Fleet, Maintenance and Timesheets are in both editions of Odoo. The Accounting app with its budgets, and Payroll, are in Enterprise; Odoo Enterprise or Community explains the difference. Since Odoo 18, Odoo also publishes a General Contractor industry package for Enterprise, with construction products, quotation templates, project stages and document folders. It shortens the setup, but it adds no retention accounting, work-in-progress entries or progress claim report.

What is different in Kuwait

If your contracts, claims and invoices go out in Arabic, or in Arabic and English, Odoo’s GCC invoice module prints Arabic beside English on invoices and vendor bills. A progress claim showing the contract value, work done to date, previous claims, this claim, retention and advance recovery is a custom report, which we build in both languages. Amounts are in Kuwaiti dinars with three decimals, and there is no VAT line, since Kuwait has no VAT as of October 2026. If the group also works in Saudi Arabia or the UAE, those companies need VAT set up, and Saudi invoices need ZATCA e-invoicing.

Labour is the other Kuwaiti part. Odoo’s payroll localizations do not include Kuwait, so the rules are configured on the Payroll app: salary structures with allowances, PIFSS for Kuwaiti employees, end-of-service indemnity under the private-sector labour law, leave settlement, and the salary transfer file for your bank. Timesheets and payroll then work from the same employee records.

How IT Horizon sets it up

We start with workshops on how you price, buy, build and bill a job. From those we write a fixed scope: which apps, how budgets and claims are structured, what is standard and which modules are custom. We test on a copy of your data, from purchase order to progress claim, before cut-over, and stay close in the first weeks after go-live. Our ITH Suite already covers multi-level approvals and Kuwaiti payroll provisions on Odoo 20. How a rollout runs is on our implementation page, and the app itself on our Odoo Project page.

What to do next

  1. Pick one recent project and list its budget lines, subcontracts, claims and retention as they happened.
  2. Mark which needs in the table above you have, and how you handle each one today.
  3. Book a consultation and bring both. A consultant will tell you what Odoo covers as standard and what would be built.
FAQ

Common questions

Not as a separate app. Since Odoo 18 there is a General Contractor industry package for Enterprise, which sets up CRM, Sales, Purchase, Project, Planning, Timesheets and Documents with construction products and quotation templates. Retention, work in progress and the progress claim report still need configuration or custom modules.

Not as a standard field. It is set up either with payment terms that hold back the retained share until the end of the defects liability period, or with a small custom module that posts retention to its own accounts and releases it at handover.

The subcontract is a purchase order linked to the project and billed on received quantities. The site engineer records the work done on each line, and the subcontractor’s bill is matched to it.

Yes. With analytic budgets in the Odoo Enterprise Accounting app, each project line shows budgeted, committed and achieved amounts, and purchase orders that would exceed an open budget are highlighted in red.

No. Workers need an employee record, not a user login. A foreman or site engineer with the right access enters and validates the crew’s hours.

Need help with your Odoo project?

Tell us what you are working on. A senior consultant will reply with how we would approach it.

Phone
+965 5015 3388
WhatsApp
Message us
Email
[email protected]
Office
Salem Al Mubarak Street, Salmiya, Kuwait
Hours
Sunday to Thursday, 8:00 to 19:00