📱 iOS & Android App Review Scraper avatar

📱 iOS & Android App Review Scraper

Pricing

from $10.00 / 1,000 results

Go to Apify Store
📱 iOS & Android App Review Scraper

📱 iOS & Android App Review Scraper

Extract user reviews from both the App Store and Google Play into one dataset. Analyze recurring complaints, flag rating drift, and generate ASO summaries.

Pricing

from $10.00 / 1,000 results

Rating

0.0

(0)

Developer

太郎 山田

太郎 山田

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

12 days ago

Last modified

Share

App Review Intelligence API | App Store + Google Play Summary

Scrape user reviews from both the Apple App Store and Google Play simultaneously to extract critical product feedback and mobile search visibility data. Instead of running separate workflows for iOS and Android, this app review scraper unifies both storefronts into a single executive summary row. It is designed for App Store Optimization (ASO) specialists, product managers, and growth marketers who need to schedule recurring state checks on their mobile applications. Extract highly structured data directly from the stores to track overall sentiment, analyze recurring complaint themes, and catch sudden rating drift before it impacts your organic rankings.

The web crawler bypasses the manual work of stitching two massive datasets together. Every time you run the scraper, you get a clean, actionable summary that clusters user feedback into distinct themes and provides immediate recommended actions based on real user comments. You can easily schedule daily or weekly scrapes to monitor your app's performance over time, keeping a close eye on competitor updates or new feature rollouts. The extracted details include cross-platform rating averages, flagged negative reviews, theme clusters, and direct platform warnings. Stop wasting time manually browsing store pages and instantly gather the vital user feedback you need to improve your mobile visibility.

Store Quickstart

  • Start with store-input.example.json for the lowest-friction first run.
  • Check sample-output.example.json for the current starter proof and the exact summary row shape buyers see first.
  • Check live-proof.example.json for the latest live canary + contract capture on the public actor surface.
  • Then use store-input.templates.json as the familiar Wave 1 ladder:
    • Quickstart Baseline (Cross-Platform Summary) — smallest useful dataset run for one product
    • Recurring Baseline (Scheduled Summary Checks) — same summary workflow tuned for repeat monitoring
    • Webhook Routed Summary (Cross-Platform Alerts) — send the same payload into Slack, Zapier, or an internal monitor once dataset output already fits
    • App Store Only Baseline / Google Play Only Baseline — actor-specific fallback lanes when only one storefront matters right now

What first success looks like

A good first run gives you:

  1. meta.executiveSummary — one buyer-ready brief with status, cadence, reviewed platforms, and the top complaint themes.
  2. results[] — one shareable product row with rating drift, recurring complaints, praise themes, and recommended actions.
  3. reviewCoverage, warnings, and sourceFailures — explicit honesty about shallow Google Play review depth or any missing storefront signal.

Key Features

  • 📱 Cross-platform baseline — Merge Apple App Store and Google Play public signals into one product row
  • 🧠 Theme clustering — Group recurring complaint and praise themes into stable buckets
  • 🚨 Rating drift detection — Flag sudden softness between long-term store ratings and current public review samples
  • ⚠️ Honest source handling — Preserve warnings and per-platform failures instead of hiding degraded coverage
  • 📡 Dataset or webhook delivery — Feed dashboards, Slack alerts, CRM tasks, or internal monitors

Use Cases

WhoWhy
Product teamsTrack recurring complaint clusters after releases without stitching two stores together manually
ASO teamsCompare rating softness, review themes, and storefront changes across iOS and Android
Support / QATurn public review pain points into triage queues or webhook alerts
Market researchersBuild consistent competitor baselines from both major app stores

Input

FieldTypeDefaultDescription
productNamestringprefilledOptional label for the monitored product. If empty, the actor uses the best store title it finds.
countrystring"us"Default ISO country code for both stores. App Store lookups and review feeds use lowercase values like us, gb, jp.
languagestring"en_US"Google Play language code for the public page request, for example en_US.
appleAppobjectprefilledOptional App Store target. Provide {"appId":"570060128"} or {"url":"https://apps.apple.com/us/app/id570060128"}.
googlePlayAppobjectprefilledOptional Google Play target. Provide {"appId":"com.duolingo"} or a full play.google.com URL.
reviewLimitPerPlatforminteger20Maximum reviews to analyze per platform. Google Play usually exposes about 20 public review cards without deeper paginat
lookbackDaysinteger180Prefer reviews inside this window. If a source has no matches inside the window, the actor falls back to the public samp
minThemeMentionsinteger2Minimum complaint mentions before a theme is treated as a real cluster instead of one-off noise.

Input Example

{
"productName": "Duolingo",
"country": "us",
"language": "en_US",
"appleApp": {
"appId": "570060128",
"country": "us"
},
"googlePlayApp": {
"appId": "com.duolingo",
"country": "us",
"language": "en_US"
},
"reviewLimitPerPlatform": 20,
"lookbackDays": 180,
"minThemeMentions": 2,
"delivery": "dataset",
"dryRun": false
}

Output

FieldTypeDescription
metaobject
resultsarray
results[].productKeystring
results[].productNamestring
results[].storesCoveredarray
results[].statusstring
results[].summarystring
results[].recommendedCadencestring
results[].reviewsAnalyzednumber
results[].reviewCoverageobject
results[].ratingDriftobject
results[].recommendedActionsarray
results[].topThemesarray
results[].praiseThemesarray
results[].recurringComplaintsarray
results[].platformsobject

