Toll History

(Redirected from Time-based Tolls)
Do not cut, merge or disconnect any segment of a toll road, whether it is marked or not, without consulting a state manager in your state, preferably someone with access to the toll tool. Doing so may break a toll price file. See the prices section for further details.

Waze has the ability to mark toll facilities, in order to provide better routing, pricing and other information to users. In addition to traditional toll roads, facilities that may be marked as toll include HOT lanes, tunnels, bridges, ferries, and roads through (but not merely into) areas that require an entrance fee. Depending on the facility, this can be done by simply marking a whole segment with the toll road attribute, or by creating a toll free partial restriction. For either method used, the effects are identical when a user's route traverses a qualifying toll road segment.


Information display

Waze suggests adding passes...
...or taking alternate routes that can save money.

Routes that traverse a toll segment show a toll icon on the route preview and route comparison screens in the app. An estimated price is displayed in the toll icon, if this information has been added to Waze's toll price tool. The displayed price is the lowest valid price that matches the user's navigation settings, such as vehicle type and passes added in the app. If adding a certain pass or using an alternate route would result in an even lower price, Waze may suggest this in a card under the route summary. In addition, if a toll road is given in the first route option, Waze tries to provide a free route as the second option, even if this route takes much longer than alternative routes that include toll roads.

Routing penalties

Toll roads have two different routing penalties, dependent upon whether a user has turned on toll avoidance in their navigation settings:

  1. When the client option to "avoid toll roads" is disabled, a small penalty is added to every transition from a non-toll segment onto a toll segment.
    • This means that the routing server may choose a free route, even if it takes a little longer than a toll route.
    • This also means that the routing server may choose a route with one toll segment, even if it takes a little longer than a route with multiple discontinuous toll segments.
  2. When the client option to "avoid toll roads" is enabled, a large penalty is added to the route for every single toll segment, even in sequence.
    • This means that any toll segment will be avoided if at all reasonably possible.
    • This also means that given two route options the routing server will choose the one with the fewest number of toll segments, regardless of if they are consecutive or not.

Note: The penalty for "avoid toll roads" is very high, and the definition here of reasonable may seem extreme. The routing server will prefer a significant detour to avoid a toll, but not one it considers to be insane or impossible. The exact amounts of both penalties are proprietary information and are subject to change.


For most toll roads, all traffic must pay a toll at all times. We will call this a fully tolled road. If a road can be used for free by a subset of vehicles or at certain times, we will call it a partially tolled road.

Fully tolled

Roads with the toll road attribute show a cyan line at zoom 5 or closer. When they are selected, a note in the left panel says, "This is a toll road."

To represent a fully tolled road in the editor, click the Add restrictions button and check the Toll road checkbox. This enables the toll road attribute for both directions of the road.

The choice of which segments to mark with the toll road attribute can be made according to one of two methods. Note that within a certain area, these methods should not be mixed, because improper routing may result.

Only collection points


Under this method, only a segment (entrance/exit/highway) that actually traverses a collection point, such as a tollbooth, recording gantry, transponder reader or ticket dispenser, has the toll road attribute enabled. This means that all paths use a single toll segment per collection point, and they are only assessed with a single penalty, whether "avoid toll roads" is on or off. This may mean that only a single segment has the toll road attribute, or if there are parallel segments going through the collection point (e.g. multiple entrance or exit ramps, cash and pass lanes), a single segment of each path has the toll road attribute. This method works well for users who have the "avoid toll roads" option enabled, but they want to or must use a toll road. It is the preferred method for most of the US.

There are a few benefits of this method, as opposed to marking every segment of a toll road.

  • It allows the routing server to pick a route with lowest number of tolls along the route.
  • It will apply an identical penalty to two different toll roads (assuming they both have one toll collection point) regardless of how many segments the toll road is made of. This allows two toll bridges and/or tunnels to the same destination to be treated equally; the routing server will pick the most appropriate one regardless of their individual segment count.
  • It reduces the likelihood of detours through rest areas, whose roads would not otherwise be tolled.

All segments


