locaihost data

Data recipe

1,200 Google Play reviews of Monzo, Revolut, Wise and Starling in 10 seconds: who answers the angry ones

We pulled the 300 newest UK Google Play reviews of four money apps in one run for under a cent of compute. Starling replied to every 1 and 2-star review, Wise to 96%, Revolut to 73% within the hour, and Monzo to none in our sample.

App store ratings are a blunt number. What a product or support team actually wants is the reviews themselves, in a table: the stars, the text, the app version, and whether anyone from the company answered.

So we pulled them for four UK money apps. One run of our Google Play Reviews Scraper on Apify, asking for the 300 newest UK English reviews of each:

  • Time: 10 seconds of run time.
  • Cost: $0.0067 of compute on our side. A user pays $0.10 per 1,000 reviews on the Starter tier, so these 1,200 reviews are $0.12 for anyone else.
  • Coverage: 1,200 reviews, all with a star rating and date, 1,051 with the app version, and every developer reply with its date.

Every number below comes from that one run. Reviews are written by members of the public, so this post shows counts only: no reviewer names and no quotes.

The input

JSON
{
  "apps": [
    "co.uk.getmondo",
    "com.revolut.revolut",
    "com.transferwise.android",
    "com.starlingbank.android"
  ],
  "countries": ["gb"],
  "maxReviewsPerApp": 300
}

Package names or full Google Play links both work. Optional filters: reviewRatings (for example only 1 and 2 stars), reviewsSince (a date, or "30 days"), reviewKeywords, appVersions, and onlyNew for a daily schedule that returns only reviews you haven't seen.

From Python:

python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("locaihost/google-play-reviews").call(run_input={
    "apps": ["co.uk.getmondo", "com.revolut.revolut",
             "com.transferwise.android", "com.starlingbank.android"],
    "countries": ["gb"],
    "maxReviewsPerApp": 300,
})
reviews = list(client.dataset(run["defaultDatasetId"]).iterate_items())

low = [r for r in reviews if r["rating"] <= 2]
answered = [r for r in low if r.get("developerReply")]
print(f"{len(answered)} of {len(low)} low reviews got a reply")

Each row has rating, title, text, date, version, helpfulCount, developerReply and developerReplyDate. Reviewer names are off by default.

Finding 1: how fast the reviews arrive

The 300 newest reviews cover very different stretches of time, which says a lot about each app's review volume on Google Play UK.

App300 newest reviews spanReviews per dayAverage stars1 and 2 stars
Wise4.0 days753.8925%
Revolut6.1 days494.0322%
Monzo42.8 days74.2018%
Starling56.9 days54.608%

Wise and Revolut get roughly ten times the review traffic of Monzo and Starling on UK Google Play. Part of that is user base, and part is that both apps ask for reviews more often in the app. Either way, a team at Wise needs a daily feed to keep up, while Starling could read every review by hand.

Finding 2: who answers the angry ones

AppReplies to all reviewsReplies to 1 and 2 starsMedian time to reply
Starling95%100% (23 of 23)2.9 hours
Wise96%96% (73 of 76)11.9 hours
Revolut17%73% (48 of 66)0.6 hours
Monzo0%0% (0 of 54)none

The four teams run four different policies:

  • Starling answers everything, including the 5-star ones.
  • Wise answers almost everything too, but with a half-day lag.
  • Revolut mostly skips the happy reviews and goes straight for the unhappy ones. When it does reply, the median is 36 minutes.
  • Monzo didn't reply to any of the 300 newest reviews.

Monzo's silence may be a deliberate choice to handle complaints in the app's own chat. But a prospective customer scrolling Google Play doesn't see that.

Finding 3: canned or written by a person

We compared the first 40 characters of every reply. That's a rough test, but it separates templates from written replies well.

AppRepliesDistinct openingsMost common opening
Starling286285under 1%
Revolut52498%
Wise28823515%

Starling's replies open differently almost every time. Wise reuses a handful of openings for about a third of its replies, which is what a support team clearing 75 reviews a day looks like.

Finding 4: what the 1 and 2-star reviews are about

These are keyword counts on the 1 and 2-star review text, so they're rough: one review can hit several topics, and plenty hit none.

TopicWise (76)Revolut (66)Monzo (54)Starling (23)
Transfers and payments20614
Account closed, frozen or blocked14852
Support and chat13852
Login, crashes, updates81284
Identity checks81031
Fees and charges7320

Wise's unhappy reviewers mostly write about money in motion: a transfer held, delayed or reversed. Revolut's write about getting into the app at all, through login problems and identity checks. For a product team, that split is the useful part: it tells you which queue to staff.

The version column makes the next step easy. Wise had 165 of its 300 reviews on one release (9.48.2) and Revolut 154 on 10.153.1. You can filter appVersions to a single release and see whether a fix landed.

Honest limits

  • Different windows. "300 newest" covers four days for Wise and eight weeks for Starling, so the reply and complaint numbers compare policies, not the same period. For a like-for-like view, use reviewsSince with the same date for every app.
  • One store, one country, one language. This is Google Play UK in English. The App Store has its own reviews (we have an App Store Reviews Scraper for that), and replies can differ by country.
  • Keyword topics are approximate. Good enough to rank topics within an app, not to quote as exact shares.
  • Google Play shows what it shows. Reviews a user deletes, or Google filters, never appear.

Price

$0.10 per 1,000 reviews on the Starter tier, less on Scale and Business, plus a tiny start fee per run. No login, no API key. Free Apify plans can try it with the monthly credit.

Google Play Reviews Scraper on Apify

Did it help? If you run it on your own app, a rating on the Store page tells other people whether it's worth their time.