Pillar guide · Odoo 20

Odoo Timesheets: the complete guide, step by step in Odoo 20

From an empty database to an invoice based on hours worked. We set up Odoo Timesheets for a fictional IT consultancy and show every step: installation, settings, employees, projects and tasks, logging time, approval, invoicing, reports and mobile. Including what Community offers, what is Enterprise, and where TimeViking fits in.

Updated on · by the TimeViking team

What Odoo Timesheets does

Odoo Timesheets records who spent how much time on which project and which task. In Odoo, a timesheet line is an analytic line with an employee, a date, a duration, a project and usually a task. That makes the hours immediately useful in the rest of Odoo: for project progress, for cost, and through Sales for the invoice.

This guide is the full tour. For the details of each topic we point to our shorter guides: invoicing timesheets, approving timesheets, tips and tricks and Odoo Timesheets in pictures.

Our test case. Demo Consulting is a fictional IT consultancy with five people. For the customer Harbor Logistics it runs an Odoo implementation: 400 hours of Consulting at 95 euros per hour, 21% VAT, invoiced on the hours actually worked. Next to that, a website project runs for a second customer and the team holds a weekly planning meeting.

The eight steps at a glance

  1. Install the apps

    Install Timesheets (the hr_timesheet module). Odoo adds Project and Employees automatically. If you want to invoice hours, also install Sales and Invoicing: the bridge module sale_timesheet then comes along by itself.

  2. Choose the settings

    In Configuration > Settings > Timesheets: the Encoding Method (hours and minutes, or days and half-days) and whether approved time off should appear as timesheet lines automatically.

  3. Create employees and set access rights

    Everyone who logs time needs an employee linked to a user. Choose each user's role in Timesheets and fill in the hourly cost for profitability.

  4. Set up projects and tasks

    Turn on Timesheets on the project (and Billable if you invoice the hours). Give tasks an Allocated Time so Odoo shows progress.

  5. Let the team log time

    In My Timesheets: as a list or a calendar (Community), on the task itself, or in the weekly grid with a timer (Enterprise).

  6. Review and validate the hours

    Check per week and per employee. In Enterprise you validate under To Validate; the lines are then locked. In Community you agree on your own review routine.

  7. Invoice the delivered hours

    Sell a service Based on Timesheets, confirm the sales order and log time on the project Odoo creates. On the sales order: Create Invoice.

  8. Follow up with reports

    Under Reporting: hours By Employee, By Project and By Task, as a pivot table or a graph, with export to Excel.

Step 1: install the apps

Open Apps and search for Timesheets. When you install it, Odoo automatically adds Project and Employees. In Odoo 20 the technical module is listed as Task Logs (hr_timesheet); in the menu it is still Timesheets.

Our consultancy needs two more apps: Sales and Invoicing. Once Sales, Project and Timesheets are in the same database, Odoo installs the bridge module sale_timesheet by itself. That module is what puts hours on a sales order. Everything above is Community. On Odoo Online you pick the same apps in your subscription.

Step 2: the settings

Go to Configuration > Settings and open the Timesheets section. The key choice is the Encoding Method: Hours / Minutes or Days / Half-Days. A consultancy that bills by the hour picks hours.

The Odoo Timesheets settings in Odoo 20 with the encoding method, timer rounding, reminders and invoicing policy
Configuration > Settings > Timesheets. Odoo 20 Enterprise; rounding, reminders and the invoicing policy are Enterprise.

What else you see depends on your edition:

  • Time Off (Community): approved time off and public holidays become timesheet lines automatically, on an internal project.
  • Timer rounding and reminders for employees and approvers: Enterprise. In Community these options show an upgrade label.
  • Invoice Policy (Enterprise): invoice all recorded hours, or only validated ones.

Step 3: employees and access rights

Hours belong to an employee, not to a user. Anyone who logs time therefore needs an employee linked to their user. Create them in Employees, or link an existing employee to the user.

Then choose each user's role in Timesheets:

  • User: own timesheets only: see and log only their own hours.
  • User: all timesheets: also see and log hours for others, typical for a project manager.
  • Administrator: everything, including the settings.

