Google Play Search Scraper - Apps by Keyword, Rating & Price avatar

Google Play Search Scraper - Apps by Keyword, Rating & Price

Pricing

from $0.40 / 1,000 results

Go to Apify Store
Google Play Search Scraper - Apps by Keyword, Rating & Price

Google Play Search Scraper - Apps by Keyword, Rating & Price

Search Google Play by keyword and export apps with name, developer, rating, price, package ID, icon and URL. For ASO, competitor tracking and app market research. No API key.

Pricing

from $0.40 / 1,000 results

Rating

0.0

(0)

Developer

ninhothedev

ninhothedev

Maintained by Community

Actor stats

0

Bookmarked

12

Total users

8

Monthly active users

a day ago

Last modified

Categories

Share

What does Google Play Search Scraper do?

Search Google Play by keyword and export Android apps with their name, developer, rating, price and package ID. The Actor reads public Google Play search responses, including the featured app card that can appear for a specific app name. No Google login or Google API key is required.

Use it for ASO keyword research, competitor discovery, app ID lookup and price comparisons. Each result includes its keyword, requested country and language, extraction position, and whether it came from a featured or standard card. A separate coverage report shows which keywords completed, failed, or were stopped by your budget.

How to scrape Google Play search results

  1. Enter your Search keywords, such as WhatsApp, vpn or habit tracker.
  2. Choose a Country and Language. These are sent as Google's gl and hl parameters.
  3. Set Max apps per keyword and Apify's maximum charge per run, then click Start.
  4. Open Results to inspect the apps and Run coverage report to check completeness. Download the dataset in JSON, HTML, CSV or Excel, or connect it to Google Sheets, Make, Zapier or n8n.

Start with this small example:

{
"queries": ["WhatsApp", "vpn"],
"country": "us",
"language": "en",
"maxItems": 3
}

This requests up to six app-keyword rows: three for each keyword. A query can return fewer apps. The Actor reads the initial search response; it does not paginate through every matching app. A higher limit cannot create results that Google has not supplied.

Input options

See the Input tab for the full form.

InputDefaultMeaning
queries["vpn", "habit tracker"] if omittedNon-empty keywords of 1–200 characters. Leading/trailing whitespace is removed; exact duplicate keywords are searched once. Case remains significant.
countryusTwo-letter country parameter, such as us, de or gb.
languageenLanguage parameter, such as en, de or zh-TW.
maxItems50Maximum unique apps per keyword, from 1 to 250. Includes rows already saved when resuming a run.
modesearchThe only supported mode; it can be omitted.

An explicit empty keyword list or blank keyword is rejected. Country and language describe the requested parameters, not a verified device location or guaranteed translation. Prices, availability and ordering depend on Google's response.

What data can you extract?

FieldTypeMeaning
query, app_id, titlestringSearch keyword, Android package name and app title.
developerstring or nullPublisher name when available.
ratingnumber or nullSource rating from 0 to 5, rounded to three decimal places.
price, currency, freenumber/string/boolean or nullListed installation price, source currency and whether that price is zero. Missing prices remain unknown.
country, languagestringNormalized country and language parameters requested for this run.
result_positionintegerOne-based position within the extracted, deduplicated keyword results.
result_typestringfeatured or standard.
icon, urlstring or nullIcon URL and public Google Play app link. The app link is always present.
source, scraped_atstringgoogleplay and the UTC extraction timestamp.

Featured cards come first, followed by the first regular search result section in source order. An app is stored once per keyword; the same app appearing for different keywords produces separate rows. Extraction position is not a universal Google Play ranking: personalized views, experiments and later responses can differ.

Example selected fields from a US English test (values can change):

[
{
"query": "WhatsApp",
"app_id": "com.whatsapp",
"title": "WhatsApp Messenger",
"price": 0.0,
"currency": "USD",
"free": true,
"country": "us",
"language": "en",
"result_position": 1,
"result_type": "featured"
},
{
"query": "WhatsApp",
"app_id": "com.whatsapp.w4b",
"title": "WhatsApp Business",
"price": 0.0,
"currency": "USD",
"free": true,
"country": "us",
"language": "en",
"result_position": 2,
"result_type": "standard"
}
]

