Reviews & apps · Live on Apify

Google Play Search, Rank and App Details

Search Google Play for many keywords in many countries in one run. Each app gets a rank. Or add package names and get app details.

About $0.46 for 1,000 apps$0.00045 per app + $0.003 per run. One run gives up to 400 apps. Apify bills you, not us.One app in a run of its own: about $0.0034.Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed.

Run it on Apify Opens apify.com, the website where our tools run. Sign up free with Google or email, no card needed.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure

What you get, for example

modesearch
termpdf scanner
countryus

How to use it: 3 steps

  1. Make a free Apify accountApify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
  2. Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example: pdf scanner in Search terms. Each start is one run.
  3. Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.

What it does

Search Google Play by keyword in one or many countries and get the ranked list of apps for every term, with rating, ratings count, install range, price, genre, age rating, version and last update. Or add package names or Google Play URLs and get the same app details.

  • search — for each keyword (term) and country, it runs one Google Play search and returns the apps in the same order as Google shows them. Every row has rank (1, 2, 3…), term and country. By default it also opens each app page and adds installs, ratings count, genre, age rating, version and last update.
  • details — for each package name (for example com.whatsapp) or Google Play URL, it opens the app page in every country you choose and returns one row per app and country.

Good for

  • App store optimization (ASO): check which apps rank for your keywords in each country.
  • Rank tracking: see where your own apps stand for 10–30 keywords, run after run.
  • Competitor research: compare install range, rating, price, in-app purchases and last update of rival apps.
  • App catalog enrichment: turn a list of package names into rows with title, developer, genre and age rating.

Not a good fit

  • No exact install numbers. Google shows a public range such as 10,000,000+. The Actor returns this text in installs and its lower bound in minInstalls. It never estimates an exact count.
  • About 30 apps per search. Google's search page shows about 30 apps for a term and has no next page. maxItems is 1–30.
  • No reviews, screenshots, permissions, data safety or developer contact details (email, phone, address).
  • No top charts, categories or "similar apps" lists.
  • Results are what Google shows to a signed-out visitor in that country and language. Personal results on a phone can differ.

Who uses it

ASO specialists

Check which apps rank for your keywords.

Android developers

Track your own app rank run after run.

Competitor analysts

Compare installs, rating and price of rival apps.

Price

Pay per event: you pay for each result the tool saves, plus a small start fee for each run. The price includes Apify platform costs. Apify bills you, not us. Prices below are for the Apify free plan.

What you pay forPriceWhen
Start fee$0.003Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more.
Google Play query answered$0.0001One keyword search (term × country) or one app ID lookup (app ID × country) that Google Play answered, even when it had no apps or the app does not exist. Failed or skipped queries are free.
App row$0.00045 (from $0.00038 on paid Apify plans)One app stored in the dataset (with app page details when they are on). Partial, not_found and error rows are free.

Examples

  • One app: about $0.0034.
  • 1,000 apps: about $0.46 (3 runs of up to 400).
  • Every day 100 apps, for 30 days: about $1.44 a month.
  • 400 apps once a week (4 runs a month): about $0.73 a month.

Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. That is enough for about 10,000 apps.

Prices checked on 24 October 2026. See the current price on Apify.

Questions

Why no exact install numbers?

Google Play shows only a range, like 10,000,000+. The tool returns that range.

Are results the same as on my phone?

Not always. The tool sees what a signed-out visitor sees.

Why is the version empty?

Many big apps show Varies with device instead of a number.

Do I need a Google account?

No. It reads public pages without login.

Why don't I get the exact number of installs?

Google Play shows only a range, such as 10,000,000+. Other numbers you may see elsewhere are estimates. This Actor returns only what Google shows: installs and its lower bound minInstalls.

Why is score null for some apps?

Nobody has rated the app yet. In that case ratings is 0 and score is null, not 0.

Why is version null?

Many large apps show "Varies with device" instead of a version number. The Actor returns null instead of a wrong value.

How fresh is the data?

Every run reads Google Play live. fetchedAt shows when each row was read.

Details

Step by step on Apify
  1. Open the Input tab.
  2. Keep Mode = Search by keywords (the default).
  3. Keep the prefilled Search terms pdf scanner and Countries us, or add your own.
  4. Keep Results per term and country = 20 and click Start.
  5. Open the Output tab and the Search results view. Check rank, title, installs and score.
Use cases
TaskInputYou getKey fieldsNext step
Keyword rank researchterms + countriesApp row per rankterm, country, rank, appId, titleExport CSV, compare countries
Track my app's rankterms + trackAppIdsRun summary rankTrackingrank, status (ranked / not_in_results)Schedule a daily run
Competitor snapshotmode: details + appIdsApp row per app and countryinstalls, score, ratings, price, updatedAt, versionGoogle Sheets or API
Fast keyword scanincludeDetails: falseSearch rowrank, title, developer, score, pricePick apps for a details run
Tips for better results
  • Turn off app page details for a fast keyword scan.
  • Use package names like com.whatsapp in details mode.
  • Schedule a daily run to see rank changes.
Limits and good to know
  • Up to 60 searches (terms × countries) and up to 30 apps per search
  • With app page details: up to 400 app pages per run (for example 20 terms × 2 countries × 10 apps). Such a run takes about 3.5 minutes
  • Without details: up to 60 × 30 = 1,800 rows, in under a minute
  • Details mode: up to 300 app IDs and 400 lookups (app IDs × countries)

For developers

Sample result

One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.

