Every new operator starts with a 30-day free trial. See pricing

Flight Scheduling Spreadsheet: Columns, Formulas, Free Template

How to build a flight scheduling spreadsheet: one row per leg, local and UTC times, crew columns, conflict formulas, a free CSV template, and its limits.

By the Avion Desk team Published 12 min read

A three-engine business jet taxis on a ramp in front of snow-covered mountains.
Photo: David Syphers on Unsplash

A workable flight scheduling spreadsheet has one row per leg, not per trip. Each row carries the trip number, the aircraft, the departure and arrival airports, the departure and arrival times in both local time and UTC, the crew by seat, the passenger count and a status. With the times stored as UTC date-times, a few counting formulas can flag an aircraft or a pilot booked on two legs that overlap, and a lookup against the previous row can catch an aircraft scheduled out of an airport it never flew into. For a small operation, that’s enough to run the week. It stops working at duty and rest limits, maintenance due dates and the moment two people edit two copies of the file.

You can download the free flight schedule template (CSV) and open it in any spreadsheet. The three example rows are fictional and include one deliberate conflict. A CSV file holds values, not formulas, so the time and check columns show what the formulas below produce; paste the formulas in once you open it.

What columns should a flight scheduling spreadsheet have?

The template uses these columns, in this order. The letters matter because the formulas later in this post refer to them.

ColumnHeaderWhat goes in it
AtripYour trip number. Every leg of the trip repeats it.
Bleg1, 2, 3 within the trip
CstatusTentative, Confirmed, Canceled. Keep the list short and fixed.
DaircraftThe registration, typed exactly the same way every time
EfromDeparture airport, by its four-letter code
FtoArrival airport
Gdep_localDeparture date and time at the departure airport
Hdep_utc_offsetThe departure airport’s offset from UTC on that date, such as −5
Idep_utcDeparture in UTC (a formula)
Jarr_utcArrival in UTC (a formula)
Karr_utc_offsetThe arrival airport’s offset from UTC on that date
Larr_localArrival in local time (a formula)
Mest_block_hoursPlanned time for the leg, in decimal hours
NpicPilot in command
OsicSecond in command, blank for a single-pilot leg
PpassengersHead count
QpurposeBusiness, positioning, maintenance, training
RnotesAnything the next person needs
S to WchecksAircraft conflict, PIC conflict, SIC conflict, position check, turn time (formulas)

A few habits make or break the sheet. Spell each tail and each crew name one way only, because every formula below compares text exactly, and “A. Sample Pilot” and “A Sample Pilot” count as two people. A dropdown list (data validation) for aircraft, crew and status prevents most of these typos. Use airport codes, never city names, since one city can have several airports.

Passenger names don’t belong in the scheduling sheet. A schedule gets shared widely, and a manifest with names and travel documents should live somewhere with tighter access. Our trip sheet template covers what a single trip’s paperwork holds.

Why one row per leg?

Most first attempts put one trip on one row: “Monday to Wednesday, Teterboro to Denver and back.” That reads well and breaks every check. An aircraft is in one place at one time, a crew flies leg by leg, and every rule about flight time and rest counts legs and the hours between them. A trip-per-row sheet can’t tell you that the aircraft is in Denver on Tuesday, or that a pilot has a 0600 departure after a late arrival the night before.

With one row per leg:

  • Sorting by aircraft and then departure time gives you each aircraft’s day in order.
  • Sorting by crew gives a rough crew schedule.
  • Positioning legs show up as rows with zero passengers instead of disappearing.

The trip view is still there. Filter on the trip number and you see every leg of that trip.

Should a flight schedule use local time or UTC?

Both, for different reasons. The FAA works in UTC. AIM 4-2-12 says “FAA uses Coordinated Universal Time (UTC) for all operations,” and that when local time is given in radio and telephone communications, “the word ‘local’ or the time zone equivalent must be used.” Passengers, FBOs and hotel bookings live in local time. A schedule that holds only one forces somebody to convert in their head, and that is where an hour goes missing.

The safe pattern is to enter local time, store UTC, and run every check on the UTC columns. UTC never changes for daylight time, so subtracting one UTC time from another always gives the right number of hours. Subtracting local times across time zones or across a daylight-time change does not.

The daylight-time trap

The offset from UTC is not a property of an airport alone. It depends on the date. The AIM table gives the standard-time offsets (add 5 hours to Eastern Standard Time, 6 to Central, 7 to Mountain, 8 to Pacific) and adds “For daylight time, subtract 1 hour.” Under 15 U.S.C. 260a, daylight time runs from 2 a.m. on the second Sunday of March to 2 a.m. on the first Sunday of November, and a state may exempt itself, or exempt the part of it that lies in one time zone. In 2026 that Sunday is November 1.

The template’s example trip crosses that date on purpose. The times are illustrative.

LegDeparts (local)OffsetDeparts (UTC)Arrives (UTC)OffsetArrives (local)
T-1001, leg 1, KTEB to KDENFri Oct 30, 08:00−412:0016:00−610:00
T-1001, leg 2, KDEN to KTEBMon Nov 2, 14:00−721:0000:30 Nov 3−519:30

