Android App Data Scraper API
Our Android app data scraper turns any keyword into the ranked Google Play results: package id, title, developer, category, install count, and listing URL per app, returned as structured JSON from one request.
The hard part of Android App data
Google Play search results live inside an obfuscated data blob in the page, so the package ids and titles you want sit behind nested arrays that shift with every layout change. Hit the search page from a datacenter IP and Google is quick to answer with a consent redirect or a captcha instead of results.
Send one request to the Android App Data Scraper API
curl "https://api.appstorescraperapi.com/api/v1/googleplay/search?q=spotify&limit=20&api_key=$API_KEY" import requests
BASE = "https://api.appstorescraperapi.com"
API_KEY = "YOUR_API_KEY"
# One keyword in, the ranked Google Play results out as JSON.
data = requests.get(
f"{BASE}/api/v1/googleplay/search",
params={
"q": "spotify", # the search query
"hl": "en", # content language
"gl": "us", # storefront country
"limit": 20, # up to 50 results
"api_key": API_KEY,
},
timeout=30,
).json()
print(data["query"], "-", data["total_results"], "results")
for app in data["results"]:
print(app["position"], app["package_id"], app["title"], app["installs"]) Parameters
| Parameter | Required | Default | Notes |
|---|---|---|---|
q | required | - | The search query to run against Google Play, e.g. spotify. This is the primary parameter. |
hl | optional | en | UI and content language (Google Play hl). Defaults to en. |
gl | optional | us | Storefront country (Google Play gl). Defaults to us. Sets the region the results are ranked for. |
limit | optional | 20 | Maximum number of results to return. Defaults to 20, hard cap 50 (a search page holds about 20 apps). |
url | optional | - | A play.google.com search URL. Pass it and we run it as the query. For most cases q is simpler. |
api_key | required | - | Your API key, passed as a query parameter. Get one free at signup. |
Reading the Android App Data Scraper API response
{
"query": "spotify",
"page": 1,
"total_results": 20,
"results": [
{
"position": 1,
"id": "com.spotify.music",
"package_id": "com.spotify.music",
"title": "Spotify: Music and Podcasts",
"category": null,
"developer": null,
"installs": null,
"url": "https://play.google.com/store/apps/details?id=com.spotify.music",
"price": null,
"currency": "USD",
"rating": null,
"reviews_count": null,
"thumbnail": null
},
{
"position": 2,
"id": "com.spotify.tv.android",
"package_id": "com.spotify.tv.android",
"title": "Spotify: Music & Podcasts",
"category": "Music & Audio",
"developer": "Spotify AB",
"installs": "100,000,000+",
"url": "https://play.google.com/store/apps/details?id=com.spotify.tv.android",
"price": null,
"currency": "USD",
"rating": null,
"reviews_count": null,
"thumbnail": null
}
]
} | Field | Type | Description |
|---|---|---|
query | string | The search query echoed back from your request. |
page | integer | The result page number for this response, starting at 1. |
total_results | integer | Number of results returned in this response. |
results | array | Ranked app results, each an object with the fields below. |
position | integer | The app's rank in the results, starting at 1. |
id | string | The Android package id for the result. package_id mirrors it. |
title | string | The app's display name. |
category | string | The app's Google Play category when present in the result cluster, e.g. Music & Audio. |
developer | string | The developer name when present in the result cluster. |
installs | string | The install-count band when present, e.g. 100,000,000+. |
url | string | The canonical play.google.com listing URL for the app. |
rating | number | Null on search rows. Google Play carries rating and price only on the app detail page, so pass the package_id to googleplay/product for those. |
What you can ship with it
Keyword rank tracking
Competitor discovery
Install-band benchmarking
App discovery tools
Brand monitoring
Cross-store mapping
Why our Android App Data Scraper API earns its keep
Send a keyword and we return the ranked Google Play results as clean JSON, with no store API to depend on and no proxy pool of your own to babysit. Every request rotates proxies, handles the consent and captcha walls, and retries across tiers, returning a validated schema in about 2.6 seconds.
Ranked results in one call
Resilient parsing
Anti-bot and proxy rotation
Auto-retry across pools
Language and region control
Feeds the product endpoint
Android App Data Scraper API vs official and roll-your-own
| Our API | DIY (requests / headless) | Official Google Play API | |
|---|---|---|---|
| Ranked search results | Parsed and ordered JSON | Decode the page data blob yourself | No public search API exists |
| Setup | API key only | Proxies, headless browser, parsers | Not available |
| Consent and captcha walls | Handled by proxy rotation | You solve them per request | Not applicable |
| Language and region | hl and gl parameters | You set them per request | Not applicable |
| Anti-bot and proxies | Built in | You build and maintain it | Not applicable |
| Output | Validated JSON, stable schema | Whatever you parse | Not applicable |
From free to high volume
| Plan | Price | Best for |
|---|---|---|
| Free | 1,000 requests | Testing and small jobs |
| Pro | $0.60 / 1k | Production workloads |
| Pay-as-you-go | $0.90 / 1k | Spiky or one-off volume |
Median response 2.6s. You only pay for successful requests.
FAQ
An Android app data scraper is a tool that reads Google Play and returns app data as structured output. Our Android app data scraper API takes a search query and returns the ranked results, each with the package id, title, and, where available, developer, category, and install band, as JSON. Pass any result's package id to the product endpoint for the app's full listing, ratings, and price.
Send one GET request to our googleplay/search endpoint with q set to your query and your API key. Optionally add hl for language, gl for storefront country, and limit for how many results you want, up to 50. We handle proxies, consent walls, and retries and return the ranked results as clean JSON.
Google Play does not put rating or price in the search result cluster; those fields live only on each app's detail page. The search endpoint returns them as null to keep the shape uniform, and every row includes the package id, so you call googleplay/product with that id to get the rating, review count, and price for the apps you care about.
Up to 50 per call. A Google Play search page holds about 20 apps, and the limit parameter defaults to 20 with a hard cap of 50. Each result includes the package id and listing URL, so you can enrich the ones you need through the product endpoint.
No. You only need an appstorescraperapi key passed as the api_key query parameter. There is no Google account, no Play Console access, and no OAuth. The endpoint reads Google Play's public search results, and the free tier includes 1,000 requests per month.
Median end-to-end response is about 2.6 seconds, including proxy routing, anti-bot handling, retries, and parsing. Google Play serves a consent or captcha interstitial to repeat datacenter traffic, so the proxy rotation and retries behind the endpoint are what keep search requests returning real results instead of a wall.