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 flights (on the Flight logs page) actually accepts today, and how to migrate a backlog of history from another product.

Choose CSV export in the Import flight logs dialog. It accepts a file (up to 10 MB) 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 — optional. The crew member’s name, matched against your roster the same way (a Tobren pilot ID also works). A blank pilot imports with your workspace’s only active crew member, or none, and you set the pilot in review. A pilot that is named but not found is a row error.
  • purpose, location, notes — optional.

Imported flights arrive as drafts. Open Review imported flights (or the Drafts tab on Flight logs), check the pilot and purpose, then file them. Hours count only once a flight is filed. A row that matches a scheduled flight updates that flight’s draft in place instead.

If an imported flight overlaps one you already logged on the same aircraft, its row in review shows a warning with a link to the existing log; it is a prompt to check, not a ruling that they are the same flight, so open both and discard the duplicate before filing.

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.

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. AirData offers API access on its Enterprise plan only, and issues the API key on request: ask AirData support for your key, then paste it there. On any other AirData plan, use the CSV export below. That’s a different feature from the CSV importer described on this page — use whichever fits how you fly.

What the sync does with flights it can’t bring in on the first try, shown under Settings → Airdata sync after each run:

  • Failed to import — tried again on the next sync.
  • Couldn’t be matched (usually the aircraft isn’t in Fleet yet) — add or correct the aircraft in Fleet and the next sync brings them in. These flights are retried on every sync until they come in; nothing is dropped while you sort out Fleet.
  • Can’t be imported — AirData sent no aircraft serial, start time or duration for the flight. These are not retried; add them by hand under Flight logs if you need them.
  • Still catching up — one sync fetches up to 2,000 flights; the rest arrive on the following syncs.
  • Only one sync runs at a time per workspace. Sync now while a scheduled sync is running says so; try again in a minute.

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.

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

Click Import flights on the Flight logs page, choose DJI flight records, pick one or more DJIFlightRecord_….txt files (up to 8 at a time, 15 MB each), optionally choose the pilot in command, and import. If you leave the pilot blank, your workspace’s only active crew member is used, otherwise you set it in review. 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 adds a draft flight log for you to review and file.
  • 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 recording app version. The maximum height above the take-off point is stored in its own field (it 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 at full rate; Tobren reads what it needs and discards the file. For a flight that becomes a new draft, it keeps a simplified GPS track (at most 2,000 points, always including take-off, landing and the highest point) so the flight can be drawn on a map, and an estimated maximum height above the ground, worked out from a few points of the track and the U.S. Geological Survey’s terrain data. The estimate is labelled as an estimate and never replaces a height you record yourself. A flight matched to a scheduled flight does not keep a track yet.

Not available yet. Tobren is waiting on its AirData app key. Until then, the setting below says it isn’t available, and nothing is sent.

If you also keep your flights in AirData, you won’t need to upload them twice. Under Settings → Airdata sync → Send my DJI logs to AirData, paste your AirData Auto Upload Token (in AirData, open My Account; free AirData accounts have one too). AirData checks the token before Tobren saves it. Tobren stores it encrypted and does not show it again.

From then on, each DJI flight record you import into Tobren is also sent to your AirData account, while the upload is in progress:

  • It is your own setting, in this workspace. A colleague’s uploads are never sent to your account, and yours are never sent to theirs.
  • Only records Tobren used are sent: new drafts, matched scheduled flights, and flights that were already in Tobren (AirData may not have those). A file Tobren refused, such as an aircraft that isn’t in your fleet or a file it couldn’t read, is not sent.
  • The import result and the flight log show what happened to each record: Sent to AirData, Sent — AirData is still processing it, or Not sent, with the reason. To retry, upload the file again.
  • Sending to AirData never holds up or fails your Tobren import. If AirData is slow or down, the flights import as usual and the record shows Not sent.
  • Tobren still does not keep the file. It is sent from the upload itself.

To stop, choose Turn off. That deletes the token.

The Enterprise sync described above works the other way round: it brings flights from AirData into Tobren.

Device How Checked on real hardware?
DJI RC running DJI Fly, over USB Connect 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 2 Expected 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 2 The 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 iPad Connect 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 phone Connect 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.

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

Source Required columns Optional columns Notes
Generic (our own) date, start_time, end_time, aircraft pilot, purpose, location, notes, tag date 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 export Date, Aircraft, Pilot, Start Time (UTC), End Time (UTC) Location, Notes Upload 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 export Flight Date, Takeoff (UTC), Landing (UTC), Aircraft Remote Pilot, Operation Type, Location, Notes Upload as exported. Operation Type must be one of the purposes below, or blank.
DJI-style CSV Date, Time(UTC), Duration(min) Aircraft SN One 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 stays unset; you choose it during review.

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.

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 see What 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 fleet Remove 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 datetime Use YYYY-MM-DD and HH:MM in UTC.
end_time must be after start_time An end equal to the start is rejected; an end earlier than the start is read as past midnight.
Invalid purpose Use 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.

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.

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, and optionally pilot, purpose, location, notes.
  3. Import in batches you can check. The importer accepts a full history in one file (up to 10 MB), 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.

  • 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