Google Play Reviews & App Feedback Analyzer avatar

Google Play Reviews & App Feedback Analyzer

Pricing

from $0.01 / 1,000 results

Go to Apify Store
Google Play Reviews & App Feedback Analyzer

Google Play Reviews & App Feedback Analyzer

Collect bounded Google Play reviews and turn them into structured app feedback, issue clusters, aggregate reports, and cautious release-impact signals.

Pricing

from $0.01 / 1,000 results

Rating

0.0

(0)

Developer

Dung Huynh

Dung Huynh

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 days ago

Last modified

Share

Collect bounded public Google Play review records for one or more Android apps. The current release uses the public Store HTML page, preserves locale and market parameters, emits source diagnostics, and attaches optional shared-core analysis without coupling analysis to collection.

What it collects

  • Review ID, star rating, localized date text, review text, and helpful count.
  • Optional developer reply text and date when present in the public card.
  • Language and country used for the request.
  • A machine-readable diagnostic record for every app, including HTTP status, response size, and parsed-card count.
  • A normalizedFeedback object on each review, validated by the shared source-neutral feedback contract.
  • Shared analysis, actionable-feedback clusters, per-app aggregate reports, and optional observational release comparisons.
  • One APP_REPORT_<app-id> report in key-value storage per processed app when aggregation is enabled.

The public page currently exposes a bounded server-rendered sample, not complete review history. Browser expansion remains deferred; shared deterministic analysis and aggregation are enabled by default.

Who it is for

Product managers, mobile QA teams, support teams, and app developers who need a bounded Google Play review sample converted into traceable product-feedback signals.

Key capabilities

  • Collect public Google Play reviews for multiple Android package IDs with language and country provenance.
  • Preserve source facts while adding validated normalized feedback and deterministic shared-core analysis.
  • Surface recurring actionable feedback as stable issue/feature clusters linked back to review IDs.
  • Produce one aggregate report per app and an optional before/after release-impact report.

Raw reviews versus analysis

Review text, ratings, dates, helpful counts, replies, and source diagnostics are collected facts. normalizedFeedback, analysis, clusters, rankings, severity, and release-impact signals are analytical interpretations. Analytical issue labels are user-reported signals, not confirmed product defects.

Input

FieldRequiredDefaultDescription
modenoreviewsreviews for normal collection or releaseImpact for a bounded before/after report.
appIdsyes["com.todoist"]Android package IDs, up to 20.
languagenoenTwo- or three-letter Google Play language code.
countrynoUSTwo-letter Google Play market code.
languagesno[language]Language list used by releaseImpact; one public Store request per combination.
countriesno[country]Country list used by releaseImpact; one public Store request per combination.
maxReviewsPerAppno50Hard cap from the parsed server-rendered sample, 1–500.
sortnomostRelevantmostRelevant or newest; recorded for diagnostics in the current HTML path.
useBrowserFallbacknofalseReserved for the later browser-expansion phase.
requestTimeoutSecsno30Per-request timeout, 5–120 seconds.
debugnofalseEmit normalized-input details through debug logging for local troubleshooting.
analysisnoenabledShared analysis settings: enabled, outputLanguage, and maxAttempts.
aggregationnoenabledCluster and report settings, including optional observational release comparison.
releasereleaseImpactRelease version and ISO releasedAt timestamp.
daysBeforereleaseImpact14Calendar days before the release boundary.
daysAfterreleaseImpact14Calendar days after the release boundary.
maxReviewsPerPeriodreleaseImpact100Request cap for each language/country slice.

Example:

{
"mode": "reviews",
"appIds": ["com.todoist", "com.zing.zalo"],
"language": "vi",
"country": "VN",
"maxReviewsPerApp": 25,
"sort": "mostRelevant",
"useBrowserFallback": false
}

Release-impact example:

{
"mode": "releaseImpact",
"appIds": ["com.example.app"],
"languages": ["en", "vi"],
"countries": ["US", "VN"],
"release": { "version": "4.2.0", "releasedAt": "2026-07-20T00:00:00.000Z" },
"daysBefore": 14,
"daysAfter": 14,
"maxReviewsPerPeriod": 100
}

Output fields

FieldDescription
recordTypereview, sourceDiagnostic, feedbackCluster, productFeedbackReport, or feedbackImpactReport.
appIdAndroid package ID.
reviewIdPublic Google Play review ID, for review records.
ratingInteger star rating from 1 to 5.
reviewDateTextLocale-preserved date text from the public page.
textPublic review text, for review records.
helpfulCountHelpful count when exposed, otherwise null.
developerReplyOptional reply object with presence, date text, and text.
source.languageLanguage request parameter.
source.countryCountry request parameter.
diagnostics.httpStatusHTTP status for the Store response.
diagnostics.responseBytesResponse size in bytes.
diagnostics.collectedAtCollection timestamp for the source response.
diagnostics.parsedReviewCountNumber of unique review cards parsed before the cap.
diagnostics.collectionModeCurrent value is html.
error.codeMachine-readable source error code when collection fails.
normalizedFeedbackSource-neutral feedback object validated by shared core.
analysisShared-core analysis result, when analysis is enabled.
product.productIdApp ID on aggregate and impact records.
product.productTypeNeutral product type; app for Google Play aggregate records.
clusterIdStable cluster ID on feedback-cluster records.
canonicalIssueCanonical issue or request title for a cluster.
feedbackTypeCluster feedback type, such as bugReport.
topicsTopics attached to a cluster or release-impact comparison.
mentionCountNumber of reviews in a cluster.
uniqueReviewCountNumber of distinct source review IDs in a cluster.
languagesLanguages represented in a cluster.
countriesCountries represented in a cluster.
affectedVersionsApp versions represented in a cluster.
firstSeenAtEarliest source date represented in a cluster.
latestSeenAtLatest source date represented in a cluster.
severityAnalytical severity estimate.
clusterConfidenceBounded cluster confidence estimate.
statisticsCounts, rating, language, country, and version summaries.
statistics.reviewsCollectedCollection count in an app report.
statistics.reviewsAnalyzedSuccessful-analysis count in an app report.
statistics.actionableReviewsActionable-review count in an app report.
statistics.averageRatingAverage source rating in an app report.
statistics.beforeReviewsBefore-window review count.
statistics.afterReviewsAfter-window review count.
statistics.beforeAverageRatingBefore-window average when ratings are available.
statistics.afterAverageRatingAfter-window average when ratings are available.
statistics.ratingChangeAfter-window average minus before-window average.
topIssuesRanked app-level issue summaries.
topFeatureRequestsRanked app-level feature-request summaries.
topPositiveTopicsRanked positive topic summaries.
topNegativeTopicsRanked negative topic summaries.
languageInsightsApp-level language summary.
countryInsightsApp-level country summary.
versionInsightsApp-level version summary.
topicChangesObserved before/after topic changes.
possibleRegressionsTopic increases worded as possible regressions, never causal proof.
release / windowsRelease metadata and exact non-overlapping comparison windows.
release.versionRelease version supplied to Release Impact.
release.releasedAtRelease timestamp supplied to Release Impact.
windows.before.fromBefore-window ISO start.
windows.before.toBefore-window ISO end.
windows.after.fromAfter-window ISO start.
windows.after.toAfter-window ISO end.
issueChangesIssue signals across the release boundary.
featureRequestChangesFeature-request signals across the release boundary.
newIssuesIssue signals first observed in the after window.
increasingIssuesIssue signals with increased after-window mentions.
decreasingIssuesIssue signals with decreased after-window mentions.
newFeatureRequestsFeature requests first observed in the after window.
compatibilityChangesCompatibility-topic changes.
countryChangesCountry-dimension review volume changes.
languageChangesLanguage-dimension review volume changes.
versionChangesVersion-dimension review volume changes.
warningsStructured NO_REVIEWS, LIMITED_DATA, or future-release warnings.
generatedAtTimestamp when a report or comparison was generated.
disclaimerCaution that release comparisons are observational, not causal proof.

Aggregate reports are also stored under APP_REPORT_<app-id> in the default key-value store. Reports tolerate partial analysis failures by counting only successful analyses in ranked intelligence while retaining collection counts.

In releaseImpact mode, the enriched report is also stored under APP_RELEASE_IMPACT_<app-id>. Reviews exactly at release.releasedAt belong to the after window; reviews before it belong to the before window. Empty or small windows remain structured rather than being presented as proof of a regression.

