Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 

Repository files navigation

App Store & Google Play Reviews Scraper

Run on Apify Apify Actor License: MIT

▶️ Run the App Reviews Scraper on Apify » No sign-up friction, no API key, no code required — click Try for free, hit Start, and get 1,000+ app reviews in minutes.

Scrape thousands of app reviews from Google Play and the Apple App Store in a single run. Pull star ratings, full review text, review titles, app version, reviewer names, up-votes, developer replies, review dates, and a ready-made sentiment label — all as clean, structured JSON / CSV / Excel data. No Google Play or App Store API key needed. Point it at any app by package name (com.spotify.music), Apple track ID (324684580), or just search by name ("Duolingo"), pick a country/storefront, and export.

Perfect for App Store Optimization (ASO), app review sentiment analysis, competitor review mining, feature-request tracking, and product research at scale.


▶️ Run it on Apify

This repository is documentation only. The scraper itself runs as a hosted Apify Actor — no infrastructure, no proxies to manage, no maintenance:

Click Try for free to run it in the Apify Console right now. An empty input returns 1,000+ reviews for a set of hugely-popular apps so you can see the output shape instantly.


Table of contents


What you get

Every review is returned as a flat, analysis-ready record. Output fields:

  • appId — Google Play package name or Apple track ID the review belongs to
  • appName — human-readable app name
  • store — source store: google_play or app_store
  • country — storefront / country code the review was pulled from
  • reviewId — unique identifier of the review within its store
  • userName — display name of the reviewer
  • rating — star rating from 1 to 5 (number)
  • title — review title / headline (App Store; usually empty on Google Play)
  • text — full body text of the review
  • thumbsUp — number of up-votes / helpful votes
  • helpfulCount — helpful-vote count for the review
  • reviewCreatedVersion — app version the review was written against, when available
  • appVersion — app version associated with the review
  • reviewDate — when the review was posted or last updated (ISO 8601)
  • developerReplyText — text of the developer's reply, when present (Google Play)
  • developerReplyDate — date of the developer's reply (ISO 8601), when present
  • sentiment — coarse sentiment derived from the rating: positive (4–5), neutral (3), negative (1–2)
  • url — link to the review or reviewer profile

Export it all as CSV, JSON, JSONL, Excel, or XML, or pull it straight from the dataset API.


Use cases

  • App Store Optimization (ASO) — mine the exact words users use so you can optimize titles, subtitles, keywords, and descriptions.
  • App review sentiment analysis — every record ships with a sentiment label plus a numeric rating, so you can chart positive/neutral/negative trends over time and across versions.
  • Competitor review mining — scrape any competitor's reviews on both stores to find their weaknesses, most-loved features, and churn drivers.
  • Feature-request tracking — surface the features users keep asking for and quantify demand by up-votes (thumbsUp / helpfulCount).
  • Product research & discovery — validate ideas, spot unmet needs, and benchmark satisfaction across a whole category of apps.
  • Release / QA monitoring — filter reviews by appVersion to catch regressions and complaints introduced by a specific build.
  • Support & reputation management — track developer replies and spot negative reviews that need a response.
  • Market & investment research — gauge user sentiment and satisfaction for apps you're evaluating.

Quick start (4 methods)

Pick whichever fits your workflow. All four hit the same Actor — logiover/app-reviews-scraper.

1. Apify Console — no code

  1. Open apify.com/logiover/app-reviews-scraper.
  2. Click Try for free / Start.
  3. Leave the input empty to get 1,000+ reviews for a set of hugely-popular apps — or set App IDs / package names, Store, Country, and Max reviews.
  4. When the run finishes, open the Dataset tab and Export to CSV / JSON / Excel, or grab the results via the API.

Every field is optional, so the empty-input run is the fastest way to see exactly what you get.

2. Apify CLI

Install the CLI, log in, and call the Actor from your terminal:

# Install the Apify CLI (once)
npm i -g apify-cli

# Log in with your Apify token (grab it from https://console.apify.com/account/integrations)
apify login

# Run with defaults (returns 1000+ reviews)
apify call logiover/app-reviews-scraper

# Run with custom input
apify call logiover/app-reviews-scraper --input '{
  "store": "both",
  "appIds": ["com.spotify.music", "324684580"],
  "country": "us",
  "sort": "newest",
  "maxReviews": 5000
}'

The CLI streams run logs and prints the dataset location when it finishes. See examples/cli.md for more.

3. API / cURL

Run the Actor synchronously and get the review items back in one HTTP call. Replace YOUR_TOKEN with your Apify API token:

curl -X POST \
  "https://api.apify.com/v2/acts/logiover~app-reviews-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "store": "both",
    "appIds": ["com.spotify.music", "324684580"],
    "country": "us",
    "sort": "newest",
    "maxReviews": 1000
  }'

