Apify actors by saffo

Google Play Ratings by Country: Compare App Ratings Across Markets

Compares the star rating Google Play shows in each country for the apps you list, with star shares, price, spread and change since the last run, one report per app. Not affiliated with Google.

Run it on Apify Store

Version 0.1 · updated 2026-11-06 · from $0.04 per app rating report, plus $0.016 per run

Sample output of Google Play Ratings by Country

Compares the star rating Google Play shows in each country for the apps you list, with star shares, price, spread and change since the last run, one report per app. Not affiliated with Google.

What it does

For every app you list, the actor opens its Google Play page once per country you choose and saves one report per app: the average rating Google Play shows in each country, the share of each star level, the local price, the change since your previous run, and a cross-country comparison (mean rating, best and worst country, spread). The pages are read live at run time.

Google Play computes the rating per storefront: on 6 November 2026, for example, com.booking read 4.7957 in the US, 4.7269 in Germany and 4.6715 in India. This actor puts those figures side by side in one row per app. It returns aggregate figures only: no review texts, reviewer names or developer details. It is not affiliated with or endorsed by Google.

Who it is for

How to use it

  1. Open the actor on Apify Store and go to its Input tab.
  2. Fill in apps; every other field has a default (see Input below).
  3. Click Start. The run ends at the limits below, or earlier at the "Maximum cost per run" you set.
  4. When the run ends, open the Output tab: view the results as a table, or export them as JSON, CSV or Excel.

Input

Field Type Default Description
apps array required Google Play package names (com.booking) or app page URLs (https://play.google.com/store/apps/details?id=com.booking); duplicates are read once.
countries array ["US","GB","CA","AU","DE","FR","ES","IT","NL","PL","TR","IN","ID","JP","KR","BR","MX","SA","ZA","EG"] ISO 3166-1 alpha-2 country codes to compare (upper or lower case), 1 to 50; unknown codes end the run with a clear status message before any page is read.
maxApps integer 50 Read at most this many apps from the apps list (1 to 200).
compareWithPrevious boolean true Compare each country rating with the last report of the same app kept in the history store and fill ratingChange.
historyStoreName string "play-ratings-by-country" Name of the key-value store in your account that keeps the last report per app for the comparison.

Example input:

{
  "apps": [
    "com.booking"
  ],
  "countries": [
    "US",
    "DE",
    "IN"
  ],
  "maxApps": 1
}

For a weekly comparison in the 20 default markets, leave countries out and run the actor on an Apify schedule once a week. With compareWithPrevious on (the default), every report then shows the change since the week before:

{
  "apps": ["com.booking", "com.tripadvisor.tripadvisor", "com.expedia.bookings"]
}

Output

Each result is one dataset item:

Field Type Description
url string Web address of the item: its own page, or the page it was read from.
appId string Package name of the app on Google Play.
title string or null Title of the item as shown on the page.
found boolean True when at least one country page of the app answered; false when Google Play has no page for this package name.
category string or null Google Play category id of the app (JSON-LD applicationCategory).
ratingCount integer or null Total number of ratings Google Play reports for the app; the same figure in every country.
minInstalls integer or null Lower bound of the install band Google Play shows, for example 500000000 for "500M+".
countries array One entry per requested country, in input order.
crossCountry object Comparison of the country ratings of this report.
previousFetchedAt string or null When the previous report used for ratingChange was read; null when there is none.
fetchedAt string When the page was read (ISO 8601, UTC).

Each entry of countries holds country, listed, rating, starShares (oneStar to fiveStar), price, currency and ratingChange; crossCountry holds countriesRated, meanRating, bestCountry, bestRating, worstCountry, worstRating and ratingSpread.

Example output (real items from a test run):

[
  {
    "url": "https://play.google.com/store/apps/details?id=com.booking",
    "appId": "com.booking",
    "title": "Booking.com: Hotels & Travel",
    "found": true,
    "category": "TRAVEL_AND_LOCAL",
    "ratingCount": 6525332,
    "minInstalls": 500000000,
    "countries": [
      {
        "country": "US",
        "listed": true,
        "rating": 4.7957,
        "starShares": {
          "oneStar": 1.8,
          "twoStar": 0.4,
          "threeStar": 1.6,
          "fourStar": 8.9,
          "fiveStar": 87.3
        },
        "price": 0,
        "currency": "USD",
        "ratingChange": 0
      },
      {
        "country": "DE",
        "listed": true,
        "rating": 4.7269,
        "starShares": {
          "oneStar": 2,
          "twoStar": 0.5,
          "threeStar": 1.8,
          "fourStar": 14.2,
          "fiveStar": 81.5
        },
        "price": 0,
        "currency": "EUR",
        "ratingChange": 0
      },
      {
        "country": "IN",
        "listed": true,
        "rating": 4.6715,
        "starShares": {
          "oneStar": 3.6,
          "twoStar": 0.9,
          "threeStar": 2.4,
          "fourStar": 11,
          "fiveStar": 82.1
        },
        "price": 0,
        "currency": "INR",
        "ratingChange": 0
      }
    ],
    "crossCountry": {
      "countriesRated": 3,
      "meanRating": 4.7314,
      "bestCountry": "US",
      "bestRating": 4.7957,
      "worstCountry": "IN",
      "worstRating": 4.6715,
      "ratingSpread": 0.1242
    },
    "previousFetchedAt": "2026-11-06T19:36:29.182Z",
    "fetchedAt": "2026-11-06T19:37:56.844Z"
  }
]

Download the dataset as JSON, CSV or Excel, or read it through the Apify API.

Pricing

Pay per event: a small fee per run plus a fee per result saved. Platform usage is included in these prices.

Event When it is charged Free plan Bronze plan Silver plan Gold plan Platinum plan Diamond plan
Run started (run-started) Flat fee once per run; covers starting the actor and loading the history store. $0.025 $0.02 $0.018 $0.016 $0.016 $0.016
App rating report (app-rating-report) One app compared across the requested countries and saved to the dataset; apps not found on Google Play are saved but not charged. $0.0625 $0.05 $0.045 $0.04 $0.04 $0.04

Example (lowest plan price): a run that saves 100 results costs $0.016 + 100 × $0.04 = $4.016. That is $40.00 per 1,000 results plus $0.016 per run. You pay only for results saved to the dataset; set "Maximum cost per run" in the run options and the actor stops there.

One report covers every country you ask for (up to 50), so the price per app does not grow with the number of countries. Apps that Google Play does not know are saved with found: false and are not charged. Examples: 10 apps in 20 countries cost $0.02 + 10 × $0.05 = $0.52 per run; the same run on a weekly schedule comes to four or five runs a month, $2.08 to $2.60.

Limits

Use with AI agents

AI agents can call this actor as a tool through the Apify MCP server. Add it to an MCP client (Claude Desktop, Cursor, VS Code and others):

{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com/?tools=saffo/play-ratings-by-country"
    }
  }
}

