Skip to content

Imports & migration

This page is for anyone moving flight history into Tobren Operations from another logging tool, or bringing in an export from a flight-tracking app. It covers what Import CSV (on the Flight logs page) actually accepts today, and how to migrate a backlog of history from another product.

The CSV format

Import CSV accepts a file with these columns:

date,start_time,end_time,aircraft,pilot,purpose,location,notes
  • date / start_time / end_time — UTC. A flight where the end time is earlier than the start is treated as crossing midnight, so an overnight flight doesn’t need a second row.
  • aircraft — your aircraft’s tail number / registration, matched against your fleet case-insensitively. A Tobren aircraft ID also works if you happen to have one.
  • pilot — the crew member’s name, matched against your roster the same way. A Tobren pilot ID also works.
  • purpose, location, notes — optional.

If a tail number or name matches more than one record in your fleet or roster, that row is reported as an error naming the ambiguity rather than guessing — fix the duplicate, or use the Tobren ID instead for that row.

A row that already matches an existing scheduled flight or event is matched and amended in place rather than creating a duplicate log; the result panel reports this separately from rows that created a new log.

Aloft and AirData — supported directly

If you’re exporting from Aloft or AirData, upload the file exactly as those tools produce it — no column renaming needed. Both export takeoff/landing times, pilot name, and operation type under different header names (Takeoff (UTC), Landing (UTC), Remote Pilot, Operation Type), and Tobren Operations recognizes those headers as the same data as the generic format above. As long as the aircraft column holds the tail number and the pilot column holds the crew member’s name — true for both exports by default — the rows resolve to your fleet and roster automatically.

AirData also offers an ongoing connection, separate from a one-time CSV import: under Settings, connecting an AirData account with an API key syncs new flights on a schedule, rather than requiring a fresh export each time. That’s a different feature from the CSV importer described on this page — use whichever fits how you fly.

DJI exports

Upload a DJI export as-is — no column mapping needed.

DJI’s native flight-record export uses a different shape entirely — a Date / Time(UTC) / Duration(min) / Aircraft SN layout, with the flight’s end time computed from the duration rather than recorded directly, and a single aircraft and pilot for the whole file rather than one per row.

Because the file names neither the aircraft nor the pilot, the import screen asks you for them. Pick your CSV as usual; when Tobren recognizes it as a DJI export the screen says so and shows an Aircraft and a Pilot in command selector. Choose both — Import stays disabled until you have — and they are applied to every flight in the file. Everything else works the same as a generic import, including the duplicate check and the per-row error report.

Two things worth knowing before you upload:

  • One aircraft and one pilot per file. That is a property of DJI’s export, not a Tobren limit. If a single export covers more than one airframe or more than one pilot, split it and import each part with its own selection.
  • The aircraft has to be in your fleet and the pilot on your roster already. Add them under Fleet and Crew first; the selectors only offer what is there.

DJI flight records (the .txt files)

Import the flight records DJI Fly saves on your controller or phone — no export, no DJI account sync, no third-party app.

On Flight logs → Import, choose DJI flight records, pick one or more DJIFlightRecord_….txt files (up to 8 at a time), choose the pilot in command, and import. DJI Fly writes one record per flight; Tobren reads it on the server, including the encrypted records written by DJI Fly 1.2.2 and later.

For each flight, Tobren takes the aircraft’s serial number, the take-off time (UTC) and the flight time from the record, then:

  • matches the aircraft by serial number. The aircraft must be in your fleet with its serial number filled in. A record whose serial matches no aircraft is reported and not imported, naming the serial, so you can add it under Fleet and upload the file again.
  • matches a scheduled flight for that aircraft within 15 minutes, the same way a CSV import does: the scheduled flight’s draft log gets the recorded times instead of a second log being added.
  • otherwise creates a filed flight log with the pilot you chose.
  • notes what the aircraft flagged. If the record shows the aircraft lost its controller signal and returned home, forced a landing on low battery, hit a motor or IMU fault, or similar, the log’s notes say so. Routine returns to home and landings are not flagged. The log’s notes also carry the model, the serial and the maximum height above the take-off point (which is not the same as height above the ground beneath the aircraft). If a record carries no flight-action telemetry at all, nothing can be checked: the result and the log’s notes say anomaly check not available for this file rather than implying the flight was uneventful.

The result lists every file with what happened to it: imported, matched to a scheduled flight, already in Tobren, aircraft not in your fleet, or not imported (with the reason and what to do). Uploading the same file again is safe: a flight that is already in Tobren — from this file, a CSV export or AirData — is recognised and not added twice.

The file itself is not kept. A flight record holds the whole GPS track of the flight; Tobren reads what it needs and discards the file.

How to get the files

