App Store Reviews & Google Play Reviews Scraper (Play Store)
Pricing
from $0.16 / 1,000 results
App Store Reviews & Google Play Reviews Scraper (Play Store)
Export App Store reviews and Google Play Store reviews for iOS and Android feedback analysis. Get ratings, text, dates, app versions and developer replies in CSV or JSON, filtered by stars or date. $0.20 per 1,000 reviews plus a memory-based start fee. Maintained by CleanScrape.
Pricing
from $0.16 / 1,000 results
Rating
5.0
(1)
Developer
CleanScrape
Maintained by CommunityActor stats
0
Bookmarked
26
Total users
14
Monthly active users
a day ago
Last modified
Categories
Features
Share
Collect public reviews from the Apple App Store and Google Play in one consistent dataset. Each row has the review text, rating, date, app version and store, so you can compare iPhone and Android feedback in one spreadsheet.
One run can cover one app or a list of apps, in one or several App Store countries and Google Play languages. No store login, cookies or proxy setup is needed. Reviews come from what each store shows publicly, so coverage depends on the store.
Start with a small run
- The form opens with Strava's Google Play and App Store links. Keep them to try the Actor, or paste the apps you want to research. You can also type just the app's name, such as
Duolingo. - Choose Store: Both, Google Play or App Store.
- Pick a Country (it selects the App Store storefront) and, for Google Play, a Language. Google Play chooses reviews by language and returns the same ones for every country.
- Set Reviews per store. The form starts at 20. With Both, the limit applies to each store, so 20 can return up to 40 reviews.
- Start the run, open Reviews, and export CSV, Excel or JSON.
More options holds the Google Play order and two optional filters: Star ratings (for example only 1 and 2 stars) and Reviews since (a start date). You do not need them for a first run.
At the default 1 GB memory, 40 delivered reviews cost $0.01: $0.002 at startup plus $0.008 for the reviews. Prices are base prices before tier discounts. The startup fee applies even if no reviews are returned.
Example: compare Strava reviews on iPhone and Android
Say you want to know what runners and cyclists complain about in Strava, and whether iPhone and Android users raise the same issues. Open the Strava example. It collects up to 20 recent US reviews from each store.
To read only the complaints, select 1 star and 2 stars under Star ratings, or filter the export in your spreadsheet. Keep the store column to compare iPhone and Android side by side. The Actor does not do sentiment analysis.
Three rows from a run on 1 October 2026:
| Store | Rating | Review | Date (UTC) | App version |
|---|---|---|---|---|
| google_play | 1 | does not work offline | 2026-10-01 13:50:30 | 482.12 |
| app_store | 1 | Connection issue: Strava keeps disconnecting from my apple watch | 2026-10-01 00:06:13 | 483.0.0 |
| app_store | 4 | Great: Great just some of the numbers change slightly between apple workout and Strava when importing recordings | 2026-09-30 00:09:16 | 482.0.0 |
Your rows will differ because reviews keep coming in. For Apple, the review title is a separate column; it is shown before the colon here.
Watch the walkthrough
Let's use Strava as an example: the newest one and two star reviews from both stores, for the United States. The video shows the app links, the star filter, the review table with app versions, and the spreadsheet export. The steps are the same for any app.
The video checks 100 reviews per store and keeps 1 and 2 star reviews (Star ratings under More options). For a ready-made run, open the Spotify example. For a written walkthrough with inputs, sample output and costs, read Export App Store and Google Play reviews into one spreadsheet.
Only need one store? Export Duolingo Google Play reviews.
Choose a store
| You want | What to enter |
|---|---|
| Google Play reviews | Select Google Play and fill in Google Play app. |
| App Store reviews | Select App Store and fill in App Store app. |
| Both stores | Select Both and fill in both fields, or type the app's name once. |
Each field takes a store link, an ID or a name:
| You enter | Read as |
|---|---|
play.google.com/store/apps/details?id=com.strava or com.strava | That Google Play app |
apps.apple.com/us/app/strava-run-bike-walk/id426826309, id426826309 or 426826309 | That App Store app |
Strava | The app whose store name starts with the words you typed (spaces are ignored, so tik tok finds TikTok). The run summary shows which app was used |
A link pasted into the other store's field is still used for its own store. If no app's name matches the words you typed, the run says so instead of guessing; paste the link in that case. The selected Country decides which App Store country is read, even if an App Store link contains another country; Google Play reviews depend on the Language, not the country. Choose the country by name in the form. For API requests, use a two-letter code such as us, gb or de; uk is read as gb. Reviews are not translated.
For an Apple-only API request:
{"store": "app_store","appStoreId": "https://apps.apple.com/us/app/strava-run-bike-walk/id426826309","country": "us","maxReviews": 5}
For Google Play only:
{"store": "google_play","googlePlayAppId": "https://play.google.com/store/apps/details?id=com.strava","country": "us","language": "en","maxReviews": 5}
Several apps in one run, with two more App Store countries and German Google Play reviews as well:
{"apps": ["https://play.google.com/store/apps/details?id=com.strava","https://apps.apple.com/us/app/strava-run-bike-walk/id426826309","Duolingo"],"country": "us","countries": ["gb", "de"],"language": "en","languages": ["de"],"maxReviews": 100}
Each line of apps is a store link, an ID or an app name. A link or ID is read from its own store; a name is looked up in the store chosen under Store (both by default). maxReviews applies to each app, in each App Store country and each Google Play language. A line that cannot be read, or an app that is not found, is named in the run message and the other apps are still collected. The same app listed twice is collected once.
In API requests, maxReviews defaults to 200 per store when you leave it out. The form's value of 20 only applies in Apify Console.
Input reference
| Field | API default | Meaning |
|---|---|---|
store | both | both, google_play or app_store |
googlePlayAppId | None | Google Play link, package name or app name |
appStoreId | None | App Store link, app number or app name |
apps | None | More apps, one per entry: store links, IDs or names |
country | us | App Store country. Google Play returns the same reviews for every country |
countries | None | More App Store countries (two-letter codes). Apple shows about 500 recent reviews per country, so this is how to get more for one app |
language | en | Google Play review language: you get the reviews written in it |
languages | None | More Google Play languages, for example ["de", "es", "pt-BR"] |
maxReviews | 200 | Upper limit per selected store, and with lists per app, App Store country and Google Play language |
sort | newest | Google Play: newest, rating or helpfulness (shown as Most relevant) |
ratings | all five | Star ratings to keep, for example ["1", "2"] |
reviewsSince | None | Keep reviews dated on or after this day, YYYY-MM-DD (UTC), or from a period back from the start of the run: 7 days, 2 weeks, 1 month |
watchName | None | Save only reviews that earlier runs with this name did not return (for scheduled alerts) |
The rating and date filters apply to the reviews collected within maxReviews per store, so a filtered run can return fewer rows. Reviews without a date are left out when reviewsSince is set. The run's message and report say how many of the checked reviews matched; raise maxReviews to check more. Most relevant uses Google Play's own relevance order, not a ranking by helpful votes. Apple always uses its most-recent feed. With both, a store without an app is marked skipped. A run with no app at all ends without reviews and with a message explaining what to fix.
Output reference
One dataset item is one review. Both stores use the same fields; values a store does not provide stay null.
| Field | Meaning |
|---|---|
source | google_play or app_store |
appId | Resolved app identifier, also when you entered an app-page URL |
reviewId | Source review identifier, when available |
userName | Public reviewer display name |
rating | Star rating, usually 1-5 |
title | Apple review title; null for Google Play |
text | Review text |
date | UTC time: Google Play review time, or Apple's review update time |
thumbsUp | Helpful votes shown by the source |
appVersion | App version the review was written for |
developerReply | Google Play reply text when available; null for Apple |
developerReplyDate | Google Play reply time in UTC; null for Apple |
country | Requested country, not the reviewer's verified location. It selects the App Store storefront; Google Play returns the same reviews for every country |
language | Requested Google Play language, not the detected text language; null for Apple |
url | App listing URL, not a link to the review |
Google Play does not provide review titles through this source. Apple's public feed does not include developer replies or a review language. Apple's update time is not guaranteed to be the original posting date. The run report records when the data was collected.
Illustrative Apple record with made-up review content:
{"source": "app_store","appId": "426826309","reviewId": "example-review-id","userName": "Example reviewer","rating": 4,"title": "Useful app","text": "Illustrative feedback, not an actual customer review.","date": "2026-09-13T13:25:48+00:00","thumbsUp": 0,"appVersion": "1.0","developerReply": null,"developerReplyDate": null,"country": "us","language": null,"url": "https://apps.apple.com/us/app/id426826309"}
Run report and limits
Open Run summary in the Output tab for a readable status of each store. The same information is in RUN_REPORT in the run's key-value store, which suits automation. Each selected store is marked:
ok: reviews were returned without a detected errorempty: no reviews and no detected request errorpartial: some reviews, then a request or paging problemfailed: a request error and no reviewsskipped: no app was given for that store
ok means the bounded collection finished without an error. It does not mean every historical review was collected. Results from a working store are kept when the other store fails. If every attempted store fails, the run ends with nothing collected or charged, says why, and RUN_REPORT has hasErrors: true. If the app doesn't exist in the chosen store and country, the run ends normally with no reviews and says so.
Apple's feed covers about the 500 most recent reviews per app and country (ten pages). Google Play can go further back, but complete history is not guaranteed. Reviews can be edited or removed between runs.
When Apple returns an empty feed, the Actor checks Apple's alternative feed for the same app, country and page, then Apple's app record. An app that is not sold in that country gets a plain error; an app with fewer than 50 ratings there is reported as returning no written reviews from that feed (Apple's feed holds written reviews only); for a popular app the run says the reviews could not be confirmed and suggests trying again. It does not switch countries. When Google Play returns nothing, the Actor checks that the app exists and tells you if the link, ID or country looks wrong. Retry waits requested by the store are respected.
Pricing
$0.20 per 1,000 delivered reviews ($0.0002 each), plus a startup fee of $0.002 per GB of memory, at least one per run (lowered from $0.01 on November 10, 2026). A run over a list of apps pays the startup fee once. The default memory is 1 GB, so most runs pay one startup fee. Selecting more memory raises the startup fee, not the per-review price.
| Billable unit | Base / Free tier | Bronze (-10%) | Silver (-15%) | Gold, Platinum, Diamond (-20%) |
|---|---|---|---|---|
| Startup, per GB of memory | $0.002 | $0.0018 | $0.0017 | $0.0016 |
| 1,000 reviews | $0.20 | $0.18 | $0.17 | $0.16 |
Apify applies your tier's price automatically; the Pricing tab shows your rate. Base-price examples:
| One run | At the 1 GB default | With 4 GB memory |
|---|---|---|
| 40 reviews | $0.01 | $0.016 |
| 400 reviews | $0.082 | $0.088 |
| 1,000 reviews | $0.202 | $0.208 |
Reviews left out by the rating or date filters are not charged. Maximum cost per run covers both the startup fee and the reviews. If the next review would go over it, the Actor stops and says so in the run summary, so you may get fewer reviews than requested.
If a run is restarted, reviews already saved are kept and are not exported or charged again. Apify may charge another startup fee for the restart. To collect more, start a new run.
Daily alert for new 1- and 2-star reviews
Get each day's new complaints about your app, or a competitor's, without reading every review:
- Enter the app, keep Both stores or pick one, and choose 1 and 2 under Star ratings.
- Give the check a watch name, for example
chatgpt-complaints. The ready-made example Daily alert: new 1- and 2-star reviews of an app has this filled in for ChatGPT. Each run then saves only reviews that earlier runs with this name did not return. - Save it as a task and add a daily schedule.
- In the task's Integrations tab, send the results where you read them: Slack, email or a Google Sheet. For a sheet, add the Google Sheets Import & Export integration in append mode, with
{{resource.defaultDatasetId}}as the dataset ID.
The first run saves the low ratings among the newest reviews; after that you get only new ones, and the run message says how many were new. A watch works better than a date filter here: both stores publish reviews about a day after they are written, so a "past 24 hours" window misses the late ones, while the watch remembers which reviews it has already returned. The list is kept in your own Apify account.
A day with no new low ratings saves nothing and costs only the startup fee: a daily check costs about $0.06 a month plus $0.0002 per review. To watch several apps, list them under More apps: the watch remembers each app separately and the run still pays one startup fee. Keep Reviews per store above the number of reviews the app gets in a day (the default 200 covers most apps).
API and recurring exports
Use the API tab for ready-made code examples. Keep your API token in an environment variable or secrets manager. To collect regularly, save a task, add a schedule, and fetch each run's dataset through the API or your automation tool.
For recurring imports, (source, appId, reviewId) works as a key when reviewId exists (Google Play returns the same review whatever country was requested). Update edited reviews rather than appending duplicates. Without a watch name, the Actor does not keep history between runs; it never sends notifications itself.
Public reviews can contain personal information. Check the source terms and your own obligations before sharing the data, and limit who can access it.
Ready-to-run examples
Each example opens with its input filled in. Change the input and run it.
| Example | What it does |
|---|---|
| Daily alert: new 1- and 2-star reviews of an app | Each run saves only the new 1- and 2-star ChatGPT reviews from both stores that earlier runs did not return. Schedule it daily and connect Slack, email or Google Sheets. |
| Export ChatGPT app reviews from iPhone and Android | The latest 100 ChatGPT reviews from the App Store and 100 from Google Play in one table, with ratings, text, dates and app versions. |
| Find 1- and 2-star reviews of a banking app | The newest 1- and 2-star Google Play reviews of Revolut, to see what frustrates customers. |
Use it from an AI agent
This Actor works as a tool in Claude, Cursor and other AI assistants that support MCP, through Apify's MCP server. Add this server and sign in with your Apify account when asked:
https://mcp.apify.com?tools=cleanscrape/app-store-reviews-scraper
Then ask in plain words, for example: "Get the 200 newest 1-star reviews of Duolingo from the App Store and Google Play and summarise the main complaints." The assistant runs the Actor in your Apify account and reads the results. The price per result is the same as in Console.
Common questions
Is there an API for App Store and Google Play reviews?
Apple and Google only give app owners access to reviews of their own apps. This Actor reads the public reviews of any app and returns the same columns for both stores. You can run it from the Apify API, Python or JavaScript, or on a schedule.
Is this an app-store-scraper replacement?
Yes. The Python library app-store-scraper was archived in 2021. app-store-reviews keeps its AppStore class and review fields, plus a reviews() function shaped like google-play-scraper's, and runs on this Actor. Change the import to from app_store_reviews import AppStore and set APIFY_TOKEN.
How do I export Google Play or App Store reviews to Excel or CSV?
Paste the app's store link, run the Actor, then use Export to download CSV, Excel or JSON. With Both, iPhone and Android reviews end up in one table with a store column.
How much does it cost to scrape app reviews?
$0.20 per 1,000 reviews at the base price, plus a small start fee ($0.002 at 1 GB of memory). 40 reviews cost about $0.01. See Pricing above for the details.
How many reviews can I get?
Apple's public feed covers about the 500 most recent reviews per app and country, so add countries under More countries to get more. Google Play can go further back, but the full history is not guaranteed; add languages under More Google Play languages to get the reviews written in them.
Can I get reviews for several apps at once?
Yes. Put one app per line under More apps (links, IDs or names). The run report lists each app with what was saved.
Why are my Google Play reviews the same for every country?
Google Play does not sort reviews by country. It returns the reviews written in the chosen language, the same ones whichever country is requested. Choose the Language to get German, Spanish or Japanese reviews. The App Store does separate reviews by country.
Can I get only 1-star reviews, or only recent ones?
Yes. Choose the star ratings you want and set Reviews since to a date, or to a period such as 7 days. The filters apply to the reviews collected, so a filtered run can return fewer rows.
Support
CleanScrape maintains this Actor for one-off exports and recurring workflows. We investigate reported errors, update the Actor when the stores change, and test changes against existing inputs and output formats.
If you get fewer reviews than expected, check the run summary first: the store limits above are the most common reason. If something looks wrong, open an issue or email contact.cleanscrape@gmail.com with the run ID, the app links, the country and the review limit. Never include API tokens or private data.
What worked well, and what could be better? Share your experience in Reviews. Honest feedback is welcome, including anything that fell short. Leaving feedback is optional and does not affect access, pricing or support.
Disclaimer
This Actor is an independent tool developed by CleanScrape. It is not affiliated with, endorsed by, or sponsored by Apple, Google, or the developers of the apps used in its examples. Apple, App Store, Google Play and all other trademarks are the property of their respective owners. Brand names are used only to identify supported sources and illustrate usage.
More tools from CleanScrape
- Casino Bonus Checker: the casino bonus each affiliate and review site shows, with promo codes, 18+ notices and affiliate IDs
- Kick Sponsor Tracker: which brands Kick streamers promote, with promo codes, affiliate links and broadcast hours
- Google Jobs Scraper: job listings with salaries, descriptions and apply links from Google Jobs
- Google Trends Scraper API for Interest Over Time: search interest over time, by region, related queries and trending searches
- Map Your Show Exhibitor List Scraper for Trade Shows: trade show exhibitor lists and booth changes
- Shopify Product Reviews Scraper for Judge.me and Okendo: Judge.me and Okendo reviews from Shopify product links
- Google News Scraper and RSS Feed Reader: headlines from Google News and publisher feeds
- Pinterest Scraper API: keyword search, public pin links and board previews; search results may lack a pin link
- Google Hotels Scraper: hotel prices and booking offers for your dates
- TikTok Shop Product Scraper: US TikTok Shop prices, sellers and ratings
- Whatnot Seller Tracker: top Whatnot sellers per category, items sold, sales per day and followers over time
- Whatnot Scraper: Whatnot listings with prices and live shows by keyword or category
- Meta Threads Scraper: public Threads posts from accounts or post links
- Likee Scraper API: Likee videos and comments
- Flashscore Tennis Scraper: tennis results, statistics, point-by-point and head-to-head
- Bilibili Scraper: Bilibili videos, danmaku, top comments and creators, no login
- ATP and WTA Tennis Rankings Scraper: current ATP and WTA singles, doubles and race rankings with points and movement
- Career Site Job Listings from Workday, Greenhouse and Lever: open jobs from company career pages, with salaries and new or closed jobs per company
- Video Frame Extractor for Scene Changes and Thumbnails: still images from video files at scene changes, intervals or timestamps, with contact sheets
- Economic Calendar Scraper for Official Release Dates: CPI, jobs, GDP and central bank decision dates from the official agencies of five economies, with UTC times
- Audio Transcription and Speech to Text for Podcasts: podcast feeds, Apple Podcasts links and audio files to text with timestamps and subtitles
- Google Flights Scraper and Fare Tracker: flight prices, airlines, stops and times for your routes and dates, with only new flights or lower prices on a schedule
- Google Shopping Scraper and Price Tracker: product prices, stores and ratings from Google Shopping, each store’s price for a product, and price changes on a schedule
- Telegram Channel Messages Scraper with Comments: public Telegram channel posts with views, reactions, media and comments, exact subscriber counts, and only new posts on a schedule