Or call it over HTTP and get the results in the response:

curl -X POST "https://api.apify.com/v2/acts/saffo~play-ratings-by-country/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \
  -d '{"apps":["com.booking"],"countries":["US","DE","IN"],"maxApps":1}'

An agent can answer "Where is this app rated lowest?" by calling the actor with apps and countries and reading crossCountry.worstCountry and crossCountry.worstRating from the report.

FAQ

How much does it cost?

You pay per event: from $0.04 per app rating report plus $0.016 per run. The Pricing section lists the price on every Apify plan. Platform usage is included, and the run stops at the maximum cost per run you set.

Can I use it from an AI agent or my own code?

Yes. Add it to any MCP client through the Apify MCP server, or call the Apify API; the examples under Use with AI agents show both. Results come back as JSON.

How many results can one run return?

Up to 200 results from at most 11,000 pages. For more, split the input over several runs.

Does it collect personal data?

No. It saves only the fields listed under Output and leaves out names, e-mail addresses, phone numbers and profiles of private persons.

Why does the rating differ by country?

Google Play computes the average rating per storefront from the ratings given in that country, so the same app can show 4.8 in one country and 4.6 in another on the same day. The actor reads the page of each country (the gl parameter) and reports each figure as Google Play shows it.

Why is ratingCount the same in every country?

Google Play reports the global total number of ratings on every storefront. For the same reason the star bars of each country add up to that global total, which is why the report turns them into shares.

Support

Open an issue on the actor's Issues tab.

Changelog

0.1 (2026-11-06)