Both airports moved one hour between the two legs. A sheet with a fixed offset per airport would put the return leg’s UTC times an hour off, and every conflict and rest check built on them would be off too. Enter the offset per leg, for that date. If you keep an airport list with offsets on a second tab, give it a standard offset and a daylight offset, and decide per leg which one applies.

How to set up the time formulas

Format columns G, I, J and L as date and time, and keep the offsets in H and K as plain numbers (-5, not -05:00). Spreadsheets count dates in days, so one hour is 1/24.

  1. Departure in UTC (I2). =G2-H2/24. With an offset of −4, this adds four hours to the local time.
  2. Arrival in UTC (J2). =I2+M2/24. The planned block time in hours, converted to days.
  3. Arrival in local time (L2). =J2+K2/24. The arrival airport’s offset, for the arrival date.
  4. Fill down. Copy the three formulas down the whole sheet, and protect those columns so nobody types a time over a formula.

How do you check for double-booked aircraft and crew in a spreadsheet?

Two legs overlap when each one starts before the other ends. A counting formula with conditions (COUNTIFS) can test that for every row at once. The ranges below run to row 500; make them longer if your sheet is.

For the aircraft conflict, put this in S2:

=COUNTIFS($D$2:$D$500,D2,$I$2:$I$500,"<"&J2,$J$2:$J$500,">"&I2)>1

This counts the legs on the same aircraft that depart before this leg arrives and arrive after this leg departs. The leg always counts itself, so anything above 1 is a double booking. Because the comparisons are strict, a leg that departs the minute the previous one arrives is not a conflict.

For the PIC conflict, in T2:

=COUNTIFS($N$2:$N$500,N2,$I$2:$I$500,"<"&J2,$J$2:$J$500,">"&I2)+COUNTIFS($O$2:$O$500,N2,$I$2:$I$500,"<"&J2,$J$2:$J$500,">"&I2)>1

A pilot can sit in either seat, so the formula looks for the same name in both crew columns.

For the SIC conflict, in U2:

=IF(O2="",FALSE,COUNTIFS($N$2:$N$500,O2,$I$2:$I$500,"<"&J2,$J$2:$J$500,">"&I2)+COUNTIFS($O$2:$O$500,O2,$I$2:$I$500,"<"&J2,$J$2:$J$500,">"&I2)>1)

The IF skips single-pilot legs, which would otherwise match every other blank.

Add conditional formatting that turns the row red when any of the three is TRUE. In the template, the tentative trip T-1002 puts the same aircraft and the same PIC on a Teterboro to Boston leg from 20:30 to 21:30 UTC on November 2, while T-1001’s return leg is airborne from 21:00. Both rows show TRUE in the aircraft and PIC columns.

Canceled legs should not block anything. Either move them to a separate tab or add $C$2:$C$500,"<>Canceled" as one more condition in each COUNTIFS.

Is the aircraft where the schedule says it is?

Overlap isn’t the only way to double-book an aircraft. T-1002 also departs Teterboro when the aircraft is sitting in Denver. To catch that, sort the sheet by aircraft and then by departure UTC, and compare each leg’s departure airport with the previous row’s arrival airport.

  • Position check (V3): =IF(D3=D2,E3=F2,TRUE). FALSE means the aircraft departs from somewhere it didn’t arrive. Either a positioning leg is missing or a leg is wrong.
  • Turn time (W3): =IF(D3=D2,(I3-J2)*24,""). Hours on the ground since the aircraft’s previous leg. Flag anything under the minimum your own operation sets, and anything negative, which is an overlap.

These two only work while the sheet stays sorted. Insert a row in the wrong place and they compare the wrong legs without telling you.

A weekly routine for the schedule

A spreadsheet holds up better with a fixed routine. A checklist you can adapt:

  1. Sort by aircraft, then departure UTC.
  2. Confirm the UTC offset on every leg in the coming week, especially in March and November.
  3. Clear every TRUE in the conflict columns and every FALSE in the position column.
  4. Check turn times against your minimum.
  5. Check crew rest by hand against the rules that apply to you (see below).
  6. Check each aircraft’s next maintenance due date against the week’s planned hours.
  7. Move canceled and completed legs to an archive tab rather than deleting them.
  8. Save a dated copy, then tell everyone which file is the current one.

Steps 5, 6 and 8 are where most of the time goes, and where the spreadsheet itself stops helping.

Where a flight scheduling spreadsheet breaks down

A spreadsheet is a fine start for one or two aircraft and a small crew list. It fails in these places as the schedule grows.

Duty and rest checks

