Way4Tech
๐Ÿ’ผ

Odoo for Professional Services

Time, billing, retainers, CAPEX.

Consulting, legal, engineering firms: time tracking, retainers, milestone billing, resource utilization, and CAPEX projects.

A services firm carries its stock as hours. The work happens in week one, is recorded in week three if somebody chases, invoiced at month end and paid sixty days later. Odoo suits that shape because one record does three jobs: a timesheet line is the proof of delivery, the cost against the job, and the source of the invoice line. Set it up badly and it does none of the three.

There is no professional services app to install. The build is Sales, Project, Timesheets and Invoicing wired together, and the service product carries the commercial decision. One field on it, the invoicing policy, decides whether an engagement bills on signature, in arrears against recorded time, or only once a stage has been signed off. It is set on the product rather than on the order, so the commercial models a firm can sell are fixed when somebody builds the catalogue, months before the deal that needs a fourth one.

Community carries the whole billing spine: Project, Timesheets, all four service invoicing policies, Expenses, Purchase, analytic plans with distribution models and free portal access for clients. The edition question is usually settled by headcount and by which country's e-invoicing you have to clear, not by the billing model. Neither edition ships a utilisation report. The recorded hours are there, the capacity is not, so that report is a build on every services project.

Who this fits

  • → Consultancies and advisory firms billing time against a rate card, where hours recorded, hours billed and cash collected are three different numbers.
  • → Engineering, architecture and design practices working to a lump sum agreed months earlier and released in signed-off stages.
  • → Agencies and IT services companies running retainers, fixed-price builds and time and materials work on the same client account at once.
  • → Firms of roughly ten to three hundred fee earners, where a spreadsheet has stopped answering who is busy next month and which jobs lose money.
  • → Not for a solo consultant with four clients, where Invoicing on its own raises the bills and an analytic structure is overhead nobody will maintain.
  • → Not for law firms holding client money, where a segregated client account, disbursements kept apart from fees and a bill of costs are a separate build.

Core features

  • ✓ Retainer management
  • ✓ Milestone billing
  • ✓ Time & expense
  • ✓ Utilization dashboards
  • ✓ Billable vs non-billable
  • ✓ Engagement lifecycle
  • ✓ CAPEX project tracking
  • ✓ Client portal

How Odoo covers Professional Services

The service product decides the commercial model

Everything downstream follows from the service product. Its invoicing policy chooses prepaid or fixed price, billing on recorded timesheets, billing on milestones, or a delivered quantity entered by hand. A second setting decides whether confirming the order creates a task, a project, or both. A firm selling three commercial models needs at least three products, and running all of them through one generic consulting line is where the reporting quietly stops working.

Retainers as a drawdown balance

A retainer is sold as a prepaid line for an agreed block of hours. Confirming the order makes the whole fee invoiceable, and every timesheet against the linked task cuts the remaining hours shown on that line. An account manager sees eighty hours consumed out of a hundred, which is when the overage conversation is worth having. Rolling unused hours into next month is a commercial decision rather than a feature, and it takes a new line.

Milestone billing on signed-off stages

A fixed fee split into stages is sold as one order line per stage, quantity one, each tied to a milestone on the project. Marking the milestone reached makes that line invoiceable. Nothing bills before that, which is correct, because a director signs a stage off before the client sees anything. Milestones carry a deadline, so the list of unreached milestones and their dates is the closest thing to a billing forecast the system holds. A stage that slips six weeks moves the cash and shows up there, rather than in an argument at month end.

Cost per hour, and where the number comes from

A timesheet is worth nothing until the employee has an hourly cost. That field sits on the employee record and drives the analytic line every timesheet writes against the project account. Invoices post revenue to the same account, so the project profitability view holds both sides. It is a single current value, so a salary rise changes the cost of hours from that point on and leaves everything already posted alone.

Billable, non-billable, and the hours nobody wants to record

A timesheet line linked to a sales order item is billable. One posted to an internal project, or to a client project with no order behind it, is not. That distinction is the whole utilisation report, and it depends on the internal projects existing before go-live: business development, proposal writing, training, internal admin. Create only client projects and every unbilled hour vanishes instead of appearing as a category somebody can manage.

Rechargeable expenses and outside cost

