App Store & Google Play Scraper
Apps, rankings and reviews from both stores: ratings, installs, prices, developers. From $0.003 / app, pay per result, no browser, no login.
▶ Run it on Apify · Python example · All scrapers
Get App Store (iOS) and Google Play (Android) data as clean JSON, CSV or Excel: search any keyword and get every app with its rank (ASO keyword tracking), app details (rating, ratings count, installs, price, developer, version, update date, screenshots), top free / top paid charts and reviews — in any country. Both stores in one run, no browser, no API key.
✅ Keyword rank tracking (ASO): position of each app for your keywords, per store and country ✅ App details: title, developer, category, rating, number of ratings, installs (Google Play), price, version, last update, size, icon, screenshots, description, what’s new ✅ Reviews: rating, title, text, app version, date, helpful votes, developer reply — anonymized (no author names) ✅ App Store top charts: top free and top paid, any country, with full details ✅ Any country: us, gb, de, fr, pt, br, in, jp… several per run ✅ Paste app IDs, packages or store URLs ✅ Two fair prices: apps and much cheaper reviews
🚀 Why this app store scraper is different
| This Actor | Typical app scrapers | |
|---|---|---|
| App Store + Google Play in one run | Yes | One store per Actor |
| Keyword rank for every app found | Yes | Rarely |
| Charts with full app details | Yes | Ids only |
| Reviews anonymized (GDPR-friendly) | Yes | Author names collected |
| Browser needed | No — seconds per search | Often |
| Blocking handling | Retries, new IPs, automatic residential fallback | Fails on cloud IPs |
💡 Use cases
- ASO / app marketing: track where your app and competitors rank for each keyword, country by country, every day.
- Competitor research: ratings, installs, update frequency, pricing and release notes of every competitor.
- Review mining: find bugs, feature requests and sentiment in thousands of reviews (feed them to ChatGPT/Claude).
- Market research & investing: top charts by country, category leaders, new entrants.
- Lead generation for agencies: find apps with low ratings or outdated versions to pitch your services.
🛠️ How to use it (3 steps)
- Add keywords, app IDs/URLs or pick App Store charts.
- Choose stores and countries, and how many reviews per app you want (0 = none).
- Click Start and download apps and reviews as JSON, CSV or Excel, or use the API.
📥 Input example
{
"searchTerms": ["habit tracker", "budget app"],
"appIds": ["https://apps.apple.com/us/app/facebook/id284882215", "com.instagram.android"],
"stores": ["appStore", "googlePlay"],
"countries": ["us", "gb"],
"maxResultsPerSearch": 10,
"appStoreCharts": ["top-free"],
"chartSize": 25,
"maxReviewsPerApp": 100
}
📤 Output examples (real data)
App (Google Play)
{
"type": "app",
"store": "googlePlay",
"country": "us",
"appId": "com.instagram.android",
"searchTerm": null,
"title": "Instagram",
"developer": "Instagram",
"genre": "Social",
"price": 0,
"free": true,
"rating": 3.99,
"ratingsCount": 169442341,
"installs": "5,000,000,000+",
"updatedAt": "2026-10-28T18:24:35+00:00",
"url": "https://play.google.com/store/apps/details?id=com.instagram.android&hl=en&gl=US"
}
App found by keyword (App Store) — "searchTerm": "photo editor", "searchRank": 1, "title": "Picsart AI Photo Editor, Video", "rating": 4.66, "ratingsCount": 1196413
Review
{ "type": "review", "store": "googlePlay", "appId": "org.isoron.uhabits", "rating": 5, "text": "good 💚",
"appVersion": "2.3.1", "date": "2026-10-30T05:23:10+00:00", "thumbsUp": 0, "developerReply": null }
⚙️ Input parameters
| Field | Type | Default | Description |
|---|---|---|---|
searchTerms |
array | ["photo editor"] |
Keywords to search in the stores. Every app found gets its rank for the keyword (ASO keyword tracking). |
appIds |
array | — | App Store IDs or URLs (284882215, apps.apple.com/…/id284882215) and Google Play packages or URLs (com.instagram.android). |
stores |
array | ["appStore", "googlePlay"] |
Stores to search. |
countries |
array | ["us"] |
2-letter store countries: us, gb, de, fr, pt, br, jp… Every search runs in each country. |
language |
string | "en" |
Language of Google Play texts, e.g. en, pt-BR, fr. |
maxResultsPerSearch |
integer | 5 |
Apps per keyword and store (Google Play shows up to 30 for a search). |
appStoreCharts |
array | — | Top free and/or top paid iPhone apps of each country. |
chartSize |
integer | 50 |
Apps per chart. |
maxReviewsPerApp |
integer | 0 |
0 = no reviews. App Store gives up to 500 recent reviews per country; Google Play thousands. Reviews are anonymized (no author names). |
reviewSort |
string | "newest" |
App Store reviews are always the most recent. Values: newest, relevant, rating. |
proxyConfiguration, maxRetries |
object, integer | Apify Proxy, auto | Proxy and retries; the defaults work for most runs. |
📋 Output fields
| Field | Type | Description |
|---|---|---|
type |
string | app or review |
store |
string | appStore or googlePlay |
country |
string | Store country |
appId |
string | App Store ID or Google Play package |
searchTerm |
string | Keyword that found the app |
searchRank |
integer | Position of the app for that keyword |
chart |
string | App Store chart |
chartRank |
integer | Position in the chart |
bundleId |
string | Bundle / package identifier |
title |
string | App name or review title |
developer |
string | Developer name |
developerId |
string | Developer ID |
developerWebsite |
string | Developer website |
genre |
string | Main category |
genres |
array | Categories |
price |
number/integer | Price |
currency |
string | Currency |
free |
boolean | Free to download |
rating |
number/integer | Average rating or review stars |
ratingsCount |
integer | Number of ratings |
installs |
string | Google Play install range |
minInstalls |
integer | Google Play minimum installs |
contentRating |
string | Age rating |
version |
string | Current version |
releasedAt |
string | First release |
updatedAt |
string | Last update |
sizeBytes |
integer | App size (App Store) |
icon |
string | Icon URL |
screenshots |
array | Screenshot URLs |
description |
string | Store description |
releaseNotes |
string | What’s new |
languages |
array | Languages (App Store) |
url |
string | Store page |
reviewId |
string | Review ID |
text |
string | Review text |
appVersion |
string | App version reviewed |
date |
string | Review date |
thumbsUp |
integer | Helpful votes |
developerReply |
object | Developer reply (Google Play) |
Export as JSON, CSV, Excel, XML or HTML, or read it through the API.
💰 Pricing — two fair prices
| Item | Free plan | Bronze | Silver | Gold+ |
|---|---|---|---|---|
| App (details, search rank or chart rank) | $0.003 | $0.0025 | $0.002 | $0.0015 |
| Review | $0.0003 | $0.00025 | $0.0002 | $0.00015 |
Examples: 10 keywords × 2 stores × top 10 = 200 apps ≈ $0.60. 1,000 reviews ≈ $0.30. Platform usage and proxies are included. Set a maximum cost per run and the Actor stops cleanly when it is reached. Apps not found are never charged.
🔌 API & integrations
Python
from apify_client import ApifyClient # pip install "apify-client>=3"
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("victorrodi/app-store-google-play-scraper").call(
run_input={"searchTerms": ["habit tracker"], "countries": ["us"], "maxResultsPerSearch": 10}
)
for item in client.dataset(run.default_dataset_id).iterate_items():
print(item["store"], item["searchRank"], item["title"], item["rating"])
JavaScript / Node.js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('victorrodi/app-store-google-play-scraper').call({
appIds: ['com.instagram.android'], maxReviewsPerApp: 200, searchTerms: [],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.filter((i) => i.type === 'review').length, 'reviews');
cURL
curl -X POST "https://api.apify.com/v2/acts/victorrodi~app-store-google-play-scraper/run-sync-get-dataset-items" \
-H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \
-d '{"searchTerms": ["budget app"], "stores": ["appStore"], "maxResultsPerSearch": 5}'
Works with Google Sheets, Make, Zapier, n8n, Slack and MCP / AI agents: “Rank the top 10 habit tracker apps on both stores and summarize their 1-star reviews.”
🤖 Use it from AI agents (Claude, ChatGPT, Cursor…)
This Actor is available to AI assistants through the Apify MCP server. Add the server to Claude Desktop, Claude Code, Cursor or any MCP client, then simply ask:
“Compare the ratings and installs of the top 10 habit tracker apps on both stores.”
“Get the 100 latest Google Play and App Store reviews of Spotify and summarize the complaints.”
The clean, flat output is designed to be read directly by LLMs.
🛡️ Reliability
- Requests are paced and retried with a new IP and exponential backoff.
- If the site keeps blocking, the Actor switches to residential IPs automatically.
- One failing item never stops the run, and you are never charged for it.
- Every run writes a
RUN_SUMMARYrecord (results, failures, retries, blocks). - Measured on a real run: 33 apps and 603 reviews, 0 failures.
- Reviews are anonymized: no reviewer names are stored.
More examples and docs for all our Actors: Vicshock/trendpulse-scrapers.
📌 Tips
- Schedule the Actor daily with the same keywords to build an ASO rank history.
- Google Play shows at most 30 apps for a search; the App Store up to 200.
- App Store reviews: Apple publishes the 500 most recent per country — run several countries for more.
- Install counts exist only on Google Play; download counts are not published by Apple.
❓ FAQ
Do I need a developer account or API key? No.
Why are reviewer names missing? On purpose: reviews are anonymized so your dataset stays GDPR-friendly. Text, rating, date, version and votes are all there.
Can I track my own app’s rank? Yes: add your keywords; each app found has searchRank. Filter on your app ID.
Is it legal? The Actor reads public store pages and Apple’s official feeds — no personal data. Respect the stores’ terms and the laws that apply to you.
💬 Support
Missing a field or found an issue? Open an issue in the Issues tab — it is answered fast.