Skip to content

Generic CSV format

The generic CSV path is the fallback import flow for any booking system other than Goboko. You upload a CSV, map the columns that carry booking data to the fields Syndik8 understands, and the wizard parses the rest.

Unlike the Goboko CSV path where columns are fixed, the generic path requires you to tell Syndik8 which column is “Start Date/Time”, which is “Member Email”, and so on.

Admin and owner of a syndicate.

  • Syndicate settings → Import bookings.
  • Route: /syndicates/:syndicateId/settings/import-bookings.

A file routes to the generic path if any of these is true:

  • It is not UTF-16 encoded.
  • It is UTF-16 but the header row is not #,Start Time,End Time,TimeZone (the Goboko signature).

The column mapping step shows these Syndik8 fields next to dropdowns of the CSV’s own headers:

FieldRequired?Notes
Start Date/TimeyesUsed as booking start. Unmapped → the row is skipped.
End Date/TimeyesUsed as booking end. Unmapped → the row is skipped.
Member NamenoDisplay name for matching and to show in the UI.
Member EmailnoEmail for exact-match member lookup and invite generation.
Aircraft RegistrationnoFor asset matching. When absent and the syndicate has a single asset, every row auto-matches that asset.
NotesnoCopied onto the booking.
Flight TimenoRead but not currently used to populate usage logs.

Any CSV column that is not mapped is ignored.

The generic parser tries these formats in order:

FormatExample
ISO 8601 with date and time2026-04-25T10:00:00
ISO 8601 with UTC marker2026-04-25T10:00:00Z
ISO 8601 with UTC offset2026-04-25T10:00:00+01:00
Spaced ISO2026-04-25 10:00:00 or 2026-04-25 10:00
British with seconds25/04/2026 10:00:00
British without seconds25/04/2026 10:00

If none parses, the row is skipped.

All six steps are visible:

  1. Upload — choose the CSV.
  2. Columns — map each Syndik8 field to a column in your CSV, or leave it unmapped.
  3. Members — confirm each unique member maps to an existing member, an invite, or an aircraft-maintenance entry.
  4. Assets — confirm each unique aircraft registration maps to an existing asset.
  5. Review — counts and warnings before commit.
  6. Done — import complete.
  • Start and End Date/Time are required. Without both mapped, the wizard cannot move past column mapping. Every row missing either value is skipped at parse time.
  • Dates without an offset are treated as UTC. 2026-04-25 10:00 is read as 10:00 UTC, not 10:00 in your local time. When your source system stores local times, look for an ISO variant with a UTC offset — otherwise bookings will land an hour off during BST.
  • Unparseable dates skip the row. They are not saved as “pending” or pushed to the review step — they simply do not appear in the import.
  • Registration normalisation. The same case-insensitive, alphanumeric-only match used by the Goboko path applies here. G-TEST and GTEST are one aircraft.
  • Single-asset inference. If the syndicate has only one asset, every row matches that asset regardless of whether a registration column was mapped.
  • Member matching. Email is tried first (case-insensitive exact). If no email match, display name is tried next (case-insensitive exact). If both fail and a row has an email, you can invite them from the matching step. If both fail and there is no email, the row is skipped.
  • Maintenance classification. For a generic CSV there is no auto-detection of maintenance rows. If your source system used a “Maintenance” sentinel in the member field, you can mark that entry as maintenance on the member matching step.
  • Re-imports are deduplicated. A row whose combination of start time, end time, member, and aircraft matches a previously imported booking in the same syndicate is skipped — see deduplication.
  • Goboko detection wins if it applies. Uploading a real Goboko export on this path is not possible — it will be detected as Goboko before you reach column mapping.