Google Play Search Scraper - Apps by Keyword, Rating & Price
Pricing
from $0.40 / 1,000 results
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
Maintained by CommunityActor 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
- Enter your Search keywords, such as
WhatsApp,vpnorhabit tracker. - Choose a Country and Language. These are sent as Google's
glandhlparameters. - Set Max apps per keyword and Apify's maximum charge per run, then click Start.
- 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.
| Input | Default | Meaning |
|---|---|---|
queries | ["vpn", "habit tracker"] if omitted | Non-empty keywords of 1–200 characters. Leading/trailing whitespace is removed; exact duplicate keywords are searched once. Case remains significant. |
country | us | Two-letter country parameter, such as us, de or gb. |
language | en | Language parameter, such as en, de or zh-TW. |
maxItems | 50 | Maximum unique apps per keyword, from 1 to 250. Includes rows already saved when resuming a run. |
mode | search | The 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?
| Field | Type | Meaning |
|---|---|---|
query, app_id, title | string | Search keyword, Android package name and app title. |
developer | string or null | Publisher name when available. |
rating | number or null | Source rating from 0 to 5, rounded to three decimal places. |
price, currency, free | number/string/boolean or null | Listed installation price, source currency and whether that price is zero. Missing prices remain unknown. |
country, language | string | Normalized country and language parameters requested for this run. |
result_position | integer | One-based position within the extracted, deduplicated keyword results. |
result_type | string | featured or standard. |
icon, url | string or null | Icon URL and public Google Play app link. The app link is always present. |
source, scraped_at | string | googleplay 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 anyunprocessedQueries.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 osfrom datetime import timedeltafrom decimal import Decimalfrom apify_client import ApifyClientclient = 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.
Related tools
- App Store Search Scraper for iPhone and iPad app discovery.
- YouTube Keyword Suggestions Scraper for autocomplete research.
- YouTube Search Scraper for public video search results.