The response body is a JSON array of review items. Want CSV instead? Add &format=csv to the URL. Full walkthrough (async runs, polling, dataset pagination) in examples/api-curl.md.

4. apify-client (JavaScript & Python)

JavaScript / Node.jsnpm i apify-client:

import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_TOKEN' });

const input = {
  store: 'both',
  appIds: ['com.spotify.music', '324684580'],
  country: 'us',
  sort: 'newest',
  maxReviews: 1000,
};

// Run the Actor and wait for it to finish
const run = await client.actor('logiover/app-reviews-scraper').call(input);

// Fetch the review items from the run's dataset
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} reviews`);
console.log(items[0]);

Pythonpip install apify-client:

from apify_client import ApifyClient

client = ApifyClient("YOUR_TOKEN")

run_input = {
    "store": "both",
    "appIds": ["com.spotify.music", "324684580"],
    "country": "us",
    "sort": "newest",
    "maxReviews": 1000,
}

# Run the Actor and wait for it to finish
run = client.actor("logiover/app-reviews-scraper").call(run_input=run_input)

# Fetch the review items from the run's dataset
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["rating"], item["appName"], "-", item["text"][:80])

More detailed client recipes: examples/javascript.md · examples/python.md.


Input

Every field is optional — run with empty input to pull reviews for a set of hugely-popular apps. Configure as much or as little as you like:

Field Key Type Default Description
Store store string (enum) both Which store(s) to scrape: both, google_play, or app_store.
App IDs / package names appIds array of strings (popular apps) Google Play package names (e.g. com.spotify.music) and/or numeric Apple track IDs (e.g. 324684580). You can mix both — package names route to Google Play, numeric IDs to the App Store. Leave empty to scrape a set of hugely-popular apps.
App search query appQuery string Resolve an app by name instead of an ID (e.g. Duolingo). The top match on each selected store is scraped. Combined with any App IDs.
Country / storefront country string (enum) us Primary storefront and language region (e.g. us, gb, de, jp). Controls the Google Play country and the main App Store storefront.
Language language string (enum) en Language for Google Play reviews (ISO 639-1).
Sort reviews by sort string (enum) newest newest (most recent), helpfulness (most helpful / most up-voted), or rating (highest rating — Google Play).
Max reviews maxReviews integer 1000 Maximum total reviews to collect across all apps and stores (1200000).
App Store storefronts (advanced) appleCountries array of strings Explicit list of App Store storefront codes to sweep (e.g. ["us","gb","ca","au","de"]). Each storefront exposes up to ~500 reviews per app, so more storefronts multiply App Store volume.
Proxy configuration proxy object { "useApifyProxy": true } Apify Proxy configuration. Automatic proxy works well out of the box.

Minimal example input:

{}

Typical example input:

{
  "store": "both",
  "appIds": ["com.spotify.music", "324684580"],
  "appQuery": "Duolingo",
  "country": "us",
  "language": "en",
  "sort": "newest",
  "maxReviews": 5000
}

Output

Each item in the dataset is one review with the following fields:

Field Type Description
appId string Google Play package name or Apple track ID the review belongs to.
appName string Human-readable app name.
store string Source store: google_play or app_store.
country string Storefront / country code the review was pulled from.
reviewId string Unique identifier of the review within its store.
userName string Display name of the reviewer.
rating number Star rating from 1 to 5.
title string Review title / headline (App Store; usually empty on Google Play).
text string Full body text of the review.
thumbsUp integer Number of up-votes / helpful votes.
helpfulCount integer Helpful-vote count for the review.
reviewCreatedVersion string App version the review was written against, when available.
appVersion string App version associated with the review.
reviewDate string When the review was posted or last updated (ISO 8601).
developerReplyText string Text of the developer's reply, when present (Google Play).
developerReplyDate string Date of the developer's reply (ISO 8601), when present.
sentiment string Coarse sentiment from the rating: positive (4–5), neutral (3), negative (1–2).
url string Link to the review or reviewer profile.

Sample review item (JSON)

{
  "appId": "com.spotify.music",
  "appName": "Spotify: Music and Podcasts",
  "store": "google_play",
  "country": "us",
  "reviewId": "gp:AOqpTOFakeReviewId1234567890",
  "userName": "Alex Johnson",
  "rating": 2,
  "title": null,
  "text": "Loved this app for years but the latest update keeps crashing when I open my Liked Songs playlist. Please fix — I can't skip tracks either.",
  "thumbsUp": 143,
  "helpfulCount": 143,
  "reviewCreatedVersion": "8.9.44.575",
  "appVersion": "8.9.44.575",
  "reviewDate": "2026-07-09T14:22:05.000Z",
  "developerReplyText": "Hi Alex, thanks for the report! Please try updating to the latest version — we've shipped a fix for the crash.",
  "developerReplyDate": "2026-07-10T09:15:00.000Z",
  "sentiment": "negative",
  "url": "https://play.google.com/store/apps/details?id=com.spotify.music&reviewId=gp:AOqpTOFakeReviewId1234567890"
}

Values above are illustrative and formatted to show field shapes.


Integrations & automation

Because it runs on Apify, this Actor plugs into everything Apify supports — no glue code required:

  • Schedules — run the scraper on a recurring cron (hourly, daily, weekly) to keep a fresh feed of reviews for your apps and competitors.
  • Webhooks — trigger an HTTP callback when a run succeeds/fails so downstream systems react automatically.
  • Export to Google Sheets, Amazon S3, Google Drive, or a database — push new reviews to a spreadsheet or bucket after every run.
  • Zapier / Make / Pipedream — use the official Apify integrations to wire reviews into 6,000+ apps: append rows to a sheet, post to Slack, create tickets, enrich CRMs, and more.
  • apify-client (JS / Python) — embed review collection directly in your own app or data pipeline.
  • Dataset & API access — every run stores results in a dataset you can query, paginate, and re-export at any time.

See the Apify integrations docs for setup.


Export formats

Results can be downloaded or fetched via API in any of these formats:

  • CSV — open directly in Excel, Google Sheets, or Numbers.
  • JSON — for pipelines and apps.
  • JSONL — newline-delimited JSON for streaming / big-data tools.
  • Excel (XLSX) — spreadsheet-ready.
  • XML — for legacy systems and feeds.

Add &format=csv (or json, xlsx, xml) to any dataset API URL, or use the Export button in the Apify Console.


FAQ

How do I scrape App Store reviews?

Open the App Store & Google Play Reviews Scraper on Apify, set Store to app_store (or both), add the app's numeric Apple track ID to App IDs (or type a name in App search query), pick a country, and click Start. Export the results as CSV, JSON, or Excel. No Apple API key or account needed.

How do I scrape Google Play reviews?

Set Store to google_play (or both) and add the app's package name (e.g. com.spotify.music) to App IDs. Choose a country and language, set Max reviews, and run. You'll get ratings, review text, versions, developer replies, and sentiment.

Do I need an API key for the App Store or Google Play?

No. The Actor does not require any Google Play or Apple App Store API key. You only need a free Apify account to run it; from there it's point-and-click or one API call.

How do I export Google Play reviews to Excel?

Run the Actor, open the Dataset tab in the Apify Console, and click Export → Excel (XLSX). Via the API, append &format=xlsx to the dataset items URL. The file opens directly in Excel or Google Sheets.

How do I scrape iOS app reviews at scale?

Use store: "app_store" and add multiple App Store storefronts via the advanced appleCountries field (e.g. ["us","gb","ca","au","de"]). Each storefront exposes up to ~500 reviews per app, so sweeping several storefronts multiplies the total iOS reviews you collect. Raise maxReviews to pull more.

Is there a free app review scraper with no API key?

Yes — this Actor is free to try on Apify and needs no API key. Click Try for free; an empty input returns 1,000+ reviews so you can evaluate it before committing.

Can I scrape reviews for a specific app version?

Every review includes appVersion and reviewCreatedVersion. Scrape the reviews, then filter your exported CSV/JSON by version to isolate feedback for a particular release — great for QA and regression tracking.

How do I do sentiment analysis on app reviews?

Each review ships with a sentiment field (positive / neutral / negative) derived from the star rating, plus the full text. Use the built-in labels for quick charts, or feed the text into your own NLP model for deeper analysis.

How many reviews can I collect in one run?

Set Max reviews anywhere from 1 up to 200,000. Very large jobs are bounded by a time budget, and App Store volume scales with the number of storefronts you sweep. For maximum coverage, combine multiple apps, both stores, and several appleCountries.

How do I scrape competitor app reviews?

Add your competitors' package names and/or Apple track IDs to App IDs (you can mix stores and apps in one run), or search them by name with App search query. Run on a schedule to keep an always-fresh feed of competitor feedback.

Can I automate this on a schedule?

Yes. Use Apify Schedules to run the scraper on a cron, and Webhooks or Zapier / Make / Pipedream integrations to push new reviews into Google Sheets, Slack, a database, or your CRM automatically.


Related actors

Building an app-data pipeline? Pair this reviews scraper with:


📄 Documentation only — the Actor runs on Apify. ▶️ Run it: apify.com/logiover/app-reviews-scraper

About

Scrape thousands of App Store & Google Play reviews — ratings, text, version, sentiment. No API key.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors