How to Use ITA Matrix Like a Pro, Part 1

Over the years, I’ve lost track of the number of hours I’ve spent playing around with ITA Matrix, a very powerful piece of software originally created by MIT scientists in the 1990s and now owned by Google.

ITA Matrix feels like Google Flights on steroids, as though it was developed specifically for aviation geeks like ourselves who’d go to great lengths to guarantee an aircraft type, book the absolute tightest connection, or earn the most qualifying miles for our dollar.

Despite its power, ITA Matrix is not necessarily known for being the most user-friendly. So while we’ve mentioned it in passing a few times on the blog, it’s now time to dig a little deeper into the inner workings of one of the most powerful flight-search tools out there.

This installment is Part 1 of a two-part series on ITA Matrix’s full suite of features. We’ll cover the basics of ITA Matrix with some of the more common filters and specifications in this post, with the second installment being significantly more advanced.

In This Post

Basic Search Options

ITA Matrix is accessible at the website matrix.itasoftware.com, and the search engine is available directly on the home page.

To start, we have options for round-trip, one-way, or multi-city flights at the very top of the screen. We’ll focus on one-way flights for most of this guide, as round-trips follow essentially the same process with the opposite direction included, while multi-city searches will be saved for Part 2.

We begin by inputting our origin and destination airports. ITA Matrix allows you to input either the airport code or the city name, where the city name encompasses all airports within the city. For example, “Toronto, ON, Canada – All airports” would include Toronto Pearson (YYZ) as well as Toronto Billy Bishop (YTZ).

I recommend sticking with airport codes for most searches for maximum precision, especially as things get more advanced later on.

The first noteworthy feature is ITA Matrix’s “Nearby” button, which identifies nearby airports to the one you’ve selected that can allow you to save money on airfare. After all, for the budget-conscious traveller, a short Greyhound ride can prove to be a worthy endeavour if it allows you to save a few hundred bucks on your flights.

After inputting “YYZ” for Toronto, the Nearby button will appear on the right, and you’re able to click on it and input how many miles you’re willing to commute outside of your preferred city. You can either pick them individually or simply “Select all”, and the field will automatically populate with the corresponding airport codes.

Screen Shot 2020-07-22 at 3.08.23 PM.png

The same goes for the Destination field, where you can choose to fly to any airport within a certain distance from the one you prefer. This is particularly useful for Europe, since airfare can vary significantly between neighbouring countries: for example, flying into Munich instead of Salzburg (a mere 68 miles away) can often be significantly cheaper.

Next, we have the dates. You can choose between “Search exact dates” or “See calendar of lowest fares”.

The former option allows you to specify exact dates, but also lets you expand that selection to the day before, the day after, +/- 1 day, or +/- 2 days using the drop-down menu on the right (similar to how ExpertFlyer’s flexible date selection works). You can also filter for the preferred time of day for your departing flight.

With the calendar, you’ll be looking one month at a time, so you’ll begin by selecting the first date of your desired month-long period. ITA Matrix will return an entire month’s worth of airfare results in the form of the calendar over this month-long period.

If you’re booking a round-trip, then you’ll also choose the length of your stay in terms of the number of nights (either a fixed number or a range); ITA Matrix will then search for the cheapest fares across the entire range of possibilities for outbound and departure dates.

Screen Shot 2020-07-22 at 3.11.04 PM.png

Then, you can also specify the number of passengers, class of service, and how many stops you’d like on your journey. The “Stops” setting allows you to set an absolute limit on the number of connections, whereas the “Extra stops” allow you to specify how many stops beyond the minimum possible number of stops that you’d be comfortable with.

Finally, you can toggle whether you’d like to allow airport changes on the way (such as flying into LaGuardia and out of JFK, if it’ll result in a cheaper fare), your preferred currency (I like to set this as CAD or USD for easy comparison), and the “sales city” of the fare (accounting for the fact that airfare and/or fare availability can often vary depending on where it is purchased).

Advanced Controls

We can see an “Advanced Controls” button just under the Origin and Destination input fields. Clicking on these will cause a couple of additional fields to appear: Routing codes and Extension codes.

There’s a little question mark you can click on, which will provide more information on what arguments these fields accept as parameters and the appropriate syntax.

We’ll begin with the Routing codes. There are generally two types of codes we can input as Routing codes: preferred connections and preferred airlines. ITA Matrix’s list of examples for Routing codes is as follows, and we’ll also take a look at some of our own examples:

