Places SDK for iOS Usage and Billing

Error: kGMSPlacesRateLimitExceeded

The Places SDK for iOS uses a pay-as-you-go pricing model. Places SDK for iOS requests for the Places API are billed by SKU. Along with the overall Google Terms of Use, there are usage limits specific to the Places SDK for iOS. Manage your costs and usage with tools available in the Google Cloud Console.

How the Places SDK for iOS is billed

The Places SDK for iOS uses a pay-as-you-go pricing model. The Google Maps Platform APIs and SDKs are billed by SKU. Usage is tracked for each SKU, and any API or SDK may have more than one product SKU. Cost is calculated by

SKU usage × Price per each use

Use our Pricing and Usage calculator to estimate your usage cost per API or SDK. For qualifying Google Maps Platform SKUs, a $200 USD Google Maps Platform credit is available each month for each billing account. This credit is automatically applied1 to the qualifying SKUs.

Pricing for the Places SDK for iOS

About Autocomplete sessions

An Autocomplete session includes some Autocomplete requests (to retrieve suggestions on a place as the user types), and at most one Places Details request (to retrieve details about the place selected by the user). The same session token is passed to the Autocomplete and the subsequent Place Detail request. A session starts with the first Autocomplete request (which typically happens when the user starts typing). A Places Details call is made when the user has selected one of the Autocomplete suggestions. If a user does not select a suggestion, no Places Details call is made.

After a user has selected a place (ie, a Places Details call is made), you must start a new session using a new session token.

Autocomplete sessions can be generated from the following APIs:

A session token is good for one user session and should not be used for more than one user session. If you reuse a session token, the session is considered invalid and the requests are charged as if no session token was provided.

The Autocomplete requests and the Places Details requests using sessions are billed on different SKUs.

About Places Data SKUs

One or more Data SKUs are triggered for:

  • Android: each request to fetchPlace() or findCurrentPlace()
  • iOS: each call to fetchPlaceFromPlaceID: or findPlaceLikelihoodsFromCurrentLocationWithPlaceFields:
  • Web service: each Places request depending on the fields specified in the request

Data requests generate a charge in addition to the cost of the Places request. Data charges are always in tandem with the Places requests.


SKU: Basic Data

Using the fields parameter in your Place Details or Find Place request, you can limit the response to only those fields specified. Fields in the Basic category are included in the base cost of the Places request and do not result in any additional charge. The Basic Data SKU is triggered when any of these fields are requested:

Android

Place.Field.ADDRESS, Place.Field.ADDRESS_COMPONENTS, Place.Field.BUSINESS_STATUS, Place.Field.ICON_BACKGROUND_COLOR, Place.Field.ICON_URL, Place.Field.ID, Place.Field.LAT_LNG, Place.Field.NAME, Place.Field.PHOTO_METADATAS, Place.Field.PLUS_CODE, Place.Field.TYPES, Place.Field.VIEWPORT, or Place.Field.UTC_OFFSET

iOS

GMSPlaceFieldFormattedAddress, GMSPlaceFieldBusinesssStatus, GMSPlaceFieldID, GMSPlaceFieldCoordinate, GMSPlaceFieldName, GMSPlaceFieldPhotos, GMSPlaceFieldPlusCode,GMSPlaceFieldTypes, or GMSPlaceFieldViewport

Web service

address_component, adr_address, business_status, formatted_address, geometry, icon, name, permanently_closed, photo, place_id, plus_code, type, url, utc_offset, vicinity, or wheelchair_accessible_entrance

MONTHLY VOLUME RANGE
(Price per CALL)
0–100,000 100,001–500,000 500,000+
Places request cost
+ 0.00 USD
Places request cost
+ 0.00 USD
Places request cost
+ 0.00 USD

SKU: Contact Data

Using the fields parameter in your Place Details or Find Place request for web services, or an array of Place.Fields for Android or iOS, you can limit the response to only those fields specified. Fields in the Contact category result in an additional charge. The Contact Data SKU is triggered when any of these fields are requested:

Android

Place.Field.OPENING_HOURS, Place.Field.PHONE_NUMBER, or Place.Field.WEBSITE_URI

iOS

GMSPlaceFieldOpeningHours, GMSPlaceFieldPhoneNumber, or GMSPlaceFieldWebsite

Web service

formatted_phone_number, international_phone_number, opening_hours, current_opening_hours, secondary_opening_hours, or website

MONTHLY VOLUME RANGE
(Price per CALL)
0–100,000 100,001–500,000 500,000+
Places request cost
+ 0.003 USD per each
(+ 3.00 USD per 1000)
Places request cost
+ 0.0024 USD per each
(+ 2.40 USD per 1000)
Contact Sales for volume pricing

SKU: Atmosphere Data