In some regions the leadership may choose to enable the toll road attribute on all segments of a toll road. This works well for users who do not have the "avoid toll roads" option enabled, and multiple options exist with toll collection points spaced closely together. The routing server assesses the same penalty for traveling on any toll road in the area, because one transition onto a toll road exists for any option, and the user can decide on whichever price they are willing to pay. If this method is used, it's best to mark ramps between toll facilities with the toll road attribute, so that an extra transition penalty isn't applied for users who aren't looking to avoid tolls.

Partially tolled

Roads with toll free restrictions show a cyan line, at zoom 5 or closer, on top of the gold partial restriction stripes. A toll free restriction disables the Toll road checkbox, since they would conflict otherwise.

Partially tolled roads are represented in the editor with toll free restrictions, which are generally added to all segments. For example, if a road collects a toll from all vehicles except for electric vehicles, a toll free restriction may be added to specify that electric vehicles are toll-free. If the electric vehicle type is selected in the client, this road will treated like any other free road. If any other vehicle type is selected in the app, this road will be treated like any other toll road. The partial restrictions page explains in great detail how to add these restrictions.


If a road only charges a toll for part of the day, or on certain days of the week or months of the year, the best way to represent this is with a toll free restriction. Note that all partial restrictions only have effects during their times of validity. The toll free restriction means that during the time that the restriction is active, the road will behave like a toll road for any vehicle that does not fit the criteria listed in the restriction. So if a road charges a toll to everyone except for electric vehicles during the weekday morning rush from 6 to 9 AM, but it's free at all other times, this can be represented in the editor simply by making a toll free restriction for electric vehicles Mon-Fri from 06:00-8:59. It will be a toll road on weekday mornings for personal vehicles, taxis and motorcycles, but not at other times. It will never be a toll road for electric vehicles.


In 2019 Waze unveiled the capability to store and display prices for toll roads. Toll price information is contained in price files, which are collections of data in the JSON format that associate segments and nodes from WME with prices. Price files are created in a special toll tool outside of the Waze Map Editor. This toll tool also contains documentation and a playground for the testing of price files before submission for use in the app. Since a lot of documentation about toll prices is already available in the tool, this section will provide a brief overview of the process, along with answers to any frequently-asked questions that editors may have about the feature.


Each file contains one or more tolls, and each toll contains one or more sections, along with currency, toll type (static or dynamic), rules (pay-per-section-count, entry/exit price and pay-per-section) and other info. Prices can be in different places depending on the rule of the toll. Multiple prices can be entered for drivers holding different passes, driving different vehicle types or driving at different times or days. As of September 2019 the toll tool supports private, taxi, motorcycle and electric vehicle types, and the list of supported passes can be found on the HOV page.

The lowest applicable price is shown to the user, although if a pass can allow someone to pay a lower price, the app may suggest adding the pass in the app. Each section contains one or more segments, and each segment is listed with a segment ID and two node IDs: the fromNode and the toNode. When the routing server calculates a route that passes in order immediately through the FromNode ID, the segment ID and the ToNode ID of a segment stored in a price file, it looks up and attempts to display a price.

If any of these IDs or their order are changed through cutting, merging, disconnection or deletion, the toll price file will not work. It must be updated with new IDs and re-uploaded onto the server. As of August 2019 the editor gives no indication that segments have any associated pricing information, and the toll tool gives no indication that a file contains broken segments, apart from manually testing routes through specific segments. Therefore, editors must be very careful not to inadvertently break price files when working with tolls. While building price files, some editors have added map comments or higher locks on segments that they use, in order to provide some level of protection, but this has not been done universally. Each section can also be associated with a venue ID of a toll booth or other place. As of August 2019 the venue ID is not used in the app, and only static pricing is supported. The segment, node and venue IDs are the only common elements between the toll price tool and WME.


This is the most common rule used for toll roads. Drivers pay fixed amounts at each collection point along a toll road. The amounts collected do not depend on how far the driver has driven on the road. In the toll tool, the pay-per-section rule is used, sections are defined for every toll collection area, whether a mainline toll plaza or a pair of exit and entrance ramps. Prices are added to each section. Multiple prices can be added per section, depending on passes, vehicle types, and valid times, days or dates. If one section has a pass-specific price, all sections must have this price added in. So, for example, if a road collects tolls through both cash and E-ZPass transponders, a section that contains E-ZPass-only segments must have a cash price (nothing in the permit field) defined, along with an E-ZPass price (ezpass-us or a variant in the permit field), even if only E-ZPass holders will be routed through it.


When traffic is charged different amounts at an exit depending on where they entered, toll prices must use this rule. Prices should not be entered in the sections, and if they are, they will not be used. Instead, prices must be entered using one of two ways, entry/exit matrices or entry/exit rules.


In the early versions of the toll tool, only entry/exit rules were available. An entry section and exit section, and optionally an intermediate section, are filled in for each price in the system. The number of rules increases quadratically with the number of sections (entrances and exits, and this becomes cumbersome very quickly. Some files have become so large that they have caused browsers to crash.


More recently the entry/exit matrix was developed. Instead of making a new line for each individual entry/exit price, a square matrix is generated based on the number and order of sections in the file. Note that the sections listed above the matrix in the tool are the "from" sections, the sections listed to the left of the matrix are the "to" sections, and the rows of prices in the JSON data are transposed as columns in the tool. So if a file has 20 entries and 20 exits defined individually, a 40x40 matrix is generated, with 1600 individual prices. If the entry sections are listed sequentially before the exit sections in the file, this would mean that the lower left quadrant of the matrix (as displayed in the tool) is where the prices should go, because this represents the prices from the entry sections to the exit sections. Multiple price matrices can be added to a toll, dependent upon which permit, time or vehicle type they apply to.


This is used in the uncommon situation that a toll road charges a discrete amount for passing through a certain number of collection points. Permit_prices are defined for any applicable permits and section counts.


Why is there limited access to the toll tool?

The toll tool is complex, and it takes a while to learn how to use. It was first presented at the NA Mega Meetup in February 2019, and a significant portion of the conference time was dedicated to learning how to use it. Originally only attendees of this meetup had access, but as the months rolled on, the documentation and best practices became clearer, and more editors were given access.

How do I get access?

If you would like to add toll prices, speak with your regional coordinator.

Can the toll tool handle prices for different vehicle types, passes and times?

Yes, prices can be defined by vehicle type, toll/HOV pass, hours and minutes of the day, days of the week and dates in the year. Pass interoperability and subsets are supported. See the overview section for further details.

Can the toll tool handle prices with multiple currencies?

At this point, each toll must use one currency, so uploading a toll price in multiple currencies would require multiple tolls or files. However, the existence of one segment and direction in multiple tolls or files creates a conflict, so multi-currency prices have not been seen to work successfully.

Can the toll tool handle prices for different numbers of passengers?

Not at this time, but it is a planned improvement. HOV discounts are not supported, nor are prices that increase with multiple passengers, such as certain ferry fares. When mapping ferry tolls, it's best to give a price that applies to solo drivers.

What do I do if I see a UR about a toll price problem?

First, test the price in the app, trying all relevant passes and/or vehicle types. If the price in question works for you, try to gather info from a reporter. If they don't have the correct pass or vehicle type set in the app, they could be getting an incorrect price. If they recalculated their route while on a toll road, that may cause the price display to fail (especially if the pricing is entry/exit).

If you determine that something needs to be fixed or added, reach out to an SM or someone you know with access to the toll tool. They will be able to find who built the price file in question, if it exists. Price files can only be edited by the user who created them. Therefore the builder of the price file should be the one to fix it. If this person is not available, someone else can create a corrected file under a new name and request that their file replace the incorrect file during the next upload process.

How does uploading work?

When a file is ready to be used in the app, its builder can request an upload through a form linked under the Welcome tab of the toll tool. If a file has been submitted for upload, but a correction needs to be made, the form should be filled out again to request uploading a new version of the existing file. Staff generally uploads new files and corrections every two weeks, after checking for problems with the files and conflicts between different files over the same segment and direction. If someone has saved a public file for the same toll road that you are working on, try to coordinate with them, and check the list of uploaded files to make sure that uploading your work won't create a conflict. The mere existence of multiple public files for the same road that have not been uploaded is not a problem; sometimes people collaborate and copy work from one person's file to their own.

How should I split up files and tolls for a given area or road?

Toll price files are intended to represent all tolls within a given area or toll authority, such as New York City or the Pennsylvania Turnpike Commission. It is not necessary to split files by direction or route number.

Tolls are intended to represent a whole toll road, or a direction of a whole toll road. Staff have suggested using one toll per direction for section-based pricing, and one toll for both directions for matrix-based pricing. It is necessary to split tolls by pricing rules. If a part of a toll road uses a pay-per-section system, and another part uses an entry/exit system, multiple tolls must be made for the different systems.

Do I need to fill in every field?

Under tolls, the toll_id, road_local_name and currency fields must be filled in, and one rule must be chosen (if more than one is chosen, only one will work). At least one section must be added. Under sections, the section_id, road_local_name, section_local_name and location must be filled in. At least one segment must be added. Under segments, the id, fromNode and toNode fields must be filled in, but the tool can extract these from segments marked with toll, by filled in the permalink field and clicking Populate (if the segment from the permalink does not have a toll flag or toll free restriction in the most recent tile build, the tool will only extract the segment ID).

The polyline field only provides a visual indicator of the toll road in the playground; this can be left blank if not planning to test the file in the playground. The venue_id field is not currently used and can also be left blank, but it's good to fill in if a Waze place exists for the toll booth in the section.

What do I put for the section/road_local_name and section_id fields?

Whatever you want. These fields must be filled in but are only for internal references within the file; they are not displayed in the app. For section names and IDs, It's generally helpful to have something that is short and descriptive, which corresponds to how the toll plazas or sections are publicly described by the toll authority, in order to quickly identify sections within a file when adding prices. Section ids must be unique for each section.

What happens if I don't select any vehicle types or days of the week?

The price applies to all vehicle types or on all days of the week. There's no need to select everything, and in the case of vehicle types, this would exclude any new vehicle types that are not included in the tool but may be enabled in the app in the future, so if a toll is not specific to certain vehicle types, it's recommended to select no vehicle types for the prices.

How do I handle time-based or date-based prices?

For prices that vary by dates, there must be a default price that is valid for all dates of the year, and it must be listed first. Then other prices can be added with valid_dates in them. It doesn't matter whether the default price is higher or lower than the valid_date price. So for example, if a toll price is scheduled to increase on January 1 of next year, the new price for next year can be entered as the default price, and the current price can be entered under it with valid_dates ranging from the current date to December 31 of the current year.

For prices that vary by times of the day or days of the week, it's possible to simply adjust the valid_minutes field or select valid_days. Note that if any minutes of any day are not covered by a price, the tool will give a warning message, but the file can still be saved. It's also possible to set them the way date-based prices are set, with a default price that's valid for all minutes of every day first and other time-specific or day-specific prices added after it. Multiple ranges of valid minutes can be entered in the same price, separated by a comma.

What is a trip_charge?

This is a base fee that applies once to all trips through the toll. It is added to any individual section-based or matrix-based prices. One example use is with ferries that charge money individually for passengers and vehicles. The passenger fare can be added as a trip_charge (since we do not yet have multi-passenger support), and the vehicle-based prices can be added as normal prices in the section.

What is a special_price?

It is used for special cases, such as an additional amount added to the trip charge if traveling over a certain section.

Has anyone come up with a script to make this easier?

Of course! The Portuguese community have developed another tool in Google Sheets that automates some of the price file generation process. It is presented here.

Are there any more resources for this?

Staff did a webinar about toll prices, and anyone can register and watch it here.

How often is the list of flagged toll roads updated in the background of the toll tool?

The list of flagged toll roads are updated by a very manual process that takes some time to complete. The planned update is twice a year.