Also fill in the hourly cost on the employee. Odoo uses it to compute the cost of every timesheet line, so per project you see not only the hours but also what they cost. In Enterprise you also set, per employee, who validates their hours.

Step 4: projects and tasks

A project only accepts hours when Timesheets is enabled on it; for hours you invoice, also enable Billable. In our test case Odoo creates the project itself when the sales order is confirmed (step 7). An internal project for meetings and training you create by hand.

Give each task an Allocated Time. Odoo then shows the Time Spent, the Time Remaining and the progress as a percentage. Inside the task, the Timesheets tab lists every line: who, when, what and how long.

A task called Configuration in Odoo 20 with 140 hours allocated time, 40 percent progress and the Timesheets tab with hours per employee
The Configuration task: 140 hours allocated, 40% used. The hours are in the Timesheets tab.

Keep the structure simple: one project per engagement, a handful of tasks per phase. Create a hundred tasks and people will log time on the wrong one.

Step 5: logging time

Odoo offers several ways to enter hours. Which ones you get depends on the edition.

My Timesheets as a list (Community). An editable list: date, project, task, description and duration. Group All Timesheets by project and you immediately see the totals and the sales order item on every line.

All Timesheets in Odoo 20 as a list, grouped by project, with employee, task, description, sales order item and time spent
All Timesheets, grouped by project. This list also exists in Community.

Calendar (Community, since Odoo 19). My Timesheets has a month calendar: you see your lines per day, and you add a line by selecting one or more days. How it works, and what it cannot do, is in the Odoo timesheet calendar view.

The calendar view of My Timesheets in Odoo 20 with the timesheet lines per day of the month
My Timesheets as a calendar, by month.

On the task (Community). Directly in a task's Timesheets tab, handy for people who work from Project.

Grid and timer (Enterprise). The weekly grid shows project and task per row and the hours per day. You type a number in a cell and Odoo creates or updates the timesheet line. With the timer you start and stop time on a task; Odoo rounds according to the settings from step 2.

The weekly grid of My Timesheets in Odoo 20 Enterprise with project and task per row and hours per day
My Timesheets as a weekly grid. Enterprise (timesheet_grid module).

For keyboard shortcuts, filters and grouping, see Odoo Timesheets: tips and tricks.

Step 6: approval and validation

In Enterprise there is a To Validate menu: your team's hours per employee and per week, with a Validate button. Validated lines are locked for the employee, and with the invoice policy from step 2 you can invoice validated hours only.

The Timesheets to Validate screen in Odoo 20 Enterprise with the team's hours per employee and per day
Timesheets to Validate: each employee's hours for the week, with the Validate button. Enterprise.

In Community there is no validation: every line stays editable until it has been invoiced. Teams work around that with a fixed weekly review moment, a filter on last week and a clear agreement on who checks. A full comparison is in approving timesheets in Odoo.

Step 7: invoicing the hours

This is where a list becomes a system. In our test case:

  1. A service product Consulting (hours), with invoicing Based on Timesheets and, on order, a task in a new project. Price: 95 euros per hour, 21% VAT.
  2. A sales order for Harbor Logistics of 400 hours. On confirmation Odoo creates the project.
  3. The team logs time on that project's tasks; every line gets the Sales Order Item.
  4. On the sales order, the Delivered column adds up the hours. Create Invoice puts the delivered, not yet Invoiced hours on the invoice.
A sales order in Odoo 20 with 400 hours of Consulting ordered, 241 hours delivered from timesheets and 0 invoiced, with 21 percent VAT
The sales order: 400 hours ordered, 241 hours delivered from timesheets, ready for Create Invoice.

Once the invoice is posted, Odoo no longer lets you change or delete those timesheet lines. The pitfalls (lines without a sales order item, an invoicing policy changed afterwards) are covered in invoicing timesheets in Odoo.

Step 8: reports

Under Reporting you find hours By Employee, By Project and By Task. In the pivot table you click a header to drill down, put employees in the columns and download the table to Excel. With the hourly cost from step 3 you also see costs; with Sales installed, also how much of the time is billable.