Overlap formulas compare legs. Duty and rest rules are about duty periods, rolling windows and totals, and a leg row doesn’t hold any of those. For an unscheduled Part 135 operator, 14 CFR 135.267(b), unless the duty-period option in paragraph (c) applies, limits flight time in “any 24 consecutive hours” to “8 hours for a flight crew consisting of one pilot” or “10 hours for a flight crew consisting of two pilots qualified under this part for the operation being conducted,” and 135.267(d) adds that “Each assignment under paragraph (b) of this section must provide for at least 10 consecutive hours of rest during the 24-hour period that precedes the planned completion time of the assignment.” Paragraph (a) caps flight time at 500 hours a calendar quarter, 800 in two consecutive quarters and 1,400 in a calendar year, all counting other commercial flying too.

Fractional programs work from a table in 14 CFR 91.1059(c) that sets minimum rest before and after duty, a duty period of up to 14 hours, and a “Minimum After Duty Rest Period for Multi-Time Zone Flights” of 14 hours under normal duty. A spreadsheet has no idea which flights count as multi-time zone, when a pilot reported or was released, or what other commercial flying they did that week.

You can get partway with a formula. The latest earlier arrival for a pilot is =MAX(MAXIFS($J$2:$J$500,$N$2:$N$500,N2,$J$2:$J$500,"<="&I2),MAXIFS($J$2:$J$500,$O$2:$O$500,N2,$J$2:$J$500,"<="&I2)), and subtracting it from I2 gives the hours since that pilot last landed. That number isn’t rest. The pilot was on duty before the first departure and after the last landing, and a positioning flight or standby day that never made it onto the sheet changes the answer. Rolling 24-hour flight time and quarterly totals need a separate calculation per pilot, per date. Our guides to Part 135 duty time limits and Part 91K duty and rest go through the rules in full.

Double-booking you can’t see

The conflict formulas only see rows in the same sheet and the same ranges. A crewmember on vacation, a simulator session or an aircraft down for an inspection isn’t a leg, so it blocks no booking unless someone adds a row for it. Neither does a qualification. Nothing in a cell knows that a pilot isn’t qualified on the aircraft they’ve just been typed next to.

Maintenance coming due

A schedule row knows the planned hours of one leg. It doesn’t know the aircraft’s current hours, the next inspection due by hours or date, or how fast the aircraft is using up the margin. You can add a lookup to a maintenance tab, but the counters on that tab are only as current as the last time someone typed them in. That is how a trip gets booked across an inspection due date. Our aircraft maintenance tracking guide covers what a proper record needs.

Version conflicts

The scheduler saves “Schedule FINAL.xlsx,” a pilot keeps last week’s copy on a tablet, and a dispatcher edits a printout. A file shared in the cloud helps, but two people changing the same leg at once still ends with one change winning without anyone noticing. Each copy runs its conflict checks only against itself.

No history

When a departure moves from 08:00 to 10:00, the cell just shows 10:00. Who changed it, when, and what it was before are gone unless someone writes a note. That matters when a passenger says they were told 08:00, and more when someone asks after an incident what the crew was scheduled to fly. Saving dated copies preserves snapshots, but comparing them is manual work.

Scheduling in Avion Desk

In Avion Desk you build each trip leg by leg, finding airports by code or name, and enter each time in that airport’s local time; it’s stored once and shown correctly everywhere. Every save is checked against the aircraft, the crew and duty, and you see the result each time you save, with problems named and an admin’s override recorded with a note. A pilot seated on an aircraft they aren’t qualified on is flagged, and duty and rest are checked whenever the schedule moves, against an editable Part 91 company policy or, on the plan for charter operators, the Part 135 and Part 91K rules. Every change is kept in the trip’s history. See the trips and scheduling features.

To try it, start a free trial, bring your fleet and crew in from CSV, and enter next week’s trips, or request a demo.

Frequently asked questions

Can you schedule aircraft in a spreadsheet?

Yes, for a small fleet. Use one row per leg, store departure and arrival in UTC, and add counting formulas that flag overlapping legs for the same aircraft or the same pilot. The free template has the columns set up.

Should a flight schedule be in local time or Zulu?

Keep both. Enter local time, which is what passengers and FBOs use, and calculate UTC from it, which is what the FAA uses for all operations (AIM 4-2-12). Run every check on the UTC columns.

How do I convert local time to UTC in a spreadsheet?

Subtract the offset divided by 24: =local-offset/24. For an airport at UTC−5, that adds five hours. Use the offset in effect on that date, because daylight time changes it by an hour.

How do I find double-booked aircraft in a spreadsheet?

Count the legs on the same aircraft that depart before this leg arrives and arrive after it departs: =COUNTIFS(aircraft,D2,dep_utc,"<"&J2,arr_utc,">"&I2)>1. Any TRUE is an overlap. Use the same pattern for crew, checking both seats.

Can a spreadsheet check duty and rest limits?

Only roughly. A formula can show hours since a pilot’s last arrival, but rest under rules like 14 CFR 135.267 depends on report and release times, rolling 24-hour windows and quarterly totals that a leg row doesn’t hold.

This article explains the rules in plain language and isn’t legal advice; the regulation text governs.

See it on an operation like yours.

Try it free for 30 days on your own aircraft and crew, with nothing charged. Or we show it to you on a call, at a time you choose.