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
Places API (Legacy)OptionalAddress resolution through resolveQueryToLatLng()

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 in the browserFind Place (legacy)5,000$17Each resolveQueryToLatLng() lookup

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: resolveQueryToLatLng() uses the browser's Places library. Coordinates avoid this lookup.

Direct static maps: <ScriptGoogleMapsStaticMap> loads images directly from Google with a public browser key. Give it a separate key restricted to your website and the Maps Static API, or allow the shared registry key to access the Maps JavaScript API, Places API (Legacy), and Maps Static API.

Cost Controls

  1. Use coordinates when you have them. Pass center as { lat, lng } instead of resolving an address through Places.
  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 Places requests, taxes, negotiated discounts, and other projects on the same billing account.

Was this page helpful?