Pricing and budget limits

The current base price is $0.50 per 1,000 app-keyword rows, plus $0.00005 per start event. Apify charges one start event per GB of allocated memory, with a minimum of one. At 512 MB, six results plus one start event cost $0.00305 before any applicable discounts. Check the Pricing tab for the current rates.

Set Apify's maximum charge per run to limit event spending. The Actor checks the remaining result allowance before starting another keyword and before saving its results. When a budget is exhausted, already saved results remain available and the report marks the run as partial. A start charge can apply even if no app is returned. Standard post-run storage access charges may apply.

Coverage, errors and resuming a run

Open Run coverage report, or retrieve RUN_SUMMARY from the run's key-value store:

  • status: "complete": every requested keyword was verified within the initial-response and per-keyword limits. This includes a source-confirmed empty search.
  • status: "partial": a budget stopped the work or some keywords failed. The report lists each processed keyword and any unprocessedQueries.
  • status: "incomplete": a runtime failure interrupted execution. If all attempted searches fail without stored results, the Actor fails instead of reporting an empty success.

deliveredItems counts stored app-keyword rows, resumedItems counts rows present at restart, and queriesAttemptedThisExecution counts new searches. Per-query pageResultsRead is capped by maxItems; it is not a count of all matches on Google Play. Check the report even when the platform run says SUCCEEDED, because partial results can still be useful.

A restart with the same input reuses the existing dataset and query checkpoints. It skips completed queries and avoids saving or charging existing app-keyword pairs again. A fresh run has fresh storage and takes a new snapshot. If interrupted before a checkpoint, a resumed query may read a newer source response. For deliberate keyword changes, start a fresh run.

Python API example

Use the API tab for other languages and REST examples. This example uses apify-client==3.2.0, its typed run response, and an APIFY_TOKEN environment variable. It requests 512 MB, a three-minute timeout and a $0.01 event budget:

import os
from datetime import timedelta
from decimal import Decimal
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("ninhothedev/google-play-search-scraper").call(
run_input={"queries": ["WhatsApp", "vpn"], "country": "us", "language": "en", "maxItems": 3},
memory_mbytes=512,
run_timeout=timedelta(seconds=180),
max_total_charge_usd=Decimal("0.01"),
)
if run is None or run.status != "SUCCEEDED":
raise RuntimeError("The Actor did not finish successfully; inspect its run log.")
record = client.key_value_store(run.default_key_value_store_id).get_record("RUN_SUMMARY")
if record is None or record["value"].get("status") != "complete":
raise RuntimeError("Search coverage is partial or unavailable; inspect RUN_SUMMARY.")
for item in client.dataset(run.default_dataset_id).iterate_items():
print(item["query"], item["app_id"], item["title"], item["price"], item["currency"])

Frequently asked questions

Can I track competitors over time?

Yes. Create an Apify Schedule with a consistent keyword list and locale. Compare snapshots using query and app_id, retain extraction timestamps, and check coverage before interpreting a missing app as a change. Changes in Google's page layout or response composition can also change extraction positions.

Does this return reviews, downloads or every app in a category?

No. This Actor returns the search fields documented above. Review text, install counts, full descriptions, pagination and category-wide coverage are not included.

What happens if Google blocks a request or changes its layout?

An unreadable response is reported as a failed query, not as a verified zero-result search. Other keywords can still succeed. Results from successful keywords remain charged and available; the start event still applies. Source availability cannot be guaranteed.

How do I report an issue?

Open the Actor's Issues tab with your run ID, keyword, requested locale and expected behavior. Avoid posting API tokens or private credentials. This Actor accesses public app listings without a Google account; use the data in accordance with applicable terms and your intended use.