Google Places API Alternative: Place Data Priced per Call
If you need place data as JSON (name, address, phone, rating, review count, coordinates) and don't need to draw it on a Google map, per-call place data is an alternative to the Places API with a simpler billing model. Perceptlayer's Google Maps API returns those fields for a flat 1 credit per call, so 1,000 calls cost 1,000 credits, where Google bills per SKU. Pricing shows what credits cost, so you can compare against your own volume. If your app shows results on a Google map or must stay inside Google's terms, the official API is the better fit.
What does the Places API cost, and what is the alternative?
Google's Places API (New) pricing charges per SKU, per 1,000 requests, with a monthly free cap on each. As of October 2026, Text Search Pro is $32.00 and Text Search Enterprise is $35.00 per 1,000 for the first tier. Place Details runs $5.00 (Essentials), $17.00 (Pro) and $20.00 (Enterprise). The alternative is a flat cost per call: one credit, whatever fields come back.
That difference in billing model matters more than the headline rate. With Google, you choose the data you want and the request lands in a SKU. With per-call data, you call simple-search or business-details and pay the credits shown on the endpoint, which is 1 for every Google Maps endpoint in our catalogue.
Perceptlayer collects its data from publicly available sources and returns it as found at the time of the call. Keep that in mind when you read the table below.
How do the costs compare per 1,000 lookups?
Per 1,000 lookups past the free tier, the official API ranges from $5.00 to $35.00 for the first pricing tier. Per-call place data is 1,000 credits for the same count. The two bill in different units, dollars per SKU against credits per call, so this table sets out each side's own rate and doesn't convert one into the other. Pricing lists what credits cost.
| Option | Unit | Cost per 1,000 |
|---|---|---|
| Places API Text Search Pro | request | $32.00 |
| Places API Text Search Enterprise | request | $35.00 |
| Places API Place Details Essentials | request | $5.00 |
| Places API Place Details Pro | request | $17.00 |
| Places API Place Details Enterprise | request | $20.00 |
| Perceptlayer, any pack | 1 credit per call | 1,000 credits |
Free monthly allowances are separate:
| Option | Free monthly allowance |
|---|---|
| Places API Text Search Pro | 5,000 events |
| Places API Text Search Enterprise | 1,000 events |
| Places API Place Details Essentials | 10,000 events |
| Places API Place Details Pro | 5,000 events |
| Places API Place Details Enterprise | 1,000 events |
| Perceptlayer | 1,000 free credits per month, after you verify an email address |
Google figures are the first pricing tier from Google's pricing page, read in October 2026. Credits come in packs of 10,000 (Starter), 50,000 (Build), 200,000 (Growth), 500,000 (Pro), 1,000,000 (Scale) and 5,000,000 (Volume), and every pack uses the same 1 credit per call here. What credits cost is on the pricing page. Purchased credits last 12 months, with no subscription. Starter through Pro include 5 requests a second, Scale 10 and Volume 20; see rate limits.
A worked example: 10,000 lookups a month
At Google's Text Search Pro rate, 10,000 requests minus the 5,000 free leaves 5,000 billable: 5,000 × $32.00 / 1,000 = $160.00. For Place Details Pro, the same arithmetic gives 5,000 × $17.00 / 1,000 = $85.00.
On Perceptlayer, 10,000 calls × 1 credit = 10,000 credits; see pricing for what credits cost. That equals the Starter pack's size, and the 1,000 free credits you get each month count toward it.
Bigger jobs use the same 1 credit per call; pricing shows what each pack costs. 500,000 calls × 1 credit = 500,000 credits, which is the Pro pack's size. Google's $32.00 rate applies to the first 100,000 events a month, and its page lists lower rates for higher tiers, so price large volumes there directly.
What does a per-call place record look like?
One call to GET /v1/google-maps/simple-search returns a list of places with name, rating, address, coordinates and identifiers. Here's the request for restaurants in New York, then an excerpt of the recorded response.
curl "https://api.perceptlayer.com/v1/google-maps/simple-search?query=restaurants+in+new+york" \
-H "X-API-Key: $API_KEY"
{
"items": [
{
"name": "Altair Restaurant NYC",
"review_count": 1225,
"rating": 4.8,
"website": "https://www.altairnyc.com/",
"domain": "altairnyc.com",
"latitude": 40.7556565,
"longitude": -73.9936282,
"business_id": "0x89c2591598891521:0x4ebcde18610e64",
"subtypes": [
"New American restaurant",
"Restaurant"
],
"full_address": "351 W 38th St, New York, NY 10018, United States",
"timezone": "America/New_York",
"phone_numbers": [
"+1 929-561-6131"
],
"place_id": "ChIJIRWJmBVZwokRZA5hGN68TgA=",
…
"city": "New York",
"zip_code": "10018",
"state": "New York",
"country_code": "US",
…
},
…
],
"pagination": {
"current_page": 0,
"total_results": 173,
"has_more": false
}
}
The record also holds subtypes, photos_sample and an attributes object (the sample shows wheelchair accessibility). You can narrow the response with the fields parameter and set the language and region with hl and gl. The endpoint pages list the rest: Business Details, Photos and Autocomplete.
Which Places fields are missing from the simple-search response?
The recorded simple-search response has no opening hours, price level or business status. If your app reads those from Places, check them before you migrate. The table compares fields people commonly read from Places with the recorded response above; Places field names are Google's.
| Places field | In the recorded simple-search response? |
|---|---|
displayName |
Yes, as name |
formattedAddress |
Yes, as full_address |
nationalPhoneNumber |
Yes, as phone_numbers (a list) |
rating |
Yes, as rating |
userRatingCount |
Yes, as review_count |
location |
Yes, as latitude and longitude |
websiteUri |
Yes, as website (and domain) |
id |
Yes, as place_id (and business_id) |
types |
Yes, as subtypes |
photos |
Partly: photos_sample holds a sample of photos |
accessibilityOptions |
Yes, under attributes.accessibility |
regularOpeningHours |
Not in the recorded response |
priceLevel |
Not in the recorded response |
businessStatus |
Not in the recorded response |
editorialSummary |
Not in the recorded response |
reviews |
Not in the recorded response; see the reviews endpoint below |
"Not in the recorded response" means the fields were absent from that one recording, not that no endpoint carries them. Run business-details for a place you know and check, since this post doesn't show its response. The recording also holds fields Places doesn't name the same way, such as owner_name, order_link, timezone, district and google_mid.
Which endpoints replace which Places calls?
The mapping is by job, not by name, and it's not one-to-one. Use this as a starting point.
| Job | Places API | Perceptlayer endpoint |
|---|---|---|
| Search by text query | Text Search | GET /v1/google-maps/simple-search (query) |
| Search with map position | Text Search with a location bias | GET /v1/google-maps/advanced-search (query, zoom, optional lat, lon) |
| Fetch one place | Place Details | GET /v1/google-maps/business-details (business_id) |
| Suggest as the user types | Autocomplete | GET /v1/google-maps/autocomplete (query) |
| Reviews | Reviews on Place Details | GET /v1/google-maps/reviews (business_id) |
| Photos | Place Photos | GET /v1/google-maps/photos (business_id) |
Note the identifier: the Perceptlayer endpoints that take a place use business_id, which the search response returns alongside place_id.
Can I get reviews the same way?
Yes. GET /v1/google-maps/reviews takes a business_id and returns reviews as JSON, one credit per call. Parameters include sort, search, limit, page and pages. This is a different shape from Google's place details, where reviews arrive as part of the place record.
curl "https://api.perceptlayer.com/v1/google-maps/reviews?business_id=0x60188b88b7d8f7ab%3A0x2133080e9923eaac" \
-H "X-API-Key: $API_KEY"
An excerpt of the recorded response, with the reviewer fields left out:
{
"items": [
{
"review_source": "Google",
"rating": 5,
"timestamp": 1779471094452,
"author_review_count": 262,
"review_text": [
"A must do! Easy access via Yamanote line > Shibuya > exit Hachiko exit and walk to the 41 or 42 bus (suica card OK) then four stops to Sugekari Elem Sch > once …"
],
"review_language": [
"en"
],
"is_google_review": true,
…
},
…
],
"nextPage": "CjEIARIpCgoAP7_LADY2____EhBrFsVuDgXaYeq0lg4AAAAAGgn92PQCY8g0lvwYACIA"
}
Pass the nextPage value back as page to fetch the next batch. For every parameter and the cost of paging through a large review set, see Google Maps Reviews API: Parameters, Requests and Cost.
When does the official Places API fit better?
Use the official API when your product draws results on a Google map, when your legal team needs Google's terms rather than a third party's, or when you only need a small number of lookups inside the free caps. Google's Places API policies state that results displayed on a map must be shown on a Google Map with proper attribution.
The same page restricts pre-fetching, caching and storing Places content beyond its exceptions, and says place IDs can be stored indefinitely. If you need a dataset you keep and process in your own database, read those rules against your plan.
Here is a plain verdict per use case:
| Use case | Better fit | Why |
|---|---|---|
| Store locator drawn on a Google map | Places API | Map display and attribution rules apply |
| Autocomplete in a checkout address field | Places API | Built for interactive use, covered by Google's terms |
| Under 1,000 to 10,000 lookups a month | Places API | The free caps may cover you, depending on the SKU |
| Lead lists and market research on thousands of places | Per-call data | Flat 1 credit per call, no per-field SKUs |
| Review monitoring across many locations | Per-call data | reviews returns review items directly, with sort and paging |
| Feeding an AI agent place data as tool output | Per-call data | Same key over MCP, nothing to configure per field; see MCP vs function calling |
| Enriching a CRM with phone, website and category | Per-call data | phone_numbers, website and subtypes are in the search record |
Data from publicly available sources is returned as found at the time of the call. If you need guaranteed freshness, that points to the official API as well.
How do I try it?
Get a free key on sign-up: 1,000 free credits every month after you verify an email address, no credit card. Send the key in the X-API-Key header, run the simple-search call above, or open the Google Maps API page and run it in the playground. Authentication details are in the docs.
A few operational facts help when you size a job. A successful response carries X-Credits-Used and X-Credits-Remaining. Failed calls cost nothing and return X-Credits-Used: 0. A 429 or 503 carries a Retry-After header. There's no idempotency key, so a request whose reply was lost may have succeeded and been billed. The credits and errors sections cover each case.
For the wider Google Maps picture, see Google Maps Business Data API: Search Places as JSON. Next step: run one simple-search call for your own city and compare the fields to what your app needs.
APIs in this post
Frequently asked questions
How much does the Google Places API cost per 1,000 requests?
It depends on the SKU. As of October 2026, Google's pricing page lists the first tier at $32.00 for Text Search Pro, $35.00 for Text Search Enterprise, $5.00 for Place Details Essentials, $17.00 for Pro and $20.00 for Enterprise, each with a monthly free cap.
How much does per-call place data cost?
Each successful call to a Google Maps endpoint costs 1 credit. That is 1,000 credits per 1,000 calls, so 20,000 calls × 1 credit = 20,000 credits. Packs run from 10,000 credits (Starter) to 5,000,000 (Volume), and pricing lists what each costs. Failed calls cost nothing, and you also get 1,000 free credits each month.
Can I show these results on a Google map?
Google's Places API policies require results from the Places API to appear on a Google Map. Per-call data is a separate source with different terms, so don't assume that rule transfers. If your product is a Google map, use the official API.
Does the per-call API return the same fields as Places?
Not field for field. A search record includes name, rating, review_count, full_address, phone_numbers, website, latitude, longitude, business_id and place_id. The recorded response has no opening hours, price level or business status; the field table above lists each gap. Compare it with the fields your app reads before you migrate.
What happens when I run out of credits?
The service is prepaid, so calls return insufficient_credits (402) and nothing more is debited. There is no automatic top-up. Purchased credits last 12 months, so a bought pack doesn't expire before you can use it.