Google Play Store App Search Scraper avatar

Google Play Store App Search Scraper

Pricing

from $0.30 / 1,000 item processeds

Go to Apify Store
Google Play Store App Search Scraper

Google Play Store App Search Scraper

Export ranked public Google Play app search results by keyword, country, and language for ASO and competitor monitoring.

Pricing

from $0.30 / 1,000 item processeds

Rating

0.0

(0)

Developer

Hanna Nosova

Hanna Nosova

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 hours ago

Last modified

Share

Export ranked public Google Play app search results by keyword, country, and language for ASO research, competitor monitoring, and app-market analysis.

Enter up to 20 search terms and receive one dataset row per visible app result. The Actor works without a Google account, preserves the query and rank for every app, and can be scheduled or called through the Apify API and official Apify MCP server.

What data can you export?

  • Android package ID, app title, developer, icon, and canonical Google Play URL
  • Search keyword and one-based result position
  • Visible rating, rating/review count, price text, and free-download status
  • Requested country and language plus the exact localized search URL
  • Collection timestamp
  • A RUN_SUMMARY with completed, failed, and pending queries
  • A PENDING_WORK checkpoint when a larger run reaches its safe runtime limit

Google Play search cards do not expose every app-detail field in every layout. installRange, category, and other unavailable values are returned as null rather than guessed.

Input example

{
"searchQueries": ["meditation", "budget tracker"],
"country": "US",
"language": "en",
"maxItemsPerQuery": 10
}

Output example

{
"searchQuery": "meditation",
"position": 1,
"appId": "com.calm.android",
"appTitle": "Calm - Sleep, Meditate, Relax",
"developer": "Calm.com, Inc.",
"rating": 4.4,
"ratingCount": null,
"installRange": null,
"priceText": "In-app purchases",
"isFree": true,
"category": null,
"detailUrl": "https://play.google.com/store/apps/details?id=com.calm.android",
"iconUrl": "https://play-lh.googleusercontent.com/...",
"country": "US",
"language": "en",
"sourceUrl": "https://play.google.com/store/search?q=meditation&c=apps&hl=en&gl=US",
"scrapedAt": "2026-07-20T12:00:00.000Z"
}

Input settings

SettingJSON keyDescription
Search queriessearchQueriesRequired list of 1-20 keyword strings. Each query can contain up to 200 characters.
Maximum apps per querymaxItemsPerQueryNumber of visible results to save per query, from 1 to 100. Default: 10.
CountrycountryTwo-letter country code such as US, GB, DE, or IN. Default: US.
LanguagelanguageLanguage code such as en, es, de, fr, or pt-BR. Default: en.
Safe runtime limitmaxRuntimeSecsRuntime budget from 35 to 270 seconds. The default 240 leaves time to save progress before shutdown.

Existing inputs that omit maxRuntimeSecs continue to use the default.

Output fields

FieldDescription
searchQueryKeyword that produced the result.
positionOne-based position within the returned results for that query.
appIdAndroid package identifier.
appTitlePublic app name.
developerDeveloper shown on the search card, or null.
ratingVisible average star rating, or null.
ratingCountVisible compact rating/review count, or null.
installRangeVisible install/download range when present on the search card, otherwise null.
priceTextVisible price or purchase label, or null.
isFreeWhether the download is shown as free, or null when not determinable. In-app purchases do not make a free download paid.
categoryVisible category when present on the search card, otherwise null.
detailUrlCanonical public Google Play app URL.
iconUrlPublic app icon URL, or null.
countryCountry code used for the search.
languageLanguage code used for the search.
sourceUrlLocalized public search URL used for the result.
scrapedAtISO 8601 collection timestamp.

The default key-value store also exposes RUN_SUMMARY. If the safe runtime limit interrupts a larger workload, PENDING_WORK records the exact query and apps already saved so an Apify run resurrection can continue without duplicating them.

Who is this for?

  • ASO teams: capture keyword rankings across countries and languages.
  • App publishers: identify competing Android apps returned for product terms.
  • Agencies: build recurring app-visibility reports for clients.
  • Market researchers: create localized lists of app IDs, developers, ratings, and listing URLs.
  • Developers and data teams: export results to CSV, Excel, JSON, API pipelines, warehouses, or agents.

Search recipes

  • US meditation competitors: {"searchQueries":["meditation"],"country":"US","language":"en","maxItemsPerQuery":10}
  • UK budgeting apps: {"searchQueries":["budget tracker"],"country":"GB","language":"en","maxItemsPerQuery":10}
  • German fitness results: {"searchQueries":["fitness tracker"],"country":"DE","language":"de","maxItemsPerQuery":20}
  • Multi-keyword snapshot: add several related terms to searchQueries; each row retains its originating query.

Pricing

This Actor uses pay-per-event pricing. A run charges the start event once at $0.005, then the item event only for each app row successfully saved to the dataset. Resurrecting that same checkpointed run does not repeat the start charge. Failed queries, warnings, RUN_SUMMARY, and PENDING_WORK are not charged as items.

