App Store & Google Play Reviews + AI Classifier | $0.10/1K avatar

App Store & Google Play Reviews + AI Classifier | $0.10/1K

Pricing

from $0.50 / 1,000 review classifieds

Go to Apify Store
App Store & Google Play Reviews + AI Classifier | $0.10/1K

App Store & Google Play Reviews + AI Classifier | $0.10/1K

$0.10 per 1,000 reviews, +$0.50 per 1,000 classified. Scrape App Store and Google Play reviews, then classify: main issue (crash, login, payment, ads, support, UX), severity score, churn flag, each with a confidence number. Complaint and sentiment analysis at one tenth of LLM cost. CSV or JSON.

Pricing

from $0.50 / 1,000 review classifieds

Rating

0.0

(0)

Developer

Typedrows

Typedrows

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

16 hours ago

Last modified

Categories

Share

App Reviews Classifier

Scrapes App Store and Google Play reviews for any list of apps and, by default, adds typed classification columns to every review using jev, a non-generative classifier. You get a dataset you can pivot on immediately: main issue, severity, and boolean-style flags — no prompt engineering, no LLM bill.

Classification columns cost about one tenth of LLM-based alternatives.

Input

FieldTypeDefaultDescription
appsarray of stringsrequiredApp Store numeric ids or URLs (310633997, https://apps.apple.com/us/app/whatsapp-messenger/id310633997) and Google Play package ids or URLs (com.whatsapp, https://play.google.com/store/apps/details?id=com.whatsapp). All digits or an apps.apple.com URL means App Store, anything else Google Play.
countriesarray of strings["us"]Two-letter store country codes. Every app is scraped in every country.
languagestring"en"Google Play review language (ignored for the App Store).
maxReviewsPerAppinteger500Per app and country, 1–20000.
classifybooleantrueAdd the classification columns.
questionsobjectpresetCustom jev question schema replacing the preset (see below).
confidenceThresholdnumber0.8Rows with any choice/score confidence below this get review_needed: true.

Output

One dataset item per review.

FieldDescription
platform"appstore" or "googleplay"
appIdNumeric App Store id or Google Play package id
reviewIdStore review id
dateISO 8601
rating1–5
titleApp Store only, null on Google Play
textReview body
authorReviewer name
versionApp version reviewed
countryStore country code
thumbsUpGoogle Play only, null on the App Store
replyTextDeveloper reply, Google Play only
urlLink back to the review / reviews page

When classify is on, each question adds a column named after the question:

QuestionTypeColumn
issuechoiceissue (label) + issue_confidence
severityscoreseverity (0–3) + severity_confidence
mentions_crashnoulmentions_crash (probability 0–1)
mentions_paymentnoulmentions_payment
mentions_supportnoulmentions_support
mentions_updatenoulmentions_update
would_churnnoulwould_churn

Plus review_needed (true when any choice/score confidence is under confidenceThreshold). issue labels: crash_bug, login_account, payment_billing, performance, ads, support, ux_design, feature_request, content_quality, praise, other.

Reviews with empty text get null classification columns and are not charged. A review whose classification failed after retries gets a classification_error string and is not charged either.

Custom questions

Replace the preset with up to 50 of your own:

{
"is_refund_request": { "type": "noul", "instructions": "the reviewer asks for a refund" },
"topic": { "type": "choice", "instructions": "what the review is about",
"criteria": { "price": "cost or value for money", "speed": "how fast the app is" } },
"urgency": { "type": "score", "instructions": "how urgent is this",
"criteria": ["not urgent", "somewhat urgent", "drop everything"] }
}

choice criteria is an object of {label: description}, score criteria is a list of descriptions from low end to high end. Bad schemas fail before anything is scraped.

Pricing (pay per event)

EventCharged
Review scraped (built-in dataset item)Once per review row written, USD 0.0001
Review classifiedOnce per review successfully classified, USD 0.0005

Set classify: false to pay only for scraping.

Requirements

Set TYPESAFE_API_KEY as a secret environment variable on the actor (only needed when classify is true). Get one at typesafe.ai.

Limitations

  • App Store: 500 newest reviews per country, maximum. That is the ceiling of Apple's public RSS feed, not of this actor. Add more countries to get more reviews; there is no way to reach older history through this endpoint.
  • App Store reviews have no thumbs-up count or developer reply.
  • Google Play returns reviews in one language/country at a time; both are inputs.
  • jev sees the first 2,000 characters of a review.

Run it locally

npm install
node test.js # self-check, hits all three live APIs
APIFY_LOCAL_STORAGE_DIR=./storage node --env-file=.env src/main.js

with storage/key_value_stores/default/INPUT.json holding the input and .env holding TYPESAFE_API_KEY=....