# Google Play Reviews Scraper (`axiomworks/google-play-reviews-scraper`) Actor

Scrape Google Play app reviews and monitor new ones by package name or app URL: rating, text, date and reviewer, plus helpful votes, app version and developer reply when given. Delta mode returns only reviews not seen in earlier runs. Filter by stars, date, keyword or reply. No login.

- **URL**: https://apify.com/axiomworks/google-play-reviews-scraper.md
- **Developed by:** [Axiom Works](https://apify.com/axiomworks) (community)
- **Categories:** Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.07 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

**Returns:** one row per Google Play review with reviewId, userName, rating, text, publishedAt, reviewUrl and sourceUrl.
**Input:** `{"apps":["com.spotify.music"],"countries":["us"],"sort":"newest","maxItems":30}`
**Best for:** app feedback analysis, release monitoring and developer reply research.

```json
{
  "reviewId": "15aaafd4-4360-4bc2-9739-67975b168649",
  "packageName": "com.spotify.music",
  "userName": "Pranav Kumar",
  "rating": 1,
  "text": "useless app only ads",
  "publishedAt": "2026-10-14T04:14:27.449Z",
  "reviewUrl": "https://play.google.com/store/apps/details?id=com.spotify.music&reviewId=15aaafd4-4360-4bc2-9739-67975b168649"
}
```

See real output: https://api.apify.com/v2/datasets/48n1DFaEofOhxsjRS/items?format=json\&clean=true

### What does Google Play Reviews Scraper do?

Google Play Reviews Scraper collects public app reviews using package names or Google Play app details URLs. It returns structured review records suitable for spreadsheets, dashboards and research workflows. You can request a storefront country and language, choose the review order, and restrict results by rating or publication date. No login is required.

This Google Play scraper focuses on reviews rather than app metadata. Each row represents a review and includes its stable identifier, reviewer display name, star rating and available text. Helpful vote counts, app versions and developer replies are included when Google Play supplies them. The Actor does not infer missing versions or create replies when none are present. Optional values can be null, and downstream systems should handle that explicitly.

### What data can you get?

The following fields describe the returned review records. Dates use UTC ISO timestamps converted from the numeric timestamps in the response. Package, country and language values describe the request context.

| Field | Meaning |
|---|---|
| `id` | Stable review identifier used for deduplication |
| `reviewId` | Google Play review identifier |
| `userName` | Public reviewer display name |
| `userImage` | Reviewer image URL when available; images are not downloaded |
| `rating` | Numeric star rating from one to five |
| `text` | Review text supplied by Google Play |
| `publishedAt` | Review publication timestamp in UTC |
| `thumbsUp` | Helpful vote count |
| `appVersion` | App version attached to the review when supplied |
| `replyText` | Developer response text when present |
| `repliedAt` | Developer response timestamp when present |
| `replyAuthor` | Name of the replying developer account when a reply exists, otherwise null |
| `reviewUrl` | Link to the review on the app's Google Play page, built from packageName and reviewId |
| `packageName` | Requested Android package name |
| `country` | Requested storefront country code |
| `language` | Requested review language |
| `sourceUrl` | Review endpoint from which the row was fetched |

Missing optional values are null. The sourceUrl points to the endpoint and its storefront parameters; fetching it in a browser without the matching POST request will not reproduce the review page. Keep reviewId alongside any analysis so that findings can be traced to individual rows.

### How to use

Open the Actor in Apify Console and enter one or more app package names in apps. A package name is the id parameter of an app details URL, such as com.spotify.music. You can also paste the full details URL, including other query parameters; the Actor extracts its id parameter and sends requests only to the Google Play review endpoint.

Choose countries and language for the storefront you want to examine. Leave sort as newest for publication monitoring, or use relevance when you want Google's relevance ordering. Set maxItems to a small value for an initial inspection. Start the run, inspect the dataset, then export JSON, CSV or Excel using the normal Apify dataset controls. Increase limits only after checking that the returned app, country and language match your intended research.

For recurring collection, enable deltaMode and keep the same app and country selections. Delta mode saves returned review identifiers in named key-value stores. The first delta run establishes that state; later runs skip identifiers already saved. A normal run without deltaMode does not establish or update delta state. With newest sorting, the first already-seen review stops pagination for that app and country.

### Input

apps is the only required field. Optional controls have defaults, so an API caller can send only apps. Prefilled values in Console are examples for interactive runs and do not replace required API input.

| Input | Description |
|---|---|
| `apps` | App package names (com.spotify.music) or Google Play app links, with or without https://, including market://details?id=... links. Entries without an app id are skipped with a warning. |
| `countries` | Two-letter storefront country codes, default us. |
| `language` | Review language code, e.g. en or de, default en. |
| `sort` | Order reviews by newest, relevance or rating, default newest. |
| `deltaMode` | Return reviews not saved by previous delta runs for each app and country, default false. |
| `minRating` | Rating boundary from 1-5, inclusive. |
| `maxRating` | Rating boundary from 1-5, inclusive. |
| `dateFrom` | Inclusive ISO date boundary; leave empty to disable. |
| `dateTo` | Inclusive ISO date boundary; leave empty to disable. |
| `keywords` | Optional phrases matched against review text, case insensitive; any phrase may match. Empty by default. |
| `replyStatus` | all (default), withReply, or withoutReply based on nonempty developer reply text. |
| `maxItems` | Total results to return, 1-10000, default 50. |
| `minThumbsUp` | Minimum helpful votes; nonnegative integer, default 0 disables |
| `appVersions` | Exact appVersion strings to include; any listed version matches. Empty by default. |
| `minReviewLength` | Minimum trimmed Unicode text characters; nonnegative integer, default 0 disables |
| `maxItemsPerApp` | Maximum results per app across countries, 1-10000, default 10000. |
| `proxyConfiguration` | Proxy to use for requests, default Apify Proxy (datacenter). Switch to residential proxies only if runs get blocked. |

```json
{"apps":["com.spotify.music"],"countries":["us"],"language":"en","sort":"newest","deltaMode":false,"minRating":1,"maxRating":5,"dateFrom":"","dateTo":"","maxItems":50,"maxItemsPerApp":10000,"proxyConfiguration":{"useApifyProxy":true}}
```

maxItems applies to the entire run, while maxItemsPerApp applies to each app across all requested countries. Country combinations are processed in input order. A small total limit may therefore finish before later countries or apps are reached. If balanced country samples matter, run separate country inputs with explicit limits instead of assuming the total is divided equally.

Rating filters are inclusive. A minimum and maximum of two returns two-star reviews only. Date boundaries are inclusive timestamps; use a full timestamp when the exact boundary matters. A dateFrom without a time represents midnight UTC; a bare dateTo includes the entire UTC day. Leave the date fields empty to disable filtering. With newest sorting, pagination stops when reviews become older than dateFrom.

Keywords let you focus an export on reported crashes, subscriptions or another topic without saving every review first. Matching uses case insensitive literal substrings in review text, with Unicode compatibility normalization. It does not search reviewer names or developer replies, translate text, interpret regular expressions, or infer sentiment. Supply phrases in the language you request. An empty keywords array disables this filter. Multiple phrases use OR: a review needs to contain at least one. Rating, date and reply filters still apply together with AND.

Set replyStatus to withoutReply to collect reviews without a nonempty developer response, or withReply to inspect responses already published. The default all preserves the unfiltered output. These options do not add inferred reply records: replyText and repliedAt retain their existing nullable meanings. A missing response means only that this endpoint supplied no nonempty reply text at collection time.

For example, `{"apps":["com.spotify.music"],"keywords":["crash","subscription"],"replyStatus":"withoutReply","maxRating":2,"maxItems":20}` asks for up to twenty low-rated reviews mentioning either phrase and lacking a response. These filters operate on fetched source records before saving, so rejected records do not count toward maxItems or trigger result events. Narrow selections can require more pages and may return fewer than the requested limit. Each app/country scan stops after its page budget or seventy seconds without a saved match; broaden filters if an empty sample is unexpected. This is a bounded sample, not an exhaustive guarantee that no matching review exists.

Delta mode remembers saved matches rather than every scanned review. Changing filters can therefore reveal previously unsaved reviews, but reviews already saved by that app/country delta store remain excluded. Use deltaMode false for an independent filtered export when you need to inspect older reviews again.

To focus on feedback other readers found helpful, set `minThumbsUp` to a positive whole number. A value of 5 keeps rows whose `thumbsUp` is at least five. Missing vote counts are excluded when this filter is enabled. Keep the default zero to leave vote counts unrestricted. The Actor applies this filter to the source review count, without requesting reviewer images or fetching extra app pages.

Use `minReviewLength` to exclude short comments before saving results. A value of 40 requires at least forty Unicode characters after trimming outer whitespace from `text`; the exported text itself remains unchanged. Missing text cannot meet a positive minimum. This is a length filter, not a sentiment or quality judgment. Both new settings combine with ratings, dates, keywords and reply status. Restrictive combinations may require more pages and can return fewer results than requested. Only matching saved rows consume `maxItems`.

For example, this input collects up to seven substantive, helpful Spotify reviews while leaving every output field in its existing format:

```json
{"apps":["com.spotify.music"],"sort":"relevance","minThumbsUp":1,"minReviewLength":40,"maxItems":7}
```

To isolate feedback for a release, set `appVersions` to exact strings copied from `appVersion` in a recent unfiltered export. For example, `{"apps":["com.spotify.music"],"appVersions":["9.0.88.728"],"maxItems":20}` selects only reviews carrying that version. Multiple entries match with OR; all other filters still apply with AND. Matching is case sensitive and does not interpret version ranges, prefixes or wildcards. Missing versions do not match a nonempty selection. An empty array preserves the default behavior, including reviews without version metadata. Google does not offer a version selector in this request, so the Actor scans pages locally and may stop before finding an older release. Broaden the version selection if too few reviews match.

### Output

This record came from a local run against the public Google Play review endpoint. Review availability and vote counts can change between runs. The example shows actual returned field shapes, including null developer replies.

```json
[
  {
    "id": "15aaafd4-4360-4bc2-9739-67975b168649",
    "reviewId": "15aaafd4-4360-4bc2-9739-67975b168649",
    "userName": "Pranav Kumar",
    "userImage": "https://play-lh.googleusercontent.com/a-/ALV-UjUGymPgHxXi3beugO_FkyUdtTT545Tje_VphynciihQ0oW1VBNI",
    "rating": 1,
    "text": "useless app only ads",
    "publishedAt": "2026-10-14T04:14:27.449Z",
    "thumbsUp": 0,
    "appVersion": null,
    "replyText": null,
    "repliedAt": null,
    "replyAuthor": null,
    "reviewUrl": "https://play.google.com/store/apps/details?id=com.spotify.music&reviewId=15aaafd4-4360-4bc2-9739-67975b168649",
    "packageName": "com.spotify.music",
    "country": "us",
    "language": "en",
    "sourceUrl": "https://play.google.com/_/PlayStoreUi/data/batchexecute?rpcids=oCPfdb&hl=en&gl=us&source-path=%2Fstore%2Fapps%2Fdetails&rt=c"
  }
]
```

Within a run, review identifiers are deduplicated across pages, apps and countries. If the same review appears in multiple storefront responses, only its first returned occurrence is saved. This avoids charging for duplicate records but also means a multi-country output is not a count of every storefront appearance. Treat country as the request context of the saved occurrence.

### How much does it cost?

The Actor is charged per result returned. Each saved review triggers one result event. Skipped duplicates, filtered reviews and failed requests do not become dataset rows or result events. maxItems caps the total number of saved reviews. See the Pricing tab for the current charging details before starting a run.

### Use with AI agents (MCP)

Connect an MCP client to the Apify MCP server with this Actor selected. The schema exposes apps first so an agent can identify the required target and then choose limits and filters. Use explicit package names in prompts when several apps have similar display names.

```json
{"mcpServers":{"apify":{"url":"https://mcp.apify.com/?tools=axiomworks/google-play-reviews-scraper"}}}
```

Example prompt: “Collect twenty newest Google Play reviews for com.spotify.music in the US and summarize the complaints using rating, text and publishedAt.” Another prompt: “Return ten German-language reviews for com.duolingo in Germany, keeping reviewId and appVersion in the output.” A third prompt: “Collect one-star and two-star reviews for com.whatsapp and group the returned text by recurring topic.”

### Integrations and API

Use the Apify API or SDK clients to run the Actor and retrieve its default dataset. Configure your own Apify token securely in your application environment. These examples use the same Store path as the MCP configuration.

```python
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("axiomworks/google-play-reviews-scraper").call(run_input={"apps":["com.spotify.music"],"maxItems":50})
rows = client.dataset(run["defaultDatasetId"]).list_items().items
```

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({token: process.env.APIFY_TOKEN});
const run = await client.actor('axiomworks/google-play-reviews-scraper').call({apps:['com.spotify.music'],maxItems:50});
const {items} = await client.dataset(run.defaultDatasetId).listItems();
```

```bash
curl -X POST 'https://api.apify.com/v2/acts/axiomworks~google-play-reviews-scraper/run-sync-get-dataset-items' \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"apps":["com.spotify.music"],"maxItems":50}'
```

### FAQ

**Why did a run return fewer reviews than maxItems?**

The selected storefront may have exhausted its available pages, filters may exclude records, delta mode may reach already-seen reviews, or a target may remain blocked after retries. maxItems is an upper limit, not a promise that every selection has enough matching reviews. Read the final status message and logs before increasing limits. An empty delta run also suggests setting deltaMode=false to export previously seen reviews again. HTTP attempts share the request retry deadline, so a late retry cannot start a fresh full timeout after that budget expires.

**Can I use a Play URL with extra parameters?**

Yes. A Google Play app details URL with an id parameter is accepted. Package names are also supported directly. Supply a Google Play details URL or package name rather than an app title or search URL. The parser extracts a package-shaped id parameter from supplied links; it requests only the Google Play review endpoint and does not visit the supplied link.

**Does delta mode track every changed review?**

Delta state tracks returned identifiers, not content revisions. Already-seen edited reviews are skipped; use normal snapshots to compare changes. Deleting the named store resets history. Unreadable stores trigger a warning and a full scan within existing limits. Failed saves leave collected reviews available but may cause repeats next run. Runs without new identifiers avoid a state write.

**Are developer replies always available?**

No. replyText and repliedAt are null when Google Play does not supply a reply. The Actor does not generate responses, estimate reply dates or contact developers. appVersion can also be missing on individual reviews.

**How are blocked requests handled?**

Requests use the selected proxyConfiguration. Temporary errors and block responses are retried with backoff and a fresh proxy session. Persistent blocks produce an empty successful result with guidance when no target succeeds. The Actor does not solve CAPTCHAs or access content behind login.

**Can I compare storefronts directly?**

You can request multiple countries, but the response is the endpoint's selection for each country and language. Reviews may overlap. Use separate runs if you need independent samples and retain country and language in your analysis. Do not treat returned sample sizes as app installation counts.

### Is it legal to scrape Google Play?

This Actor reads publicly available review data without login. Reviewer names and image URLs can be personal data, so choose retention, sharing and downstream uses appropriate to your circumstances. The Actor is not affiliated with Google Play or endorsed by Google. Users remain responsible for reviewing applicable rules and requirements for their use of the collected records.

### Feedback

If a result looks wrong, share the app package, country, language, sort and relevant reviewId in an Actor issue. Describe the expected field and the returned value so the extraction can be investigated. Avoid including credentials or unnecessary personal details.

# Actor input Schema

## `apps` (type: `array`):

Android package names or Google Play app URLs, e.g. \["com.spotify.music"] or \["https://play.google.com/store/apps/details?id=com.whatsapp"]. Required. Each app is queried for each country in order; maxItems is shared across them. Invalid entries are skipped; unavailable or blocked targets produce no rows and a status message.

## `countries` (type: `array`):

Two-letter Google Play storefront codes, e.g. \["us","gb"]. Default \["us"]. Each app is queried once per country in order; all pairs share maxItems. These select storefronts, not reviewer nationality. Use language separately for review language.

## `language` (type: `string`):

Google Play review language code, e.g. "en", "de" or "pt-BR". Default "en". Applies to every app and country; does not translate reviews or infer reviewer language. Choose countries separately for storefronts.

## `sort` (type: `string`):

Google Play ordering: "newest" (default), "relevance" or "rating", e.g. "newest" for recent feedback. Newest permits early stopping at dateFrom or a previously saved delta review; rating changes ordering, while minRating/maxRating filter stars.

## `deltaMode` (type: `boolean`):

Set true to skip review IDs saved by earlier delta runs for each app/country; default false exports independently. Example: {"deltaMode":true,"sort":"newest"} saves history on the first run, then stops at the first known review in later runs. Zero rows can mean no unseen matches; set false to export previously seen reviews again. Normal runs do not save delta history.

## `minRating` (type: `integer`):

Lowest included star rating, 1-5, default 1. For example, minRating=1 and maxRating=2 select low-rated reviews. Combines with date, keyword and reply filters; saved matches share maxItems. Reversed rating bounds are swapped.

## `maxRating` (type: `integer`):

Highest included star rating, 1-5, default 5. For example, maxRating=2 includes one- and two-star reviews when minRating is 1. Combines with all other filters. Reversed rating bounds are swapped.

## `dateFrom` (type: `string`):

Inclusive earliest publication date or ISO timestamp, e.g. "2026-10-01" or "2026-10-01T12:00:00Z". Default "" disables this bound. Bare dates start at UTC midnight; sort="newest" stops paging at older reviews. Combines with dateTo and other filters.

## `dateTo` (type: `string`):

Inclusive latest publication date or ISO timestamp, e.g. "2026-10-12" or "2026-10-12T12:00:00Z". Default "" disables this bound. A bare YYYY-MM-DD includes the entire UTC day. Combines with dateFrom and other filters; reversed date bounds are swapped.

## `maxItems` (type: `integer`):

Maximum saved unique reviews across every app and country, 1-10000, default 50; e.g. 30 for a quick sample. Earlier targets can consume this shared budget. Only matching saved reviews count. Filters, delta history or unavailable reviews can produce fewer rows; use maxItemsPerApp to limit one app.

## `maxItemsPerApp` (type: `integer`):

Maximum saved reviews for each app across all its countries, 1-10000, default 10000; e.g. 10 with maxItems=30 to sample several apps. The shared maxItems limit still applies, and fewer matching reviews may be available.

## `proxyConfiguration` (type: `object`):

Proxy settings for Google Play requests, e.g. {"useApifyProxy":true} (default Apify datacenter proxy). Blocked requests retry on fresh sessions. Select residential proxies if repeated blocking occurs; unavailable targets still return no rows.

## `keywords` (type: `array`):

Text keywords or phrases, e.g. \["crash","subscription"]. Keep reviews containing any supplied phrase, case insensitive with Unicode normalization. Default \[] keeps all texts. Combines with rating, date and reply filters; only saved matches count toward maxItems. No translation or AI matching.

## `replyStatus` (type: `string`):

Developer response filter: "all" (default), "withReply" or "withoutReply", e.g. "withoutReply" to collect unanswered feedback. Uses nonempty replyText, not replyAuthor. Combines with other filters; narrow selections may return fewer than maxItems.

## `minThumbsUp` (type: `integer`):

Minimum thumbsUp count, a nonnegative whole number, default 0 disables this filter. For example, 5 keeps reviews with at least five helpful votes. Combines with all other filters; only saved matches count toward the shared maxItems limit. Missing vote counts do not match a positive minimum.

## `minReviewLength` (type: `integer`):

Minimum trimmed review text length in Unicode characters, a nonnegative whole number, default 0 disables this filter. For example, 40 keeps longer feedback. Missing text does not match a positive minimum. Combines with other filters; narrow selections can return fewer than maxItems.

## `appVersions` (type: `array`):

Exact appVersion strings to include, e.g. \["9.0.88.728"]. Default \[] keeps every version, including missing versions. Matches any listed version, case sensitive, and combines with all other filters. Copy values from an unfiltered sample first. Narrow or old versions may yield fewer results or zero rows within the scan budget.

## Actor input object example

```json
{
  "apps": [
    "com.spotify.music"
  ],
  "countries": [
    "us"
  ],
  "language": "en",
  "sort": "newest",
  "deltaMode": false,
  "minRating": 1,
  "maxRating": 5,
  "dateFrom": "",
  "dateTo": "",
  "maxItems": 30,
  "maxItemsPerApp": 10000,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "keywords": [],
  "replyStatus": "all",
  "minThumbsUp": 0,
  "minReviewLength": 0,
  "appVersions": []
}
```

# Actor output Schema

## `results` (type: `string`):

Dataset with one item per result, in the order found.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "apps": [
        "com.spotify.music"
    ],
    "countries": [
        "us"
    ],
    "sort": "newest",
    "maxItems": 30,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("axiomworks/google-play-reviews-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "apps": ["com.spotify.music"],
    "countries": ["us"],
    "sort": "newest",
    "maxItems": 30,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("axiomworks/google-play-reviews-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "apps": [
    "com.spotify.music"
  ],
  "countries": [
    "us"
  ],
  "sort": "newest",
  "maxItems": 30,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call axiomworks/google-play-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,axiomworks/google-play-reviews-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/4eoXmVDdiBox3hSp7/builds/Ja4b1036vvyVujmoL/openapi.json
