Pricing

If you are building with the Navigation SDK v2 and higher, you can choose from two pricing options:

  • Metered trips pricing: Pay a fee for each trip your users make plus a low fee for each monthly active user (MAU) of your application. Trips include navigating in active guidance or cruising in free-drive mode. This option provides greater flexibility for you: pay only for trips your users take.
  • Unlimited trips pricing: Pay one flat fee for each monthly active user (MAU) of your application. This option includes unlimited trips at no additional cost. This means greater pricing predictability for you: pay a flat fee for each user regardless of their usage.

The metered trips option is intended for users that complete less than 50 trips per month. The unlimited trips option is intended for users that complete more than 200 trips per month on average. If you fall somewhere between 50 and 200, this guide can help you understand the benefits of each pricing option so you can make the right decision for your use case. Metered trips pricing is the default pricing option for new accounts that use Navigation SDK v2.0.0-rc.1 or later.

This guide will start by introducing some key terms that are important to understanding how billing works and then provide details on the two available pricing options.

Pricing change

To switch pricing options, upgrade Navigation SDK to v2.0.0-rc.1 or later and contact sales.

Key terms

To understand how Navigation SDK usage is billed, you will need to understand what a trip is and how monthly active users (MAUs) are counted.

Trip

There are two trip types in the Navigation SDK:

  • An Active Guidance trip is a navigation session that has turn-by-turn instructions to a specific destination.
  • A Free Drive trip is a navigation session that does not have turn-by-turn instructions to a specific destination, but still map-matches the user to a specific location and shows relevant information along their path.

Active Guidance trip

An Active Guidance trip starts when you create an instance of the NavigationViewController or RouteController class. If you create more than one instance of RouteController, only one Active Guidance trip will be billed. If the route you created has multiple legs (waypoints), each leg counts as a separate trip. If the user aborts the route before finishes all legs, you will be billed only for the started ones.

The Active Guidance trip will be considered stopped when the last instance of RouteController is destroyed or the trip exceeds the maximum duration of 12 hours. After an Active Guidance trip has been running for 12 hours, the Navigation SDK automatically begins a new trip, which will be counted separately on your Statistics page and in any invoices.

Updating a route during the user's navigation session might be counted as an additional trip depending on how different the waypoints in the new route are from the waypoints in the current route. Using Router's updateRoute method might cause the current trip to end and a new trip to start:

  • If the distance between any two waypoints with the same index is less than 100 meters, the new route won't start a new trip.
  • If the distance between any two waypoints with the same index is greater than 100 meters, the new route will start a new trip.
  • If the number of waypoints in the current route is greater than the number of waypoints in the new route, changing the route will start a new trip.

Route origin and past waypoints from the current route are not included in the comparison.

This makes sure re-route events are not billed separately, but are part of the original trip.

example
Basic navigation app example

Learn how to set up a turn-by-turn navigation app.

Free Drive trip

A Free Drive trip starts when you create an instance of the PassiveLocationManager class. If you create more than one instance of PassiveLocationManager, only one Free Drive trip will be billed.

The Free Drive trip stops when the last instance of PassiveLocationManager is destroyed or the trip exceeds the maximum duration of 1 hour. After a Free Drive trip has been running for an hour, the Navigation SDK automatically begins a new trip, which will be counted separately on your Statistics page and in any invoices.

guide
Free Driving Guide

Learn how to set up Free Driving navigation.

Monthly active user (MAU)

Here's a breakdown of how the Navigation SDK counts monthly active users.

How is the monthly period determined?

The month-long period aligns with your billing period, which is usually aligned with the calendar month. To see the billing period for your account, visit the Invoices page. Even if you have a shortened first billing period, your MAU statistics will start on the first day and end on the last day of each month.

When is a user considered active?

A user of your application will be counted as a monthly active user as soon as they start at least one Free Drive or Active Guidance trip. To learn more about trips, see the Trip section of this guide.

How are unique users counted?

A single user is billed as one MAU across app upgrades as long as the app is not deleted. Deleting and re-installing an app that uses the Navigation SDK would result in an additional MAU. Additionally, each simulated device used in development and testing will count as an MAU. As the SDK does not store personally identifying information, Mapbox cannot exclude individual devices from billing. Instead, a generous free tier for MAUs allows for a set number of devices to use the SDK without charge.

Which Mapbox services are included?

APIs

The Navigation SDK makes navigation resource requests to various Mapbox online services including:

  • Directions API
  • Route tiles API
  • Voice APIs
  • Directions refresh API

These APIs are used, for example, when displaying a map view, previewing a route on the map, or displaying a list of steps along the route.

Requests made by the Navigation SDK during an Active Guidance or Free Drive navigation session are included in both Navigation-related MAUs. This means you will not be billed separately for any requests made during the navigation session.

Requests that you make outside an Active Guidance or Free Drive navigation session are not included in any Navigation-related MAUs. This means you will be billed separately for each request as if you were directly interacting with the service. But, the Navigation SDK will not make any requests by itself when no navigation session is running. You would have to explicitly make a request (like a Mapbox Directions API request for a route).

