App Reviews API (App Store & Google Play)
Pricing
from $0.08 / 1,000 reviews
Go to Apify Store
App Reviews API (App Store & Google Play)
Scrape and unify reviews and ratings from Apple App Store and Google Play into one standardized dataset schema. HTTP-only, fast, zero browser overhead.
Pricing
from $0.08 / 1,000 reviews
Rating
0.0
(0)
Developer
Headless Agent
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
Unified Apify Actor for customer reviews and ratings from both the Apple App Store and the Google Play Store, delivered in a single standardized dataset schema.
Features
- Unified Schema: Normalizes Apple App Store and Google Play reviews into identical column shapes with matching types and conventions.
- Multi-Store & Multi-Country: Query iOS and Android apps simultaneously across any ISO 3166-1 alpha-2 country store (e.g.
us,ca,gb,de,au,jp). - Flexible App Identifiers: Accepts numeric App Store IDs, iOS bundle identifiers, Google Play package names, or direct store URLs.
- Denormalized App Metadata: Optionally attaches app-level title, overall rating score, and rating count directly onto each review record.
- Smart Deduplication: Automatically deduplicates reviews by
store + country + reviewId. - Date Filtering (
since): Stops pagination and omits reviews older than an ISO 8601 date cutoff. - Reliable runs: Temporary errors are retried, and a failure on one app does not stop the rest.
- Strict Hard Cap:
maxReviewsis strictly enforced per app across all specified countries.
Input Parameters
| Field | Type | Default | Description |
|---|---|---|---|
apps | array | Required | Array of objects { store: "apple" | "google", id: string, country?: string }. id can be a bundle ID, numeric ID, or store URL. |
countries | array | ["us"] | Default ISO country codes to scrape when not specified on the app object. |
sort | string | "recent" | Sort order: "recent" (most recent reviews) or "helpful" (most helpful / upvoted). |
since | string | undefined | Optional ISO 8601 date cutoff (e.g. "2026-01-01"). Reviews older than this date are omitted and pagination stops. |
maxReviews | integer | 200 | Maximum reviews to retrieve per app across all target countries (min: 1, max: 5000). |
includeAppInfo | boolean | true | When true, fetches app metadata (title, average rating, rating count) and denormalizes it onto each review item. |
Example Input
{"apps": [{"store": "apple","id": "570060128","country": "ca"},{"store": "apple","id": "https://apps.apple.com/gb/app/subway-surfers/id512939461"},{"store": "google","id": "com.whatsapp","country": "us"},{"store": "google","id": "https://play.google.com/store/apps/details?id=com.spotify.music"}],"countries": ["us"],"sort": "recent","maxReviews": 50,"includeAppInfo": true}
Output Fields
Each dataset item represents a single customer review with the following normalized structure:
| Field | Type | Description |
|---|---|---|
store | string | "apple" or "google". |
appId | string | App identifier (numeric ID for Apple, package name for Google). |
country | string | ISO 3166-1 alpha-2 country code of the store. |
reviewId | string | Unique review identifier assigned by the store. |
rating | integer | null | Rating given by the user (1 to 5 stars). |
title | string | null | Review headline (provided by Apple; null for Google Play). |
text | string | null | Main body text of the review. |
author | string | null | Reviewer's display name or nickname. |
version | string | null | App version reported when review was posted. |
updatedAt | string | null | ISO 8601 timestamp when the review was written or updated. |
helpfulCount | integer | null | Number of helpful votes / upvotes. |
responseText | string | null | Developer reply text when the store provides it, otherwise null. |
appTitle | string | null | Denormalized app display name. |
appRatingAverage | number | null | Denormalized overall average rating of the app. |
appRatingCount | integer | null | Denormalized total rating count of the app. |
fetchedAt | string | ISO 8601 timestamp when the record was extracted. |
Real Run Output Examples
Apple App Store Review Example
{"store": "apple","appId": "570060128","country": "ca","reviewId": "14712236571","rating": 1,"title": "I think ai may be destroying this","text": "Not really sure what happened, but the last while when going into a lot of the story parts of Duolingo, there have been a lot of new words differently appearing in the story, instead of learning the words in the lessons and then using them in the stories. It feels like a glitch, I have a feeling they are using ai a lot now and it's not really building on words learned before.","author": "Get out 55","version": "7.145.1","updatedAt": "2026-10-26T04:05:08.000Z","helpfulCount": 0,"responseText": null,"appTitle": "Duolingo: Language & Chess","appRatingAverage": 4.63335,"appRatingCount": 674388,"fetchedAt": "2026-10-27T08:18:44.805Z"}
Google Play Store Review Example
{"store": "google","appId": "com.whatsapp","country": "us","reviewId": "3395f87f-8464-4f0b-8bc3-8e8722d909a2","rating": 5,"title": null,"text": "super","author": "Praveen Kumar","version": "2.26.40.76","updatedAt": "2026-10-26T08:18:28.000Z","helpfulCount": 0,"responseText": null,"appTitle": "WhatsApp","appRatingAverage": 4.6240306,"appRatingCount": 246488947,"fetchedAt": "2026-10-27T08:18:46.582Z"}
License
Apache-2.0