Every flight in UAS Dashboard starts as data from somewhere else — a log file on a controller, a vendor cloud account, or a pilot's memory of a flight the aircraft never recorded. This article covers each of those paths, what each fills in, and how the system keeps one flight from becoming three records.
Any signed-in user can upload a log. Adding vendor credentials and uploading flight spreadsheets are System Admin jobs; logging manual hours for a pilot requires Supervisor or above.
Before you start. Find Import in the sidebar under Management. It is visible to
everyone on every plan — file upload is part of the base flight-log product. The AirData section
inside the page only appears on instances that have the integrations feature and a saved API key.
How flight data gets in
There are four lanes, and most programs use two or three at once. All four end up as one canonical flight record on the Flights list and the flight map; what differs is how much of it arrives filled in.
| Path | Where you do it | Who can use it |
|---|---|---|
| Log-file upload | Import page (drag and drop) | Any signed-in user |
| Mobile auto-sync | The mobile app's sync settings | Any signed-in user |
| Connected source | Admin → Integrations, then automatic | System Admin sets it up |
| Manual entry | A pilot's Manual Hours tab | Supervisor and above |
Uploading log files on the Import page
The Import page's drop zone takes standard flight logs from any aircraft, with no vendor account involved. Drag files onto it, or click browse files to pick them.
| Format | Extensions | Typical source |
|---|---|---|
| ArduPilot DataFlash | .bin | Mission Planner, ArduPilot autopilots |
| MAVLink telemetry log | .tlog | Ground stations recording a MAVLink link |
| PX4 ULog | .ulg | PX4 autopilots |
| GUTMA | .json, .gutma | Vendors that export the open GUTMA format |
| DJI flight record | .txt | DJI Fly, GO 4, Pilot, and smart controllers |
You can select many files at once; the limit is 40 MB per file, and up to 20,000 telemetry points are stored per flight. Each file reports its own result line — format, points, duration and distance — so a batch that half succeeds tells you which halves.
On a DJI smart controller (RC Plus / RC Pro)? You don't need to export anything. Install
the Android app directly on the controller, grant the DJI Pilot 2 flight-record folder once,
and every flight uploads itself about a minute after landing — see
DJI records need one extra piece. DJI flight records from log version 13 onward are
encrypted, and decrypting them requires a DJI Open API key configured on your instance. Without
it the upload fails with a message saying so, rather than silently dropping the flight — ask your
System Admin to add the key, then re-upload.
Syncing from a connected source
Connected sources pull flights in without anyone touching a file. A System Admin enters the credential once under Admin → Integrations, where it is encrypted at rest and never shown again.
- AirData — the Import page grows a section with three cards: Flights, Pilots and UAS. Each stages what AirData has, minus anything already in your database, into a review table where you can edit a row, import one, or use Add All.
- Skydio Cloud — save an organization API token, then use Sync now or let the schedule run.
- DJI FlightHub 2 — save the API token; flights arrive the same way.
- DJI Dock 3 — point the dock's bridge at the endpoint the admin page shows, sending the receiver secret in the
x-dock-secretheader.
Skydio and FlightHub sync on a timer as well as on demand: the instance keeps a per-source cursor and re-polls when it goes stale. Dock flights push in as they land.
Connected sources are an Enterprise capability. The
integrationsfeature is never availableon the shared Core instance, on any plan. File upload, mobile sync and manual entry all work
everywhere.
Hands-off imports: mobile sync and the desktop watcher
Two tools automate the upload step for logs that live on a device.
The mobile app syncs a folder. Turn on Auto Sync Flight Logs in its settings, point the folder picker at the app folder that directly contains the flight records, and tap Sync Now. New flights then upload when you open the app, and Sync depth — 1 day, 1 week, 2 weeks, 1 month, or All — controls how far back each scan looks. The app asks the server which files it already holds first, so a reinstalled phone or a second device on the same controller does not re-send everything.
The desktop log-sync tool watches a folder on a computer and uploads new standard-format logs on a poll interval — a Mission Planner folder, an SD-card mount, or a folder you copy controller records into. It authenticates with the instance's ingest key rather than a login, and handles .bin, .ulg, .tlog, .gutma and .json. Encrypted DJI .txt records are not part of that lane; upload those through the web page or the mobile app.
Logging hours when there is no log
Some flights never produce a retrievable log. Record those by hand so totals and currency stay honest.
- Open the pilot's page from Pilots and select the Manual Hours tab.
- Choose Log Hours.
- Enter the date and a duration in minutes, plus optional aircraft type, night flag, and notes.
Manual entries count toward the pilot's totals and currency alongside imported flights, but they are hours, not flights: no track, no aircraft record, nothing on the map. Supervisors and above can add and remove them. For what currency actually requires, see the Part 107 guide.
For bulk historical data there is a spreadsheet lane. Under Admin → Integrations → Manual flight upload, a System Admin can upload a decrypted flight export as CSV or JSON. Column names are matched loosely — takeoff time, serial, pilot, duration, latitude and longitude are each recognized under several spellings — and rows carrying neither a time nor a serial are skipped. These become real flight records, but with no telemetry track.
One flight, one record: how duplicates are reconciled
Every import, whatever its lane, is written as a canonical flight: one record keyed by your instance, the source it came from, and that source's own flight ID. That key is unique, which is what makes re-importing safe — a second copy updates the existing record instead of creating a new one.
Reconciliation is deliberately conservative about what an update may overwrite:
- Telemetry completeness only improves; a resync carrying no track cannot downgrade a flight that already has one.
- Photos and videos merge by ID rather than replacing the previous list.
- A pilot assigned after import — by hand or by checklist — is never clobbered by an empty pilot field from the vendor, and a manually set title is never overwritten by auto-enrichment.
Uploaded files get a second layer of protection: the server ledgers every log file it has ingested by name and size, so re-dropping a folder you already uploaded is a no-op. Logs without a source flight ID get one derived from their takeoff time, aircraft serial and sample count. AirData rows are filtered against your existing records before staging and checked again on save.
Re-uploading is safe; renaming is less tidy. The file ledger matches on name and size, so a
log you renamed looks new to it — the flight itself still reconciles on its content-derived ID,
so you get one flight, not two.
How imported flights connect to pilots, units, and aircraft
Most log formats do not name a pilot, so attribution follows a chain. The log's own pilot name wins if it has one. Otherwise a signed-in person's upload goes to their linked pilot record, falling back to their display name. Machine uploads — the desktop watcher, docks, vendor APIs — have no user, so they land on the agency's catch-all pilot, set under Admin → Flight Checklists → Dashboard settings. Completing that flight's checklist promotes whoever filled it out to Remote PIC, which is how autonomous and dock flights find their operator.
The unit follows the pilot: the pilot record's unit first, the importing user's unit as a fallback. Aircraft match on serial, and a serial not yet in your UAS registry is added with status pending so someone reviews it rather than finding a silently active airframe. It is mirrored into equipment so airframe hours accumulate, and battery serials link to their equipment records the same way.
Here is where each part of a flight record comes from:
| On the flight record | Filled from |
|---|---|
| Takeoff, landing, duration | First and last usable GPS fix in the log |
| Track, max altitude, max speed, distance | The parsed telemetry samples |
| Aircraft make, model, serial | The log header, when the format carries it |
| Battery start and end percentage | The log's battery telemetry |
| rPIC | Log pilot, then importer, then catch-all pilot |
| Unit | The rPIC's unit, then the importer's unit |
| Title and address | Takeoff date and time; reverse-geocoded takeoff point |
Weather and nearby TFRs are captured automatically for new imports, and every import is written to the audit log with the format it came from.
When a log is missing data
- No usable position fix. The flight is rejected — there is nothing to build a record from. Log the hours manually instead.
- A bad clock. Pre-GPS-lock samples and glitched timestamps are filtered out; when a whole log carries an implausible clock the timeline shifts so relative timing survives, and a DJI record whose filename holds the real local date and time is rebased onto it.
- No pilot named. Attribution falls through the chain above. Fix it on the flight page — a Supervisor can add or change participants, including Pilot in Command.
- No aircraft serial. The flight imports, but nothing is added to the fleet and no airframe hours accrue.
Frequently asked questions
What file types can I upload?
The Import page accepts ArduPilot DataFlash .bin files, MAVLink .tlog telemetry logs, PX4 .ulg logs, GUTMA logs as .json or .gutma, and DJI flight records as .txt. Files are limited to 40 MB each, and you can drop several at once. If a file's extension is unusual, the parser still inspects the contents before rejecting it.
Will re-uploading the same log create a duplicate flight?
No. The server keeps a ledger of ingested files by name and size, and separately keys every flight by its source and source flight ID. A repeat upload updates the existing record rather than adding a second one. Dropping an entire folder onto the page when only a few files are new is the intended way to use it.
Why is my imported flight attributed to the wrong pilot?
Most log formats do not record who flew. When you upload a log yourself, it is attributed to you. Machine and dock imports go to the agency's catch-all pilot instead. To correct it, open the flight and have a supervisor set the Pilot in Command participant, or have the pilot complete the flight's checklist, which claims the flight for whoever filled it out.
Do I need AirData to use UAS Dashboard?
No. AirData is one optional source among several, available on Enterprise instances once an admin saves an API key. File upload, mobile folder sync, the desktop watcher and manual hour entry all work without any vendor account, and they cover any aircraft that writes a standard log format.
My drone never produced a log file. What do I do?
Log the time by hand on the pilot's Manual Hours tab. Enter the date, duration in minutes, and optionally the aircraft type and whether it was a night flight. Those hours count toward the pilot's totals and currency the same as imported flights, though they carry no track and do not appear on the flight map.
Where to go next
Flight records and maps covers what to do with the flights once they are in — the track view, missions, participants and exports. If you are still setting the program up, getting started walks through the pilots, units and aircraft imported flights attach themselves to, and the UAS recordkeeping guide covers what you are required to retain.