Apify tierPrice per saved appPrice per 1,000 saved apps
Free$0.000575$0.575
Starter / Bronze$0.000500$0.500
Scale / Silver$0.000390$0.390
Business / Gold$0.000300$0.300
Platinum$0.000200$0.200
Diamond$0.000140$0.140

Add the $0.005 start event to those result costs. For example, 10 saved apps on the Free tier cost about $0.01075 in Actor events. Apify platform usage for compute, storage, and data transfer may be billed separately; the run Pricing tab is authoritative.

Tips for better results

  • Start with one specific keyword and 5-10 results before scaling.
  • Use matching country and language values when comparing localized rankings.
  • Schedule separate tasks per market so country-specific snapshots remain easy to compare.
  • Check RUN_SUMMARY when a run returns fewer rows than expected; it distinguishes query failures from safe-runtime cutoff.
  • Resurrect an interrupted run with the same input to continue from PENDING_WORK.

Limits and practical notes

  • The Actor covers the public Google Play /store/search surface only. It does not fetch app-detail pages, reviews, charts, collections, developer catalogs, or private data.
  • It does not log in, accept cookies, solve CAPTCHAs, use private endpoints, or attempt stealth bypasses.
  • Google Play can vary results by country, language, time, and user context, so ranks are snapshots rather than permanent positions.
  • Search cards expose fewer fields than app-detail pages. Missing values remain null.
  • Temporary rate limits and source error pages are retried within a bounded run budget. One failed query does not discard valid rows from other queries.
  • A query that unexpectedly produces no parseable apps is reported as a failure instead of a misleading successful-empty result.

API usage

Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/google-play-store-app-search-scraper').call({
searchQueries: ['meditation'],
country: 'US',
language: 'en',
maxItemsPerQuery: 10,
});
console.log(run.defaultDatasetId);

Python

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('fetch_cat/google-play-store-app-search-scraper').call(run_input={
'searchQueries': ['meditation'],
'country': 'US',
'language': 'en',
'maxItemsPerQuery': 10,
})
print(run['defaultDatasetId'])

cURL

curl -X POST 'https://api.apify.com/v2/acts/fetch_cat~google-play-store-app-search-scraper/runs?token=YOUR_APIFY_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"searchQueries":["meditation"],"country":"US","language":"en","maxItemsPerQuery":10}'

MCP and AI agents

Use the official Apify MCP server. The general endpoint, https://mcp.apify.com, can search and run Actors. This focused endpoint exposes only this Actor:

https://mcp.apify.com?tools=fetch_cat/google-play-store-app-search-scraper

Claude Code:

$claude mcp add --transport http apify-google-play-search 'https://mcp.apify.com?tools=fetch_cat/google-play-store-app-search-scraper'

Claude Desktop, Cursor, or another MCP client:

{
"mcpServers": {
"apify-google-play-search": {
"url": "https://mcp.apify.com?tools=fetch_cat/google-play-store-app-search-scraper"
}
}
}

Example prompts:

  • "Find the top 10 meditation apps in the US and return app IDs, rank, developer, and rating."
  • "Run separate German and UK searches for fitness tracker apps and compare the top results."
  • "Create a CSV-ready competitor list for budget tracker and expense manager keywords."

Schedule Google Play keyword monitoring

Save one task per market, then use an Apify schedule to run it daily or weekly. Export each dataset to Google Sheets or a warehouse, or attach a webhook that notifies your workflow when the run finishes. Compare appId and position across snapshots to detect new competitors and ranking changes.

FAQ

Is this a Google Play Search API alternative?

It provides a structured API workflow for public Google Play search results, but it is not an official Google API and does not provide private account data or every app-detail field.

Can I export results to CSV, Excel, or JSON?

Yes. Apify datasets support CSV, Excel, JSON, JSONL, XML, RSS, and HTML exports, plus API access.

Does it require a Google account, cookies, or a token?

No. It reads public search pages without Google login credentials or cookies. You still need an Apify token when calling the Actor through the API.

Can I search multiple keywords?

Yes. Add up to 20 strings to searchQueries. maxItemsPerQuery applies separately to each query.

Can I compare countries and languages in one run?

One run uses one country and language pair. Use separate runs or saved tasks for clean market comparisons.

Why are installs, category, or counts sometimes null?

The public search card does not consistently expose those fields. This search-only Actor returns null instead of opening app-detail pages or inventing values.

What happens if one keyword fails?

Valid results from other keywords remain in the dataset. RUN_SUMMARY records the failed query and cause. The run fails when no app rows can be saved at all.

The Actor collects publicly visible search information. Your use of the data must comply with applicable laws, Google Play terms, privacy obligations, and your organization’s policies.

Support

If a run fails, returns no data, or a field looks wrong, open an issue or report a bug from the Actor page. Include the Apify run ID or run URL, input JSON, expected output, actual output, and one reproducible public URL, such as the corresponding Google Play search URL. Small, public examples make localization or source-layout problems faster to diagnose.