App Store and Google Play Reviews to Complaint Themes avatar

App Store and Google Play Reviews to Complaint Themes

Pricing

from $10.00 / 1,000 app analyseds

Go to Apify Store
App Store and Google Play Reviews to Complaint Themes

App Store and Google Play Reviews to Complaint Themes

Collects recent App Store and Google Play reviews for one or more apps and turns them into the top complaint and praise themes, each with a count and verbatim quotes tied to review ids. Bring your own OpenAI key for the themes step; without it you still get the reviews.

Pricing

from $10.00 / 1,000 app analyseds

Rating

0.0

(0)

Developer

Jessy Mariau

Jessy Mariau

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

3 hours ago

Last modified

Categories

Share

A thousand one-star reviews reads as a wall of text. Somewhere in there are the handful of things that are actually breaking, and the way most teams find them is by having someone read for an afternoon and come back with a feeling.

There are plenty of Actors that hand you app reviews as rows. This one does that too, and then does the part that takes the afternoon: it groups the reviews into the themes that repeat, counts how many reviews each theme covers, and attaches up to three real quotes per theme so you can check the label against what someone actually wrote.

What it does

You give it apps. An App Store id like id334235181, a Google Play package name like com.deliveroo.orderapp, or a URL copied straight out of either store. Mix the two stores in one run if you want the same app from both.

It collects the recent reviews, applies whatever filters you set, and writes one row per review. On each row: the star rating, the title and body, the app version it was left against, the date, the storefront, the developer's public reply where there is one, and a link back.

Then, if you gave it an OpenAI key, it makes one model call per app and writes a second row: complaint_themes and praise_themes, each with a label, a count and up to three quotes, plus a readout that is one paragraph a product owner can read in twenty seconds.

Every quote is checked before it is written. The model returns a quote and the id of the review it says it came from, and the quote is only kept if it appears character for character in that review, ignoring case and whitespace. Anything that does not match is thrown away and counted in quotes_failed_verification. A paraphrase cannot survive that check, so a quote in the output is text a real person typed.

What you need

Nothing for the reviews. Both stores publish them and neither needs a key, a proxy or a browser.

Your own OpenAI key for the themes. Paste it into openaiApiKey; Apify stores it as a secret and it never reaches the log or the dataset. The themes step is one call per app on gpt-5-mini by default, which is fractions of a penny for a hundred reviews, and it is billed by OpenAI to you, not by me.

Run it with no key and you still get every review, with the themes row marked to say the step was skipped. Run it with no input at all and you get a demo dataset, nothing charged and nothing fetched, so you can see the shape before you connect anything.

How to run it

An App Store app, complaints only:

{
"apps": "id334235181",
"country": "gb",
"starsFilter": ["1", "2"],
"maxReviewsPerApp": 100,
"openaiApiKey": "your-openai-key"
}

A Google Play package, everything from this year, both storefronts tried in order:

{
"apps": "com.hermescourier.app",
"country": "gb, us",
"newerThan": "2026-01-01",
"maxReviewsPerApp": 200,
"openaiApiKey": "your-openai-key"
}

Store URLs work as well as ids, so you can paste from the address bar:

{
"apps": "https://apps.apple.com/gb/app/id334235181\nhttps://play.google.com/store/apps/details?id=com.deliveroo.orderapp"
}

The OUTPUT record in the key-value store holds the same themes rows plus a one-line summary of the run.

Output fields

Review rows, type: "review":

FieldWhat it holds
app, appId, storethe app name, its id or package, and which store the row came from
reviewIdthe store's own id for the review
rating, title, textstars 1 to 5, the review title where the store has one, the body
versionthe app version the review was left against
publishedDatewhen it was posted
countrythe storefront the review was read from
authorthe display name the reviewer chose
reply, replyDatethe developer's public reply, on Google Play
urlthe review on Google Play, or the app's reviews page on the App Store

Themes rows, type: "themes", one per app:

FieldWhat it holds
complaint_themesup to 8 problems, most frequent first: label, count_estimate, quotes
praise_themesup to 5 things people like, same shape
quoteseach one review_id, quote, rating, url
readoutone paragraph of plain English about what the reviews say
reviews_analysed, reviews_collectedhow many went into the themes, and how many came back before filtering
rating_breakdown1 to 5 star counts across the reviews analysed
store_rating, store_rating_count, store_histogramthe store's own numbers; the histogram is Google Play only
model, tokenswhich model ran and what it used
quotes_failed_verificationquotes the model returned that were not verbatim, and were dropped
collection_notewhat the store did or did not give back on this run
notewhy a step was skipped, when one was

Pricing

Pay per event: one app-analysed charge per app that came back with something. Reviews are not charged for separately, so a hundred reviews and five hundred reviews cost the same. An app that returned nothing at all, or a line that was not a valid id, costs nothing. The demo run costs nothing.

Limits

Read these before you plan a run on them.

Apple's public feed is capped and it is moody. The customer-reviews RSS feed serves at most 10 pages of 50, so 500 is the hard ceiling. In practice almost nobody reaches it: most of those 10 pages come back empty at any given moment, and which pages answer is a property of Apple's cache rather than of the app. Measured on 5 September 2026 in the GB storefront: Trainline answered on 2 of 10 pages for 100 reviews, Monzo on 4 pages for 200, Deliveroo and Facebook on 1 page each for 50, and Evri Courier Community answered on 10 of 10 pages for 113 reviews in the morning and on none at all two hours later. Retrying the same empty page does not help, and neither does switching storefront when the whole app has gone quiet. So the Actor asks for all 10 pages every time rather than stopping at the first empty one, and collection_note tells you exactly which pages answered. If an app comes back thin, run it again later.

Google Play is the reliable half. 150 reviews a page, real pagination, and the 500 cap is the Actor's, not the store's. Play has no server-side star filter, so starsFilter is applied after collection and the Actor over-fetches to compensate.

Both stores show you recent reviews, not the full history. Neither of these is an archive. You are reading the top of the pile, newest first, which is what you want for "what is breaking now" and is not what you want for a five-year trend.

Some fields exist on one store only. Google Play publishes developer replies, a per-star histogram and a permalink for every review. Apple's feed publishes none of those three. On App Store rows that means a null reply, a null store_histogram, and a review url pointing at the app's reviews page rather than at the review. Neither store attaches a reviewer's country to a review, so country is the storefront it was read from.

The themes are a model reading the reviews. The quotes are verified verbatim, and the count of any that failed is on the row. The labels, the counts and the readout are the model's own wording and its own arithmetic over the reviews you collected. Treat them as a fast, checkable summary of that sample, not as a measurement of your whole user base.

Pair it with a workflow

If you run n8n, my free templates on https://n8n.io/creators/fractional-hq take output like this and turn it into a weekly digest, a ticket per theme or a Slack post, without another tool in the chain.

How this copes with Apple's moody feed, and what it will not tell you, is written up at https://fractionalhq.uk/use-cases/app-review-themes

Built by Fractional HQ

I run Fractional HQ, a one-man studio for design and automation. I do not write code by hand: I architect, review and hold the standard while AI agents do the typing. That method runs my own estate of seven brands, on a Postgres operations system with more than 100 scheduled jobs. I publish n8n templates. I am Zapier Silver certified.

Want the themes wired into a weekly report, or the complaints turned into a fix list for your support team? Get in touch: https://fractionalhq.uk/brief