Skip to main content

CSV Import

Bulk-import employees from a CSV file to quickly onboard multiple team members.

Downloading the Template

  1. Navigate to Employees.
  2. Click "Import".
  3. Click "Download Template".

The CSV template includes all supported columns with headers.

Preparing the File

Fill in employee data using the columns below.

Required Columns

ColumnDescription
employeeNumberUnique identifier for the employee
firstNameEmployee's first name
lastNameEmployee's last name
emailEmployee's email address
startDateEmployment start date in YYYY-MM-DD format

Optional Columns

ColumnAccepted Values
phonePhone number
endDateYYYY-MM-DD
employmentTypepermanent or fixed_term
payTypehourly or monthly
payGroupPay group code (e.g., "A", "B")
experienceMonthsNumber of months
baseHourlyRateDecimal number
monthlySalaryDecimal number
workingTimeModel2_week, 3_week, equalization_2_week, equalization_3_week, annual_2_week, or annual_3_week. See "Working-time model and contract hours" below.
contractPeriodHoursDecimal number, per working-time period (not per week). See "Working-time model and contract hours" below.
hasAlcoholLicensetrue or false
isFullTimetrue or false
unionDuesPercentageDecimal number
terminationCauseemployer or employee
rateOverridetrue or false
roleemployee, supervisor, manager, company_admin, or accounting (defaults to employee)
locationsSemicolon-separated list of location names (e.g. Main Park;Water Park). See "Location Assignments" below.

Working-time model and contract hours

The workingTimeModel column specifies the TES working-time framework the employee is on. The six valid values combine a system (regular / equalization / annual) with a period length (2 or 3 weeks):

ValueSystemPeriodPer-period cap (h)
2_weekRegular2 weeks80
3_weekRegular3 weeks120
equalization_2_weekEqualization2 weeks86
equalization_3_weekEqualization3 weeks129
annual_2_weekAnnual2 weeks90
annual_3_weekAnnual3 weeks135

The contractPeriodHours column is the contracted working hours per period, not per week. For example, a typical full-time employee on the 3-week model has contractPeriodHours: 112.5 (= 37.5 h/week × 3 weeks). On the 2-week model the same employee has contractPeriodHours: 75 (= 37.5 h/week × 2 weeks).

The CSV importer rejects the row if contractPeriodHours exceeds the per-model cap above.

Legacy CSVs

Prior to April 2026 the columns were workingTimeModel with values equalization/annual (collapsed to the 3-week variant under the hood) and contractWeeklyHours (in weekly hours). Uploading a CSV with the legacy column name or enum values now fails with a descriptive error that points here. Convert:

  • contractWeeklyHours: 37.5contractPeriodHours: 112.5 (× 3 for 3-week model, × 2 for 2-week).
  • workingTimeModel: equalizationworkingTimeModel: equalization_3_week (or _2_week if the employee is actually on the 2-week variant).
  • workingTimeModel: annualworkingTimeModel: annual_3_week (likewise).

Location Assignments

The optional locations column creates location assignments for the employee at import time.

  • Format: one or more location names separated by ; (semicolon). Example: Main Park;Water Park;Restaurant.
  • Primary location: the first-listed location is marked as the employee's primary assignment; the rest are secondary.
  • Case-insensitive match: main PARK and Main Park resolve to the same location.
  • Whitespace: leading/trailing whitespace on each entry is trimmed; consecutive semicolons (a;;b) are allowed and silently skipped.
  • Duplicates within one cell (e.g. Main Park;main park) are deduplicated silently — one assignment is created.
  • Empty cell: no assignments are created for the row. The employee is imported as before.
  • Unknown name: the row fails validation with locations: unknown location "X". Consistent with other validation errors, the entire batch is rejected (no employees created) and the admin must fix the CSV and re-upload.
  • Ambiguous name (two locations in the tenant with the same name, case-insensitively): the row fails with locations: ambiguous location name "X" (matches N locations). Rename one of the locations to disambiguate.
  • Re-upload behaviour: a CSV row whose employeeNumber or email already exists in the tenant is skipped entirely — including its locations cell. Re-uploading a CSV to update assignments on existing employees does not work; use the "Add assignment" / "Remove assignment" controls on the employee detail page instead.

Uploading

  1. Click "Select File" and choose your CSV.
  2. Click "Upload".
  3. The system validates each row.

Import Report

After processing, you will see a summary:

  • Created — new employees added successfully
  • Skipped — duplicate employee numbers that already exist
  • Errors — per-row validation issues with the row number and error details

Tips

  • Ensure dates are in YYYY-MM-DD format.
  • Boolean fields accept true or false (case-insensitive).
  • Duplicate employee numbers are silently skipped.
  • Fix errors and re-import only the failed rows.