Data import: Handling CSV files
A collection of instructions. Consider this a friendly “there’s a lot that can be wrong with your file, let’s investigate” response from the Operating customer support team.
Written By Matti Parviainen
Last updated 14 days ago
Basic import of time entries (along with People, Clients and Projects)
Recommended tools
You’re probably exporting the CSV contents from some other application. It’s going to be in the raw CSV format. When you open it in Excel, Numbers or Google Sheets, the spreadsheet application will try to apply formatting to it and save it in their own file format (such as .xlsx).
If you don’t need to do any spreadsheet magic, we recommend you use a plain-text editor such as VS Code, EditPad Lite, or BBEdit. These apps show the file in “raw” format rather than try to create a table, interpret the headers, guess what number is a date and so on.
Recommended workflow
Manipulate the CSV file in a plain-text editor whenever possible. Do not change the file encoding – that’s a sure way to break the äöé characters that are in your person and customer names.
Make sure you have all of the required columns in the file. Up-to-date examples and instructions are found inside the Operating app, for example here: https://use.operating.app/settings/import-data
When you’re done editing the file – using your tool of choice – before you upload it, doublecheck to see how it looks using a plain-text editor. The encoding may have been broken in the last export.
Frequently encountered errors
files have commas (,) or semicolons (;) in them and they are not wrapped in “quotes”
“quotes” are created using funny characters
lines have differing number of columns - some cells are missing
some numbers are 0.5 and others 1,5
dates are 2024/11/21 or 2024/21/11 rather than 2024-11-21
personID for the same person changes from one import to another, creating duplicates
make sure you’re using unique unchanging identifiers for the person
Review what you’ve imported
The best way to see what the time entries contained – per person, per day – is the Utilization Metrics report. Hover over the days to see time entries:

Download the Data Import Excel
You can access the data import spreadsheet behind this link (Gsheet, view only). Please make a copy of the spreadsheet, so you can use it for your own purposes.

