App reviews are the cheapest user research you'll ever get: thousands of people telling you exactly what's broken and what they want. The problem is getting them out.
- App Store Connect and Google Play Console only show reviews for your own apps, in two different formats, with clunky exports.
- Apple's old RSS review feed that many tutorials still point to now returns nothing.
- Most scraping tools handle one store, so comparing your iOS and Android feedback means stitching two datasets together.
This post shows how to pull reviews for any app (yours or a competitor's) from both stores in one run, with the same fields, ready for a spreadsheet or an LLM.
Disclosure: I built the tool used below. It's pay-per-use on Apify (you pay per review delivered, a fraction of a cent each).
The tool
App Reviews Scraper on Apify. Give it Google Play package names/links and App Store links/IDs, mixed in one list. Each review comes back with:
store, appId, country, rating, title, text, date, appVersion, thumbsUp (helpful votes), developerReply, developerReplyDate, userName, url
It doesn't need a browser or a proxy, so it's fast. In my release test it pulled 4,200 reviews from 7 apps in 2 countries in under 11 seconds.
Want to see the output before writing any code? This one-click example is pre-filled to get the 500 newest Duolingo reviews from both stores. Open it, click Start, and look at the results.
Export reviews from Python
pip install apify-client pandas
from apify_client import ApifyClient
import pandas as pd
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("sblabs/app-reviews-scraper").call(run_input={
"apps": [
"com.duolingo", # Google Play
"https://apps.apple.com/us/app/duolingo-language-lessons/id570060128", # App Store
],
"countries": ["us", "gb"],
"maxReviewsPerApp": 1000, # per app, per country
"sort": "newest",
})
rows = [r for r in client.dataset(run["defaultDatasetId"]).iterate_items() if r["status"] == "ok"]
df = pd.DataFrame(rows)
df.to_csv("duolingo_reviews.csv", index=False)
print(df.groupby("store")["rating"].mean())
You get one CSV with both stores side by side.
Monitor new reviews cheaply
Set sort to newest and pass a date. The tool stops paging as soon as it reaches older reviews, so a daily run only fetches (and charges for) what's new:
run_input = {"apps": ["com.duolingo", "id570060128"], "sort": "newest", "since": "2026-10-01"}
Schedule that daily in Apify (or from cron, n8n, Make) and post the 1-2 star ones to Slack.
Turn reviews into a feature request list with an LLM
low = df[df["rating"] <= 2]["text"].dropna().head(300).tolist()
prompt = (
"Here are app reviews. Group them into the top 10 recurring problems, "
"with a count and two short quotes each:\n\n" + "\n---\n".join(low)
)
# send `prompt` to Claude / GPT / your model of choice
Filter by appVersion to see whether a release made things better or worse, and use developerReply to find negative reviews nobody has answered yet.
Notes
- The App Store keeps a separate review list per country, so add the countries you care about.
- Apple's feed doesn't include the app version; Google Play's does.
- Reviewer names are personal data: aggregate and analyse, don't republish.
Questions or a store/country that doesn't work? Open an issue on the Actor page.
Top comments (0)