Gripeline — App Store & Google Play Reviews Scraper avatar

Gripeline — App Store & Google Play Reviews Scraper

Pricing

Pay per event

Go to Apify Store
Gripeline — App Store & Google Play Reviews Scraper

Gripeline — App Store & Google Play Reviews Scraper

App Store and Google Play reviews scraper: both stores in one clean schema, plus a per-app summary agents can read (star mix, % negative, top complaints, worst app versions). Monitor mode returns only new reviews for daily alerts. $0.0002 per review, $0.003 per app summary.

Pricing

Pay per event

Rating

0.0

(0)

Developer

CyberMax

CyberMax

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 hours ago

Last modified

Share

Know what users hate about any app in one call. Give Gripeline an app name, link or id. It reads the newest reviews from the App Store and Google Play, puts them into one schema, and adds a summary record per app that an AI agent or an analyst can use straight away:

Threads (App Store): 500 newest reviews (2026-08-30 to 2026-09-22), average 3.43★, 38.2% negative (1–2★). Top complaints: "people" (28), "account" (24), …

Why this one

  • Both stores, one schema. "Duolingo" is looked up in the App Store and Google Play, and every review has the same fields: stars, title, text, date, app version, country, helpful votes and developer reply. You don't need two scrapers and a merge step.
  • A summary that saves reading 500 reviews. Each app gets star mix, % negative and % positive, top complaint phrases (from 1–2★ reviews), top praise phrases, worst app versions (≥5 reviews, lowest average first) and the Google Play developer reply rate.
  • Agent-friendly. Names, links or ids all work. Compact JSON, a one-sentence summary, and includeReviews: false returns only the summaries (about 2 KB per app).
  • Reliable on the App Store. Apple's review feed often answers a valid page with nothing. Gripeline retries each page with a fresh cache key and skips gaps, so you get the full 500 newest reviews per country instead of 50. Tested 2026-09-23: 500 of 500 for Threads and Duolingo in about 7 seconds.
  • Filters are free. Stars (maxRating: 2 = complaints only), date (since) and keyword ("crash", "subscription"). You pay only for reviews that pass.
  • Daily new-review alerts. monitor: true returns only reviews you haven't received yet, so a daily schedule to Slack or Google Sheets costs cents.

First try: the prefilled input (Duolingo, 5 reviews per store) finishes in about 10 seconds and costs about $0.008 (2 summaries + 10 reviews).

Input

{
"apps": ["Duolingo", "https://apps.apple.com/us/app/threads/id6446901002", "com.spotify.music"],
"stores": "both",
"maxReviewsPerApp": 200,
"countries": ["us"],
"maxRating": 2
}
FieldDefaultWhat it does
appsApp names, App Store links/ids (id570060128), Google Play links/package names (com.duolingo).
storesbothboth, apple or google. Names are searched in the stores selected; links and ids go to their own store.
maxReviewsPerApp200Newest first, per store and country. The App Store feed stops at 500 per country; Google Play goes up to 5,000. 0 = store metadata only.
includeReviewstruefalse = summary records only. The summary always covers the reviews that pass your filters.
countries["us"]Up to 10 two-letter App Store countries; each is read separately. Google Play shows the same reviews in every country (they vary by language), so Play is read once per app and its records carry language instead of country.
languageenGoogle Play review language.
minRating / maxRating1 / 5Keep only reviews in this star range.
sinceKeep only reviews on or after this date.
keywordKeep only reviews that mention this word.
monitorfalseOnly reviews not returned by an earlier monitor run (see below).
monitorKeyOptional name for the monitor's saved state, to keep several watchlists apart.

Monitor mode: only new reviews since the last run

Turn on monitor for scheduled runs. Gripeline remembers, per app, store and country, which reviews it already returned (by review id) and outputs only the new ones, each marked "change": "new". An app's summary is returned only when it has new reviews, and then it summarizes just those.

Shape of a monitor run's records (values shortened):

