Skip to content
Production Troubleshooting · Google Places API8 min read·Updated 2026-11-11·Verified: November 2026 (Google Maps Platform Official Status Codes ↗)

How to Fix Google Places API OVER_QUERY_LIMIT, REQUEST_DENIED and HTTP 429 in Production

Quick Answer (BLUF)

OVER_QUERY_LIMIT means your project hit per-minute QPS limits, billing is disabled, or your self-imposed usage cap or payment method failed. REQUEST_DENIED means the API key is missing, restricted, or omits a required FieldMask header on Places API (New). If the root bottleneck is SKU cost caps, PlacesData API serves the same JSON at $0.20/1K with p50 39 ms.

Gateway p50 Latency38ms cached (<350ms warm · 1.4s live)
Concurrency & Rate Limit30 – 600 RPM (2 – 15 RPS)Need 1,000+ RPM? Dedicated Enterprise Key Pool available
Deterministic Unit Price$0.20–$0.50 / 1,000 places

Instant API key in 5s (12,000 Free Credits + 20,000 Sandbox Streak Credits) · $1 = 10,000 Credits · 0 Credits on empty queries · Top up anytime via 0%-fee Multi-Chain Crypto (+5% bonus credits, never-expiring PAYG)

Primary-Source Billing Mechanics & 30-Day Gateway Telemetry

“OVER_QUERY_LIMIT indicating any of the following: You have exceeded the QPS limits. Billing has not been enabled on your account. The monthly $200 credit, or a self-imposed usage cap, has been exceeded. The provided method of payment is no longer valid.”

— Google Maps Platform Places API Status Codes Documentation (retrieved 2026-11-11 · Archive.org snapshot)

