---
title: "Google Play Store API: App Reviews and Details as JSON"
description: "Get Google Play app reviews, details and search results as JSON with one GET call. Parameters, a recorded Spotify response and 1 credit per call."
url: https://perceptlayer.com/blog/google-play-store-api
---

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

# Google Play Store API: App Reviews and Details as JSON

24 Sept 2026 Perceptlayer 6 min read

To get Google Play data for any public app as JSON, call `GET /v1/google-play/product-reviews` with the app's package name as `product_id`. The response carries the app's metadata, rating counts and a list of reviews. Search and details have their own endpoints, and every successful call costs 1 credit.

## Key takeaways

-   Google's own Play Developer API manages apps you publish. It isn't a way to read any app's public listing or reviews.
-   `GET /v1/google-play/product-reviews?product_id=com.spotify.music&store=apps&num=20` returns app info, rating counts and reviews in one response.
-   `GET /v1/google-play/search` needs only `q`; `GET /v1/google-play/details` takes the same app identifiers as the reviews endpoint.
-   Each call costs 1 credit. Failed calls cost nothing and return `X-Credits-Used: 0`.
-   The `pagination.next_page_token` field in the response is what you use to continue a reviews list.

## Does Google have an official Play Store API?

Yes, but it is built for publishers. The [Google Play Developer API](https://developers.google.com/android-publisher) covers subscriptions and in-app purchases, plus publishing tasks like uploading apps and managing store listings. Its [Reply to Reviews API](https://developers.google.com/android-publisher/reply-to-reviews) lets you retrieve and reply to reviews of your app, not of apps you don't own.

If you're a developer reading and answering your own reviews, use the official API: it's the right tool and it's authorised for your account. If you want reviews, ratings or listing details for apps you don't publish (competitors, a category, a portfolio you track), you need a different route. That is what the [Google Play API](https://perceptlayer.com/apis/google-play) here does: it takes a package name or a search term and returns the public store data as JSON.

Data is collected from publicly available sources and returned as found at the time of the call.

## What does the Google Play API give you?

The Google Play API has 9 endpoints, all `GET`, all 1 credit. Reviews and app data live behind product endpoints that share one parameter set. Search is separate and only needs a query. The catalogue spans 248 websites and 1,659 endpoints, and this is one of them, listed under [Apps and media](https://perceptlayer.com/verticals/apps).

| Endpoint | Returns | Credits |
| --- | --- | --- |
| `/v1/google-play/product-reviews` | Product Reviews | 1 |
| `/v1/google-play/details` | Details | 1 |
| `/v1/google-play/product` | Product | 1 |
| `/v1/google-play/apps-product` | Apps Product | 1 |
| `/v1/google-play/books-product` | Books Product | 1 |
| `/v1/google-play/movies-product` | Movies Product | 1 |
| `/v1/google-play/tv-product` | Tv Product | 1 |
| `/v1/google-play/audiobooks-product` | Audiobooks Product | 1 |
| `/v1/google-play/search` | Search | 1 |

Each has its own page: [Product Reviews](https://perceptlayer.com/apis/google-play/product-reviews), [Details](https://perceptlayer.com/apis/google-play/details), [Search](https://perceptlayer.com/apis/google-play/search), [Apps Product](https://perceptlayer.com/apis/google-play/apps-product), and the books, movies and audiobooks pages. The `store` parameter takes `apps`, `movies`, `tv`, `books` or `audiobooks` on the product endpoints, so one parameter set covers more than Android apps.

## How do you get the reviews for an app?

Send the app's package name as `product_id` to the product-reviews endpoint. The package name is the `id=` value in the app's Play Store URL, such as `com.spotify.music`. Authenticate with your key in the `X-API-Key` header, as described in the [authentication docs](https://docs.perceptlayer.com/authentication).

```bash
curl "https://api.perceptlayer.com/v1/google-play/product-reviews?product_id=com.spotify.music&store=apps&num=20" \
  -H "X-API-Key: $API_KEY"
```

You don't have a key yet? [Get a free API key](https://perceptlayer.com/signup): every account gets 1,000 free credits a month after verifying an email address, with no credit card.

### What does the response look like?

The response is one JSON object. The top-level keys we recorded for Spotify include `search_parameters`, `app`, `product_info`, `about_this_app`, `categories`, `data_safety`, `ratings`, `reviews`, `similar_results` and `pagination`. Here is the start of the recorded response, trimmed:

```json
{
  "search_parameters": {
    "engine": "google_play_product_reviews",
    "product_id": "com.spotify.music",
    "store": "apps",
    "hl": "en",
    "gl": "US",
    "num": 20
  },
  "app": {
    "app_id": "com.spotify.music",
    "title": "Spotify: Music and Podcasts",
    "developer": "Spotify AB",
    "url": "https://play.google.com/store/apps/details?id=com.spotify.music&hl=en&gl=US"
  },
  "product_info": {
    "title": "Spotify: Music and Podcasts",
    "rating": 4.3,
    "reviews": 36524909,
    "downloads": "1B+",
    "product_id": "com.spotify.music"
  },
  …
}
```

The `product_info` block holds the headline numbers: `rating`, `reviews` (the review count) and `downloads`. `about_this_app` adds `released_on`, `updated_on` and `in_app_purchases`.

### How are ratings and individual reviews returned?

The `ratings` array holds a star level and a `count` per entry, and `reviews` holds one object per review. This is the shape of a review in the recording, trimmed to the fields that matter for analysis:

```json
"ratings": [
  { "stars": 1, "count": 3717244 },
  { "stars": 2, "count": 1064474 }
],
"reviews": [
  {
    "id": "6b8cd845-6fcd-4296-b05e-9e1b3feada62",
    "rating": 1,
    "snippet": "Spotify has a new, horrendous feature where the ending to the song that you are listening to gets cut off by the middle of the next song. …",
    "likes": 491,
    "date": "September 15, 2026",
    "iso_date": "2026-09-15T22:20:33Z"
  },
  …
]
```

Each review has an `id`, a star `rating`, a `snippet`, a `likes` count and both a display `date` and an `iso_date`. Reviews also carry reviewer profile fields; if you store reviews, think about whether you need them. For sentiment or product research you usually don't.

## Which parameters does the reviews endpoint take?

The product-reviews endpoint has no required parameters, but you identify the app with `product_id`, `id` or `url`. The rest narrow the reviews by rating, platform and sort order, and set the language and country. The parameter set is shared with the other product endpoints.

| Parameter | Type | Notes |
| --- | --- | --- |
| `product_id` | string | Up to 255 characters, e.g. `com.spotify.music` |
| `id` | string | Up to 255 characters |
| `url` | string | Up to 1000 characters |
| `store` | string | One of `apps`, `movies`, `tv`, `books`, `audiobooks` |
| `hl` | string | Language, up to 10 characters |
| `gl` | string | Country, up to 2 characters |
| `rating` | string | One of `1`, `2`, `3`, `4`, `5` |
| `platform` | string | One of `phone`, `tablet`, `tv`, `chromebook`, `watch`, `car` |
| `sort_by` | string | One of `1`, `2`, `3`, `most_relevant`, `newest`, `rating` |
| `num` | integer | Number of reviews to ask for |
| `all_reviews` | boolean | Optional flag |
| `season_id` | string | Up to 255 characters |
| `next_page_token` | string | Up to 1000 characters |

A request for only the one-star reviews, newest first:

```bash
curl "https://api.perceptlayer.com/v1/google-play/product-reviews?product_id=com.spotify.music&store=apps&rating=1&sort_by=newest&num=20" \
  -H "X-API-Key: $API_KEY"
```

To read more than one page, take `pagination.next_page_token` from the response and send it back as `next_page_token`. The [pagination guide](https://perceptlayer.com/blog/paginate-web-data-api-python) shows a safe loop that stops when the token is missing.

## How do you search the Play Store and fetch app details?

For discovery, use `GET /v1/google-play/search`. It has one required parameter, `q` (up to 200 characters), and optional `store`, `hl`, `gl` and `price`. The `store` values here are `apps`, `movies`, `books` or `games`; `price` takes `1` or `2`. Details uses the same identifiers as the reviews endpoint.

```bash
curl "https://api.perceptlayer.com/v1/google-play/search?q=chess&store=apps" \
  -H "X-API-Key: $API_KEY"
```

```bash
curl "https://api.perceptlayer.com/v1/google-play/details?product_id=com.spotify.music&store=apps&hl=en&gl=US" \
  -H "X-API-Key: $API_KEY"
```

A common flow is search first, then details or reviews for each package name you want to track. You can try both from the playground on the [Google Play API page](https://perceptlayer.com/apis/google-play) without writing code. For the exact fields on search and details, run a call there; we only quote fields from the recorded reviews response above.

## What does each call cost?

Every Google Play endpoint costs 1 credit per successful call. A failed call costs nothing and returns `X-Credits-Used: 0`; each successful response carries `X-Credits-Used` and `X-Credits-Remaining` so you can track the balance. See [credits](https://docs.perceptlayer.com/credits) for the details.

Worked example: tracking 100 apps with one details call and one reviews call each, every day for 30 days, is 100 × 2 × 30 = 6,000 calls = 6,000 credits. That fits inside the Starter pack's 10,000 credits, and the 1,000 free monthly credits cover the first 1,000 of them.

| Pack | Credits |
| --- | --- |
| Starter | 10,000 |
| Build | 50,000 |
| Growth | 200,000 |
| Pro | 500,000 |
| Scale | 1,000,000 |
| Volume | 5,000,000 |

Purchased credits last 12 months, with no subscription and no seats. The [pricing page](https://perceptlayer.com/pricing) shows what each pack costs.

## What can go wrong?

Errors come back as an HTTP status with a JSON body `{"error": {"code", "message", "request_id"}}`. The ones you'll most likely meet are `invalid_api_key` (401), `insufficient_credits` (402), `invalid_parameters` (422) and `rate_limited` (429). Rate-limited and temporarily unavailable responses include a `Retry-After` header with the seconds to wait.

One caveat: requests have no idempotency key. If a client timeout loses the reply, the call may have succeeded and been billed, so don't blindly retry in a tight loop. The [errors docs](https://docs.perceptlayer.com/errors) and [rate limits](https://docs.perceptlayer.com/rate-limits) list every code, and [Retry Web API Calls Without Paying Twice](https://perceptlayer.com/blog/retry-web-api-calls-without-paying-twice) covers the pattern.

If you build a reviews pipeline that runs daily, cache details responses you don't need fresh; [Cache API Responses in Python](https://perceptlayer.com/blog/cache-web-data-api-responses) shows how to save credits. Next step: [get a free API key](https://perceptlayer.com/signup), then run the Spotify reviews call above in the playground. For the same pattern on another source, see the [Google Maps reviews API guide](https://perceptlayer.com/blog/google-maps-reviews-api-parameters).

## APIs in this post

-   [Google Play **1 credit per call** · 9 endpoints](https://perceptlayer.com/apis/google-play)

## Frequently asked questions

### Is there an official Google Play Store API for reading app reviews?

Google's Play Developer API includes a Reply to Reviews API that lets you retrieve and reply to reviews of your own app. It is for publishers. To read reviews of apps you don't publish, you need a data API such as the Google Play endpoints described here.

### How much does the Google Play API cost per call?

Every Google Play endpoint costs 1 credit per successful call, so 1,000 calls × 1 credit = 1,000 credits. Failed calls cost nothing. New accounts get 1,000 free credits each month after verifying an email address, and the [pricing page](https://perceptlayer.com/pricing) shows what credit packs cost.

### Can I use the app URL instead of the package name?

The endpoints accept a `url` parameter (up to 1000 characters) as well as `product_id` and `id`. The package name is the shortest route and is what the recorded response echoes back as `product_id`. Use whichever identifier you already store.

### Can an AI agent call the Google Play endpoints?

Yes. The MCP server at `https://api.perceptlayer.com/mcp` exposes `search_endpoints`, `get_endpoint` and `call_endpoint`. Searching and inspecting endpoints costs nothing; `call_endpoint` spends the endpoint's credits on success only. See the [MCP docs](https://docs.perceptlayer.com/ai-agents).

google play app reviews app store data android apps

## More from the blog

1.  [API guides](https://perceptlayer.com/blog/category/api-guides) 23 Oct 2026 Perceptlayer 7 min read
    
    ## [Cars.com API: Used Car Listings and Price Evaluations](https://perceptlayer.com/blog/cars-com-api-listings-price-evaluation)
    
    Search Cars.com listings with its six required parameters (zip, radius\_miles, stock\_type, sort, page, page\_size), then listing, dealer and price-eval calls.
    
2.  [API guides](https://perceptlayer.com/blog/category/api-guides) 22 Oct 2026 Perceptlayer 7 min read
    
    ## [Booking.com Reviews API: Hotel Review Scores as JSON](https://perceptlayer.com/blog/booking-com-reviews-api-json)
    
    Pull Booking.com review scores and guest reviews as JSON with two GET calls at 1 credit each. Parameters, sorting, paging and the cost of covering a city.
    
3.  [API guides](https://perceptlayer.com/blog/category/api-guides) 22 Oct 2026 Perceptlayer 9 min read
    
    ## [Idealo API: Compare Product Prices Across Shops as JSON](https://perceptlayer.com/blog/idealo-api-price-comparison-json)
    
    Search idealo.de by keyword, then pass a product\_id to the offers endpoint. Endpoints, parameters, a real search response and the cost at 1 credit per call.