DeviceHowChecked on real hardware?
DJI RC running DJI Fly, over USBConnect it to your computer with a USB-C cable and open its storage. The records are in DJI Fly’s flight record folder, Android/data/dji.go.v5/files/FlightRecord.Yes
DJI RC 2Expected to work the same way as the DJI RC: USB-C to your computer, then the same DJI Fly folder.Not yet
DJI RC Pro, or DJI Pilot 2The RC Pro runs DJI Fly and is expected to use the same folder. DJI Pilot 2 (enterprise aircraft) keeps its records elsewhere; Tobren has not tried its files yet.Not yet
iPhone or iPadConnect it to a Mac and open it in Finder (on Windows, the Apple Devices app). Go to Files, open DJI Fly, and copy out the FlightRecords folder.Not yet
Android phoneConnect it with USB, choose File transfer on the phone, and open Android/data/dji.go.v5/files/FlightRecord. Some Android versions hide this folder from a computer.Not yet

If the import screen says DJI flight record import is not set up on this server, the server is missing its DJI app key; nothing was imported. Use a DJI CSV export meanwhile, or log the flight by hand.

Supported formats at a glance

Column names are matched case-insensitively and by exact name. Anything else in the file is ignored.

SourceRequired columnsOptional columnsNotes
Generic (our own)date, start_time, end_time, aircraft, pilotpurpose, location, notes, tagdate is YYYY-MM-DD; times are HH:MM or HH:MM:SS, 24-hour, UTC. aircraft_id and pilot_id are accepted as older names for aircraft and pilot.
AirData CSV exportDate, Aircraft, Pilot, Start Time (UTC), End Time (UTC)Location, NotesUpload as exported. Columns such as Duration (min), Distance (m) and Max Altitude (m) are not imported. Aircraft must hold the tail number and Pilot the crew member’s name.
Aloft CSV exportFlight Date, Takeoff (UTC), Landing (UTC), Aircraft, Remote PilotOperation Type, Location, NotesUpload as exported. Operation Type must be one of the purposes below, or blank.
DJI-style CSVDate, Time(UTC), Duration(min)Aircraft SNOne aircraft and one pilot for the whole file, chosen on the import screen. The end time is the start plus the duration, and that is what sets the flight hours.

Purposes accepted: commercial, training, maintenance, recreational, other. A blank purpose is recorded as commercial.

Not supported today:

  • DJI .dat files (the aircraft’s own flight-controller logs). DJI Fly’s DJIFlightRecord_….txt records are supported — see DJI flight records above.
  • Excel files (.xlsx). Save as CSV first.
  • Local-time columns. Times are read as UTC; there is no time zone setting.
  • Kittyhawk exports as they come. Map the columns to the generic format first.
  • Telemetry (tracks, distance, altitude, battery data). The importer creates flight logs, not flight paths.

When a row can’t be imported

Rows that import are saved even when others in the same file fail. Each row that fails is listed in the result panel with its row number (counting the header as row 1), what went wrong, and what to do about it. Download error report (CSV) saves the same list.

The usual causes and fixes:

What you seeWhat to do
Aircraft "N99ZZ" not found in your fleet.Add the aircraft under Fleet, or correct the tail number in your file.
CrewMember "…" not found in your roster.Add the pilot under Crew, or correct the name.
… matches 2 entries in your fleetRemove the duplicate, or put the Tobren ID in that cell.
Missing required fields …Fill in the blank cells for that row.
Invalid start datetime / Invalid end datetimeUse YYYY-MM-DD and HH:MM in UTC.
end_time must be after start_timeAn end equal to the start is rejected; an end earlier than the start is read as past midnight.
Invalid purposeUse one of the purposes listed above, or leave it blank.

Fix the rows in your file and upload it again, or put just the corrected rows in a new file. Rows that already imported are recognized by aircraft and times and are not duplicated.

What doesn’t import

The importer only creates flight logs. It does not bring over maintenance history, documents, client records, or invoices — those don’t have a CSV import path today and need to be entered or uploaded through their own pages.

Switching from Kittyhawk or Aloft

If you’re moving your whole operation’s history over, not just syncing new flights, here’s the order that avoids duplicate work:

  1. Set up your fleet and crew first. Add your aircraft with the same tail numbers / registrations they use in your old tool, and add your crew with the same names. The importer matches rows by tail number and pilot name, so getting these right first is what makes the import “just work” instead of producing a stack of not-found errors.
  2. Export your flight history to CSV from Kittyhawk, Aloft, or whatever you’re leaving. An Aloft export uploads directly (see above). A Kittyhawk export needs its columns remapped to the generic format — date, start_time, end_time (both UTC), aircraft, pilot, and optionally purpose, location, notes.
  3. Import in batches you can check. The importer accepts a full history in one file, but if you’re not sure your tail numbers and pilot names line up yet, start with a small file — a week or a month — confirm the result panel matches what you expected, then bring in the rest.
  4. Re-uploading the same file is safe. Tobren Operations recognizes an already-imported file by its exact contents and shows you the same result again rather than creating duplicates — so if you’re unsure whether an import completed, uploading it again does no harm.
  5. What doesn’t come across: maintenance logs, documents and certificates, and client/job/invoice history don’t have an import path (see above) — those need to be re-entered or re-uploaded by hand once your flight history is in.

Once your history is in, Compliance reports can produce an audit-ready record that includes it — that’s the payoff for having done the import in the first place.

What’s next

  • The import screen and correcting a filed log → Flight logs
  • Getting your fleet’s tail numbers and asset tags set up first → Fleet
  • Producing an audit-ready record from your imported history → Compliance reports