This is a simple, open source, cross-platform tool that converts a downloaded easyJet AIMS detailed roster (in HTML format) into either a CSV format suitable for importing/pasting into spreadsheets/databases or an iCal format suitable for importing into calendar programs.

Your AIMS credentials are not required, so it is fully compatible with easyJet's acceptable use policies.

You will need to have Version 3.7 or later of the Python interpreter installed on your system (instructions below). The aimsgui tool itself does not require installation — just download the file from hursts.org.uk, place it somewhere convenient and run it as you would any executable file (e.g. on Windows, place it on your Desktop and double click it). To remove it from your system just delete the downloaded file.

Installation of Python interpreter


If you do not already have an up to date Python interpreter installed, go to https://www.python.org/downloads/ where you can download a standard Windows installer.


If you are running a reasonably up to date distro, you will almost certainly already have Python 3.7 or later preinstalled. If your distro packages it separately, you may need to install the Python3 tkinter package, which will be available in your distro's repositories: on Debian/Ubuntu this is the python3-tk package.

If you are using a very old distro, a quick google will provide multiple ways of installing an up to date version of Python and running it alongside the pre-installed one.


The version of Python preinstalled on MacOS is badly out of date, so if you have not already done so you will either need to grab an installer from https://www.python.org/downloads/ or use homebrew. I don't have any Apple hardware to check, but the Internet indicates that running parallel versions of the Python interpreter is straightforward.

Starting aimsgui


The Python installer associates the .pyw file extension with the Python interpreter, so you just need to double click the aimsgui.pyw file to run it.


In the first instance, open a terminal window and:

     $ cd /path/to/where/you/put/downloaded/file
     $ python3 aimsgui.pyw

If you set the executable bit on the file, it can also be run directly, i.e:

     $ cd /path/to/where/you/put/downloaded/file
     $ ./aimsgui.pyw

And if you put it somewhere in your PATH:

     $ aimsgui.pyw

If you want a desktop launcher it should be straightforward to use whatever method your desktop environment provides to create one.


I don't have any suitable hardware to check, but since MacOS has UNIX underpinnings, the instructions for Linux should work.

How to use

  1. Download an AIMS detailed roster from ecrew in HTML format:

    Select "Crew Schedule - Detailed" from the main eCrew page. On the "Crew Schedule - Detailed" page that opens, set the start date and number of days you require. Click "Show Schedule" and a detailed roster will eventually appear. Above this roster you will see:

    Right click on the highlighted link to get the HTML version.

  2. Choose either Logbook output, which produces a CSV format text file, or Roster output, which produces an iCal file. If you choose the CSV file, set your flight deck role to get the correct data in the "Captain" and "Role" fields. FOs will need to manually change the "Role" from p1s to p2 where appropriate as this information is not available from AIMS. Registration and Type data are available when processing rosters from 2019 onwards.

  3. Click the "Import" button and select the downloaded roster. The file with the output type you chose will appear in the text window. You can edit it here if you wish. You can also select a part of it for copying to the clipboard.

  4. Click either the "Copy All/Selected" or the "Save" button as required.


I have tested against three years worth of my detailed rosters, so hopefully I have seen most of the weirdness that rostering and crewing can insert into your roster. There is, however, still a reasonable chance that there will be something odd in one of your rosters that I have not come across yet. If this happens, please send a copy of the offending roster to me at hursts.org+badroster@gmail.com and I will fix the code to handle that particular weirdness. In the meantime, if there is something that is obviously odd on your roster, you can download two shorter rosters that don't include the offending item and fill in the problem item manually.

One particular problem associated with using the detailed roster as a source of logbook and rostering data is that there may be incomplete entries at the start and end of the roster caused by a duty extending over midnight. Where this has happened the associated output data will be incomplete or spurious. This can generally be solved either by downloading a roster that covers both sides of the duty or by manually editing the affected duties.

Using the output

CSV text format

The CSV file is designed to be used with spreadsheets or databases. In particular, the "Off Blocks" and "On Blocks" fields are in a format that spreadsheets recognise and automatically translate into their internal datetime representation. This internal representation is actually a simple floating point number, to which you apply date and/or time number styles to achieve whatever representation you desire. This means that you can easily calculate the total duration of a set of off/on pairs by subtracting the sum of the off blocks times from the sum of the on blocks times; you can then apply a duration number style to this result to get an hours:minutes representation. You can have a look at a quick example I whipped up here.

I have done the majority of my testing with Google Sheets, which has the benefit of being free and having Google take care of your backup strategy. The easiest way to get the data into this is to paste it where you want it then click the popup clipboard icon which gives you the option of splitting the data into columns.

iCal format

I have mainly tested with Google Calendar, although I have confirmed that import to the company supplied Outlook 365 also works correctly. After import, the duty appears on the calendar as a route, and clicking the entry will show you the sectors in the event description.

A unique ID is generated for each duty on the detailed roster by appending the route to the scheduled duty start time. This means that if you reprocess a detailed roster after receiving changes, the duties that have not changed will retain the same ID. Uploading subsequent iterations should not, therefore, cause duplicate entries. For each change you will, however, need to manually remove the original duty; luckily on Google Calendar this is a two click operation.