---
title: "Google Places API Alternative: Place Data Priced per Call"
description: "Places API Text Search Pro lists at $32 per 1,000 requests. Per-call place data costs 1 credit a call. Costs in credits, fields and when Google fits better."
url: https://perceptlayer.com/blog/google-maps-places-api-alternative
---

[Blog](https://perceptlayer.com/blog) / [API guides](https://perceptlayer.com/blog/category/api-guides)

# Google Places API Alternative: Place Data Priced per Call

1 Oct 2026 Perceptlayer 8 min read

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](https://perceptlayer.com/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.

## Key takeaways

-   Google's Places API (New) bills Text Search Pro at $32.00 and Place Details Pro at $17.00 for each block of 1,000 requests, after a free monthly cap per SKU, per [Google's pricing page](https://developers.google.com/maps/billing-and-pricing/pricing) as of October 2026.
-   Perceptlayer's `GET /v1/google-maps/simple-search` costs 1 credit per successful call, so 1,000 calls cost 1,000 credits on any pack. Failed calls cost nothing. The difference is the billing model, a flat credit per call against per-SKU rates; [pricing](https://perceptlayer.com/pricing) shows what credits cost.
-   A search item carries `name`, `rating`, `review_count`, `full_address`, `phone_numbers`, `latitude`, `longitude`, `business_id` and `place_id`.
-   Google requires Places results shown on a map to appear on a Google map. If that's your product, use the official API.
-   Check prices on Google's page before you decide. The SKU you pay for depends on what you request, and the figures here are the ones listed in October 2026.

## What does the Places API cost, and what is the alternative?

Google's [Places API (New) pricing](https://developers.google.com/maps/billing-and-pricing/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](https://perceptlayer.com/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](https://developers.google.com/maps/billing-and-pricing/pricing), 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](https://perceptlayer.com/pricing). Purchased credits last 12 months, with no subscription. Starter through Pro include 5 requests a second, Scale 10 and Volume 20; see [rate limits](https://docs.perceptlayer.com/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](https://perceptlayer.com/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](https://perceptlayer.com/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.

```bash
curl "https://api.perceptlayer.com/v1/google-maps/simple-search?query=restaurants+in+new+york" \
  -H "X-API-Key: $API_KEY"
```

```json
{
  "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](https://perceptlayer.com/apis/google-maps/business-details), [Photos](https://perceptlayer.com/apis/google-maps/photos) and [Autocomplete](https://perceptlayer.com/apis/google-maps/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.

```bash
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:

```json
{
  "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](https://perceptlayer.com/blog/google-maps-reviews-api-parameters).

## 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](https://developers.google.com/maps/documentation/places/web-service/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](https://docs.perceptlayer.com/ai-agents), nothing to configure per field; see [MCP vs function calling](https://perceptlayer.com/blog/mcp-vs-function-calling-web-data) |
| 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](https://perceptlayer.com/signup): 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](https://perceptlayer.com/apis/google-maps) and run it in the playground. Authentication details are in the [docs](https://docs.perceptlayer.com/authentication).

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](https://docs.perceptlayer.com/credits) and [errors](https://docs.perceptlayer.com/errors) sections cover each case.

For the wider Google Maps picture, see [Google Maps Business Data API: Search Places as JSON](https://perceptlayer.com/blog/google-maps-business-data-api). Next step: run one `simple-search` call for your own city and compare the fields to what your app needs.

## APIs in this post

-   [Google Maps **1 credit per call** · 10 endpoints](https://perceptlayer.com/apis/google-maps)

## 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](https://developers.google.com/maps/billing-and-pricing/pricing) 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](https://perceptlayer.com/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](https://developers.google.com/maps/documentation/places/web-service/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.

google maps places api pricing place data local business data

## More from the blog

1.  [API guides](https://perceptlayer.com/blog/category/api-guides) 15 Sept 2026 Perceptlayer 7 min read
    
    ## [Google Maps Directions API Alternative: Routes as JSON](https://perceptlayer.com/blog/google-maps-directions-api-alternative)
    
    One GET to /v1/google-maps/directions returns a route as JSON for 1 credit. Parameters, a 15,000-route cost example and Google's per-request rates.
    
2.  [API guides](https://perceptlayer.com/blog/category/api-guides) 18 Aug 2026 Perceptlayer 8 min read
    
    ## [Google Maps Business Data API: Search Places as JSON](https://perceptlayer.com/blog/google-maps-business-data-api)
    
    One GET to simple-search returns places as JSON: name, rating, review\_count, address, phone and business\_id. Parameters, a real response, 1 credit per call.
    
3.  [API guides](https://perceptlayer.com/blog/category/api-guides) 9 Jul 2026 Perceptlayer 8 min read
    
    ## [Google Maps Reviews API: Parameters, Requests and Cost](https://perceptlayer.com/blog/google-maps-reviews-api-parameters)
    
    Call GET /v1/google-maps/reviews with a business\_id from Simple Search. Every parameter, the sort values 1 to 4, and the cost: 1 credit per call.
