# Google Play Release & Review Watch (`isolovyev/google-play-release-watch`) Actor

Track Google Play app releases, recent review edits and developer reply changes by country and language.

- **URL**: https://apify.com/isolovyev/google-play-release-watch.md
- **Developed by:** [Ivan Solovyev](https://apify.com/isolovyev) (community)
- **Categories:** Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$5.00 / 1,000 complete app checks

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## Google Play Release & Review Watch

Connect Google Play releases with recent review observations and developer replies. Track up to 10 Android apps per run, with a country and language for each watch.

Every successful app check produces a summary, including unchanged checks. Repeat runs compare public release metadata, review text, ratings and developer replies against persistent history. Reviews retain the app version supplied by Google Play. The current listing version is shown separately.

### Start a watch

1. Enter Android package names, such as `org.wikipedia`.
2. Select country and language codes, such as `us` and `en`.
3. Choose a recent review window from 0 to 200. Use 0 for release checks.
4. Give each independent watch a unique `historyStoreName`. Keep the same name on repeat runs.

The default checks Wikipedia in the United States in English and observes up to 50 recent reviews. `originalRatingCount` and `originalWrittenReviewCount` are source totals; `returnedReviewCount` counts only the reviews returned by this run. Country selects the requested Google Play storefront; review language selects the requested source review language.

### Output and history

- `app_check`: one complete summary per successful app, including exact public listing version when supplied, release timestamp, observed changes and coverage.
- `release_changed`: a change in version, release timestamp or release notes.
- `review_observed` and `review_new`: baseline or newly observed reviews within the selected recent window.
- `review_changed`: changes to previously observed text, rating or source version fields.
- `developer_reply_changed`: changed public reply text or reply timestamp.
- `source_error`: a failed check, reported separately from successful checks.

The recent review window is a bounded observation, not a full review archive. Missing reviews never produce deletion events. A first run establishes the baseline. History retains up to 1,000 observed review IDs per app, country and language, in the named store. Separate watches should use separate store names. Run each watch sequentially. Event IDs support downstream deduplication when a delivery is retried. Changing the review-window size starts a separate baseline, so previously unseen older reviews are baseline observations.

Run limits: 10 apps, 200 recent reviews per app, 4 review pages per app, 50 source requests, 4 MiB per source response and a 120-second source deadline. Source errors do not update that app's history. Read `SUMMARY` in the run key-value store for coverage and counters.

### Example workflows

Ready input files in `examples/` cover Wikipedia release checks, review and reply monitoring, a two-app competitor watch, and a German storefront watch.

### Русский

Актор отслеживает публичные релизы Android-приложений, изменения свежих отзывов и ответов разработчиков в Google Play. Каждый успешно проверенный объект получает строку результата, даже если ничего не изменилось.

Укажите названия пакетов, страну, язык и окно до 200 свежих отзывов. Для повторных запусков сохраняйте одинаковое имя `historyStoreName`; независимым наблюдениям задавайте разные имена. История разделяется по приложению, стране и языку. Точная версия отзыва сохраняется только когда её сообщил источник; версия текущей карточки показана отдельно.

Первый запуск создаёт исходное состояние. Число рейтингов и письменных отзывов в источнике не равно числу отзывов, полученных за запуск. Пропажа отзыва из ограниченного окна не считается удалением. Сводка `SUMMARY` показывает успешные проверки, ошибки источника и объём запросов.

### Billing and delivery

Complete app checks use the live Pricing section when custom-event pricing is enabled. Failed or incomplete checks are not charged. Review/change rows have no separate charge. The run checks the available spending limit before source requests. A persistent per-run billing journal prevents automatic repeat charges after an uncertain delivery; inspect `SUMMARY` and `BILLING-JOURNAL` before recovering that run.

### Runtime allocation

Use 256 MiB memory. Higher allocations are rejected before initialization and source requests; the run fails with `RUNTIME_UNSUPPORTED` in its log. Processing has a 165-second internal deadline and a 180-second process limit, including worker shutdown. Raising the platform timeout does not extend this limit.

# Actor input Schema

## `appIds` (type: `array`):

One to ten Android package names, such as org.wikipedia.

## `country` (type: `string`):

Requested Google Play storefront country, such as us or de.

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

Requested public review language, such as en or de.

## `maxReviewsPerApp` (type: `integer`):

Bounded latest review window. Set 0 for release-only checks.

## `historyStoreName` (type: `string`):

Use the same name for repeated sequential runs; separate names for independent watches.

## Actor input object example

```json
{
  "appIds": [
    "org.wikipedia"
  ],
  "country": "us",
  "language": "en",
  "maxReviewsPerApp": 50,
  "historyStoreName": "google-play-release-watch-history"
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

## `summary` (type: `string`):

No description

# 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 = {
    "appIds": [
        "org.wikipedia"
    ],
    "country": "us",
    "language": "en",
    "maxReviewsPerApp": 50,
    "historyStoreName": "google-play-release-watch-history"
};

// Run the Actor and wait for it to finish
const run = await client.actor("isolovyev/google-play-release-watch").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 = {
    "appIds": ["org.wikipedia"],
    "country": "us",
    "language": "en",
    "maxReviewsPerApp": 50,
    "historyStoreName": "google-play-release-watch-history",
}

# Run the Actor and wait for it to finish
run = client.actor("isolovyev/google-play-release-watch").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 '{
  "appIds": [
    "org.wikipedia"
  ],
  "country": "us",
  "language": "en",
  "maxReviewsPerApp": 50,
  "historyStoreName": "google-play-release-watch-history"
}' |
apify call isolovyev/google-play-release-watch --silent --output-dataset

```

## MCP server setup

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

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/RNVXL6oZtBY3H6DFv/builds/6cNNUm0qXdaIScqgp/openapi.json
