Goboko CSV format
What it is
Section titled “What it is”The Goboko CSV path is a specialised import flow for bookings exported from Goboko. When you upload a file, Syndik8 looks at the file’s bytes to decide whether it is a Goboko export or an arbitrary CSV — and if it is Goboko, the column mapping step is skipped entirely.
Goboko exports are UTF-16 encoded and have a fixed 16-column header. Both facts are used to detect the format automatically. You never choose “Goboko” from a menu; you upload the file you got from Goboko and Syndik8 recognises it.
Who can use it
Section titled “Who can use it”Admins of a syndicate. The import wizard is hidden from regular members.
Where to find it
Section titled “Where to find it”- Admin tab → Import data (under the Syndicate heading).
- Route:
/syndicates/:syndicateId/settings/import-bookings.
Fields / options
Section titled “Fields / options”Detection
Section titled “Detection”| Check | Expected value |
|---|---|
| Byte-order mark | UTF-16LE (FF FE) or UTF-16BE (FE FF) at the start of the file. |
| Header row | Starts with #,Start Time,End Time,TimeZone. |
A file that does not meet both of those is classified as a generic CSV instead.
Columns read by the importer
Section titled “Columns read by the importer”The importer reads a subset of Goboko’s 16 columns:
| Column index | Column name | What Syndik8 uses it for |
|---|---|---|
| 1 | Start Time | Booking start (dd/MM/yyyy HH:mm:ss in the row’s timezone). |
| 2 | End Time | Booking end (same format). |
| 3 | TimeZone | IANA timezone name, used to convert the start/end times to UTC. |
| 4 | Booking Made For | Matched against the member’s name as Syndik8 displays it. Also the maintenance marker — see below. |
| 5 | Booked By (email) | Member email for matching. Tried before the name. |
| 6 | Aircraft | Aircraft registration. |
| 8 | Provisional | Y if the row is a waitlist / provisional booking. Mapped to pending on import. |
| 10 | Flight Time | Hours flown (kept as metadata; not used to populate usage logs). |
| 15 | Notes | Free-text notes. Copied onto the booking. |
Columns 0, 7, 9, 11, 12, 13, 14 are read past but not used.
Wizard steps for a Goboko import
Section titled “Wizard steps for a Goboko import”The wizard has six numbered steps across the top. For a detected Goboko file:
- Upload — choose the file.
- Columns — skipped automatically. Goboko’s columns are known.
- Members — confirm each unique member in the CSV maps to an existing syndicate member, an invite to send, or an aircraft-maintenance entry.
- Aircraft — confirm each unique aircraft registration in the CSV maps to an existing asset.
- Review — see the counts (created / skipped / warnings) before committing.
- Done — the import completes and the bookings appear on the calendar.
Behaviour rules
Section titled “Behaviour rules”- Detection is on the file, not on a menu choice. There is no “Is this a Goboko export?” toggle.
- UTF-16 decoding is mandatory. If Goboko ever ships a UTF-8 export, Syndik8 will route the file through the generic CSV path instead — the detection check requires the UTF-16 BOM.
- Times are converted to UTC. Each row carries its own timezone; Syndik8 converts
dd/MM/yyyy HH:mm:ssin that timezone to UTC before saving. - A date or time that does not exist is listed, not imported. A row reading
31/13/2026,30/02/2026,29/02/2027(not a leap year) or a time such as25:00:00is never rolled over into a nearby real date: the Review Import step lists it with its row number as a date that cannot be read, and skips it. When no row in the file can be used, the import stops at the upload step instead, which says none of the bookings could be used and lists the rows to fix. 29 February in a leap year imports as normal. - Unknown timezones fall back to UTC. If the timezone column holds a name the system’s tz database does not recognise, the time is saved as if the timestamp were already UTC rather than rejecting the row.
- Maintenance convention. A row whose “Booking Made For” is
Maintenance(case-insensitive) with no email is auto-classified as an aircraft maintenance booking, not a member’s booking. On the member matching step it is surfaced with the label “Will be imported as aircraft maintenance” and you can revert it to a member assignment if the detection was wrong. - Custom maintenance labels are preserved. If a Goboko row says “50 hr check” with no email, you can mark it as maintenance on the member matching step — the label “50 hr check” is carried onto the booking’s maintenance description. The generic word “Maintenance” is treated as redundant and left blank.
- Member matching. The row’s email is tried first (case-insensitive exact), then “Booking Made For” against the member’s name as Syndik8 displays it — their nickname if they set one, otherwise their first and last name. Goboko’s names often differ from the ones people registered with, which is why email is tried first.
- Members are matched by their real email, which only admins can see. Nobody’s email address is stored on anyone else’s phone, so the wizard asks the server for the syndicate’s addresses while you are on the matching step, uses them, and keeps nothing. Only an admin of that syndicate can make that request. If it cannot be made — you are offline, for instance — the matching step says so and falls back to matching on names alone.
- Addresses are only requested when your file has one. If the Email column is blank on every row, the wizard never asks for the syndicate’s addresses at all: there would be nothing to compare them against, and matching would come down to names either way. It is not treated as a failed lookup, so the matching step does not warn you about it.
- A name shared by two members is never guessed. If two people in the syndicate display the same name, a CSV row carrying that name is left unmatched for you to resolve from the dropdown rather than assigned to whichever was found first.
- Every imported booking belongs to a member. A row Syndik8 cannot tie to one is skipped and counted on the review step, which also lists the row numbers. Nothing is imported to be reassigned later.
- Pending invitees are not matched, and their rows are skipped. Someone who has been invited but has not yet joined has no account to own a booking. Invite them from the matching step, and once they have joined import the same file again — deduplication skips everything already created, so only their bookings are added.
- Provisional rows are saved as
pending. Confirmed rows land asconfirmed, or ascompletedwhen the booking has already ended. - Registration normalisation.
G-QBBNandGQBBNin the CSV are treated as the same aircraft when matching against asset registrations (Syndik8 strips non-alphanumeric characters and compares case-insensitively). - Single-asset inference. If the syndicate has only one asset, all rows match that asset regardless of the CSV’s registration column.
- A short row is warned about, not dropped silently. Goboko’s export has 16 columns; a row carrying fewer is read with its missing cells treated as empty. If it stops before its start or end time, the Review Import step lists it with its row number as a date that cannot be read, and skips it. If its times are there, it is imported like any other row, and anything else it lacks is warned about on the review step: a missing timezone is saved as UTC, and a missing member, or a missing aircraft in a syndicate with more than one asset, skips the row and counts it.
- Re-running an import is safe. Fingerprint-based deduplication skips rows already imported.
See also
Section titled “See also”- Generic CSV format — the fallback for other booking systems
- Deduplication — how Syndik8 avoids importing the same booking twice