This week I’m discussing how to use ITA Software’s Fare Matrix. If you’ve never used it before, today’s post will not make any sense. I suggest you read Part 1 first.
Recap on Using ITA Matrix
Last time I introduced how to use ITA for a basic round trip flight from Seattle to Washington, DC. Among other things I showed you how to use time bars to display flight options and how to learn the fare breakdown for your final itinerary.
Although SEA-IAD seems like a very simple trip with lots of nonstop and one-stop options in each direction, there are ways to limit your search results to force certain airlines, certain flight numbers, and certain connections. ITA shares some of this information on its website, but I find it awfully brief. There are also other “secret” commands.
Where to Enter Advanced Routing Codes
So, how do we activate this magical feature? Underneath the fields for departure and destination there is a link that says “Advanced routing codes.”
Clicking on this will open one additional field under each airport. You can type your advanced routing codes here, or you can place them immediately after the airport code, separated by two colons. (I usually prefer to write them in the departure and destination fields after two colons. The routing code fields will populate automatically and I don’t have to fill them in separately.)
To walk you through some examples, instead of “SEA” alone, use this command to require that the flight be marketed by United.
SEA :: UA
Because “UA” is listed once, ITA will look for a single nonstop flight. Repeat multiple times to specify the number of flights (e.g., “SEA :: UA UA UA” for three flights) or use the plus symbol to indicate any number of flights all marketed by the same carrier (e.g., “SEA :: UA+”).
Search Multiple Airlines and Airports at Once
You can search for multiple airports and airlines at the same time by separating them with a comma. The Washington, DC, area has three major airports: IAD, DCA, and BWI. Some of you may be aware of city codes, such as WAS, that encompass multiple airports, but be aware that they might not include every one you’re thinking of. For some reason I once thought NYC included JFK and LGA but not EWR. Apparently it does include all three, but my point is you should pay attention. I prefer to always specify individual airports. In addition to United, US Airways and American Airlines have a decent presence at DC-area airports. So you could change your search again to include all three airports and only those three airlines, or use a city code:
IAD,BWI,DCA :: UA,US,AA
WAS :: UA,US,AA
You can also specify connecting cities by changing the command to look like this, for example, to require a connection in Denver or Chicago O’Hare:
SEA :: DEN,ORD
If you want to specify both a connection and an airline, you will have to be more careful. The airline code must go before the airport code for the connection, and you will only be specifying the airline for that particular flight. Here are two examples:
Example 1: SEA :: UA DEN
Example 2: SEA :: UA DEN UA
In the first example, only the first flight to Denver will be marketed by United, but the subsequent one can be marketed by other airlines. In the second example, both the first and second flights must be marketed by United. You can use the plus symbol to avoid entering the airline multiple times (e.g., “SEA :: UA+ DEN”).
Specify Codeshares and Booking Classes
You’ll notice that I keep saying flights are “marketed by” United. This means they could be codeshares that are operated by another carrier such as Air Canada or US Airways. That’s unlikely on a flight to a United hub like DEN, but you can still use “O:UA” to force ITA to find only flights operated by United (e.g., “SEA :: O:UA+ DEN”). Unlike before, where all flights were marketed by United but could be operated by other carriers, now the reverse is true. All flights will be operated by United, but could be marketed by other carriers.
I am including a list of all the advanced routing commands at the end of this post, but before we get there, let me describe a much smaller group that uses a different syntax.
You can specify that flights be marketed by a particular alliance (so you don’t have to type in all the airline codes) or that tickets be issued in a particular fare class or booking class (such as “W” so that you can use your United systemwide upgrade to move from coach to business). These commands don’t require the two colons after the airport, but they won’t hurt, either. However, you must use a forward slash and include them at the end of any other advanced routing codes.
“/alliance star-alliance” to search Star Alliance members like United
“/alliance oneworld” to search oneworld members like American Airlines
“/alliance skyteam” to search SkyTeam members like Delta
“/f bc=w” to search for tickets in the W fare class
“/f bc=w|bc=y” to search for tickets in the W or Y fare classes
It’s unfortunate that multiple fare classes have to be entered individually separated by that vertical bar (located on your backslash key). However, it’s still very useful when you are trying hard to find an upgradeable flight.
Update: To get a better sense of what a fare class is, see a more recent series of posts where I discuss airline inventory.
Avoid Overly Broad Search Queries
Let me leave you with a warning. Because an ITA search will timeout after one minute, an overly broad search will not have time to return all the results. You will still get results, just not all of them. Usually this isn’t an issue, but it will be if you specify too many airports. Narrowing the number of airlines or choosing specific flights prevents the timeout. So, if you are planning to meet up with friends in one of several different cities in the United States to fly to Europe over spring break, and you want to keep your options open, you could easily use ITA to search for something like this:
Departing from: SEA,SFO,LAX,IAD,MIA
But it probably won’t return everything available, which means you could be missing the cheapest fares. Specifying a few airlines or even a single alliance will help a lot. It will also help to use some of the commands in the list below when you have found one or two specific flight numbers you are interested for the transatlantic portion of your journey but are still flexible about the domestic legs that get you to the gateway city.
I have found this route language to be most helpful in the past particularly when I am trying to connect through particular cities, such as choosing Houston over Denver in the winter, or when I want to avoid others, such as Toronto, which always seems to involve a five-hour layover. Feel free to ask me questions about how to structure your particular search parameters. You can also let me know if you are aware of any commands that I over looked.
List of Advance Routing Language Commands
My examples are based on ITA’s own instructions, which you can bring up by clicking on the question mark next to each of the advanced routing entry fields. I’ve expanded on them a bit where I felt ITA was unclear. And with that said, I give you the list:
|AA||Direct flight on a specific carrier. In this example, it will be marketed by AA (i.e., AA flight number), but it could be operated by another carrier.|
|AA+||One or more flights on a specific carrier.|
|AA,UA,DL||Direct flight on one of the carriers separated by a comma.|
|O:AA||Direct flight on a specific operating carrier. In this example it could be marketed by another carrier (e.g., a BA flight number), but it will be operated by AA.|
|O:AA,O:UA,O:DL||Direct flight operated by one of the carriers separated by commas.|
|N||Any single nonstop flight. This contrasts with a direct flight, which may have a connection or plane change but still uses the same flight number. (This command is rarely used in practice.)|
|N:AA||Any single nonstop flight on AA.|
|DFW||A single connection point at a specified airport. You can also use city codes (e.g., WAS).|
|DFW, STL, LAX||A single connection point at one of the airports separated by commas.|
|X||Any single connection point. Use multiple separated by space to define multiple connections. (This command is rarely used in practice.)|
|X?||Zero or one flights. Use this to permit a connection but leave open the possibility of a nonstop flight.|
|DFW||Direct flight or one connection point at the specified airport.|
|AA151||A specific flight number, in this case American Airlines flight 151.|
|AA1000-2000||A single flight on AA within the range of 1000-2000.|
|~||Negation. Use this to rule out an airline, airport, or flight. For example, use SEA :: ~DEN to allow a flight from Seattle that connects anywhere but Denver.|
Various combinations of these commands are possible. For example:
|~AA,UA,DL+||Any number of flights, but not on AA, UA, or DL.|
|AA+ DL+||One or more flights on AA followed by one or more flights on DL.|
|AA DL,AF||Any direct flight on AA followed by any direct flight on either DL or AF.|
|AA UA?||Any direct flight on AA, optionally followed by another flight on UA.|
|AA N?||Any direct flight on AA, optionally followed by another flight on any airline.|
|AA25 UA814||Two specific flights: AA25 followed by UA814.|
|AA25 UA+||Flight AA25 followed by any number of flights on UA.|
|DL CHI DL||Two direct flights on DL, separated by a connection in Chicago (either airport, since the city code was used).|
|EWR CVG SLC||Three connections in EWR, CVG, and SLC (in that order).|
There are also many special commands to prevent “bad” flights courtesy of SeattleFred on FlyerTalk. List them after a forward slash and separated by commas (e.g., “BOS :: / -overnight,-redeye”). Note that these commands use minus signs, not the tildes used for negation above.
|-overnight||No overnight stops.|
|-change||No airport changes.|
|-redeye||No redeye flights.|
|-prop||No propeller planes.|
|-train||No trains (e.g., these are sometimes included on United flights to PHL).|
|-helicopter||No helicopters (I've never seen one).|
SeattleFred also tells us how to set connection times and itinerary duration. These commands must also be preceded by a forward slash (e.g., “/ minconnect 60”). Note that the last command for maximum duration requires three digits, not two.
|minconnect XX||Minimum connection of XX minutes.|
|maxonnect XX||Maximum connection of XX minutes.|
|padconnect XX||Require XX minutes in addition to the airline's minimum recommendation.|
|maxdur XXX||Maximum total trip duration of XXX minutes.|