Using the fields parameter in your Place Details or Find Place request, you can limit the response to only those fields specified. Fields in the Atmosphere category result in an additional charge. The Atmosphere Data SKU is triggered when any of these fields are requested:

  • Android: Place.Field.PRICE_LEVEL, Place.Field.RATING, or Place.Field.USER_RATINGS_TOTAL
  • iOS: GMSPlaceFieldPriceLevel, GMSPlaceFieldRating, or GMSPlaceFieldUserRatingsTotal
  • JavaScript: See Fields (Place details)
  • Web service: curbside_pickup, delivery, dine_in, editorial_summary, price_level, rating, reservable, reviews, serves_beer, serves_breakfast, serves_brunch, serves_dinner, serves_lunch, serves_vegetarian_food, serves_wine, takeout, or user_ratings_total.
MONTHLY VOLUME RANGE
(Price per CALL)
0–100,000 100,001–500,000 500,000+
Places request cost
+ 0.005 USD per each
(+ 5.00 USD per 1000)
Places request cost
+ 0.004 USD per each
(+ 4.00 USD per 1000)
Contact Sales for volume pricing

SKU: Autocomplete – Per Request

The Autocomplete – Per Request SKU is charged for any of these calls or requests that do not include a session token:

Calls made from an invalid Autocomplete session (for example, a session that reuses a session token) are also charged an Autocomplete – Per Request SKU.

Autocomplete requests from the Maps JavaScript API’s Place Autocomplete Widget may be charged an Autocomplete – Per Request SKU in case calls are made from an invalid Autocomplete session. This may happen when a user is typing multiple different addresses or copy/pasting different addresses into the widget and not always selects an autocomplete prediction.

MONTHLY VOLUME RANGE
(Price per REQUEST)
0–100,000 100,001–500,000 500,000+
0.00283 USD per each
(2.83 USD per 1000)
0.00227 USD per each
(2.27 USD per 1000)
Contact Sales for volume pricing

SKU: Autocomplete without Place Details – Per Session

The Autocomplete without Place Details – Per Session SKU is charged for an Autocomplete session that does not include a Place Details request (within a few minutes of the beginning of the session).

MONTHLY VOLUME RANGE
(Price per SESSION)
0–100,000 100,001–500,000 500,000+
0.017 USD per each
(17.00 USD per 1000)
0.0136 USD per each
(13.60 USD per 1000)
Contact Sales for volume pricing

Example

If your application issues these two calls in a single session:

Android

iOS

Web service

On your bill, you will see this SKU listed (when viewing your bill by SKU):

  • Autocomplete without Place Details – Per Session (price starting at 0.017 USD per session)

SKU: Autocomplete (included with Place Details) – Per Session

The Autocomplete (included with Place Details) – Per Session SKU is charged for an Autocomplete session that includes any of:

  • Android: a call to fetchPlace()
  • iOS: a call to fetchPlaceFromPlaceID:
  • Web service: a Place Details request

The autocomplete request is available at no charge, and the subsequent Place Details call gets charged based on regular Place Details pricing.

A Place Details request generates Data SKUs (Basic, Contact, and/or Atmosphere) – depending on the fields that are specified in the request.

If you do not specify fields in the Place Details request, all Data SKUs are triggered (Basic, Contact, and Atmosphere).

Place Details ID refresh requests (requests that specify only the place_id field) during an autocomplete session are billed as SKU: Autocomplete without Place Details – Per Session.

MONTHLY VOLUME RANGE
(Price per SESSION)
0–100,000 100,001–500,000 500,000+
0.00 USD 0.00 USD 0.00 USD

Example

If your application issues the following three calls in a single session:

Android

iOS

Web service

On your bill, you will see these SKUs listed (when viewing your bill by SKU):

  • Autocomplete (included with Place Details) – Per Session (billed at 0.00 USD)
  • Place Details (price starting at 0.017 USD per session)
  • Basic Data (billed at 0.00 USD)

SKU: Place Details

Place Details calls are charged as follows:

MONTHLY VOLUME RANGE
(Price per CALL)
0–100,000 100,001–500,000 500,000+
0.017 USD per each
(17.00 USD per 1000)
0.0136 USD per each
(13.60 USD per 1000)
Contact Sales for volume pricing

The Place Details SKU is generated from these APIs:

With the web API and services, the Place Details SKU is charged whether a session token is provided or not.

A Place Details call or request also generates Data SKUs (Basic, Contact, and/or Atmosphere), depending on the fields that are specified in the call or request. If NO fields are specified in the Place Details call or request, ALL Data SKUs are triggered, and you are charged for the Places Details call or request plus the cost of all the data.