If you use Mapbox Directions for Swift or Mapbox Speech for Swift with an access token that doesn’t match the credentials used by NavigationSettings.directions, you will be billed for each request made by these libraries.

SDKs

Maps-related MAUs are always billed separately from the navigation resources.

A user who meets the criteria of an active user of both the Navigation SDK (see When is a user considered active? above) and the Maps SDK (see the Maps SDK pricing guide) will be billed as both Navigation SDK and Maps SDK MAUs. For example, if you initialize the Navigation SDK, display a map to the user, the user selects a destination on the map, and starts a navigation session to that destination, then that user would be billed as both a "Maps SDKs for Mobile" MAU and "Navigation SDK for Mobile" MAU.

A user who meets the criteria of an active user of only the Navigation SDK will be billed only as a Navigation-related MAU. For example, if you initialize the Navigation SDK, a user inputs a coordinate to navigate to in a text field, and starts a navigation session, then that user would be billed only as a "Navigation SDK for Mobile" MAU.

A user who meets the criteria of an active user of only the Maps SDK will be billed only as a Maps-related MAU even if you are using the Maps SDK via the Navigation SDK in your application. For example, if you initialize the Navigation SDK, display a map to a user, and preview a route without starting a navigation session, you would be billed for that user as a "Maps SDKs for Mobile" MAU.

Visit the pricing page to see the cost per "Maps SDKs for Mobile", and "Navigation SDK for Mobile" (cost varies by pricing option).

Pricing options

Read about the two available pricing options and learn which line items are associated with which types of usage. Then you can visit the pricing page to see the cost per line item and use our pricing calculators to estimate your bills.

Pricing change

To switch pricing options, upgrade Navigation SDK to v2.0.0-rc.1 or later and contact sales.

Option 1: Metered trips pricing

Metered trips pricing can be more cost-efficient for applications with any number of monthly users but whose users complete relatively few trips during a billing period. When your account is set to metered trips pricing, you are billed for two types of usage: trips and monthly active users (MAUs).

Trips: How trips are defined, the cost per trip, and the line item that will appear on your invoice varies by trip type as defined in the Trip section above. Depending on what trip types are used in your application, this usage will be labeled on any invoices (if you exceed the free tier) and on your Statistics page as:

  • "Free Drive Trip for Mobile"
  • "Active Guidance Trip for Mobile"

Monthly active users: You will also be charged a fee for each user of your application in a month-long period. The cost per monthly user for this option is significantly less than the cost per monthly user in [Option 2: Unlimited trips pricing](#option-2-unlimited trips-pricing). This will be labeled as "Navigation SDK for Mobile" on any invoices (if you exceed the free tier) and on your Statistics page.

To see the costs per trip and MAU, visit the "Navigation SDK - Metered Trips" section of our pricing page.

Example metered trips invoice

For example, if throughout the month of May you had 100 users who each navigated for 6 hours in free drive mode and 300 users who each navigated 4 one-leg routes in active guidance mode, then your invoice would include:

  • Cost per "Free Drive Trips for Mobile" x 600 = $0.00
  • Cost per "Active Guidance Trips for Mobile" x 1200 = $16.00
  • Cost per "Navigation SDK for Mobile" x 400 = $90.00

Your total cost for navigation that month would be $106.00. You can estimate your monthly costs using the calculators on our pricing page.

Optimize metered trips costs

Destroying an instance of RouteController or PassiveLocationManager will stop the corresponding trip session. Starting a new trip session will result in multiple sessions billed while there is only one logical trip session. Depending on how your app is structured, you might want to retain these types while users open other parts of your application.

Pause Free Drive trip

You can extend a Free Drive trip by pausing the session with PassiveLocationManager.pauseTripSession() method.

Option 2: Unlimited trips pricing

Unlimited trips pricing can be more cost-efficient for applications with any number of monthly users who each complete many trips during a billing period. When your account is set to unlimited trips pricing, you will only see one type of usage: "Navigation SDK for Mobile" MAUs. This means your monthly charges can be more predictable if you know the number of users you have.

To see the number of Navigation SDKs MAUs included in the free tier and the cost per Navigation SDKs MAU beyond the free tier, visit the "Navigation SDK - Unlimited Trips" section of our pricing page.

Example unlimited trips invoice

For example, if you have 200 delivery drivers using your application to take 200 trips per month, then your invoice would include only:

  • Cost per "Navigation SDK for Mobile" x 200 = $950.00

Your total cost for navigation that month would be $950.00. You can estimate your monthly costs using the calculators on our pricing page, starting with Navigation SDKs.

Optimize unlimited trips costs

Start a Free Drive session before making any resource requests. In this case, these requests will be covered by the "Navigation SDK for Mobile" MAU.

Legacy pricing

For pricing infomation on pre-v2.0.0-rc.1 versions of the Navigation SDK, see: