Billing & Permissions
Required API Permissions
Enable only the APIs your implementation uses:
| API | Required? | When it's used |
|---|---|---|
| Maps JavaScript API | Yes | Interactive map rendering |
| Maps Static API | Optional | A <ScriptGoogleMapsStaticMap> image, including one placed in the #placeholder slot |
| Geocoding API | Optional | Server-side address resolution when you enable the Google Maps registry entry |
| Places API (Legacy) | Optional | Client-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:
| Action | SKU | Free monthly events | First paid tier per 1,000 | When it happens |
|---|---|---|---|---|
| Load the interactive map | Dynamic Maps | 10,000 | $7 | Each time the Maps JavaScript API creates a map |
| Load a static preview | Static Maps | 10,000 | $2 | Each <ScriptGoogleMapsStaticMap> image request |
| Resolve an address on the server | Geocoding | 10,000 | $5 | Each uncached Geocoding API request |
| Resolve an address in the browser | Find Place (legacy) | 5,000 | $17 | When 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
- Use coordinates when you have them. Pass
centeras{ lat, lng }instead of an address to avoid Geocoding or Places requests. - Keep the default lazy trigger. Use
trigger="immediate"only when the map should start loading after hydration instead of waiting for an element interaction. - Use your own placeholder. A local image in the
#placeholderslot adds no Maps Static API event.<ScriptGoogleMaps> <template #placeholder> <img src="/my-map-placeholder.webp" alt="Map of the store location"> </template> </ScriptGoogleMaps> - 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.
- 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:
| Scenario | Estimated 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.