Read Google Play app pages from Python or the command line: rating, review count, install band, price, category, content rating, last update, developer, ads and in-app purchase flags, Editors' Choice badge, screenshots and the full description, for up to 50 apps per run, by package name or store URL, as JSON or CSV. The code is free and open source (MIT). It runs on the QuanticData Data API, so there are no proxies to rotate and no headless browser to keep alive: sign in once and run a command.
pip install git+https://github.com/quantumproxies/google-play-scraper
google-play-scraper login
google-play-scraper apps com.spotify.music com.whatsapp --country us --lang en -o apps.csvlogin opens the QuanticData sign-in page in your browser. New accounts get $2 of free usage every month, no card required: create one.
| Command | Input | Returns | Per run |
|---|---|---|---|
google-play-scraper apps |
package names or Play URLs | Rating, reviews, installs, price, category, update date, developer, 26 fields per row (fields and price) | up to 50 |
Read any market with --country and --lang, e.g. --country it --lang it; the url of each row is the localized store page that was read.
A real row from google-play-scraper apps com.spotify.music com.whatsapp --country us --lang en --max-results 2 (2026-10-23):
{
"url": "https://play.google.com/store/apps/details?id=com.spotify.music&hl=en&gl=us",
"free": true,
"icon": "https://play-lh.googleusercontent.com/IzQgYCcnCFCD08GR-3bdtcT8xzOvrNkC84avGT5CwTX2VIqmTmKKJcP_Cd4JoBOdmCMlTndlOzV6hrthg2fOWA",
"price": 0,
"title": "Spotify: Music and Podcasts",
"genres": [
"Music & Audio"
],
"rating": 4.35,
"package": "com.spotify.music",
"reviews": 36525631,
"updated": "Oct 21, 2026",
"category": "MUSIC_AND_AUDIO",
"currency": "USD",
"installs": "1B+",
"developer": "Spotify AB",
"updated_at": "2026-10-21",
"description": "Listen to songs, play podcasts, create playlists and discover music you'll love",
"screenshots": [
"https://play-lh.googleusercontent.com/c1jnjL-9CIFlwlTMX3xNyeo8aEH39sNuC5zpTHhfW8keGxQE3TBMRX9Rm3VqM3E03Cyl9AqtnxuKvxJpcW0WCA",
"https://play-lh.googleusercontent.com/YxWsaNLSEBvLh04geMOADhSq6Ln5LmRrpa51ixZ7YkcEwmPQ-wdtnvoZDjVAgufbi2et0IlTVDAsvCCmlsJYnNA"
],
"availability": "InStock",
"contains_ads": true,
"developer_id": "Spotify AB",
"developer_url": "https://www.spotify.com",
"content_rating": "Teen",
"editors_choice": true,
"full_description": "With the Spotify music and podcast app, you can play millions of songs, albums and original podcasts for free. We have even added audiobooks, so you can enjoy thousands of stories wherever you are!",
"in_app_purchases": true,
"operating_system": "ANDROID"
}from quanticdata_google_play_scraper import GooglePlayScraper
play = GooglePlayScraper() # saved login, or QUANTICDATA_API_KEY
apps = play.apps(["com.spotify.music", "com.whatsapp"], country="us", lang="en")
for a in apps:
print(a["package"], a["rating"], a["reviews"], a["installs"], a["updated_at"])
apps.to_csv("apps.csv")
italy = play.apps(["com.spotify.music"], country="it", lang="it")
print(italy.rows[0]["title"], italy.rows[0]["description"])Each call returns a Run: iterate it for the rows (plain dicts), take len(), or save it with to_csv(), to_json(), to_jsonl() or to_dataframe() (pandas). Errors are specific: InsufficientCredit, RateLimited, InvalidInput, JobFailed, AuthError.
- App tracking: Record the rating, review count, install band and last update of a list of apps on every run and keep the history in a CSV, with the change since the previous check. See
examples/app_tracker.py. - Country comparison: Read the same apps in several countries and languages side by side: title, rating, price and content rating per market. See
examples/compare_countries.py. - Monetization map of a category: Check a list of apps for ads, in-app purchases, price and Editors' Choice, and print how many apps of the list use each model. See
examples/monetization_map.py.
Results print as a table; -o file.csv, -o file.json or -o file.jsonl writes a file. List inputs take a b c, a,b,c, @file.txt (one per line) or - (stdin). --no-wait starts a long run in the background and prints its id; google-play-scraper run <id> -o out.csv collects it later.
Google Play app detail by package name — rating, reviews, category, price.
google-play-scraper apps PACKAGES [options]
| Option | Type | Default | Description |
|---|---|---|---|
PACKAGES |
string[] | Android package names (com.spotify.music) or Google Play store URLs. | |
--country |
string | Google Play country, as an ISO country code (default us). | |
--lang |
string | Language of the store page, e.g. en, it, de. | |
--max-results |
integer | 10 |
How many apps to deliver at most (1–50). You pay only for delivered apps. |
google-play-scraper apps: 26 fields
| Field | Type | Description |
|---|---|---|
package |
string | Android package name. |
title |
string | App name. |
developer |
string or null | Developer name. |
developer_url |
string or null | Developer page URL. |
category |
string or null | Play category. |
description |
string or null | Store description (trimmed). |
rating |
number or null | Average rating. |
reviews |
integer or null | Rating count. |
price |
number or null | Numeric price (0 = free). |
currency |
string or null | Currency code. |
content_rating |
string or null | Content rating. |
operating_system |
string or null | Target OS. |
installs |
string or null | Install band when the page shows one. |
icon |
string or null | Icon URL. |
url |
string | Localized store URL. |
full_description |
string or null | The full store description (up to 6000 characters). |
genres |
string[] | Genre chips shown on the page. |
screenshots |
string[] | Screenshot URLs at original size (up to 12). |
updated |
string or null | "Updated on" date as shown. |
updated_at |
string or null | The same date as YYYY-MM-DD. |
in_app_purchases |
boolean | True when the page says the app has in-app purchases. |
contains_ads |
boolean | True when the page says the app contains ads. |
editors_choice |
boolean | True when the app carries the Editors' Choice badge. |
developer_id |
string or null | Developer id on Google Play. |
availability |
string or null | Offer availability (InStock…). |
free |
boolean or null | True when the price is 0. |
google-play-scraper loginsigns you in with OAuth 2.1 and PKCE in the browser. The token is stored in~/.config/quanticdata/credentials.json(readable only by you) and refreshed automatically. One login serves every QuanticData tool on the machine.- No browser on the machine (SSH, Docker, Colab): run
google-play-scraper login --no-browser, open the link anywhere, then paste back the address the browser ends on. - Scripts and CI: set
QUANTICDATA_API_KEYto a key from the dashboard, or store one withgoogle-play-scraper login --api-key. google-play-scraper logoutrevokes the token. The connection is listed under API keys in the dashboard as "API · QuanticData CLI"; deleting that key disconnects every machine that uses it.
The code is free and MIT-licensed. Runs are billed to your QuanticData account per delivered row, at the price shown on each collector page linked above; $2 of usage is free every month and failed runs are never billed. Plans with higher limits: pricing.
The same data over plain HTTP:
curl -X POST https://api.quanticdata.io/v1/scraper/collectors/google_play_apps/run \
-H "Authorization: Bearer $QUANTICDATA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"input": {"packages": ["com.spotify.music", "com.whatsapp"], "country": "us", "lang": "en", "max_results": 2}}'- API reference with Python, Node, PHP and curl examples.
- MCP server to give Claude, Cursor or any MCP client the same tools.
- n8n node for no-code workflows.
Is this Google Play scraper free?
The code is free and MIT-licensed. Scraping runs on your QuanticData account: $2 of usage is free every month with no card, then you pay per delivered row at the price shown on each collector page. Failed runs are never billed.
Do I need proxies or a headless browser?
No. You send package names or store URLs and get rows back; the requests run on QuanticData's side. No Google account or Play developer account is involved.
How many apps can one run return?
Up to 50 apps per run; ask for fewer with --max-results and you pay only for what is delivered. For longer lists, run them in batches of 50, as examples/app_tracker.py does.
Which countries and languages?
Any: --country sets the store country and --lang the page language; the url field of each row is the localized store page that was read.
Can I export to CSV or Excel?
Add -o apps.csv (or .json, .jsonl). Lists such as genres and screenshots are joined with '; ', so the CSV opens cleanly in Excel or Google Sheets.
Can I run it on a schedule?
Yes. Set QUANTICDATA_API_KEY in the environment and call the CLI or examples/app_tracker.py from cron, GitHub Actions or any scheduler.
- App Store Scraper: App Store scraper for Python and the command line.
- Steam Scraper: Steam scraper for Python and the command line.
MIT. Built and maintained by QuanticData.