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_SUMMARYwith completed, empty, failed, and pending queries - A
PENDING_WORKcheckpoint 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
| Setting | JSON key | Description |
|---|---|---|
| Search queries | searchQueries |
Required list of 1-20 keyword strings. Each query can contain up to 200 characters. |
| Maximum apps per query | maxItemsPerQuery |
Number of visible results to save per query, from 1 to 100. Default: 10. |
| Country | country |
Two-letter country code such as US, GB, DE, or IN. Default: US. |
| Language | language |
Language code such as en, es, de, fr, or pt-BR. Default: en. |
| Safe runtime limit | maxRuntimeSecs |
Runtime 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.
Who is it 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.
Input 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.
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_SUMMARYwhen a run returns fewer rows than expected; it distinguishes verified no-match searches, query failures, spending-limit stops, and 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/searchsurface 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 no-match query finishes as a verified empty result when a bounded control search confirms that Google Play's result layout is healthy. If that control search is also empty, the query is reported as source drift 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.
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.