Skip to main content
Guides

Billing & Permissions

Required API Permissions

Enable only the APIs your implementation uses:

APIRequired?When it's used
Maps JavaScript APIYesInteractive map rendering
Maps Static APIOptionalA <ScriptGoogleMapsStaticMap> image, including one placed in the #placeholder slot
Geocoding APIOptionalServer-side address resolution when you enable the Google Maps registry entry
Places API (Legacy)OptionalClient-side findPlaceFromQuery fallback when the geocoding proxy is unavailable

The placeholder slot is empty by default, so a normal <ScriptGoogleMaps> does not call the Maps Static API.

Current Pricing

Google charges each API by SKU and applies a separate monthly free usage cap to each SKU. As of July 2026, the relevant global list prices are:

ActionSKUFree monthly eventsFirst paid tier per 1,000When it happens
Load the interactive mapDynamic Maps10,000$7Each time the Maps JavaScript API creates a map
Load a static previewStatic Maps10,000$2Each <ScriptGoogleMapsStaticMap> image request
Resolve an address on the serverGeocoding10,000$5Each uncached Geocoding API request
Resolve an address in the browserFind Place (legacy)5,000$17When the proxy is unavailable and resolveQueryToLatLng() falls back to Places

These are USD list prices for the first paid volume tier. Higher-volume tiers, regional pricing, and product changes can alter the total; check the current Google Maps Platform price list before budgeting.

Google also offers fixed-price subscription plans with a combined monthly call allowance across their included SKUs. Calls above the allowance revert to pay-as-you-go pricing, so the estimates below use the standard list prices.

Google replaced the old recurring $200 monthly credit with per-SKU free usage caps on March 1, 2025. Google's pricing overview explains the current model.

How Nuxt Scripts Affects Usage

Lazy loading: The Dynamic Maps event occurs only after the configured trigger fires. With the default interaction triggers, a visitor who never interacts with the map does not load the JavaScript API.

No default static request: <ScriptGoogleMaps> leaves its placeholder empty. Add <ScriptGoogleMapsStaticMap> only when a map preview is worth the extra Static Maps event.

Address resolution: Registering Google Maps enables a server endpoint that uses the Geocoding API. Without that endpoint, resolveQueryToLatLng() falls back to the browser's Places library. Coordinates avoid either lookup.

The current static-map proxy stores and serves Google map images from your server. Google's Maps Platform FAQ says browser applications must load Static Maps images directly from Google and must not store and serve copies. Pass an explicit api-key to <ScriptGoogleMapsStaticMap> to bypass the proxy, and review the current Maps Platform Terms for your use case.

Google's terms allow limited Geocoding result caching under specific conditions. The Nuxt endpoint caches upstream geocoding responses for 30 days, so confirm that your use meets the current service-specific caching terms.

Cost Controls

  1. Use coordinates when you have them. Pass center as { lat, lng } instead of an address to avoid Geocoding or Places requests.
  2. Keep the default lazy trigger. Use trigger="immediate" only when the map should start loading after hydration instead of waiting for an element interaction.
  3. Use your own placeholder. A local image in the #placeholder slot adds no Maps Static API event.
    <ScriptGoogleMaps>
      <template #placeholder>
        <img src="/my-map-placeholder.webp" alt="Map of the store location">
      </template>
    </ScriptGoogleMaps>
    
  4. Set budgets and quota limits. Google recommends budget alerts for visibility and quota limits when you need a hard usage ceiling. See Manage your Google Maps Platform costs.
  5. Consider the Embed API for a simpler map. The Maps Embed API has unlimited no-cost usage, but still requires an API key. Embed it with an iframe; it is not a script loaded through useScript().

Example Monthly Estimates

For 100,000 monthly page views under the July 2026 global list prices:

ScenarioEstimated monthly cost
Lazy map with no interactions$0
20% of visitors load the interactive map$70
Every visitor loads the interactive map$630
Static preview on every view, no interaction$180
Static preview on every view and 20% interact$250

These examples apply each SKU's free usage cap and exclude geocoding, Places requests, taxes, negotiated discounts, and other projects on the same billing account.