one result · JSON
{
  "status": "complete",
  "mode": "search",
  "term": "pdf scanner",
  "country": "us",
  "rank": 2,
  "appId": "imagetopdf.pdfconverter.jpgtopdf.pdfeditor",
  "title": "Image to PDF - PDF Maker",
  "developer": "Simple Design Ltd.",
  "score": 4.877,
  "ratings": 2426697,
  "installs": "50,000,000+",
  "minInstalls": 50000000,
  "free": true,
  "offersIAP": true,
  "genre": "Productivity",
  "contentRating": "Everyone",
  "updatedAt": "2026-09-28T13:34:21.000Z",
  "version": "1.7.8",
  "description": null,
  "detailsIncluded": true,
  "errorCode": null
}

Use it from code

Actor ID: cliqtomedia/google-play-apps-search. You need your Apify API token from Apify Console → Settings → API & Integrations.

Python · apify-client
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/google-play-apps-search").call(run_input={
    "mode": "search",
    "terms": [
        "pdf scanner"
    ]
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
cURL
curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~google-play-apps-search/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"mode": "search", "terms": ["pdf scanner"]}'
LangChain · langchain-apify
# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool

tool = ApifyActorsTool("cliqtomedia/google-play-apps-search")
result = tool.invoke({"run_input": {"mode": "search", "terms": ["pdf scanner"]}})
print(result)

The cURL call waits for the results, up to 300 seconds. For longer runs, start a run (/runs) and get the results with a webhook or by checking the run. Apify API docs. LlamaIndex, MCP for AI agents and the JavaScript client: AI agents & MCP.

Data fields (40)
FieldTypeMeaning
statusstringRow result: complete (app data, charged), partial (search row whose app page failed to load or answered 404; search fields only, not charged), not_found (search with no apps, or app ID not on Google Play in that country) or error (see errorCode, not charged).
modestringsearch or details, as in the input.
queryTypestringterm for search rows, appId for details rows.
querystringThe search term or app ID this row answers. Grouped status rows list several IDs, comma-separated.
queryIdsarrayOnly on grouped details status rows: the app IDs this one not_found or error row covers (one row per batch of up to 10 IDs in one country). null on app rows and search rows.
termstringSearch term (search mode). null in details mode.
countrystringTwo-letter Google Play country code used for the request (gl). null only on the INVALID_IDENTIFIER error row, whose identifiers were never sent to Google Play.
languagestringLanguage code used for the request (hl); texts such as genre and content rating come in this language.
rankinteger1-based position of the app in Google Play search results for this term and country, as shown to a signed-out user. null in details mode.
isTrackedbooleantrue when the app is in trackAppIds; null when no apps are tracked or in details mode.
appIdstringGoogle Play package name, e.g. com.whatsapp.
titlestringApp name.
summarystringShort promo text from the app page. null without app details.
developerstringDeveloper name as shown on Google Play.
developerIdstringGoogle Play developer ID: numeric, or a name-style ID such as WhatsApp+LLC.
developerUrlstringDeveloper page on Google Play, built from developerId.
scorenumberAverage star rating (1–5), rounded to 3 decimals. null when the app has no ratings.
ratingsintegerNumber of ratings shown by Google; 0 for an app nobody has rated yet. null without app details.
reviewsintegerNumber of written reviews shown by Google; 0 for an app nobody has rated yet. null without app details.
ratingHistogramobjectRatings per star: oneStar … fiveStars. null without app details.
installsstringGoogle's public install range, e.g. 10,000,000+. Google does not publish exact install counts, and this Actor does not estimate them. null without app details.
minInstallsintegerLower bound of the install range as a number (10,000,000+ → 10000000), for sorting and filtering. Not an exact count.
pricenumberPrice in currency units; 0 for free apps.
freebooleantrue for free apps.
currencystringISO currency of price for this country, e.g. USD or EUR.
priceTextstringPrice as Google shows it, e.g. Free or $4.99. null without app details.
offersIAPbooleantrue when the app has in-app purchases, false when it has none. null without app details.
iapRangestringIn-app purchase price range as shown by Google, e.g. $0.99 - $49.99 per item.
adSupportedbooleantrue when Google marks the app as containing ads. null without app details.
genrestringMain category name in the request language, e.g. Productivity.
genreIdstringMain category ID, e.g. PRODUCTIVITY or GAME_PUZZLE.
contentRatingstringAge rating for this country, e.g. Everyone, Teen, USK: Ages 12+.
releasedstringRelease date as Google shows it (text in the request language, e.g. May 31, 2017). null when Google hides it.
updatedAtstringLast update time of the app on Google Play, ISO 8601 UTC.
versionstringCurrent version. null when Google shows Varies with device.
androidVersionstringMinimum Android version, e.g. 8.0. null when it varies with device.
urlstringApp page on Google Play.
iconstringApp icon URL.
descriptionstringFull description (only with includeDescription).
recentChangesstringWhat's new text (only with includeDescription).
Input settings (9)

The main fields of the input form. With the API you send them as JSON.

SettingName in the APITypeExample value
Modemodestring"search"
Search termstermsarray["pdf scanner"]
Countriescountriesarray["us"]
Languagelanguagestring"en"
Results per term and countrymaxItemsinteger20
Add app page details to search resultsincludeDetailsbooleantrue
Track my apps' rank (search mode)trackAppIdsarray
Package names or Google Play URLs (details mode)appIdsarray
Include description and what's newincludeDescriptionbooleanfalse

Use cases with this tool

Each guide shows all the steps and the other tools.

Start on Apify

Make a free Apify account: you get $5 of free usage every month. Missing a tool? Suggest it. We read every idea, but we do not promise to build it.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure