Administration
Importing data
Bring clients, projects, tasks, people, roles, rates and past time across from other systems with CSV files.
Under Administration → Import data you can bring your records across from other systems with spreadsheets saved as CSV. Each file holds one kind of record. You need the permission for that kind, for example Create and change clients and cost centres for clients.
The order to import in
Later files refer to earlier ones by code, name or email address, so import in this order:
- Cost centres: by code.
- Clients: by name; they can name a cost centre by its code.
- Departments: by name; the lead is named by email address.
- Roles: by name, with their permissions, such as
timesheet.record; timesheet.approve. - People: each person is invited by email with the roles you name. They join when they accept the invitation. Put no in the invite column to add someone straight away without any email, for example to bring across people who have left. This works only for addresses on your organisation's own sign-in domains (see Microsoft sign-in).
- Projects: by code; each names its client (by name or reference), and optionally a cost centre and a manager (by email).
- Project tasks: the project's code and the task's name.
- Project team members: the project's code and the person's email address. People must have accepted their invitations first.
- Rates: the kind (charge, cost or pay), who it's for (everyone, a grade's name or a person's email address), the unit (hour or day), the amount and the date it starts.
- Time entries: the person's email address, the date, the project code, the task if the project uses tasks, the hours (1.5 or 1:30) and the comment. Optionally the billing (billable, non-billable or free of charge; left out, the client's, project's or task's billing setting applies), pay (not paid, paid or time off in lieu), their multipliers, out of hours, and approve. With approve set to yes, each week is submitted and approved once the whole file passes, so it's valued on the billing ledger. Your own weeks stay submitted unless approvers may approve their own.
- Bookings (schedule): the person's email address, the project code, the task if any, the first and last day, the hours a day and optionally the weekdays (mon; tue; wed) and a note. A day the person is already booked on is kept as a double booking.
- Public holidays: the date, the name and optionally the calendar, such as Latvia. A calendar that isn't there yet is made; with none named, the holiday goes in the default.
- Leave already booked: the person's email address, the leave type's name (such as Annual
leave), the first day and optionally the last day. For half days, put pm in
first_halfif the first day is the afternoon only, and am inlast_halfif the last day is the morning only. The leave comes in approved and counts against each person's allowance, so set allowances first. Nobody is emailed, and leave already there is skipped. You need Record leave for others.
Select Template next to each kind to download a file with the right column names and an example row.
Checking and importing
- Choose what the file holds, choose the file and select Check the file.
- Every row is checked against the same rules as the screens. Nothing changes yet. Rows that need fixing say why, with the line number as your spreadsheet shows it.
- When every row passes, select Import.
Good to know:
- All or nothing. If any row needs fixing, nothing from the file is imported. People are the exception: once a people file has passed its check, each person is invited in turn.
- Existing records are never changed. A row whose code, name or email address is already in Resource Manager is skipped, so you can import the same file again safely.
- Column names are forgiving. "Cost centre code", "cost_centre_code" and "COST-CENTRE-CODE" all work. Columns that are not used are ignored, and you are told which.
- Files: UTF-8 or the CSV your spreadsheet saves. Commas, semicolons or tabs. Up to 5,000 rows and 5 MB.
- Projects: if left blank, the type is time and materials, the status confirmed, time is
booked to the project, and the team sees it. Money is in your base currency, for example
25000.00. Dates areYYYY-MM-DD. - Every import is recorded in the audit log.
Bringing across a year of timesheets
If your old system exports one row per piece of work, an administrator can convert that export into these files on their own computer, so the data never has to be sent anywhere:
php spark import:convert timesheets.xlsx --domain yourcompany.co.uk
It writes the files in order, with a README listing what it found and the settings to check
before importing. Time entries are filed by whole timesheet weeks, named by the month each week
starts in, so a week is never split between files. If your weeks don't start on Monday, add
--week-start sunday or --week-start saturday. If a week was already approved by an earlier
import, importing more time for it reopens the week, adds the time and approves it again. Large files of time entries can also be imported from the command line:
php spark import:file time_entries 09-time_entries-2026-04.csv --org "Your organisation" --as you@yourcompany.co.uk
Bringing across a schedule from Float
Export the schedule from Float as CSV, then convert it on your own computer:
php spark import:convert-float ScheduleExport.csv --domain yourcompany.co.uk
Each person's days on each piece of work become bookings. Days in a row with the same hours are
one booking, broken at weekends. Float's totals and time off aren't booked. Its holiday list
becomes holiday calendars named after Float's regions; add
--calendars "England=default; Riga=Latvia" to put England's in your default calendar and call
Riga's Latvia. Import the files in their numbered order; clients, projects and people you've
already imported are skipped.