App Store & Google Play Scraper — App Details, Top Charts and Reviews

One normalized row per app, store and country, for ASO, competitor tracking and app-intelligence dashboards, plus Apple top charts and anonymized Play reviews.

Run on Apify →See pricing

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

  1. Each entry in apps is recognized as a Google Play package or URL, or an App Store ID or URL, and scraped once per country in countries.
  2. 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).
  3. 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.
  4. Optional extras: Apple top charts from the official marketing RSS feed via charts, and anonymized Google Play reviews via includeReviews.
  5. 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
FieldTypeRequiredDefaultWhat it does
appsarraynoApps 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).…
chartsarrayno[]Apple App Store top charts to fetch for each country (Apple's official marketing RSS feed). Each position is one chart row.
countriesarrayno["us"]Two-letter store country codes (us, gb, de, fr, jp, br …). Apps are scraped and charts fetched for each country.
languagestringno"en"Language of Google Play text and reviews, e.g. en, de, pt-BR. App Store text is in the storefront's own language.
chartSizeintegerno25How many positions to return per chart (Apple serves at most 100).
includeChartAppDetailsbooleannofalseFetch 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).
includeReviewsbooleannofalseReturn 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.…
maxReviewsPerAppintegerno20Stop after this many reviews per app and country (the public app page shows at most 20).
reviewsSincestringnoOnly return reviews posted on or after this date (YYYY-MM-DD).
onlyNewReviewsSinceLastRunbooleannofalseFor 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:

typestoretitledeveloperratingratingsCountinstallspriceTextversionupdatedAt
appgoogle-playSpotify: Music and PodcastsSpotify AB4.3365054891,000,000,000+FreeVaries with device2026-10-14
appapp-storeSpotify: Music and PodcastsSpotify4.842653998Free9.1.902026-10-08
appapp-storeMinecraft: Play with Friends!Mojang4.5843566$6.9926.522026-09-28
chartapp-store#1 top-free (us): Muse from MetaMeta 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 forWhenPricePer 1,000Worked example
App resultCharged per app row delivered (one app in one country, either store)$0.0008$0.80100 apps = $0.08; 1,000 apps = $0.80
Review resultCharged per anonymised Google Play review delivered$0.00004$0.0420 reviews for each of 50 apps = $0.04
Chart entryCharged per Apple top-chart position delivered$0.0002$0.20Top 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 ScraperSingle-store scrapersPaid app-intelligence platforms
Google Play and App Store in one schemaYesNo, one store eachYes
Keyword search for appsNo, use charts or IDsPartialYes
App Store review textNo, disallowed by robots.txtPartialYes
Google Play reviewsUp to 20 per app, country and language, anonymizedPartialYes, with deeper history
Apple top chartsYes, top-free and top-paid, 1-100PartialYes
Install and download estimates beyond Play's rangesNoNoYes, modeled
Pricing$0.80 per 1,000 apps, pay per rowVariesSubscription

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

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 result

Google 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 result

Google 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 result

Try App Store & Google Play Scraper on Apify. Pay only for the results you get.

Run on Apify →

More E-commerce & App Stores tools · All actors