App Store and Google Play Scraper: Reviews, Apps, Charts
App Store & Google Play Scraper is an Apify actor (API) by CheapAPI Labs. Apps, reviews, ratings and top charts from the App Store and Google Play in 249 countries. It costs $0.09 per 1,000 reviews on every Apify plan, billed through your Apify account with no API key.
Compared with the most used Google Play reviews actor (about 2,800 users): 1,000 reviews of one app costs $0.09 on every plan here and $0.15 on Free and $0.10 on Gold there (Apify Store listing prices, checked September 2026). Apify platform usage is billed on top here. Against the most used App Store reviews actor ($0.10) the difference on Gold is only $0.01; this actor covers both stores in one run.
Our prices updated 30 October 2026; competitor prices as checked in the comparison. 2 Apify users have run this actor (Apify Store count, 30 October 2026).
What does App Store & Google Play Scraper return?
Get app reviews, full app details, keyword search rankings and top charts from Google Play and the Apple App Store in one Actor. Paste store links or app IDs and the store is detected automatically. No login, no browser, no proxies. Every row has a stable id, so repeated runs are easy to de duplicate.
Typical cost: 1,000 reviews of one app ≈ $0.09, plus a small Apify platform usage charge (usually under $0.01 for a run like that), on every Apify plan.
One example row from a real run, shortened:
{
"id": "b7b80a3cc3dd2f59",
"store": "googlePlay",
"storeName": "Google Play",
"appId": "org.telegram.messenger",
"appTitle": "Telegram",
"appRating": 3.8,
"appRatingsCount": 17260048,
"appUrl": "https://play.google.com/store/apps/details?id=org.telegram.messenger&hl=en&gl=us",
"reviewId": "592d5883-48fa-4228-814d-be853329f163",
"position": 1,
"rating": 5,
"title": null,
"text": "I downloaded this app onto my Kindle Fire to get updates and communicate more easily",
"userName": null,
"userImageUrl": null,
"publishedAt": "2026-09-17T15:57:06.000Z",
"appVersion": "12.10.1",
"helpfulCount": 2,
"developerReply": null,
"developerReplyAt": null,
"developerReplyAuthor": null,
"sortedBy": "newest",
"ratingFilter": null,
"inputApp": "https://play.google.com/store/apps/details?id=org.telegram.messenger",
"country": "US",
"language": "en",
"scrapedAt": "2026-09-28T09:00:00.000Z"
}Which fields do you get?
The What to get option (mode) picks one of four outputs. You get one dataset row per review, app, search result or chart position.
Reviews (mode: "reviews")
| Field | Type | Example |
|---|---|---|
id |
string | b7b80a3cc3dd2f59: stable row id; the same review always gets the same id |
store / storeName |
string | googlePlay / Google Play |
appId |
string | org.telegram.messenger |
appTitle |
string | Telegram |
appRating |
number | 3.8 |
appRatingsCount |
number | 17260048 |
appUrl |
string | https://play.google.com/store/apps/details?id=org.telegram.messenger&hl=en&gl=us |
reviewId |
string | 592d5883-48fa-4228-814d-be853329f163 |
position |
number | 1 |
rating |
number | 5 |
title |
string | ‘Scrolling in view’ (App Store only) |
text |
string | I downloaded this app onto my Kindle Fire… |
publishedAt |
string (ISO date) | 2026-09-17T15:57:06.000Z |
appVersion |
string | 12.10.1 |
helpfulCount |
number | 2 (Google Play) |
developerReply / developerReplyAt / developerReplyAuthor |
string | reply text / ISO date / Telegram FZ-LLC |
userName / userImageUrl |
string | null by default; filled only with includeReviewerDetails: true |
sortedBy / ratingFilter |
string / number | newest / null |
inputApp, country, language, scrapedAt |
string | the app exactly as you entered it, US, en, collection time 2026-09-28T09:00:00.000Z |
Meaning of the less obvious fields: position is the review's place in the store's list for the chosen order; appRating / appRatingsCount describe the whole app (not the review); appVersion is the app version the reviewer used; sortedBy and ratingFilter repeat the options used for the run.
App details (mode: "appDetails")
| Field | Type | Example |
|---|---|---|
appId, title, subtitle, url, iconUrl |
string | 835599320, TikTok - Videos, Shop & LIVE, Watch, discover and stream! |
description |
string | full store description |
rating, ratingsCount, reviewsCount |
number | 4.7, 18373452 |
installs, installsCount |
string, number | 1,000,000,000+, 2981239566 (Google Play) |
isFree, price, currency, priceText |
boolean, number, string | true, 0, USD |
category, categories, tags, contentRating, languages |
string / array | Communication, ["13+"] (category and tags come from Google Play; App Store listings usually have none) |
developer, developerId, developerUrl, developerWebsite, developerEmail, developerAddress |
string | TikTok Ltd., support@telegram.org |
version, minimumOsVersion, size |
string | 47.0.0, Requires iOS 14.0 or later., 1 GB |
releasedAt, updatedAt, updateNotes |
string | 2026-09-22T02:34:27.000Z, release notes |
screenshots, videos |
array | image / video URLs |
similarApps, moreAppsByDeveloper |
array of {appId, title, url} |
[{ "appId": "1338605092", "title": "Kwai…" }] |
id |
string | stable id per app, country and language |
store, storeName, inputApp, country, language, scrapedAt |
string | as in review rows |
extra |
object | store fields we do not map to a column yet (only present when there are any) |
ratingsCount counts star ratings, reviewsCount counts written reviews; installs is the public range and installsCount the exact number (Google Play); contentRating is the age rating; minimumOsVersion is the store's text.
Search results and top charts (mode: "search" / "charts")
| Field | Type | Example |
|---|---|---|
type |
string | search or chart |
keyword / chart / category |
string | vpn / topFree / games |
rank |
number | 1 |
appId, title, url, iconUrl, developer, developerUrl |
string | 632064380, Vinted: Pre-loved marketplace, developer Proton AG (Google Play; null in App Store charts) |
rating, ratingsCount |
number | 4.86, 339202 |
isFree, price, currency, priceText |
boolean, number, string | true, 0, USD |
totalResults |
number | total results for the keyword (search only; null when the store does not report it) |
id |
string | stable id per app in the same keyword or chart, category, country and language: join runs on it to track rank changes |
store, storeName, country, language, scrapedAt |
string | appStore, App Store, US, en, collection time |
The dataset has three table views (Reviews, App details, Search results & charts). A RUN_SUMMARY record in the key value store lists how many results were saved, which inputs returned nothing and why.
How much does App Store & Google Play Scraper cost?
You pay per event, through your Apify account. Main price: $0.09 per 1,000 reviews on every Apify plan. Every event and plan:
| Event | Free | Bronze | Silver | Gold |
|---|---|---|---|---|
| ReviewOne app review (Google Play or App Store) saved to the dataset, with rating, text, author, date, app version and developer reply. | $0.00009 | $0.00009 | $0.00009 | $0.00009 |
| App detailsOne full app store listing: description, rating, installs, price, developer contacts, version, screenshots, similar apps and more. | $0.003 | $0.003 | $0.003 | $0.003 |
| Search resultOne ranked app from a keyword search in Google Play or the App Store. | $0.00015 | $0.00015 | $0.00015 | $0.00015 |
| Top chart entryOne ranked app from a Google Play or App Store top chart. | $0.0001 | $0.0001 | $0.0001 | $0.0001 |
| Minimum per request (top up)Charged in $0.0005 steps only when a request delivers less than its minimum: an app that does not exist in the chosen country, an app with few or no reviews, or a search or chart with few results. Normal requests are fully paid by their results and never trigger it. | $0.0005 | $0.0005 | $0.0005 | $0.0005 |
How do I call App Store & Google Play Scraper API from code?
Every run is one HTTP request to the Apify API with your Apify token; the input below is the actor's own example. The synchronous endpoint returns the rows in the response for runs up to 300 seconds; for longer runs start a run and fetch its dataset.
curl -X POST "https://api.apify.com/v2/acts/cheapapi~app-store-google-play-scraper/run-sync-get-dataset-items" \
-H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \
-d '{"mode":"reviews","apps":["https://play.google.com/store/apps/details?id=org.telegram.messenger","https://apps.apple.com/us/app/telegram-messenger/id686449807"],"keywords":["vpn"],"maxResults":100,"country":"US","language":"en"}'With the JavaScript client:
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('cheapapi/app-store-google-play-scraper').call({
"mode": "reviews",
"apps": [
"https://play.google.com/store/apps/details?id=org.telegram.messenger",
"https://apps.apple.com/us/app/telegram-messenger/id686449807"
],
"keywords": [
"vpn"
],
"maxResults": 100,
"country": "US",
"language": "en"
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();How does App Store & Google Play Scraper compare with alternatives?
Typical run: 1,000 reviews of one app. Prices are per run, taken from the public Apify Store listings (event fees only). Platform usage terms differ between Actors and are not shown in this table; check each listing for how its compute is billed. For this Actor, Apify platform usage is billed separately by Apify on top of the prices shown ("+ usage"; at the default 256 MB a small run typically uses about $0.001 to $0.005, more when a standard speed run waits several minutes).
| Option | Users | Price on Free plan | Price on Gold plan | Google Play | App Store | App details, keyword ranks, top charts |
|---|---|---|---|---|---|---|
| Most used Google Play reviews Actor | ~2,800 | $0.15 | $0.10 | ✓ | ✗ | ✗ (reviews only) |
| Most used App Store reviews Actor | ~2,300 | $0.10 | $0.10 | ✗ | ✓ | ✗ (reviews only) |
| Most used general Google Play scraper | ~2,700 | $0.30 | $0.30 | ✓ | ✗ | Google Play app details and app lists; no App Store |
| Dual store reviews Actor | ~150 | $0.50 | $0.30 | ✓ | ✓ | ✗ (reviews only) |
| This Actor | new | $0.09 + usage | $0.09 + usage | ✓ | ✓ | ✓ |
Prices from public Apify Store listings, checked September 2026. Honest reading: on the Gold plan our review fee is only $0.01 below the two single store leaders ($0.09 vs $0.10), and once our platform usage is added a single store run there can cost about the same or less; the bigger differences are on the Free plan (vs. the Google Play reviews leader), against the general Google Play scraper ($0.30 per 1,000 rows on every plan), against the dual store option, and that one run covers both stores plus app details, keyword rankings and top charts. Competitor prices can change at any time; check their listing before you decide.
What is it used for?
- Review monitoring and customer feedback: track new 1-star reviews of your app (or a competitor's) every day and route them to Slack or a support tool.
- Sentiment analysis and AI training data: export thousands of reviews with rating, text, date and app version for NLP or LLM analysis.
- App Store Optimization (ASO): check where your app ranks for target keywords in each country and store.
- Market and competitor research: read the Top grossing / Top free charts per category and country, and pull full app details (installs, price, update cadence).
- Lead generation: collect developer names, websites and support emails from the details of apps in a category.
- Release tracking: watch
version,updatedAtandupdateNotesof competitor apps.
What is not included?
| Not included | Why | Alternative |
|---|---|---|
| In app purchase lists and prices | Not part of the store data we read | App details give price, isFree and priceText of the app itself |
| Historical rank charts | Each run is a snapshot of today's ranks | Schedule a search or chart run daily and join rows on id (see Monitoring) |
| More than 500 App Store reviews per app, country and sort order | App Store limit | Run more countries or both sort orders |
| Keyword search volume / difficulty for app stores | Not available from the stores | For web search keywords use our Keyword Research Tool |
| Web search rankings of an app's website | Different data source | Google SERP Scraper and Domain SEO Analyzer |
| Mentions of your app in AI assistants (ChatGPT, Perplexity, Gemini) | Different data source | AI Search Visibility Tracker |
| YouTube reviews and comments about an app | Different platform | YouTube Comments Scraper |
| Automatic "only new reviews since the last run" filter | Every run is priced per row returned; see the recipe below | Monitoring recipe |
What are the limits?
- App Store: at most 500 reviews per app, country and sort order; the star rating filter is Google Play only; App Store reviews have no helpful vote count and no developer reply field.
- Requests are collected in batches: the minimum is 50 reviews per app, 30 search results per keyword and 50 positions per chart. App Store charts have up to 100 positions, Google Play charts up to 200.
- Some fields are store specific (installs only on Google Play; subtitle and content rating only on the App Store) and are
nullor empty for the other store. - Ranks reflect the storefront of the chosen country at the time of the run and can differ slightly from what a signed in user sees on their device.
- The standard processing speed can take several minutes for large runs.
- Not included: in app purchase lists, historical rank charts, and apps that are not available in the chosen country.
Questions about App Store & Google Play Scraper
Is Apify platform usage included, and is there a Free plan limit?
Platform usage (compute) is billed separately by Apify on top of the event fees; at the default 256 MB a small run typically uses about $0.001 to $0.005, and standard speed runs (always used for App Store reviews) wait for results and can use more. On the Apify Free plan you can use up to $0.25 of this Actor's results per calendar month (Apify pays developers nothing for Free plan usage while our data costs are real). Runs that reach the allowance stop cleanly and keep everything collected so far; it resets on the 1st of the month. Any paid Apify plan has no limit.
Why was I charged for more rows than I asked for, or for minimum-top-up?
Requests are collected in batches of at least 50 reviews per app, 30 search results per keyword and 50 chart positions, so a smaller Max results is raised to that (the run log warns at the start; 50 reviews = $0.0045). minimum-top-up is charged only when a request delivers less than its minimum (see Pricing): typically an app not available in the chosen country, an app with few or no reviews (or few with your star filter), or a search or chart with few results. Only the difference is charged, in $0.0005 steps; RUN_SUMMARY shows minimumTopUps.
Is it legal to scrape app reviews and store listings?
The Actor collects only publicly visible store data. Reviews can contain personal data, which is why reviewer names and avatars are off by default. If you turn them on, make sure you have a lawful basis (for example under GDPR or CCPA). This is not legal advice.
How fresh is the data, and why are App Store reviews slower?
Every run reads the stores live at run time; scrapedAt shows when each row was collected. App Store reviews always use the standard processing speed and usually arrive within a few minutes; everything else runs in fast mode for small runs.
How many reviews can I get?
Google Play: up to 100,000 per app and run. App Store: up to 500 per app, country and sort order; for more, run other countries (each storefront has its own reviews) or both sort orders.
Why did I get fewer results than I asked for?
The app has fewer reviews in that country or language, the star filter removed some, the App Store 500-review cap applied, or your maximum cost per run was reached. The RUN_SUMMARY record tells you which.
How do I control my budget?
Set Maximum cost per run. The Actor never charges more than that, and in review mode it splits the budget fairly between your apps.
Can I monitor new reviews or rank changes?
Yes, see Monitoring. There is no built in "only new reviews" switch; you drop repeats on your side using the stable id.
Can I mix Google Play and App Store apps in one run?
Yes. Each app is sent to its own store automatically (force one with a google: or apple: prefix). If one app fails, the others are still delivered and the failure is listed in RUN_SUMMARY.
A field or feature is missing. Where do I get support?
Open an issue on the Actor's Issues tab and describe what you need.
Run App Store & Google Play Scraper on Apify
The form opens with a working example. Free Apify accounts get a small monthly allowance.