The “Other data” tab
Currently in invite-only use (as of December 2025)
With this power-user tool, it’s possible to populate a huge amount of data in Operating. However, in order to avoid duplicates and data loss, you must be careful to do things in the correct order and make sure to use the same external id’s for different things.
Ping us at support@operating.app if you need access.
Advanced import tricks
If you’re reading this, you’ve most likely been vetted by team Operating to have sufficient spreadsheet skills and technical understanding of the Operating data model.
The “Other data” import feature is behind a feature flag – this means it has to be separately enabled for you before you can access it in https://use.operating.app/settings/import-data
Following the instructions in this document may feel odd or repetitive. It’s because some of the initial imports have to be done in a specific sequence so that the mapping between clients, people, projects, allocations and time entries remain accurate. For some things, the best way to proceed is to do a little bit of old-fashioned manual work.
Populate an Operating tenant from scratch
The Operating team provides you with a data import spreadsheet.
Ask support@operating.app to create a new blank tenant (account).
If you’ve already tested Operating in a sandbox and want to keep it for testing purposes, ask us to rename the old tenant “yourcompany-test”.
You should follow this order to avoid errors with data references:
Organizational data like sites and roles. Add groups and seniority levels in the app itself.
People (and related data)
Make sure you persist the Person id’s (from your source system, or if you don’t have anything, something likely unique to the person, such as email address)
Skills (Optional)
Client and project tags (Optional)
Clients and projects
Make sure you persist the Client id’s (from your source system, or if you don’t have anything, something likely unique to the customer company, such as client name)
Make sure you persist the Project id’s (from your source system, or if you don’t have anything, something likely unique to the project)
If you would like to use the external deal ID’s (from your CRM) as external project ID’s, follow the instructions here.
Remember the additional value mapping for each column where e.g. billing type values needs to be mapped (e.g. fixed price equals fixed-price)
Project allocations
Here, you will use the Person and Project id’s you introduced in steps 2 and 5.
(Optional) Time tracking data with tasks
Here, you will use the Person and Project id’s you introduced in steps 2 and 5.
Remember to use TaskID for each Task, otherwise the import will succeed but time entries will not have Tasks related to them
Use CRM deal ID’s as external project IDs
Scenario: you’ve connected your CRM (e.g. HubSpot) to Operating and now have plenty of projects in there. The projects have been added by the CRM integration and the best identifier for each of the projects is the CRM Deal ID – assuming that only one Deal corresponds to each Project.
Export all of your projects in https://use.operating.app/projects → the “…” button on top right → Export as CSV. The columns you will need are
Project ID
Client name
Project name
Project number (the rolling numbering Operating does automatically (1,2,3…)
Deal External IDs
The resulting CSV file will look like this (likely much longer):
Project ID,Client name,Project Name,Project Number,Deal External IDs
9444,Ford,Test Deal,13,250563001572In the above file you can probably spot that Test Deal has the external ID present.
Now, go to the Other data tab in Manual data import and choose upload Clients and Projects.
In the upload, the only columns that matter are Project name and the Deal External ID as the Project ID. Mapping will look like this, and the dropdown menu will auto-suggest the right project assuming that all project names are unique. If you have lots of projects with the same name for different clients, bring the client name along in the export to avoid confusion.

This is what a Test Deal looks like afterwards – two connections, one from HubSpot, another from CSV.


With this, the Test Deal’s external project ID will be the same as the external deal ID. This may help you map things like project allocations to the right project.
Data Import CSV Field & Value Cheat Sheet
Allocations | Allocation ID | input | yes | WE-123 | Unique ID of the allocation. |
Person ID | input | yes | PERSON-123 | References a Person ID from the People CSV. | |
Project ID | input | yes | PROJ-123 | References a Project ID from the Clients and Projects CSV. | |
From Date | input | yes | 2024-01-01 | Start date of the allocation. | |
Through Date | input | yes | 2024-12-31 | End date of the allocation. | |
Allocation Percentage | input | no | 100 | Value between 0 and 100. Use either this or Allocation Minutes. | |
Allocation Minutes | input | no | 2400 | Average weekly minutes. Use either this or Allocation Percentage. | |
Competence Role ID | input | no | ROLE-123 | References a Competence Role ID. | |
Competence Role Seniority ID | input | no | SENIORITY-123 | References a Competence Role Seniority ID. | |
Note | input | no | Project allocation note | Free-text note for the allocation. | |
Clients & Projects | Project ID | input | yes | PROJ-123 | Unique project ID. |
Project Name | input | yes | Project 1 | Name of the project. | |
Client ID | input | no | CLIENT-123 | Required if project has a client. | |
Client Name | input | no | Client Company Ltd | Required if project has a client. | |
Status | select | no | Confirmed | Tentative or Confirmed. Defaults to Confirmed. | |
Project Owner | input | no | John Doe | Creates person if not existing. Can be mapped later. | |
Secondary Owner | input | no | Jane Smith | Creates person if not existing. | |
Client Owner | input | no | John Doe | Creates person if not existing. | |
Description | input | no | Project description | Description of the project. | |
Start Date | input | no | 2024-01-01 | Project start date (YYYY-MM-DD). | |
End Date | input | no | 2024-12-31 | Project end date (YYYY-MM-DD). | |
Client Tags | input | no | tag1,tag2 | Comma-separated client tags. | |
Project Tags | input | no | tag1,tag2 | Comma-separated project tags. | |
Groups | input | no | group1,group2 | Comma-separated groups. | |
Site | input | no | Main Office | Site name. | |
Budget | input | no | 10000 | Project budget. | |
Currency | input | no | USD | Required if budget is set. | |
Billing Type | select | no | Time & Materials | Required if budget is set. | |
Client Tags | Tag ID | input | yes | TAG-123 | Unique tag ID. |
Tag Name | input | yes | Important Client | Name of the tag. | |
Description | input | no | Description | Optional description. | |
Competence Roles | ID | input | yes | ROLE-123 | Unique competence role ID. |
Name | input | yes | Senior Developer | Name of the competence role. | |
People | Person ID | input | yes | PERSON-123 | Unique person ID. |
Name | input | yes | John Smith | Full name. | |
Title | input | no | Senior Developer | Job title. | |
input | no | Email address. | |||
Reports To ID | input | no | PERSON-123 | Manager’s Person ID. | |
Is External | select | no | No | Yes or No. | |
Employment From Date | input | no | 2024-01-01 | Start date. | |
Employment Through Date | input | no | 2024-12-31 | End date. | |
Primary Competence Role | input | no | Developer | Primary role name. | |
Primary Competence Role Seniority | input | no | Senior | Seniority name. | |
Site | input | no | Main Office | Site name. | |
Groups | input | no | group1,group2 | Comma-separated groups. | |
Additional Competence Roles | input | no | role1,role2 | Comma-separated roles. | |
Assigned Skills | Assignment ID | input | yes | SKILL-ASSIGN-123 | Unique assignment ID. |
Person ID | input | yes | PERSON-123 | References Person ID. | |
Skill ID | input | yes | SKILL-123 | References Skill ID. | |
Project Tags | Tag ID | input | yes | TAG-123 | Unique tag ID. |
Tag Name | input | yes | Important Project | Name of the tag. | |
Description | input | no | Description | Optional description. | |
Sites | Site ID | input | yes | SITE-123 | Unique site ID. |
Site Name | input | yes | Main Office | Site name. | |
Weekly Working Minutes | input | no | 2400 | Default is 2400. | |
Skills | Skill ID | input | yes | SKILL-123 | Unique skill ID. |
Skill Name | input | yes | JavaScript | Name of the skill. | |
Skill Category ID | input | no | CAT-123 | References Skill Category ID. | |
Skill Categories | Category ID | input | yes | CAT-123 | Unique category ID. |
Category Name | input | yes | Programming Languages | Name of the category. | |
Time Entries | Person ID | input | yes | PERSON-123 | Person who worked. |
Person Name | input | yes | John Smith | Name of the person. | |
Project ID | input | yes | PROJ-123 | Project ID. | |
Project Name | input | yes | Project X | Project name. | |
Client ID | input | yes | CLIENT-123 | Client ID. | |
Client Name | input | yes | Client X | Client name. | |
Date | input | yes | 2024-01-01 | Time entry date. | |
Hours | input | yes | 7.5 | Duration in hours. | |
Task ID | input | no | TASK-123 | Task ID. | |
Task Name | input | no | Task X | Task name. | |
Billable | checkbox | no | true | Sets billability. Task overrides if provided. | |
Description | input | no | Working on feature X | Time entry description. |
If the problems persist and you’ve lost hope, please send us the file (or the first few lines of it) to support@operating.app – thanks!