{ "type": "app-summary", "store": "apple", "title": "Duolingo: Language Lessons", "change": "changed", "changedFields": ["reviews"], "newReviews": 3, "summary": "Duolingo: Language Lessons (App Store): 3 new reviews since the last run (…), average …★, …" }
{ "type": "review", "store": "apple", "appTitle": "Duolingo: Language Lessons", "reviewId": "…", "rating": 1, "text": "…", "change": "new" }
  • The first monitor run returns everything ("change": "new"), like a normal run. A run with no new reviews returns an empty dataset and costs nothing.
  • Edited reviews keep their id and aren't sent again. Filters (maxRating, keyword, since) apply to the new reviews, so maxRating: 2 + monitor: true = "new complaints only".
  • Set maxReviewsPerApp above the number of reviews an app gets between two runs (e.g. 100 for a daily run on a popular app); only new ones are charged.
  • State lives in your named key-value store app-reviews-monitor, one record per watchlist (monitorKey, or derived from the apps, stores, countries and language). Delete the record to start over.

Ready-made inputs (first try in one click)

No account yet? See real results first on the free demo page: 24 popular apps ranked by share of angry reviews.

Paste one into the JSON tab of the input form (or send it to the API) and press Start. Each is sized so the first run is quick and cheap; you pay only for results (Apify's compute is included in the price).

PresetWhat you getCost
Summary + 5 newest reviews (both stores)1 summary per store (star mix, top complaints, worst version) + 5 reviews each$0.008
Only angry reviews (1–2★, App Store)up to 10 of the newest 1–2★ reviews + a summary$0.005 or less
Complaint summary only (no review rows)1 summary per app from its 100 newest reviews$0.006

Summary + 5 newest reviews (both stores)

{"apps": ["Duolingo"], "maxReviewsPerApp": 5}

Only angry reviews (1–2★, App Store)

{"apps": ["Spotify"], "stores": "apple", "maxRating": 2, "maxReviewsPerApp": 10}

Complaint summary only (no review rows)

{"apps": ["Airbnb", "Uber"], "stores": "google", "includeReviews": false, "maxReviewsPerApp": 100}

Same thing from a script (returns the results directly):

curl -s -X POST "https://api.apify.com/v2/acts/cybermax~app-reviews/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H 'content-type: application/json' -d '{"apps": ["Duolingo"], "maxReviewsPerApp": 5}'

Output

One app-summary record per app and store (and per country on the App Store):

{
"type": "app-summary",
"store": "apple",
"appId": "6446901002",
"title": "Threads",
"developer": "Instagram, Inc.",
"rating": 4.64,
"ratingCount": 2252093,
"currentVersion": "447.0",
"country": "US",
"summary": "Threads (App Store): 500 newest reviews …, average 3.43★, 38.2% negative (1–2★). Top complaints: …",
"sample": { "reviews": 500, "avgRating": 3.43, "stars": { "1": 176, "2": 15, "3": 18, "4": 22, "5": 269 }, "negativeShare": 38.2, "positiveShare": 58.2, "developerReplyRate": null },
"topComplaints": [{ "phrase": "account", "reviews": 24 }],
"topPraise": [{ "phrase": "twitter", "reviews": 12 }],
"worstVersions": [{ "version": "447.0", "reviews": 156, "avgRating": 3.12, "negativeShare": 46.2 }]
}

…followed by its review records:

{ "type": "review", "store": "google", "appId": "com.spotify.music", "appTitle": "Spotify: Music and Podcasts", "reviewId": "…", "rating": 1, "title": null, "text": "…", "date": "2026-09-22T10:11:42.000Z", "appVersion": "9.1.84.2231", "helpfulVotes": 0, "country": null, "language": "en", "developerReply": { "text": "…", "date": "…" }, "author": "…" }

Apps that aren't found come back as type: "not-found" and are free. The Store output tab has two views: App summaries and Reviews.

Pricing

  • $0.003 per app summary (one app in one store; App Store: per country)
  • $0.0002 per review ($0.20 per 1,000)
  • Apps that aren't found and reviews dropped by your filters: free. No start fee.

Example: 3 apps in both stores, 200 reviews each = 6 × $0.003 + 1,200 × $0.0002 = $0.258. Summaries only (includeReviews: false) for the same apps = $0.018.

Good to know

  • Data comes from Apple's public iTunes lookup/search APIs and review feed, and Google Play's public web pages. No login needed, and no personal data beyond the public reviewer display name.
  • App Store reviews don't include developer replies in Apple's feed, so developerReply is always null there.
  • Complaint phrases are word and two-word counts from 1–2★ reviews, with the app's own name and filler words removed. They show themes; they aren't sentiment analysis.

Run it on a schedule

Daily "new reviews" digest in two minutes: Apify Console → SchedulesCreate new → cron 0 8 * * * (8:00 every day) → Add Actorcybermax/app-reviews with your input (or a saved task) including "monitor": true. Or with the API:

POST https://api.apify.com/v2/schedules?token=YOUR_TOKEN
{
"name": "daily-app-reviews",
"cronExpression": "0 8 * * *",
"timezone": "America/New_York",
"isEnabled": true,
"actions": [{
"type": "RUN_ACTOR",
"actorId": "cybermax/app-reviews",
"runInput": { "body": "{\"apps\": [\"Duolingo\", \"com.spotify.music\"], \"maxReviewsPerApp\": 100, \"monitor\": true}", "contentType": "application/json" }
}]
}

With monitor mode a daily run only pays for that day's new reviews. To get notified, add a webhook, Slack or email notification on Run succeeded in the Actor's Integrations tab.

Integrations

Make: Apify app → "Run an Actor" (cybermax/app-reviews, input JSON as above, "Run synchronously" on) → "Get dataset items" → Slack / Google Sheets module.

Zapier: Apify app → "Finished Actor Run" trigger (for your schedule) or "Run Actor" action → "Find dataset items" → Slack "Send channel message" with {{title}}: {{rating}}★ {{text}}.

n8n: Apify node ("Run actor and get dataset"), or an HTTP Request node:

POST https://api.apify.com/v2/acts/cybermax~app-reviews/run-sync-get-dataset-items?token=YOUR_TOKEN
{"apps": ["Duolingo"], "maxRating": 2, "monitor": true}

Google Sheets: Apify's Google Sheets integration (Actor → Integrations), or paste into a cell to pull the last run as CSV:

=IMPORTDATA("https://api.apify.com/v2/acts/cybermax~app-reviews/runs/last/dataset/items?format=csv&view=reviews&token=YOUR_TOKEN")

Python (pip install apify-client):

from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("cybermax/app-reviews").call(run_input={"apps": ["Duolingo"], "maxReviewsPerApp": 50, "maxRating": 2})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["type"], item.get("rating"), item.get("summary") or item.get("text"))

JavaScript (npm i apify-client):

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('cybermax/app-reviews').call({ apps: ['Duolingo'], includeReviews: false });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map((i) => i.summary));

AI agents (MCP): Gripeline is a tool in any MCP client via Apify's hosted MCP server, https://mcp.apify.com/?tools=cybermax/app-reviews (header Authorization: Bearer <your Apify token>). Claude Desktop / Cursor config:

{ "mcpServers": { "gripeline": { "url": "https://mcp.apify.com/?tools=cybermax/app-reviews", "headers": { "Authorization": "Bearer YOUR_TOKEN" } } } }

A good agent prompt: "Use app-reviews with includeReviews=false and maxRating=2 to tell me the top 3 complaints about

Also from CyberMax

All tools: Boardroom Buys · HireHeat · HireHeat Jobs · Hollerdex · Linkheft · Printwren

Changelog

  • 2026-09-23: Monitor mode (monitor, monitorKey: only new reviews since the last run, deduped by review id), schedule & integration recipes.

Made by CyberMax.