Skip to content

Import bookings from a CSV

Move bookings from any other booking system into Syndik8 by uploading a CSV and telling Syndik8 which columns hold the booking data.

  • You must be an admin of the syndicate.
  • Export the bookings from your current system as a CSV. The parser accepts ISO 8601 dates, dd/MM/yyyy HH:mm, and a handful of other common formats — see generic CSV format for the full list.
  • Start Date/Time and End Date/Time are the only required fields. Member name, member email, aircraft registration, notes, and flight time are optional.
  • If your CSV happens to be a genuine Goboko export, the wizard will detect it and skip the column-mapping step — see import bookings from Goboko.
  1. Open the syndicate, go to the Admin tab, and tap Import data under the Syndicate heading.
  2. On step Upload CSV File, tap Choose File and pick your export. The wizard moves on as soon as the file is read.
  3. On step Map Columns, pair each Syndik8 field with a column in your CSV using the dropdowns:
    • Start Date/Time — required
    • End Date/Time — required
    • Member Name, Member Email, Aircraft Registration, Notes, Flight Time — optional Leave unwanted CSV columns unmapped; they are ignored.
The Map Columns step of the import wizard, with the six-dot step indicator above a row per Syndik8 field, each paired with a dropdown listing the columns found in the uploaded CSVThe Map Columns step of the import wizard, with the six-dot step indicator above a row per Syndik8 field, each paired with a dropdown listing the columns found in the uploaded CSV
  1. On step Match Import Entries, check each unique person the CSV names. Syndik8 resolves them for you first — on their email where your CSV carries one, otherwise on their name — and shows you what it found. Anything left over you resolve yourself: pick the right member from the dropdown (it lists each person once, and someone who has left the syndicate is still listed, marked (former), because old bookings can be theirs), mark them with Invite (if the row has an email), or flag the entry as an aircraft-maintenance booking. Marking sends nothing on its own — everyone you mark is invited together when you tap Invite N people. If the batch takes a paid syndicate past the members its plan includes, that is where Syndik8 tells you what it adds to your subscription and asks you to agree; a batch that fits inside the allowance is sent without asking. On iOS and Android a batch that would add to the subscription cannot be sent at all (see If it goes wrong). Inviting somebody does not import their bookings — they are not a member until they accept — so import the file again once they have joined. There is no automatic maintenance detection on this path — mark rows as maintenance yourself if your source system used a sentinel name.
  2. On step Match Aircraft, confirm each unique registration maps to an existing asset. If the syndicate has only one asset, every row auto-matches that asset regardless of what your CSV’s registration column says.
  3. On step Review Import, read the summary — bookings to create, skipped rows, duplicates from a prior import. Tap Import N Bookings to commit.
  4. The wizard runs the import and lands on Done.
  • Bookings that had already ended when you import arrive as completed. They are a record of flying your old system has already charged for, so Syndik8 never finalises or bills them: they carry no usage log and no charge. Because they are not waiting to be finalised, they do not stop anyone named in the file from leaving the syndicate or deleting their account.
  • Bookings still to come, and any in progress at the moment you import, arrive as confirmed. Syndik8 finalises and bills them in the usual way once they end.
  • Provisional bookings arrive as pending, whenever they fall, because your old system never confirmed them.
  • “The file could not be read. Pick it again, or export a fresh copy.” Syndik8 could not open the file you picked, so nothing has been uploaded and no matching has started. This is about the file on your device rather than your connection: the export may have finished incompletely, the file may have moved or been deleted since you picked it, or a cloud-storage placeholder may not have downloaded yet. Pick the file again, and if it still will not open, export a fresh copy from your old system and use that.
  • “This mapping produced no bookings”. The Map Columns step says so itself, beside the dropdowns, and tells you which of three things happened. Every booking needs a start and an end — one of the two required fields is still on (Skip); pick the column holding each. This file has column headings and no bookings underneath them — the export has nothing below its header row, so go back and choose another file. Every row was skipped: none had a date the app could read — the rows are there, but the columns you picked for start and end do not hold dates in a format Syndik8 recognises; check those two dropdowns point at the date columns, and see generic CSV format for the formats accepted. The message goes as soon as you change a column, and the step checks the new mapping when you continue.
  • Bookings are an hour off during BST. CSV rows without a timezone offset are treated as UTC. If your source system stored local times without an offset, look for an ISO variant with Z or +01:00 in the export. Otherwise the times will land an hour off during British Summer Time.
  • Rows are being skipped. The Review Import step counts the warnings and lists them, each naming the row by the number your own spreadsheet shows — headings counted, so you can scroll straight to it — and what was wrong with it: a date in a format Syndik8 could not read (the value it found is quoted), a registration matching no aircraft here, a name belonging to nobody in the syndicate, a row naming nobody at all, or a booking that overlaps another. Fix those rows in the export and import the file again; deduplication means the bookings that did come through are not created twice.
  • A row overlaps another booking. The Review Import step checks every row against the bookings already on that aircraft, and against the other rows of the file. A row that overlaps a booking already in Syndik8 is skipped and listed with its row number, the member and its times. Where two rows of the file overlap each other, the earlier one is imported and the later one is listed as overlapping it; a provisional row always gives way to a firm one. Everything else imports. If somebody books the same slot while you are reading the review, the import itself still refuses a confirmed row that overlaps a confirmed booking, and a future confirmed row that overlaps scheduled maintenance: that one row is not imported, the finished import names it, and the rest still come across. A provisional row, or a booking that has already ended, is written whatever it overlaps at that point, so the review is the check that catches those. A confirmed booking still to come on an aircraft that is grounded is refused the same way, one row at a time, and named on the finished import as grounded; the bookings that have already ended still come across, so the history is not held up by the grounding.
  • A row names a viewer or someone who has left. A viewer cannot hold a booking, and neither can somebody who is no longer a member (unless the booking has already ended). The import refuses that one row, names it on the finished import with its row number, the member and its times, and writes the rest. Make the person a member, or correct the row in the export, and import the file again.
  • “Couldn’t check this file against the bookings already in Syndik8”. The review could not read the calendar (usually a lost connection), so no overlaps are listed. Tap Check again once you are back online. If you import anyway, only the clashes described above are refused at the moment of writing; everything else is written as it stands.
  • A row “does not end after it starts”. Its end time is the same as, or earlier than, its start. It is listed and skipped, and counted on Review Import as ends before it starts rather than as a date that could not be read; correct the times in the export and import the file again.
  • Member matching keeps failing. Members are matched first on exact email (case-insensitive), then on their name exactly as Syndik8 shows it — their nickname if they set one, otherwise their first and last name. A middle initial or a shortened first name in your export is enough to miss. Pick the member from the dropdown on the matching step, mark them for an invitation, or adjust the source data to carry the email they registered with. A matched entry keeps the name from your file as its heading, with the member it matched named underneath. A row Syndik8 cannot tie to a member is skipped and counted on the Review Import step.
  • Invite N people is greyed out on a phone or tablet. The batch would take the syndicate past the members its plan includes, and seats that add to the subscription cannot be bought in the app. The card says Seats that add to your subscription cannot be bought in the app, so these invitations can’t be sent here. Send the batch from a web browser, or unmark people until it fits inside your allowance. A batch that costs nothing can be sent from any device.
  • Somebody I invited has no bookings. A booking has to belong to a member, and an invitation is not a membership until it is accepted, so rows naming somebody who has not joined are skipped. Once they accept, import the same file again: deduplication skips everything already created, and their bookings are added.
  • The matching step says it could not check email addresses. Nobody’s email is stored on anyone else’s phone, so Syndik8 asks the server for them while you are on that step, and only when your file actually carries an address to match against. If the request fails — you are offline, or you are not an admin of this syndicate — matching falls back to names alone and tells you so. Reconnect and reload the file to get the email matching back rather than inviting members who are already in the syndicate. You will not see this message for a file with no email column, because no request was needed.
  • Two members with the same name are both left unmatched. Syndik8 will not guess between them. Pick the right one from the dropdown on the matching step.
  • The file is being treated as Goboko. That is intentional — if your CSV is UTF-16 with the Goboko header, it routes through the Goboko path automatically. You do not need this guide; use import bookings from Goboko.