Supported imports
Every file type the flight log importer accepts, what each one gives you, and what to do with the formats it cannot read.
Import a recorded flight instead of re-typing it. Log → Import flight log takes a drop of several files at once and reports each one separately: imported, already in your logbook, or refused with the reason.
Import works on every plan, Free and Pro included. An imported flight lands in your personal logbook and feeds the drone you pick from your hanger. On Enterprise Solo and Enterprise you can instead file it under your organization, which adds client jobs, the aircraft serial registry, squadron drones and uploaded video files. A personal flight takes video links only.
What it reads
Every format in this table is checked against a test file whose layout comes from a published source. Where that test file was built from the published layout rather than a real export, the last column says so.
| Source | File | What you get | Tested against |
|---|---|---|---|
| Airdata (DJI, Autel and other drones synced to Airdata UAV) | Flight data .csv downloaded from Airdata | Duration, peak height and speed, distance from home, battery, GPS path | Airdata's published column layout, imperial units |
| DJI (DJI Fly, DJI Pilot 2, DJI GO) | DJIFlightRecord_*.txt converted with the free, open-source dji-log tool's CSV option | Duration, aircraft serial and name, peak height and speed, distance from home, battery, GPS path | The dji-log 0.5.7 column layout |
| DJI (DJI GO, roughly 2018 and earlier) | .txt FlightRecord, format version 5 and below, as is | Duration, peak height and speed, battery, GPS path | A file built from the public description of the format |
| Betaflight | CLI diff / dump text | Craft name, firmware, board, and any flight summary lines you added | Betaflight's CLI output |
| Betaflight | .bbl Blackbox log | Craft name, firmware, board, log date. Flight frames are not decoded. | Blackbox header lines |
| Anything | .csv with a time column or latitude and longitude columns | Duration, altitude, GPS path | Hand-written samples |
Units come from the column headers when they state them, so a column marked (feet), [ft], (meters), (mph) or (km/h) is converted correctly. Times with no time zone are read as UTC.
Peak height is height above the launch point. Where a file records altitude above sea level (GPX, most KML, IGC, ArduPilot), the importer measures from the first fix and says so on the flight.
Also accepted, not yet checked against a real export
These parse today, but we wrote their column layouts without a published source or a real file to test against. Check the numbers after import, and if one reads wrong, send us the file.
| Source | File | Notes |
|---|---|---|
| DJI | .txt FlightRecord, format versions 6 to 12 | The descrambling key matches the open-source decoder; the record layout is not yet tested on a real log |
| Autel | .csv flight record | Layout not confirmed. Syncing to Airdata and importing its CSV is the tested route. |
| Skydio | .csv from Skydio Cloud | A one-row-per-flight summary has no GPS path; the newest flight in a multi-row export is imported |
| Parrot (FreeFlight 6, ANAFI) | .csv flight export | A one-row-per-flight summary has no GPS path |
| Litchi | .csv export | No aircraft serial in the export |
| IGC | .igc track | No battery or speed channel in IGC |
| ArduPilot (Mission Planner, QGroundControl) | text .log DataFlash | GPS path, height and speed; the date and time come from GPS week time |
| GPX / KML | .gpx, .kml track | No battery channel in a track |
Supported extensions: .txt, .csv, .bbl, .dat, .gpx, .kml, .igc, .log, .bin.
DJI .txt logs, version 13 and newer. DJI encrypts every record with a
key it only issues through its developer API. BeaconUAV cannot decrypt these
offline, and refuses them rather than invent numbers from bytes it cannot
read.
To get those flights in: convert the log with the free dji-log tool (github.com/lvauvillier/dji-log-parser), which needs your own free DJI developer key for these versions, and import the CSV it writes. Or sync the flight to Airdata and import Airdata's CSV. DJI Fly, DJI Pilot 2 and DJI Assistant 2 do not export CSV themselves.
Autel .bin, ArduPilot DataFlash .bin, PX4 .ulg, .tlog. These are
packed binary containers we do not decode yet. Export the flight from your
ground station as a GPX/KML track or a text .log, or sync an Autel flight
to Airdata and import its CSV.
Import is file based. BeaconUAV does not connect to DJI Fly, DJI Pilot 2, Autel Sky or any other app, or to your manufacturer account.
Try it with sample logs
These files contain invented data and can be dropped into the importer without a real aircraft:
- DJI flight record converted with dji-log
- Litchi CSV
- Skydio summary CSV and telemetry CSV
- Parrot ANAFI CSV
- IGC track
- ArduPilot text log
- Betaflight CLI dump
- GPX track
- KML track
- Generic telemetry CSV
What is kept
The source file is uploaded for server-side parsing. After a successful parse, the app keeps the extracted flight record: time and duration, peak altitude and speed, battery readings, GPS bounds and home point, warnings, and a decimated GPS path when the file contains usable fixes. The raw source file is deleted after parsing, and a file that could not be parsed is deleted too. If storage cleanup is temporarily unavailable, it is retried. Parsed flight metrics remain available for the logbook and reports. A personal import is visible to you alone.
Limits
- 100 MB per file. A typical camera-drone log is well under this.
- 20 personal files in flight at once. A personal import that started uploading but never finished is cleared after a day, so drop it again.
- Duplicates are skipped. A file is identified by its content, so the same log dropped again — or re-downloaded under a new name — is reported as already imported rather than imported twice.
- Several files at a time. Drop a whole folder's worth; each file is reported individually and one bad file never stops the rest.
- One aircraft question per flight. Dropping a single file opens a preview first so you confirm the aircraft and job before anything is uploaded. Dropping several skips that and asks per flight as each one is reviewed.
How a flight finds its aircraft and battery
- If the log carries an aircraft serial (DJI
.txt, dji-log CSV, Autel.csv), it is matched against your organization's serial registry (flights filed under an organization only). A confirmed match offers Confirm this aircraft as one click, and also remembers the pairing so the next import resolves automatically. - Battery serials from DJI logs are read and stored with the flight so the pack can be tied to its own history.
- A log without a serial goes straight to the picker, where you choose the airframe yourself.
A track file (.gpx, .kml) has no battery data at all. The import shows
those fields as unknown rather than as zero — a missing reading is never
presented as a real one.
Betaflight and Blackbox
A CLI dump (diff, dump, a pasted status) is read in full: banner, craft
name, firmware version and every summary line.
A .bbl Blackbox log is read for its header block only — craft name, firmware,
board, log date. The per-frame data that would give an exact flight duration is
not decoded, and rather than report an approximate duration as if it were exact,
the importer says the duration is missing so it can be entered. Blackbox logs
decoded to CSV are not supported yet.
What happens next
An imported flight lands on your timecard with its duration, peaks and GPS path ready to review, and you confirm which airframe flew before it is accepted. Accepted flights feed the dashboard, the analytics views and the drone's service clock.