Here are a few of the rules you can use to specify an exact type of itinerary on an exact airlines, using the two-letter IATA code for the airline:

  • “AC”: Direct flight on Air Canada

  • “AC+”: One or more flights on Air Canada

  • “~AC”: Direct flight that must not be on Air Canada

  • “~AC+”:

  • Combining the above rules using a comma separator:

    • “AC,UA”: Direct flight on either Air Canada or United

    • “AC,UA+”: One or more flights on either Air Canada or United

    • “~AC,UA”: Direct flight that must not on either Air Canada or United

    • “~AC,UA+”: One or more flights, none of which can be on either Air Canada or United

  • To specify two or more flights, you simply list the airline codes one after the other:

    • “AC UA”: Direct flight on Air Canada, followed by a direct flight on United

    • “AC UA+”: Direct flight on Air Canada, followed by one or more flights on United

For preferred connections, the syntax is similar. Inputting “NYC” means that you must have a connection in New York, while the tilde (~) is used to indicate where you don’t want to stop. Just like before, think of commas as “or” and spaces as “and”.

Here are a few examples:

  • “JFK”: A connection at New York JFK airport

  • “NYC”: A connection at any one of New York’s three airports (JFK, LGA, EWR)

  • “NYC,DEN”: A connection in either New York or Denver

  • “NYC DEN”: A connection in New York, followed by a connection in Denver

  • “NYC DEN,LAX”: A connection in New York, followed by a connection in either Denver or Los Angeles

Everything we just discussed can be combined together into as specific a combination as you’d like. One example in ITA Matrix’s list above is “DL CHI DL”, which means: a Delta flight, followed by a stop in Chicago, and then followed by another Delta flight.

Let’s now move on to the Extension codes. Here is the list of examples that ITA Matrix provides when clicking on the question mark:

Screen Shot 2020-07-22 at 3.20.12 PM.png

At first glance, you’ll notice that there’s some overlap between the Extension codes and the Routing codes we discussed above. One of the examples given by ITA Matrix is “-AIRLINES AA BA”, which “prohibits flights on the specified carriers”, and this can also be accomplished using “~AA,BA+” as a Routing code.

The most useful Extension codes are probably “MINCONNECT” and “MAXCONNECT”, where using “MINCONNECT 20:00” – specifying a desired connection time of at least 20 hours – can be a viable strategy to force an overnight layover.

In a similar fashion, “MAXCONNECT” can be used to avoid an overnight layover or simply to eliminate “awkward” layovers of 6–10 hours, which isn’t really enough time to see the city but might also be too much time to simply hang out in the lounge.

“PADCONNECT” is an interesting option here, which will automatically add the amount of time you choose to the minimum connection time at every stop.

So if you write “PADCONNECT 00:30”, it will only show flights where every stop had at least 30 minutes added to the minimum connection time, which some travellers might prefer for the peace of mind.

Something that’s not listed in the examples, but can be of avid interest to aviation geeks, is the aircraft used on each flight. This can be inserted as an Extension code using “AIRCRAFT t:xxx”, where xxx represents the IATA code of each aircraft. For example, if we’re looking to fly on the A380, the full input would be “AIRCRAFT t:380”.

Another nifty trick that can be useful is “MAXDUR hh:mm”, which can be used to specify the total duration of the trip. For example, if I input “MAXDUR 10:30” on a flight from Toronto to Vancouver, the total duration including flights and layovers cannot exceed 10 hours and 30 minutes.

(Note: I’ve been using uppercase Routing and Extension codes to be consistent with ITA Matrix’s syntax, but lowercase appears to work just fine too.)

Putting It All Together

We’ve just covered most of ITA Matrix’s basic features, but let’s put it all together using a few examples.

Let’s use the elementary school-style of forwards and backwards thinking to test our understanding. In the first example, we’ll input commands into ITA Matrix to find the cheapest flight for our desired trip, and in the second example, we’ll examine an ITA Matrix input, dissect what it means, and think about what kinds of flights ITA Matrix should output as a result.  

Example 1:

Let’s say I’m looking to travel one-way from Halifax to Vancouver anytime in April 2021, and I don’t mind travelling up to 100 miles within either the origin or destination to catch a cheaper flight.

I’m not picky about aircraft type, but in order to minimize inconvenience, I don’t want more than one connection along the journey. That one connection shouldn’t be longer than two hours, given that I want to strike a delicate balance between rushing for the next flight and sitting idly in the terminal.

Since I have status with Air Canada through the Travel at Home promotion, I’ll be looking to fly with Air Canada to take advantage of my free checked baggage allowance.

First, I input “YHZ” as the Departure and “YVR” as the Destination, selecting the calendar of lowest fares and inputting April 1, 2021 as the start of the month-long period (so as to search across all dates in April 2021).

Then, I’ll use the “Nearby” button next to the origin and destination fields to select all airports within a 100-mile radius from both.