Pivot table in Odoo 20 with time spent per project in the rows and per employee in the columns
Reporting > By Project, as a pivot table with one column per employee.

On the project itself, Odoo also shows a profitability overview: invoiced and to-invoice hours against the costs.

Timesheets on your phone

Odoo is a web app and runs in your phone's browser, also as an app on your home screen. You get the same screens as on a computer, in a narrower layout. It works, but with many fields and small buttons it is not the fastest way to note two hours after a client visit. How teams solve that is in the timesheet app for mobile.

Five tips from practice

  • One project per engagement, and tasks per phase. That keeps choosing quick.
  • Require a description. An invoice line with a clear description raises fewer questions.
  • Review every week, not at the end of the month: people still remember what they did.
  • Save a filter for "last week, my team" as a favorite.
  • Check the sales order item before invoicing. A line without one does not reach the invoice.

More in Odoo Timesheets: tips and tricks.

Community or Enterprise?

Checked in the source code of Odoo 20 Community (hr_timesheet, sale_timesheet, project_timesheet_holidays):

FeatureCommunityEnterprise
Hours on project and task, list and calendaryesyes
Allocated time and progress per taskyesyes
Invoicing hours through the sales orderyesyes
Time off as timesheet lines automaticallyyesyes
Reports (pivot, graph, Excel)yesyes
Weekly grid and timernoyes
Validating and locking hoursnoyes
Reminder emails for missing hoursnoyes

So Community is enough to record and invoice hours. What you miss is in the entry and in the review. More in Odoo Community and timesheets.

Where TimeViking fits in

TimeViking does not replace Odoo Timesheets. Odoo stays the source: projects, tasks, sales orders, invoices and reports stay where they are, and everything in this guide still applies.

What TimeViking does is make entering time faster, on Community too: a weekly calendar and a weekly grid, quick typing, a mobile app and weekly approval in the app. TimeViking writes the hours into Odoo through a single bot user, on the right project and task, so Odoo can link them to the sales order. What TimeViking does not do: create invoices (you do that in Odoo) or replace Enterprise validation (though TimeViking does respect validated lines).

Want to see it next to your own Odoo? Try TimeViking free for 30 days or first read how the Odoo integration works.

Odoo is a trademark of Odoo S.A. TimeViking is a product of Software Services BV and is not affiliated with Odoo S.A. The screenshots show Odoo 20.0 Enterprise (English interface) on the public demo of Odoo S.A., with made-up demo data.

Try TimeViking with your own Odoo.

Free for teams of up to 3 users, forever. Larger teams get a 30-day free trial, no card needed.

Frequently asked questions

Is Odoo Timesheets free?

The hr_timesheet module is part of Odoo Community and is open source (LGPL-3). You only pay for hosting and possibly a partner. Odoo Online and Odoo.sh always run Enterprise: there you pay per user, and you also get the grid, the timer and validation.

Which version do the screenshots show?

Odoo 20.0 Enterprise, in English, on the public demo of Odoo S.A. (demo.odoo.com, no account needed). We filled that temporary database with made-up data: a consultancy, fictional customers with (demo) in their name, euros and 21% VAT. Screens labelled Enterprise do not exist in Community.

Does Odoo Community have a timer or a weekly grid?

No. In Community 20 you log time as a list, as a calendar or on the task. The grid view, the timer, validation and reminder emails come from the Enterprise module timesheet_grid.

Can I invoice hours in Community?

Yes. sale_timesheet is Community. With Sales and Invoicing installed, you invoice delivered hours from the sales order. How that works is explained in invoicing timesheets in Odoo.

Why is the module sometimes called Task Logs in Apps?

In Odoo 20 the technical module hr_timesheet is listed in Apps as Task Logs. The menu and the app are still called Timesheets. So search Apps for Timesheets.

Do I need to change anything in Odoo to use TimeViking?

No. TimeViking writes hours into the standard fields of Odoo Timesheets (project, task, employee, date, duration, description), through a single bot user. Everything you set up in this guide still applies; TimeViking is a faster way for your team to enter time.

More guides