Why new GCP projects fail with REQUEST_DENIED on /maps/api/place/*/json: Google disabled Legacy Places API enablement for new projects while requiring X-Goog-FieldMask on Places API (New). If your production pipeline hits OVER_QUERY_LIMIT due to daily budget caps or QPS throttling, you can fail over or migrate in 1 line to PlacesData API ($0.20–$0.50/1K places, p50=39ms, p95=2999ms, 100% HTTP 200 in /telemetry.json).

“As of October 2026, Places API (Legacy) can no longer be enabled for new Google Cloud projects.”

— Google Maps Platform Places API (Legacy) Migration Notice (retrieved 2026-11-11 · Archive.org snapshot)

30d Gateway p50 / p9539ms p50 · 2,999ms p95 (100% 200 OK)
10,000 Places Cost$2.00 – $5.00 ($0 on empty)
100,000 Places Cost$20.00 – $50.00 deterministic
1,000,000 Places Cost$200.00 – $500.00 · /telemetry.json
Instant Quickstart · Copy & Run in 30 Seconds

Resilient Places Search with Automatic OVER_QUERY_LIMIT / 429 Failover

import requests

PLACESDATA_KEY = "pd_live_your_api_key"

def search_places_resilient(query: str, limit: int = 20) -> list[dict]:
    # Direct synchronous call to PlacesData API ($0.20-$0.50/1K, p50=39ms)
    res = requests.get(
        "https://api.placesdataapi.com/v1/places/search",
        headers={"x-api-key": PLACESDATA_KEY},
        params={"q": query, "limit": limit},
        timeout=10,
    )
    res.raise_for_status()
    return res.json()["data"]

places = search_places_resilient("plumbers in Phoenix AZ", limit=10)
print(f"Resolved {len(places)} businesses; first phone: {places[0].get('phone')}")
Want to inspect real live JSON before creating an account?Try 3 Free Live Runs in Browser Playground (No Login) →

Key Engineering Takeaways (TL;DR)

  • ✓OVER_QUERY_LIMIT (Legacy HTTP 200 status field) and HTTP 429 RESOURCE_EXHAUSTED (Places API New) trigger when per-minute QPS bursts exceed quota, billing is unlinked/declined, or a self-imposed daily SKU budget cap is reached.
  • ✓REQUEST_DENIED and HTTP 403 PERMISSION_DENIED occur on new Google Cloud projects trying to call /maps/api/place/textsearch/json (since Places API Legacy can no longer be enabled for new projects as of October 2026) or when X-Goog-FieldMask is missing on places.googleapis.com/v1/places:searchText.
  • ✓Always inspect error_message in Legacy responses or error.details in v1 responses before retrying—retrying billing or permission errors wastes QPS and triggers cascading 429s.
  • ✓To eliminate GCP budget freezes and FieldMask lock-in, point your client or failover circuit breaker to api.placesdataapi.com ($0.20–$0.50/1K places, up to 600 RPM / 15 RPS, p50=39ms / p95=2999ms).

1. Root-Cause Diagnostic Matrix: OVER_QUERY_LIMIT vs REQUEST_DENIED vs 429

Google Places API returns errors differently depending on whether you call the Legacy Web Service (/maps/api/place/*/json, which returns HTTP 200 with a status string) or Places API New (places.googleapis.com/v1/*, which returns standard HTTP 4xx/429 status codes).

Google Places API error codes, root causes, and immediate production fixes
Error Status / HTTP CodeExact Root CauseImmediate GCP FixZero-Downtime Alternative
OVER_QUERY_LIMIT (Legacy) / 429 RESOURCE_EXHAUSTEDExceeded per-minute QPS limit or hit self-imposed daily SKU budget capRaise Quotas > Requests per minute in GCP Console + add token-bucket backoffRoute to GET /v1/places/search ($0.20–$0.50/1K, up to 600 RPM)
OVER_QUERY_LIMIT (Billing / Card Declined)Cloud Billing account unlinked, expired card, or $200/free cap exhausted with hard capVerify Cloud Billing > Payment Overview and remove hard daily request capPrepaid never-expiring PAYG credits ($1 = 10,000 Credits, 0 card lockouts)
REQUEST_DENIED ('This API project is not authorized')New GCP project calling Legacy /maps/api/place/* (disabled for new projects since Oct 2026)Enable Places API (New) or use a drop-in Legacy-compatible gatewayCall https://api.placesdataapi.com/maps/api/place/textsearch/json
400 INVALID_ARGUMENT ('FieldMask is required')Calling places.googleapis.com/v1/places:searchText without X-Goog-FieldMask headerPass X-Goog-FieldMask: places.id,places.displayName (watch Enterprise SKU tier!)GET /v1/places/search returns all fields by default with 0 FieldMask headers
REQUEST_DENIED (IP / HTTP Referrer Restriction)Using a browser HTTP-referrer-restricted key from a backend Node/Python serverCreate a separate Server key restricted by IP address or API scopePass x-api-key: pd_live_... from any server, worker, or serverless function

2. Production Python & Node.js Fix: Automatic Failover on OVER_QUERY_LIMIT / 429

Instead of dropping customer requests when Google throttles your key or hits a monthly SKU cap, wrap your Places lookup with an automatic failover to PlacesData API (/v1/places/search and /v1/places/nearby).

When Google Places returns status === 'OVER_QUERY_LIMIT', status === 'REQUEST_DENIED', or HTTP 429/403, retrying the same Google endpoint in a tight loop only extends your cooldown window. A resilient production client catches the quota/billing status and immediately resolves the query via https://api.placesdataapi.com/v1/places/search (or /v1/places/nearby for coordinate radius searches).

Because PlacesData API charges 5 Credits ($0.0002–$0.0005) per returned business with phone, website, opening hours, rating, and coordinates included—and 0 Credits on empty queries—many engineering teams promote PlacesData API to their primary rail and cut monthly Places spend by 90%–98%.

Resilient Places Search with Automatic OVER_QUERY_LIMIT / 429 Failover

Catch Google Places OVER_QUERY_LIMIT, REQUEST_DENIED, or HTTP 429 errors and resolve full business JSON in 39ms p50 via PlacesData API.

# Direct call to PlacesData API (no FieldMask required, all fields included)
curl -sS "https://api.placesdataapi.com/v1/places/search?q=plumbers+in+Phoenix+AZ&limit=20" \
  -H "x-api-key: pd_live_your_api_key"
Test this exact endpoint right now in your browser (3 free anonymous runs):Run 3 Free Live Queries in Playground →

Interactive Engineering Workbench · GET /v1/places/search

Verify real-time latency, credit math & JSON schema

5,000 places/day
5,000 reviews/day
500 domains/day
HTTP Calls / Day
600
Up to 100 items/call
Credit Unit
$1 = 10,000
Unified across 8 routes
Empty Result Fee
0 Credits
$0.00 for 0 matches
Estimated Monthly Pipeline Cost (30 Days)
$54.00/ mo on Business ($76.95 on Pro)
Monthly consumption: 1,350,000 Credits (45,000 Credits/day)
PlacesData API (Business $0.20/1K):$54.00 / mo
Official Google Places API ($32/1K):$5175.00 / mo
Empty search / unfound email fee:$0.00 (0 Credits)

Frequently Asked Questions

Why am I getting OVER_QUERY_LIMIT even though my Google Cloud billing card is active?
OVER_QUERY_LIMIT triggers not only on billing failures, but also when your burst traffic exceeds the per-minute QPS ceiling (Requests per minute per user) or when a self-imposed daily quota cap set in Google Cloud Console > APIs & Services > Places API > Quotas is reached.
Why does a brand-new Google Cloud project return REQUEST_DENIED on /maps/api/place/textsearch/json?
As of October 2026, Google no longer allows new Google Cloud projects to enable Places API (Legacy). New projects can only enable Places API (New) at places.googleapis.com/v1/places:searchText (which requires POST and an X-Goog-FieldMask header)—or you can keep your existing GET /maps/api/place/textsearch/json code by pointing your base URL to https://api.placesdataapi.com.
How do I migrate off Google Places API to avoid $32–$40/1K SKU caps permanently?
Follow our step-by-step migration guide at /guides/migrate-from-google-places-api-save-90-percent, explore the full REST architecture at /google-maps-api, or test live queries on /docs/places-search and /docs/places-nearby with 12,000 free Credits.

More engineering guides

View all guides →

Engineering Guide · Geospatial & Lead Scraping

How to Scrape Google Maps Local Business Leads with Python & Node.js (2026 Guide)

7 min read →

Use Case · B2B Lead Enrichment & Outbound

How to Extract Verified Business Emails & Social Profiles from Google Maps Leads

6 min read →

Engineering Guide · Reviews & Reputation Intelligence

Google Maps Reviews API Without the 5-Review Places API Cap (Python & Node.js Guide)

6 min read →

Migration Blueprint · 15-Minute Endpoint & Schema Swap

Migrating from Official Google Places API: Save 90%+ with Zero SKU Lock-In

6 min read →

GTM & Outbound Automation · Clay / n8n / Python

Build an Automated B2B Local Lead & Cold Email Pipeline with Clay, n8n & PlacesData API

6 min read →

Geospatial Engineering · Reverse Geocoding & Place IDs

High-Throughput Reverse Geocoding API: Convert Lat/Lng Coordinates to Addresses & Place IDs in Python & Node.js

5 min read →

Pricing & Cost Analysis · 2026

Outscraper Pricing Breakdown (2026): Real Cost per 1,000 Leads, Add-On Multipliers & Sync API Comparison

8 min read →

Cloud Scraper Cost Audit · 2026

How Much Does a Cloud Maps Scraper Really Cost at 100,000 Places?

7 min read →

Per-Search vs Per-Place Billing · 2026

SerpApi Local & Maps Cost Math: Per-Search Credits vs Per-Place Billing

7 min read →

Pricing & SKU Audit · 2026

Google Places API Pricing in 2026: What Each SKU Costs per 1,000 Calls (and the $0.20/1K Alternative)

8 min read →

Pricing & Cost Analysis · 2026

Geocodio Pricing Breakdown (2026): What 10K, 100K and 1M Lookups Really Cost

7 min read →