The dataset schema provides thematic views for Reviews, Issue clusters, App reports, and Release impact reports. The views are projections over the same dataset; recordType remains the authoritative discriminator.

Issue-cluster output

feedbackCluster records contain a stable cluster ID, canonical issue or request title, feedback type, topics, mention counts, languages, countries, versions, severity estimate, confidence, and example/source review IDs. Clusters are partitioned by app and are emitted separately from raw reviews.

Aggregated app reports

productFeedbackReport records summarize collection volume, analyzed volume, ratings, actionable feedback, top issues, feature requests, positive/negative topics, and language/country/version insights. The same per-app report is stored as APP_REPORT_<app-id>.

Release Impact

releaseImpact mode compares non-overlapping review windows around a supplied release timestamp. It reports rating and volume changes, new/increasing/decreasing issue and feature-request signals, compatibility topics, and locale/version dimensions. It uses wording such as “possible regression” and “newly observed complaint”; timing alone is never treated as causal proof.

Language and country support

English and Vietnamese parsing are covered by redacted fixtures. Release Impact can request multiple language/country combinations, while every output keeps the request provenance. Review availability and date/label formatting depend on Google Play’s public response for the selected market.

Cost controls

Keep maxReviewsPerApp or maxReviewsPerPeriod bounded, request only required apps and locale combinations, and leave browser expansion disabled unless a later release explicitly supports it. The default deterministic fallback does not call an external model provider; external-provider and cloud billing costs are not included in the local benchmark.

Local run

npm install
apify validate-schema
apify run --purge --input-file sample-input.json

The local dataset and RUN_STATS key-value record are written under storage/. They are local verification artifacts and are not published automatically.

Benchmark evidence

The Phase 13 five-app matrix processed 15 reviews with 15 deterministic analyses, 0 collection errors, 0 analysis failures, 5 aggregate reports, 6.56 MB of public response data, 1.889 seconds runtime, and 200 MiB reported process RSS. See BENCHMARK_NOTES.md, docs/BENCHMARK_REPORT.md, docs/QUALITY_REVIEW.md, and docs/COST_REPORT.md for scope and limitations. These are operational measurements, not human-labeled accuracy claims.

Known limitations

  • Google Play localizes markup labels and dates; parsing uses structural selectors and star classes rather than English-only labels.
  • Direct HTML normally contains a small sample. “See all reviews” browser expansion is a later phase.
  • App version and device metadata are nullable until a stable public fixture proves those fields.
  • Public HTML is untrusted input; the Actor bounds requests, strips markup through Cheerio, validates ratings, deduplicates review IDs, and does not emit reviewer names or avatar URLs.
  • The authenticated Google Play Developer API is a separate app-owner source and is not used for arbitrary public apps.

Responsible use

  • Reviews are user opinions and may be incomplete, sarcastic, duplicated, or ambiguous.
  • Detected issues are not confirmed bugs; severity and actionability are estimates.
  • Device, operating-system, and app-version fields may be unavailable and remain nullable rather than inferred.
  • Release Impact shows correlation around a date, not proven causation.
  • Review important product decisions manually and respect Google’s terms, privacy expectations, and applicable law.

FAQ

Does this collect complete Google Play history? No. The current public HTML path returns a bounded server-rendered sample.

Does it create Jira/Linear tickets or use the Developer API? No. Those integrations are outside the first release, and the authenticated Developer API is not a public-app source.

Can I trust a cluster as a confirmed defect? No. Use clusters as prioritization evidence and trace them to the underlying reviews.

How do I read reports? Use the dataset views or read APP_REPORT_<app-id> and, for Release Impact, APP_RELEASE_IMPACT_<app-id> from the default key-value store.

What happens when a release window has too little data? The report remains structured and includes NO_REVIEWS or LIMITED_DATA warnings.

Search terms

Google Play reviews, Google Play review scraper, app review analyzer, mobile app feedback, app bug detector, feature request extractor, app sentiment analysis, release impact, Android app reviews, subscription complaints, app compatibility issues, mobile product feedback, app QA feedback, review clustering, Vietnamese app reviews.

Roadmap

Phase 16 runs the final publish-readiness matrix. Browser expansion, external-provider configuration, Apple App Store support, Reddit scraping, and automatic ticket creation remain deferred.