Travel, hotels, subcontracted specialists and software bought for one client arrive by two different routes. An expense carries a customer to re-invoice, and once the report is approved and posted, a line is added to that sales order at cost or at the product's sales price, depending on the re-invoicing setting on the product. A vendor bill carries analytic distribution instead, so the cost lands on the project whether or not anyone recharges it, and the recharge is a line somebody adds on purpose. Cost that is never rechargeable still sits against the job, which is what keeps margin honest.

Capitalised and internal projects

Internal build work that becomes an asset, an office fit-out, a platform, a rig of test equipment, runs as its own project with its own analytic account, so labour and purchases accumulate separately from client work. Odoo does not move that balance into a fixed asset on its own. At the capitalisation date an accountant journals the accumulated cost across and creates the asset, and the asset and depreciation tooling is Enterprise.

How the rollout runs

One service product per grade, then map people to lines

Odoo attaches price to a product, so a partner hour and an analyst hour cannot be two values on one order line. The pattern that works is a service product per grade with its own list price, and a client pricelist over the top for negotiated rates. On a billable project each employee is then mapped to the order line matching their grade. Keep the grade list short: nine grades across four commercial models is thirty-six products somebody has to pick correctly at order entry.

Agree the analytic structure before the first project

The project analytic account answers what a job cost. A second plan for service line or department answers which part of the firm earned it, and a third for office answers where. Distribution models apply the split automatically from the client, the product or the project, so nobody types it. Two plans are livable. Five become an entry burden people skip, and recoding a year of posted entries is manual work nobody budgets for.

Load work in progress at one cutover date

There is no clean way to import a half-delivered engagement. Take each live job at a single date: contract value, fees billed to date, unbilled time at cost and at charge-out rate, retainer balances still owed to the client, and expenses not yet recharged. Reconcile that to the last client statement before anything is posted. Replaying eighteen months of historic timesheets produces a utilisation history nobody believes and pushes go-live back by weeks.

Make a timesheet take under a minute

Adoption decides whether any of the numbers are real. A consultant will complete a day in the mobile timesheet or the my timesheets list if there are three fields and their projects are already assigned to them. The Enterprise grid, where a week is entered on one screen and signed off by a manager, earns its licence somewhere above twenty billable staff. Below that, a Friday reminder and a manager who reads the report beats any configuration.

Fix the capacity number before promising utilisation

Utilisation is recorded hours over capacity, and Odoo supplies the numerator only. Capacity comes from the working schedule on each employee, less public holidays and approved leave. Decide whether the denominator is contracted hours or a target of billable days, whether part-timers are pro-rated, and whether leave reduces capacity or counts against it. Two firms running the same pivot on different denominators report figures thirty points apart.

Decide who may write time down, and where it is recorded

The write-down is the most political number in a services firm, and Odoo has no write-off document. On a line billed from timesheets the delivered quantity is computed rather than typed, so the cut happens in one of two places. Either the sales order item is cleared on those timesheet lines, which takes the hours out of the billable pool and leaves the change next to the work, or the quantity is reduced on the draft invoice before posting, which keeps the recorded hours intact. Pick one during design and name who may do it.

Where these projects go wrong

Every hour posted to one project called Consulting

The fastest configuration puts all client work on a single project and removes the reason for doing the implementation. Cost per client, per engagement and per service line collapse into a firm-wide figure the managing partner already had. It happens because nobody wants to create a project per engagement by hand. The fix is the create-on-order setting, which raises the project and the task the moment a quotation is confirmed.

Partner and director time never recorded

The most expensive hours in the firm belong to the people least willing to fill in a timesheet, and their absence does not make projects look better. It makes them look profitable when they are not, because review time, client meetings and rework by a senior person all become free. Either senior time is recorded like everyone else, or project margins are not decision-grade. No configuration solves this one.

Prepaid retainers billed twice

A retainer sold as a prepaid line is billed up front. If the same work is then timesheeted against a second order line set to bill on timesheets, those hours bill again. Odoo has no reason to object, because the two lines are doing two different jobs, so it surfaces as an angry client rather than as an error message. One engagement, one commercial model per line, and an overage line created deliberately when the balance runs out.

Treating unbilled time as revenue

Recorded hours at charge-out rate are not revenue. They are an opinion about what a client will accept, and the distance between the two is realisation. A firm reporting hours multiplied by rate will forecast a month it does not bill, then spend the following month arguing about the shortfall. Show recorded value, billed value and collected value as three separate figures on one page and manage the gaps.

