# Google Play Feature Request Scraper (`googleapi/google-play-feature-request-scraper`) Actor

Extract explicit feature requests and product gaps from public app reviews.

- **URL**: https://apify.com/googleapi/google-play-feature-request-scraper.md
- **Developed by:** [Google API](https://apify.com/googleapi) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.99 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

Find public Google Play reviews that contain language requesting a feature or change. Each dataset record includes the matching review and the public app information available for it.

### Input

- **appId / appIds**: Android package IDs to inspect.
- **searchTerm / searchTerms**: Public Google Play app searches.
- **startUrls**: Public app or review pages.
- **maxItems**: Maximum matching review records across the run.
- **maxApps**: Maximum app pages opened from each search.
- **maxReviews**: Maximum reviews classified per app.
- **maxTargets**: Maximum input sources to process.
- **page / maxPages**: Select and bound review-feed pages.
- **locale / language / country**: Google Play language and region.
- **deduplicate**: Remove repeated app and review records.

### Dataset

Each record represents a matched review and includes `appId`, `title`, `reviewText`, and `featureRequestText` with the exact sentence or sentences that triggered the match. Other available fields include the developer, rating, date, helpful count, and public developer reply.

The Actor identifies request language in public reviews. A match is not an endorsement by the developer, and reviews that do not match the selected criteria are not included. Public data may be incomplete.

Run output provides a dataset link, output totals, and run health information.

### Responsible use

This Actor reads public app reviews. Respect reviewer privacy and follow Google Play's terms, applicable law, and your data-protection obligations. This independent Actor is not affiliated with Google.

# Actor input Schema

## `appId` (type: `string`):

Android package ID for one app.

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

Android package IDs to inspect.

## `searchTerm` (type: `string`):

One public Google Play app search term.

## `searchTerms` (type: `array`):

Public Google Play app search terms.

## `startUrls` (type: `array`):

Public Google Play app detail, review, or app-search pages.

## `sourceUrls` (type: `array`):

Compatibility alias for public source URLs.

## `urls` (type: `array`):

Compatibility alias for public source URLs.

## `url` (type: `string`):

Compatibility alias for one public Google Play URL.

## `maxApps` (type: `integer`):

Maximum app detail pages opened from one public search result page.

## `maxReviews` (type: `integer`):

Maximum unique reviews classified per app from the selected review-feed pages. Full review text is retained.

## `maxTargets` (type: `integer`):

Maximum input sources processed in one run.

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

Maximum feature-request review records saved across all apps and sources.

## `maxResults` (type: `integer`):

Compatibility alias for maxItems.

## `locale` (type: `string`):

Language-country locale such as en-US.

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

Two-letter Google Play language code.

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

Two-letter Google Play country code.

## `location` (type: `string`):

Compatibility alias for country.

## `deduplicate` (type: `boolean`):

Deduplicate records by app and public review ID, with a text-and-date fallback when no ID is exposed.

## `page` (type: `integer`):

One-based starting review-feed page. Earlier cursors are fetched and skipped; page must not exceed maxPages.

## `maxPages` (type: `integer`):

Maximum review-service page requests per app, including cursor traversal before the starting page. Each page contains at most 20 reviews.

## `requestTimeoutSecs` (type: `integer`):

Maximum duration for one public HTTP request.

## `requestTimeoutMs` (type: `integer`):

Compatibility alias for requestTimeoutSecs. If both are provided, they must agree.

## `timeoutSecs` (type: `integer`):

Compatibility alias for requestTimeoutSecs.

## `maxRequestRetries` (type: `integer`):

Finite retries for network failures and server errors. HTTP 403, HTTP 429, and access challenges are not retried.

## `maxConcurrency` (type: `integer`):

Maximum simultaneous public source workflows.

## `requestDelayMs` (type: `integer`):

Pause between later requests; the default is one second.

## `maxResponseBytes` (type: `integer`):

Maximum bytes read from one public page.

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

Optional Apify Proxy settings for public Google Play HTTP requests. If omitted, requests connect directly. A configured proxy does not bypass access controls; access challenges and HTTP 403/429 responses still stop the affected source.

## Actor input object example

```json
{
  "maxApps": 20,
  "maxReviews": 50,
  "maxTargets": 10,
  "maxItems": 100,
  "locale": "en-US",
  "language": "en",
  "country": "US",
  "deduplicate": true,
  "page": 1,
  "maxPages": 3,
  "requestTimeoutSecs": 30,
  "maxRequestRetries": 1,
  "maxConcurrency": 1,
  "requestDelayMs": 1000,
  "maxResponseBytes": 2500000
}
```

# Actor output Schema

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

No description

## `output` (type: `string`):

No description

## `runHealth` (type: `string`):

No description

## `runSummary` (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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("googleapi/google-play-feature-request-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("googleapi/google-play-feature-request-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 '{}' |
apify call googleapi/google-play-feature-request-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,googleapi/google-play-feature-request-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/xViWEuPDhK4bE0ptZ/builds/Jfp1Pf31ayPDrsdMP/openapi.json
