What it does
App store data usually means two scrapers with two schemas: one for Google Play, one for the App Store. This actor takes Google Play package names or URLs and App Store IDs or URLs together and returns one normalized row per app, store and country: title, developer, category and genres, star rating, ratings count, rating histogram, installs range and exact install count on Play, price, in-app purchases, content rating, release and update dates, version, minimum OS, description, release notes, icon, screenshots, similar apps and more by the same developer.
It also reads Apple's official top-free and top-paid charts (up to 100 positions, any country) as chart rows, optionally with a full app row for every charting app. That is the way to discover apps, because the actor deliberately has no keyword search: both stores disallow their search pages in robots.txt.
As a review source it returns the Google Play reviews shown on the public app page, up to 20 per app, country and language, with reviewer names, avatars and user IDs stripped. With onlyNewReviewsSinceLastRun on a schedule, it builds up review history over time. Pricing is $0.80 per 1,000 app rows, $0.04 per 1,000 reviews and $0.20 per 1,000 chart entries.
How it works
- Each entry in
appsis recognized as a Google Play package or URL, or an App Store ID or URL, and scraped once per country incountries. - Store pages are fetched over plain HTTP, at most 2 requests at a time per store with pauses, and only pages the stores' robots.txt allows (re-checked every run).
- Fields from both stores are mapped into one schema; anything a store does not publish, such as App Store installs or Play app size, is null.
- Optional extras: Apple top charts from the official marketing RSS feed via
charts, and anonymized Google Play reviews viaincludeReviews. - If a store shows a CAPTCHA or keeps answering 429/403, the actor stops asking that store and returns free error rows for the skipped apps.
Input example
A typical run input (JSON). Every field is also available as a form in the Apify console.
{
"apps": [
"com.spotify.music",
"https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580"
],
"countries": [
"us",
"gb"
],
"language": "en",
"charts": [
"top-free"
],
"chartSize": 25,
"includeChartAppDetails": false,
"includeReviews": true,
"maxReviewsPerApp": 20
}All input fields
| Field | Type | Required | Default | What it does |
|---|---|---|---|---|
apps | array | no | Apps to scrape, one per line: a Google Play package name (com.spotify.music) or Play URL (play.google.com/store/apps/details?id=…), or an App Store id (324684580) or App Store URL (apps.apple.com/us/app/…/id324684580).… | |
charts | array | no | [] | Apple App Store top charts to fetch for each country (Apple's official marketing RSS feed). Each position is one chart row. |
countries | array | no | ["us"] | Two-letter store country codes (us, gb, de, fr, jp, br …). Apps are scraped and charts fetched for each country. |
language | string | no | "en" | Language of Google Play text and reviews, e.g. en, de, pt-BR. App Store text is in the storefront's own language. |
chartSize | integer | no | 25 | How many positions to return per chart (Apple serves at most 100). |
includeChartAppDetails | boolean | no | false | Fetch the App Store page of every app in the chart and return a full app row for it as well (charged as an app result). |
includeReviews | boolean | no | false | Return the reviews Google Play shows on the public app page (its "most relevant" set, up to 20 per app, country and language) as anonymised review rows: rating, text, date, thumbs-up, app version and developer reply.… |
maxReviewsPerApp | integer | no | 20 | Stop after this many reviews per app and country (the public app page shows at most 20). |
reviewsSince | string | no | Only return reviews posted on or after this date (YYYY-MM-DD). | |
onlyNewReviewsSinceLastRun | boolean | no | false | For scheduled runs: remember which reviews were delivered and return only reviews not seen before. State is kept in the named key-value store 'app-store-scraper-monitor' in your account, one record per app, country and… |
Output example
App, chart and review rows share one dataset and are told apart by the type column, as in this sample:
| type | store | title | developer | rating | ratingsCount | installs | priceText | version | updatedAt |
|---|---|---|---|---|---|---|---|---|---|
| app | google-play | Spotify: Music and Podcasts | Spotify AB | 4.3 | 36505489 | 1,000,000,000+ | Free | Varies with device | 2026-10-14 |
| app | app-store | Spotify: Music and Podcasts | Spotify | 4.8 | 42653998 | Free | 9.1.90 | 2026-10-08 | |
| app | app-store | Minecraft: Play with Friends! | Mojang | 4.5 | 843566 | $6.99 | 26.52 | 2026-09-28 | |
| chart | app-store | #1 top-free (us): Muse from Meta | Meta Platforms, Inc. | 2026-10-19 |
Pricing
Pay per event: you are charged only for the results you receive, with no subscription. Set a maximum total charge on any run and it stops cleanly at the cap.
| Charged for | When | Price | Per 1,000 | Worked example |
|---|---|---|---|---|
| App result | Charged per app row delivered (one app in one country, either store) | $0.0008 | $0.80 | 100 apps = $0.08; 1,000 apps = $0.80 |
| Review result | Charged per anonymised Google Play review delivered | $0.00004 | $0.04 | 20 reviews for each of 50 apps = $0.04 |
| Chart entry | Charged per Apple top-chart position delivered | $0.0002 | $0.20 | Top 25 free + top 25 paid in one country = $0.01 |
| Actor Start (platform start fee) | Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). | $0.00005 | — | One run at 256 MB ≈ $0.0000125 |
Prices are read from the live Apify Store listing when this page is built. The listing is always authoritative.
Try App Store & Google Play Scraper on Apify. Pay only for the results you get.
Run on Apify →Use cases
ASO competitor tracking
Scrape your app and its closest rivals in every market you care about and compare rating, ratings count, histogram and update cadence side by side. The similar-apps field helps you find competitors you had not listed.
Top chart monitoring
Pull Apple's top-free and top-paid charts for several countries on a schedule to see which apps climb or drop. Turn on full details for charting apps when you want ratings and versions next to the positions.
Review monitoring without personal data
Schedule runs with only-new reviews on to collect fresh Google Play reviews, including the app version and any developer reply. Reviewer identities are never returned, which keeps the dataset simpler to handle under GDPR.
Market research datasets
Build a table of apps across stores and countries with prices, in-app purchases, content ratings and install ranges. One schema for both stores means fewer joins and less cleanup.
How it compares
| ActorForge App Store Scraper | Single-store scrapers | Paid app-intelligence platforms | |
|---|---|---|---|
| Google Play and App Store in one schema | Yes | No, one store each | Yes |
| Keyword search for apps | No, use charts or IDs | Partial | Yes |
| App Store review text | No, disallowed by robots.txt | Partial | Yes |
| Google Play reviews | Up to 20 per app, country and language, anonymized | Partial | Yes, with deeper history |
| Apple top charts | Yes, top-free and top-paid, 1-100 | Partial | Yes |
| Install and download estimates beyond Play's ranges | No | No | Yes, modeled |
| Pricing | $0.80 per 1,000 apps, pay per row | Varies | Subscription |
If you need deep review history, App Store review text or modeled download estimates, a paid app-intelligence platform covers more ground. This actor is for teams that want public store-page data for both stores, cheaply and on their own schedule.
Limits and honest notes
- No keyword search. Google Play's robots.txt disallows /store/search and itunes.apple.com disallows /search*, so apps are given by package name, id or URL. Use Apple's top charts to discover apps.
- No App Store reviews. Apple's customer-review feed lives under itunes.apple.com/…/rss/…, which Apple's robots.txt disallows, so App Store rows carry rating, ratings count and histogram but no review text.
- Google Play reviews: up to 20 per app, country and language — the "most relevant" reviews shown on the public app page. Google's paging endpoint (/_/PlayStoreUi/data/batchexecute) and /store/getreviews are disallowed by its robots.txt, so there is no deep history and no newest-first sort. Scheduled runs with *Only new reviews since last run* build up history over time.
- Reviewer names, avatars and user ids are never returned, and developer e-mails are kept only when they are company mailboxes (support@, help@ … on the company's own domain). Review text is returned as written.
- Google Play does not publish app size on the web any more (size is null for Play apps); App Store rows have no installs (Apple does not publish them). Fields a store does not provide are null.
- Apple charts: top-free and top-paid apps, 1-100 positions per chart and country, from Apple's official marketing RSS feed. Google Play charts are not supported.
- Plain HTTP from Apify's servers, at most 2 requests at a time per store, with pauses. If a store shows a CAPTCHA, an 'unusual traffic' page or keeps answering 429/403, the actor stops asking that store for the rest of the run and returns free error rows for the skipped apps. No proxies, no CAPTCHA solving.
- robots.txt is re-checked at the start of every run; if a store ever disallows the pages used here, that store is skipped.
- Error rows (app not found in a country, store blocked, chart unavailable) are free. Respects your run budget: set a maximum total charge and the actor stops cleanly at the cap.
FAQ
Can I scrape App Store reviews with this actor?
No. Apple's customer-review feed sits under a path that Apple's robots.txt disallows, so App Store rows include rating, ratings count and the histogram but no review text. Google Play reviews are available.
How many Google Play reviews can I get per app?
Up to 20 per app, country and language: the most relevant reviews shown on the public app page. There is no deep history or newest-first sort, but scheduled runs with onlyNewReviewsSinceLastRun accumulate history over time.
Can I search the stores by keyword?
No. Google Play and Apple both disallow their search pages in robots.txt, so apps are given by package name, ID or URL. Use the Apple top charts to discover apps.
Does it return Google Play top charts?
No, only Apple's top-free and top-paid charts from Apple's official marketing RSS feed are supported, with up to 100 positions per chart and country.
Why are some fields empty for one store?
Each store publishes different data. Google Play no longer shows app size on the web, so size is null for Play apps, and Apple does not publish installs, so App Store rows have none.
Use it from code
Run the actor through the Apify API with the input above.
cURL
curl -X POST "https://api.apify.com/v2/acts/actor-forge~app-store-scraper/run-sync-get-dataset-items" \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"apps": ["com.spotify.music", "https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580"], "countries": ["us", "gb"], "language": "en", "charts": ["top-free"], "chartSize": 25, "includeChartAppDetails": false, "includeReviews": true, "maxReviewsPerApp": 20}'JavaScript (Node.js)
// Node.js 18+ (built-in fetch). Set APIFY_TOKEN in your environment.
const input = {
"apps": [
"com.spotify.music",
"https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580"
],
"countries": [
"us",
"gb"
],
"language": "en",
"charts": [
"top-free"
],
"chartSize": 25,
"includeChartAppDetails": false,
"includeReviews": true,
"maxReviewsPerApp": 20
};
const res = await fetch(
"https://api.apify.com/v2/acts/actor-forge~app-store-scraper/run-sync-get-dataset-items",
{
method: "POST",
headers: {
Authorization: `Bearer ${process.env.APIFY_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify(input),
}
);
const items = await res.json();
console.log(items.length, items[0]);Python
# pip install apify-client (set APIFY_TOKEN in your environment)
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run_input = {
"apps": [
"com.spotify.music",
"https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580"
],
"countries": [
"us",
"gb"
],
"language": "en",
"charts": [
"top-free"
],
"chartSize": 25,
"includeChartAppDetails": False,
"includeReviews": True,
"maxReviewsPerApp": 20
}
run = client.actor("actor-forge/app-store-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)The run-sync-get-dataset-items endpoint waits for the run (up to 5 minutes) and returns the dataset rows directly. For longer runs, start the run asynchronously and read the dataset when it finishes, as the Python example does. Replace APIFY_TOKEN with your own token from the Apify console.
Related actors
Shopify Store Scraper — Products, Prices, Store Info
Scrape any Shopify store's products from its public products.json: title, vendor, type, tags, price range, compare-at price, stock, variants and…
$0.30 per 1,000 · product resultGoogle Trends Scraper — Trending Now & Interest Over Time
Google Trends scraper and API: Trending Now searches for 125 countries from the official feed (traffic, start time, picture, news articles), plus…
$0.50 per 1,000 · trend resultGoogle Ads Transparency Scraper — Competitor Ads | $0.60/1K
Scrape competitor ads from the Google Ads Transparency Center by domain, advertiser name or ID: format, first/last shown, regions, impressions, ad…
$0.60 per 1,000 · ad resultTry App Store & Google Play Scraper on Apify. Pay only for the results you get.
Run on Apify →