The employee map goes stale

The map from people to order lines is set at kick-off and then forgotten. A consultant promoted mid-engagement keeps billing at the old grade. A new joiner nobody mapped bills against the project default line, or against nothing at all, and their hours quietly stop being billable. Neither error shows up until an invoice leaves at the wrong value. Before each billing run, list the timesheets with no sales order item and the ones on a line that does not match the person.

Employees carrying no hourly cost

A timesheet from an employee whose hourly cost is still zero writes an analytic line worth nothing. The project then shows revenue with no labour behind it, the margin looks excellent, and nobody investigates a job that appears to be winning. It happens with new joiners, with contractors set up as employees in a hurry, and with anyone created after go-live by someone outside finance. Decide at design time whether that figure is salary only or salary plus employer costs and overhead, apply one answer across the firm, and check the employee list for zeros before each month end.

What it works with

  • + Project and Timesheets, for the engagement structure and the analytic cost behind every recorded hour
  • + Sales, where the service product, the invoicing policy and the milestone lines actually live
  • + Accounting, for analytic plans and distribution, multi-currency fees and deferred entries in Enterprise
  • + Expenses and Purchase, for rechargeable travel and subcontracted specialists bought against one client
  • + HR, for the hourly cost per employee, the working schedule that sets capacity, and leave that reduces it
  • + Planning and the timesheet grid in Enterprise, for forward resourcing and weekly approval
  • + Documents, Sign and Approvals in Enterprise, for engagement letters, signed scope changes and discount authority
  • + The customer portal, included in Community, so a client reads quotations, invoices and shared tasks without a licence

Country considerations

Saudi Arabia (KSA)

ZATCA Phase 2 clears a standard invoice through Fatoora before the client ever sees it, so a fee note cannot be issued until the amount is final and the buyer details are complete. The Saudi e-invoicing integration is Enterprise. VAT is 15 percent, fees paid to non-resident consultants are withheld and filed monthly, and staff wages leave through WPS.

United Arab Emirates

Corporate tax at 9 percent above the threshold means a consultancy needs accounts that survive an audit, not only a VAT return. A free zone firm keeps the zero rate on qualifying income, and consulting sold to mainland clients is generally not qualifying, so the client mix decides the tax position and has to be readable in reporting rather than rebuilt at year end.

Qatar

Corporate income tax applies to the foreign-owned share of profits and returns are filed through Dhareeba, so the ownership split has to be readable in the ledger rather than kept in a shareholder file. VAT has not been introduced, so a fee note to a Qatari client carries no output tax, and a chart imported from a Gulf template usually arrives with tax codes that have to be switched off before the first invoice. Government and semi-government engagements are contracted in riyals with Arabic documentation, which decides the language on the layout, not just the currency on the order.

Pakistan

Sales tax on services is provincial. A Karachi firm billing a Lahore client deals with SRB and PRA under different rates, separate registrations and different return formats, so the tax on a fee line follows where the service was rendered. A practice registered in more than one province files a return per authority, which means each fee line has to carry the authority it belongs to from the moment it is raised. FBR digital invoicing pushes documents as they are issued, so a correction after the fact is a credit note, not an edit.

India

Professional fees carry GST at 18 percent, and place of supply decides whether that is IGST or a state pair, which bites for a practice with clients in several states. Export of services under a letter of undertaking is zero-rated, e-invoicing applies above the turnover threshold, and clients deduct TDS, so cash received is short of the invoice.

Turkey

Independent professionals issue a serbest meslek makbuzu rather than an ordinary invoice, and the electronic form, e-SMM, is mandatory for those in scope. Companies send e-Fatura to registered counterparties and e-Arsiv to everyone else, so routing is decided per document, per counterparty. Odoo ships no Turkish clearance connector in either edition, so those documents leave through a licensed integrator and the link between the two is part of the project, not a setting. Payments for professional work carry withholding, and the statutory chart of accounts has to be the one in use.

United Kingdom

Making Tax Digital requires digital links from the accounting record through to the VAT return, so a spreadsheet in the middle of the process is a compliance problem rather than a habit. A firm under the cash accounting threshold can account for VAT when it is paid instead of when it invoices, which is worth having at sixty day terms, and Odoo carries that as a cash basis tax with its own transition account. Services to business clients abroad fall outside the scope, with the customer accounting for the tax, and off-payroll rules apply to associates working through their own companies.