Examples

  1. Make one of these calls or requests:
    • Mobile: call fetchPlace() on Android or fetchPlaceFromPlaceID: on iOS, and specify just the ADDRESS field
    • Web API or service: make a Place Details request and specify just the address field: getPlaceDetails(fields: formatted_address)
    On your bill, you will see these SKUs listed (when viewing your bill by SKU):
    • Place Details (price starting at 0.017 USD per session)
    • Basic Data (billed at 0.00 USD)
  2. Make one of these calls or requests:
    • Mobile: call fetchPlace() on Android or fetchPlaceFromPlaceID: on iOS, and specify just the PHONE_NUMBER field
    • Web API or service: make a Place Details request and specify the phone number field: getPlaceDetails(fields: formatted_phone_number)
    On your bill, you will see these SKUs listed (when viewing your bill by SKU):
    • Place Details (price starting at 0.017 USD per session)
    • Contact Data (price starting at 0.003 USD per request)
  3. Make one of these calls or requests:
    • Mobile: call fetchPlace() on Android or fetchPlaceFromPlaceID: on iOS, and specify all the fields
    • Web API or service: make a Place Details request and specify all the fields (this type of request is the default if you do not specify any fields): getPlaceDetails().
    On your bill, you will see these SKUs listed (when viewing your bill by SKU):
    • Place Details (price starting at 0.017 USD per session)
    • Basic Data (billed at 0.00 USD)
    • Contact Data (price starting at 0.003 USD per request)
    • Atmosphere Data (price starting at 0.005 USD per request)

SKU: Find Current Place

Find Current Place is charged for calls to findCurrentPlace() (Android) or findPlaceLikelihoodsFromCurrentLocationWithPlaceFields: (iOS).

MONTHLY VOLUME RANGE
(Price per CALL)
0–100,000 100,001–500,000 500,000+
0.030 USD per each
(30.00 USD per 1000)
0.024 USD per each
(24.00 USD per 1000)
Contact Sales for volume pricing

Calls to findCurrentPlace() (Android) or findPlaceLikelihoodsFromCurrentLocationWithPlaceFields: (iOS) also generate Data SKUs (Basic, Contact, and/or Atmosphere), depending on the fields that are specified in the call. Specify data fields to limit the response to only those fields. You are billed for the Find Current Place call as well as the data requested.

Examples

  1. You call findCurrentPlace() (Android) or findPlaceLikelihoodsFromCurrentLocationWithPlaceFields: (iOS) and specify just the ADDRESS field. On your bill, you will see these SKUs listed (when viewing your bill by SKU):
    • Find Current Place (price starting at 0.030 USD per request)
    • Basic Data (billed at 0.00 USD)
  2. You call findCurrentPlace() (Android) or findPlaceLikelihoodsFromCurrentLocationWithPlaceFields: (iOS) and specify the PHONE_NUMBER field. On your bill, you will see these SKUs listed (when viewing your bill by SKU):
    • Find Current Place (price starting at 0.030 USD per request)
    • Contact Data (price starting at 0.003 USD per request)
  3. You call findCurrentPlace() (Android) or findPlaceLikelihoodsFromCurrentLocationWithPlaceFields: (iOS) and specify fields from all three data-type buckets. On your bill, you will see these SKUs listed (when viewing your bill by SKU):
    • Find Current Place (price starting at 0.030 USD per request)
    • Basic Data (billed at 0.00 USD)
    • Contact Data (price starting at 0.003 USD per request)
    • Atmosphere Data (price starting at 0.005 USD per request)

SKU: Place Photo

A Place Photo SKU is charged for:

For the JavaScript service, invoking the PlacePhoto.getUrl() method does not cause billing until the URL is actually used to obtain pixel data.

MONTHLY VOLUME RANGE
(Price per CALL)
0–100,000 100,001–500,000 500,000+
0.007 USD per each
(7.00 USD per 1000)
0.0056 USD per each
(5.60 USD per 1000)
Contact Sales for volume pricing

Other usage limits

While there is no maximum number of requests per day, the following usage limit still applies when using the Places SDK for iOS:

  • Rate limit is 100 requests per second. It is calculated as the sum of client-side and server-side requests for all applications using the credentials of the same project.

Terms of Use restrictions

For information on terms of use, see the License Restrictions section of the Google Maps Platform Terms of Service.

Manage your cost of use

To manage your cost of use of the Google Maps Platform APIs, set daily quota limits on all requests to any billable API. Daily quotas are reset at midnight Pacific time.

To view or change quota limits for the Places SDK for iOS:

  1. In the Cloud Console, open the Google Maps Platform Quotas page.
  2. Click the APIs drop-down and select the Places SDK for iOS.
  3. To view the quota limits, scroll down to the Requests card.
    A table lists the quota names and limits.
  4. To change a quota limit, click the Edit icon for that limit.
    In the dialog that appears, in the Quota Limit field, enter the preferred billable daily quota limit (up to the quota limit, if any, specified by Google) and select Save.

If your API usage reaches your billable quota limit on any given day, your application will not be able to access the API for the remainder of that day.


  1. Users in India must create a Google Cloud Platform billing account before creating a Google Maps Platform billing account to receive the Maps Platform credit.