Output Example

{
"meta": {
"generatedAt": "2026-04-04T09:30:00.000Z",
"warnings": [
"Google Play public HTML exposed 4 review cards in the fixture sample; deeper pagination is intentionally disabled to keep maintenance low."
],
"sourceFailures": [],
"totals": {
"products": 1,
"platformsRequested": 2,
"platformsSucceeded": 2,
"platformsFailed": 0,
"reviewsAnalyzed": 7,
"recurringComplaints": 2,
"complaintThemes": 4
},
"executiveSummary": {
"overallStatus": "urgent",
"brief": "Duolingo is showing a softer public review sample than its long-term store ratings, with monetization and stability complaints persisting across platforms.",
"recommendedCadence": "daily",
"reviewedPlatforms": 2,
"totalReviewsAnalyzed": 7,
"recurringComplaintCount": 2,
"topComplaintThemes": [
{
"id": "monetization",
"label": "Pricing, ads & paywall",
"complaintMentions": 2,
"platforms": [
"appStore",
"googlePlay"
]
},
{
"id": "stability",
"label": "Crashes, freezes & lost progress",
"complaintMentions": 2,
"platforms": [
"appStore",
"googlePlay"

Proof buyers can inspect

Buyer questionProof assetWhat it proves
"Will the first run already be usable in a product or growth review?"store-input.example.json + sample-output.example.jsonThe quickstart returns one summary-first row with executive summary, rating drift, theme clusters, and recommended actions.
"Is the public actor still working live on Apify?"live-proof.example.jsonThe latest canary + contract capture passed on the public actor surface.
"What is the safest way to expand without changing the output shape?"store-input.templates.jsonThe quickstart, recurring, webhook, and single-store fallback templates keep the same summary-first lane while widening scope.

API Usage

Run this actor programmatically using the Apify API. Replace YOUR_API_TOKEN with your token from Apify Console → Settings → Integrations.

cURL

curl -X POST "https://api.apify.com/v2/acts/taroyamada~app-review-cross-platform-intelligence/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "productName": "Duolingo", "country": "us", "language": "en_US", "appleApp": { "appId": "570060128", "country": "us" }, "googlePlayApp": { "appId": "com.duolingo", "country": "us", "language": "en_US" }, "reviewLimitPerPlatform": 20, "lookbackDays": 180, "minThemeMentions": 2, "delivery": "dataset", "dryRun": false }'

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("taroyamada/app-review-cross-platform-intelligence").call(run_input={
"productName": "Duolingo",
"country": "us",
"language": "en_US",
"appleApp": {
"appId": "570060128",
"country": "us"
},
"googlePlayApp": {
"appId": "com.duolingo",
"country": "us",
"language": "en_US"
},
"reviewLimitPerPlatform": 20,
"lookbackDays": 180,
"minThemeMentions": 2,
"delivery": "dataset",
"dryRun": false
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

JavaScript / Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('taroyamada/app-review-cross-platform-intelligence').call({
"productName": "Duolingo",
"country": "us",
"language": "en_US",
"appleApp": {
"appId": "570060128",
"country": "us"
},
"googlePlayApp": {
"appId": "com.duolingo",
"country": "us",
"language": "en_US"
},
"reviewLimitPerPlatform": 20,
"lookbackDays": 180,
"minThemeMentions": 2,
"delivery": "dataset",
"dryRun": false
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Tips & Limitations

  • Run weekly for trend tracking; daily for competitive launch monitoring.
  • Use webhook delivery to push insights into your BI tools or marketing Slack.
  • Archive results in Apify Dataset for your own historical trend analysis.
  • Combine with ai-visibility-monitor-actor for AI-era brand surface coverage.
  • Start with a small watchlist, iterate on keyword precision before scaling.

FAQ

What platforms are covered?

This actor covers public Apple App Store and Google Play storefront signals only. If you want single-store runs, use the dedicated sibling actors.

Can I run only one platform?

Yes. Provide only appleApp or only googlePlayApp and the actor still returns a valid single-platform summary row.

How complete are the review samples?

They are intentionally public-surface only. Apple can expose more review rows through RSS than Google Play, while Google Play may fall back to aggregate-only coverage.

Can I send the summary somewhere else?

Yes. Keep delivery: "dataset" for inspection or switch to delivery: "webhook" to push the same summary payload into Slack, Zapier, n8n, or your own endpoint.

Use this actor first when you need one buyer-ready summary across iOS and Android. Add the adjacent actor only when you need the deeper layer below:

Pricing & Cost Control

Apify Store pricing is usage-based. This actor keeps start friction low and charges the buyer-ready app summary row:

  • apify-actor-start: $0.00005
  • apify-default-dataset-item: $0.015 per app summary row

The current implementation emits one dataset row per monitored app. Raw review-row pricing is reserved for a future explicit PPE event if raw review export is added.

  • Start with the Quickstart Baseline on 1 product in dataset mode while you validate summary quality.
  • Keep reviewLimitPerPlatform modest for the Recurring Baseline; raise it only when deeper complaint analysis changes decisions.
  • Use the single-store variants when only one storefront matters, then move to Webhook Routed Summary once the downstream route is stable.
  • Use dryRun: true before scheduled runs or webhook delivery.

⭐ Was this helpful?

If this actor saved you time, please leave a ★ rating on Apify Store. It takes 10 seconds, helps other developers discover it, and keeps updates free.

Bug report or feature request? Open an issue on the Issues tab of this actor.