Germany

Architects and engineers still price against the HOAI structure, where the fee follows construction cost and work phases rather than hours, so the order lines have to be built that way from the start. GoBD requires postings that cannot be altered after the fact, the client accountant will expect a DATEV export, and domestic business invoices have to be receivable as XRechnung or ZUGFeRD.

Questions we get asked

Does Odoo have a professional services module?

Not as a single app, and no version of Odoo has one. A services build is assembled from Sales, Project, Timesheets, Expenses and analytic accounting, which is why two Odoo systems for two consultancies can look nothing alike. When you watch a demo, the questions that separate a real build from a shell are which invoicing policy each service product uses and what the analytic structure looks like underneath. Anything sold to you as an Odoo professional services module is third-party code that you will be maintaining after the first upgrade.

Can we run this on Odoo Community?

Most of it, and the gaps are effort rather than dead ends. Enterprise adds the weekly timesheet grid with manager approval, Planning for forward resourcing, Subscriptions for recurring retainers, Sign and Approvals, Studio, and the deferred entry and asset tools. In Community those jobs become a manual journal each month for deferred income, a renewal somebody diaries, and a timesheet entered a day at a time. That trade is fine at fifteen fee earners and painful at eighty. E-invoicing splits by country rather than by edition logic, and the clearance integrations for Saudi Arabia and India are Enterprise.

How are retainers handled?

As a prepaid line, either an agreed block of hours or a flat monthly fee, with timesheets drawing the balance down. Two things get missed. Money taken in advance is income the firm has not earned, and the deferred entry tool is Enterprise, so a Community firm posts a journal each month to move the earned part across. The other is the unit: the remaining balance on the line is counted in hours, so a retainer sold as a flat fee in units displays no drawdown at all and nobody can say when it is exhausted. Renewal is manual unless the retainer runs on Subscriptions, which is also Enterprise.

Can Odoo bill different rates for different people on one project?

Yes, through the employee map on a billable project. Each person is pointed at a sales order item, so partner time lands on the partner line and analyst time on the analyst line, and one invoice picks up both at their own prices. Two limits are worth knowing before you design around it. The map is held per project, so there is no firm-wide rate table that applies itself to new work. And it is read when the timesheet is created, so correcting the map next month does not repoint hours already recorded. Anyone missing from the map falls back to the project default line.

Does Odoo produce a utilisation report?

Not as a delivered report. The numerator already exists: timesheet analysis grouped by sales order item separates billed hours from everything else, and that view saves as a favourite a manager can open on a Monday. The denominator is the work, because capacity has to be assembled from working schedules, public holidays and approved leave. Most firms end up with a monthly extract rather than a live gauge, and that is the right answer, because utilisation is a number reviewed in a partners' meeting, not watched during the day.

What happens to time we record but decide not to bill?

It stays on the project as cost. The analytic line was written the moment the hour was recorded, and taking the hour off the bill does not remove it, which is correct, because the firm paid for that time. What you lose is the reason, since there is no write-off document and no field asking why the hours went. Firms that care about realisation put the reason somewhere deliberate, usually a note on the task or a short code added to the timesheet line, and then report recorded value against billed value per engagement. Without that, a partner who writes down every job looks identical to one who never does.

Can clients see progress without us buying them a user licence?

Yes. Portal access carries no licence cost and exists in Community. A client contact signs in to see their quotations, orders and invoices, plus the project tasks shared with them, and can comment on a task instead of emailing the project manager. What each contact reaches is controlled per record, so one client gets invoices only while another follows the work in detail.

How do we recognise a fixed fee that spans several months?

Odoo recognises revenue when the invoice posts, and there is no percentage of completion engine in either edition. A fee earned evenly across four months and billed at two milestones lands as two spikes unless somebody intervenes. Enterprise has deferred revenue, which spreads a posted amount across a schedule you set and reverses it month by month. Community reaches the same numbers with a manual journal. Either way the percentage itself is a judgement a person makes and signs, so the useful question in design is who calculates it and what evidence they read, not which button produces it.

How long does an implementation take?

Configuration is measured in weeks. The date is set by two things: whether the firm can agree its grades and rates, and whether people will record time daily. One company with three commercial models and clean opening balances moves quickly. A group with several offices, intercompany recharges and years of unbilled work in progress is a different project, and the work in progress cutover is usually the long pole.