For Stops, I choose “Up to 1 Stop” with no extra stops. I’ll also uncheck “Allow airport changes”, since we don’t want to be changing airports during our layover.

Finally, I’ll use the Advanced Controls to select Air Canada flights only, with a maximum connection time of two hours.

All said and done, this is what the search input looks like:

And here is the search result:

Screen Shot 2020-07-22 at 3.27.43 PM.png

We can see that a handful of dates have the cheapest possible price of $447. Since I want to leave earlier if possible, I’ll go ahead and select April 7. The next screen will show us all the available flight results on that date:

Clicking through the $447 fare brings us to this page where I can view the details of my selected flight.

We can now see that instead of flying out of Halifax, the cheapest flight actually departs out of Charlottetown instead.

Looking back to the list of flights on April 7, I decide that the price difference between $447 and $461 isn’t quite great enough to justify the commute to Charlottetown, so at this point I might choose to simply go with the itinerary departing out of Halifax for $461 instead.

But I’m still happy that I searched for nearby airports to begin with, since I might’ve accepted the Charlottetown departure if it had represented greater savings.

Example 2:

Let’s take a look at the following sample search and analyze what it means (the cut-off Extension codes read as “MINCONNECT 04:00; AIRCRAFT t:380”):

First off, we can see that we’re searching for a flight from any New York City airport to Sydney Kingsford Smith (SYD) in Sydney, Australia.

We are specifically looking to fly within a two-day window around May 12, 2021, and only in First Class.

The Routing codes indicate that we’re willing to fly on either Emirates or Etihad Airways for any number of segments with any number of stops. This would encompass the most direct options via Dubai or Abu Dhabi, respectively, as well as more convoluted routings like the Newark–Athens or New York–Milan fifth-freedom flights by Emirates.

Meanwhile, the Extension codes indicate that the only aircraft we’re considering for the journey is an Airbus A380 on all segments, and of course, we need at least four hours in-between our flights in order to take full advantage of the undoubtedly excellent First Class lounge offerings by either airline.

How to Book Itineraries Found on ITA Matrix

ITA Matrix is a powerful tool for understanding airfare and pricing out exact itineraries, but by design, it doesn’t provide a direct link to book the itineraries that it finds.

The good news, however, is that there are a handful of third-party tools that can transform a fare found on ITA Matrix into a booking link with the airline or one of the popular online travel agencies.

The easiest tool to use is BookWithMatrix, a separate website specifically designed for this purpose. Using BookWithMatrix could not be more straightforward: after we reach the final page on ITA Matrix with the full details of the itinerary, we copy that entire page and paste it into BookWithMatrix.

Screen Shot 2020-07-22 at 3.32.59 PM.png

That might sound a little funny if you’ve never done it before, but we literally press Ctrl-A / Cmd-A to Select All, and then Ctrl-C / Cmd-C to copy the contents of the entire page. Then, we pop over to BookWithMatrix, and either right-click “Paste” or press Ctrl-V / Cmd-V to paste all of the contents into the BookWithMatrix input bar.

BookWithMatrix then works its magic and outputs the exact same itinerary (in the same classes of service and fare buckets), along with one or more options to book the fare online. Sometimes, BookWithMatrix will output a booking link with one of their supported airlines directly, while other times it’ll only provide a link for booking with one of the online travel agencies.

(I’d recommend always booking directly with the airline if possible, for the usual benefits such as having an easier time making changes, requesting refunds, or rearranging your travel plans in the case of IRROPS.)

Outside of BookWithMatrix, if you work with a travel agent, you can likely send them the itinerary and they can construct the fare through the travel agency’s ticketing portal.

There are a few successful data points out there of travel agents that work with fixed-value points programs (such as Amex Travel, BMO Rewards, or CIBC Aventura) being able construct these customized ITA Matrix itineraries and help you book them using your loyalty points, although this likely comes down to the skill and willingness of the individual agent.

Lastly, ITA Matrix PowerTools, a custom tool developed by members of the FlyerTalk community to make ITA Matrix even more powerful than it already is, is by far the smoothest way to book your ITA Matrix itineraries – but we’ll leave that for Part 2.


As you can tell, ITA Matrix is one of the most powerful travel tools we’ll be covering in the “Use It Like A Pro” series, and in this post we’ve gone over all of the basic features to help you search for airfare with a far greater degree of precision and control compared to all of the other online search engines out there.

In Part 2 of this guide, we’ll be delving into a few more of the Advanced Controls, thinking about how to use ITA Matrix in the context of mileage runs, and examining how to harness the full potential of ITA Matrix PowerTools to supercharge this outstanding search engine even further.